<?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>29243</bug_id>
          
          <creation_ts>2009-09-14 07:11:14 -0700</creation_ts>
          <short_desc>Update Chromium Mac render theme files</short_desc>
          <delta_ts>2009-09-17 12:20:29 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Avi Drissman">avi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>147047</commentid>
    <comment_count>0</comment_count>
      <attachid>39542</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-09-14 07:11:14 -0700</bug_when>
    <thetext>Created attachment 39542
The patch

The existing Chromium Mac render theme code is forked from an ancient version of RenderThemeMac. This patch brings that file up to date with the current version for ease of maintenance. (To be investigated: determining if we can merge the two files so they don&apos;t have to be kept in sync.)

Please see http://codereview.chromium.org/174242 for the initial review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147048</commentid>
    <comment_count>1</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-09-14 07:13:27 -0700</bug_when>
    <thetext>A quick comment: the diff is complete hash. It&apos;s best to compare a patched RenderThemeChromiumMac to RenderThemeMac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147049</commentid>
    <comment_count>2</comment_count>
      <attachid>39543</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-09-14 07:16:32 -0700</bug_when>
    <thetext>Created attachment 39543
Updated patch; the .gypi file caught unwanted changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147077</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-14 09:53:52 -0700</bug_when>
    <thetext>FYI, general behavior seems to be that you can mark cq=? if you want to make sure the reviewer sets cq+ when reviewing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147083</commentid>
    <comment_count>4</comment_count>
      <attachid>39543</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-14 10:01:21 -0700</bug_when>
    <thetext>Comment on attachment 39543
Updated patch; the .gypi file caught unwanted changes

Can you please:

* include bug URL
* use svn cp to keep the history and minimize the amount of perceived changes made?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147097</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-14 10:22:19 -0700</bug_when>
    <thetext>prepare-ChangeLog --bug 29243
will automatically fill in the bug stuff for you.  see prepare-ChangeLog --help</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147285</commentid>
    <comment_count>6</comment_count>
      <attachid>39601</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-09-15 08:16:15 -0700</bug_when>
    <thetext>Created attachment 39601
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147286</commentid>
    <comment_count>7</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-09-15 08:16:52 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 39543 [details])
&gt; Can you please:
&gt; 
&gt; * include bug URL
&gt; * use svn cp to keep the history and minimize the amount of perceived changes
&gt; made?

Can you keep the svn cp status through a patch? I didn&apos;t think it was possible and would need someone to help me land this anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147294</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-15 08:54:12 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 39543 [details] [details])
&gt; &gt; Can you please:
&gt; &gt; 
&gt; &gt; * include bug URL
&gt; &gt; * use svn cp to keep the history and minimize the amount of perceived changes
&gt; &gt; made?
&gt; 
&gt; Can you keep the svn cp status through a patch? I didn&apos;t think it was possible
&gt; and would need someone to help me land this anyway.

No, but it makes reviewing and landing it a heckuva lot easier :). If you&apos;re looking for a rubberstamp, you&apos;ve got it. But whoever lands this would have to cry tears of pain trying to svn cp, then apply this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147297</commentid>
    <comment_count>9</comment_count>
      <attachid>39603</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-09-15 09:03:48 -0700</bug_when>
    <thetext>Created attachment 39603
Patch with svn cp used to mark origins of files

OK, used svn cp to mark files&apos; origins.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147303</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-15 09:25:14 -0700</bug_when>
    <thetext>Doesn&apos;t svn-create-patch store copy information?  I thought it did.  Also, if there are any tears-of-pain needed, then the commit-queue won&apos;t be of use to you, because it doesn&apos;t know how to cry.  It just knows how to make you cry when it rejects your patch. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147307</commentid>
    <comment_count>11</comment_count>
      <attachid>39603</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2009-09-15 09:39:14 -0700</bug_when>
    <thetext>Comment on attachment 39603
Patch with svn cp used to mark origins of files

&gt; Index: WebCore/ChangeLog
...
&gt; +        http://crbug.com/19604

No need for the crbug reference since you mention the bugs.webkit.org link.


&gt; Index: WebCore/platform/graphics/FloatPoint.h
&gt; +#if (PLATFORM(MAC) &amp;&amp; !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES)) \
&gt; +      || (PLATFORM(CHROMIUM) &amp;&amp; PLATFORM(DARWIN))

nit: indent by 8 spaces instead of 6.  normal indent is 4 spaces, so 2x that
seems appropriate for a line continuation.


&gt; Index: WebCore/platform/graphics/FloatRect.h
...
&gt; +#if (PLATFORM(MAC) &amp;&amp; !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES)) \
&gt; +      || (PLATFORM(CHROMIUM) &amp;&amp; PLATFORM(DARWIN))

ditto


&gt; Index: WebCore/platform/graphics/FloatSize.h
...
&gt; +#if (PLATFORM(MAC) &amp;&amp; !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES)) \
&gt; +      || (PLATFORM(CHROMIUM) &amp;&amp; PLATFORM(DARWIN))

ditto


&gt; Index: WebCore/platform/graphics/IntRect.h
...
&gt; +#if (PLATFORM(MAC) &amp;&amp; !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES)) \
&gt; +      || (PLATFORM(CHROMIUM) &amp;&amp; PLATFORM(DARWIN))
...
&gt; +#if (PLATFORM(MAC) &amp;&amp; !defined(NSGEOMETRY_TYPES_SAME_AS_CGGEOMETRY_TYPES)) \
&gt; +      || (PLATFORM(CHROMIUM) &amp;&amp; PLATFORM(DARWIN))

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147310</commentid>
    <comment_count>12</comment_count>
      <attachid>39605</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-09-15 09:45:58 -0700</bug_when>
    <thetext>Created attachment 39605
Update for fishd&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147347</commentid>
    <comment_count>13</comment_count>
      <attachid>39605</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-15 11:38:16 -0700</bug_when>
    <thetext>Comment on attachment 39605
Update for fishd&apos;s comments

Needs downstream change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147802</commentid>
    <comment_count>14</comment_count>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-09-17 08:19:46 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 39605 [details])
&gt; Needs downstream change.

Dmitri, I can coordinate with the WebKit gardener. Can we land this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147810</commentid>
    <comment_count>15</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-17 09:01:10 -0700</bug_when>
    <thetext>Landed as http://trac.webkit.org/changeset/48469.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147853</commentid>
    <comment_count>16</comment_count>
      <attachid>39708</attachid>
    <who name="Avi Drissman">avi</who>
    <bug_when>2009-09-17 11:11:47 -0700</bug_when>
    <thetext>Created attachment 39708
Quick fix to make it compile

Oops, there was a line that referred to a non-existent member in the media theme drawing routines. The media drawing is TBD, so for now we&apos;re just pulling it out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147878</commentid>
    <comment_count>17</comment_count>
      <attachid>39708</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-17 12:03:55 -0700</bug_when>
    <thetext>Comment on attachment 39708
Quick fix to make it compile

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147888</commentid>
    <comment_count>18</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-17 12:20:08 -0700</bug_when>
    <thetext>Fix landed as http://trac.webkit.org/changeset/48481.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39542</attachid>
            <date>2009-09-14 07:11:14 -0700</date>
            <delta_ts>2009-09-14 09:53:23 -0700</delta_ts>
            <desc>The patch</desc>
            <filename>rendertheme.patch</filename>
            <type>text/plain</type>
            <size>135762</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODMxNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIxIEBACisyMDA5LTA5LTExICBBdmkgRHJpc3NtYW4gIDxhdmlAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgdGhlIENocm9taXVtIE1hYyB0aGVtaW5nIGZpbGVzIChSZW5kZXJUaGVtZSBhbmQgVGhlbWUp
IHRvIGJlCisgICAgICAgIHVwLXRvLWRhdGUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGhl
bWVDaHJvbWl1bU1hYzo6VGhlbWVDaHJvbWl1bU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpUaGVt
ZUNocm9taXVtTWFjOjp+VGhlbWVDaHJvbWl1bU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpUaGVt
ZUNocm9taXVtTWFjOjpjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybVRoZW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRyb2xTaXplRm9yRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpzaXplRnJvbUZv
bnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmluZmxhdGVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNoZWNrYm94U2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tib3hN
YXJnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpjaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpwYWludENoZWNrYm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OnJhZGlvU2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6cmFkaW9NYXJnaW5z
KToKKyAgICAgICAgKFdlYkNvcmU6OnJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpyYWRp
byk6CisgICAgICAgIChXZWJDb3JlOjpwYWludFJhZGlvKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1
dHRvblNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1dHRvbk1hcmdpbnMpOgorICAgICAgICAo
V2ViQ29yZTo6YnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OmNvbnRyb2xGb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OmNvbnRyb2xTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6Om1pbmltdW1Db250cm9sU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpUaGVtZUNocm9taXVtTWFjOjpjb250cm9sQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OmNvbnRyb2xQYWRkaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlRoZW1lQ2hyb21pdW1NYWM6OmluZmxhdGVDb250cm9sUGFpbnRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRS
ZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTWFjLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpzdXBwb3J0c0NvbnRyb2xUaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpzY3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3JzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5t
bToKKyAgICAgICAgKC1bV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXIgc3lz
dGVtQ29sb3JzRGlkQ2hhbmdlOl0pOgorICAgICAgICAoLVtSVENNRmxpcHBlZFZpZXcgaXNGbGlw
cGVkXSk6CisgICAgICAgICgtW1JUQ01GbGlwcGVkVmlldyBjdXJyZW50RWRpdG9yXSk6CisgICAg
ICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6RmxpcHBlZFZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1JbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6c3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0
TlNDb2xvclRvQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6bWVudUJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzeXN0ZW1Db2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjppc0NvbnRyb2xTdHls
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0UmVw
YWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6aW5m
bGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y29u
dmVydFRvUGFpbnRpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFRleHRBcmVhKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVudUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VG9wR3JhZGllbnRJbnRlcnBvbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
b3R0b21HcmFkaWVudEludGVycG9sYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5HcmFkaWVu
dEludGVycG9sYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrR3JhZGllbnRJbnRlcnBvbGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVM
aXN0QnV0dG9uR3JhZGllbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTbGlk
ZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWlu
dFNlYXJjaEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnNldFNlYXJjaENlbGxTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhQ29u
dHJvbGxlclRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRNZWRpYVVJUGFy
dFN0YXRlRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VW56b29tZWRSZWN0QW5kQWRqdXN0
Q3VycmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVBsYXlCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVk
aWFTZWVrRm9yd2FyZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVJldHVyblRv
UmVhbHRpbWVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhQ3VycmVudFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVRpbWVSZW1haW5pbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6ZXh0cmFNZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCk6CisKIDIwMDktMDktMTEgIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3Rl
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5n
eXBpCShyZXZpc2lvbiA0ODMxNCkKKysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjQwLDYgKzE2NDAsNyBAQAogICAgICAgICAgICAgJ3BhZ2UvQ29udGV4dE1lbnVD
bGllbnQuaCcsCiAgICAgICAgICAgICAncGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwJywK
ICAgICAgICAgICAgICdwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5oJywKKyAgICAgICAgICAg
ICdwYWdlL0Nvb3JkaW5hdGVzLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9ET01TZWxlY3Rpb24u
Y3BwJywKICAgICAgICAgICAgICdwYWdlL0RPTVNlbGVjdGlvbi5oJywKICAgICAgICAgICAgICdw
YWdlL0RPTVRpbWVyLmNwcCcsCkBAIC0xNjY1LDYgKzE2NjYsNyBAQAogICAgICAgICAgICAgJ3Bh
Z2UvRnJhbWVWaWV3LmgnLAogICAgICAgICAgICAgJ3BhZ2UvR2VvbG9jYXRpb24uY3BwJywKICAg
ICAgICAgICAgICdwYWdlL0dlb2xvY2F0aW9uLmgnLAorICAgICAgICAgICAgJ3BhZ2UvR2VvcG9z
aXRpb24uY3BwJywKICAgICAgICAgICAgICdwYWdlL0dlb3Bvc2l0aW9uLmgnLAogICAgICAgICAg
ICAgJ3BhZ2UvSGlzdG9yeS5jcHAnLAogICAgICAgICAgICAgJ3BhZ2UvSGlzdG9yeS5oJywKQEAg
LTE3NzEsNiArMTc3Myw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU3VkZGVu
VGVybWluYXRpb25DaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L1N5c3RlbVRpbWVDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVt
L1RoZW1lQ2hyb21pdW1NYWMuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vVGhl
bWVDaHJvbWl1bU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2lkZ2V0
Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVy
c2lvbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpbmRvd3NWZXJzaW9u
LmgnLApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFj
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21p
dW1NYWMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVGhlbWVDaHJvbWl1bU1hY19oCisj
ZGVmaW5lIFRoZW1lQ2hyb21pdW1NYWNfaAorCisjaW5jbHVkZSAiVGhlbWUuaCIKKworLy8gVGhp
cyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLm1tIGZpbGUpIGlzIGEgY2xvbmUgb2YgVGhlbWVN
YWMuaC4gU2VlCisvLyB0aGUgLm1tIGZpbGUgZm9yIGRldGFpbHMuCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgVGhlbWVDaHJvbWl1bU1hYyA6IHB1YmxpYyBUaGVtZSB7CitwdWJsaWM6
CisgICAgVGhlbWVDaHJvbWl1bU1hYygpIHsgfQorICAgIHZpcnR1YWwgflRoZW1lQ2hyb21pdW1N
YWMoKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVu
dChDb250cm9sUGFydCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250
cm9sRm9udChDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0
OworICAgIAorICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFydCwg
Y29uc3QgRm9udCYsIGNvbnN0IExlbmd0aFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsK
KyAgICB2aXJ0dWFsIExlbmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBj
b25zdCBGb250JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIExlbmd0
aEJveCBjb250cm9sUGFkZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0
aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIExl
bmd0aEJveCBjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVu
Z3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworCisgICAgdmlydHVh
bCBib29sIGNvbnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQgcGFydCkgY29u
c3QgeyByZXR1cm4gcGFydCA9PSBQdXNoQnV0dG9uUGFydDsgfQorCisgICAgdmlydHVhbCB2b2lk
IHBhaW50KENvbnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzLCBHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBJbnRSZWN0JiwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyopIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBpbmZsYXRlQ29udHJvbFBhaW50UmVjdChDb250cm9sUGFydCwgQ29udHJvbFN0
YXRlcywgSW50UmVjdCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVGhlbWVDaHJvbWl1bU1hY19oCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMuaApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vVGhlbWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUaGVtZUNocm9taXVtTWFjLmgi
CisKKyNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW1wb3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIlNj
cm9sbFZpZXcuaCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKy8vIFRoaXMg
ZmlsZSAoYW5kIGl0cyBhc3NvY2lhdGVkIC5oIGZpbGUpIGlzIGEgY2xvbmUgb2YgVGhlbWVNYWMu
bW0uCisvLyBCZWNhdXNlIHRoZSBvcmlnaW5hbCBmaWxlIGlzIGRlc2lnbmVkIHRvIHJ1biBpbi1w
cm9jZXNzIGluc2lkZSBhIENvY29hIHZpZXcsCisvLyB3ZSBtdXN0IG1haW50YWluIGEgZm9yay4g
UGxlYXNlIG1haW50YWluIHRoaXMgZmlsZSBieSBwZXJmb3JtaW5nIHBhcmFsbGVsCisvLyBjaGFu
Z2VzIHRvIGl0LgorLy8KKy8vIFRoZSBvbmx5IGNoYW5nZXMgZnJvbSBUaGVtZU1hYyBzaG91bGQg
YmU6CisvLyAtIFRoZSBjbGFzc25hbWUgY2hhbmdlIGZyb20gVGhlbWVNYWMgdG8gVGhlbWVDaHJv
bWl1bU1hYy4KKy8vIC0gVGhlIGltcG9ydCBvZiBGbGlwcGVkVmlldygpIGFuZCBpdHMgdXNlIGFz
IHRoZSBwYXJlbnQgdmlldyBmb3IgY2VsbAorLy8gICByZW5kZXJpbmcuCisvLyAtIEluIHVwZGF0
ZVN0YXRlcygpIHRoZSBjb2RlIHRvIHVwZGF0ZSB0aGUgY2VsbHMnIGluYWN0aXZlIHN0YXRlLgor
Ly8gLSBJbiBwYWludEJ1dHRvbigpIHRoZSBjb2RlIHRvIHNhdmUvcmVzdG9yZSB0aGUgd2luZG93
J3MgZGVmYXVsdCBidXR0b24gY2VsbC4KKy8vCisvLyBGb3IgYWxsIG90aGVyIGRpZmZlcmVuY2Vz
LCBpZiBpdCB3YXMgaW50cm9kdWNlZCBpbiB0aGlzIGZpbGUsIHRoZW4gdGhlCisvLyBtYWludGFp
bmVyIGZvcmdvdCB0byBpbmNsdWRlIGl0IGluIHRoZSBsaXN0OyBvdGhlcndpc2UgaXQgaXMgYW4g
dXBkYXRlIHRoYXQKKy8vIHNob3VsZCBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIGZpbGUgYnV0
IHdhcyBub3QuCisKKy8vIEZJWE1FOiBEZWZhdWx0IGJ1dHRvbnMgcmVhbGx5IHNob3VsZCBiZSBt
b3JlIGxpa2UgcHVzaCBidXR0b25zIGFuZCBub3QgbGlrZSBidXR0b25zLgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIFBpY2sgdXAgdXRpbGl0eSBmdW5jdGlvbiBmcm9tIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWMuCitleHRlcm4gTlNWaWV3KiBGbGlwcGVkVmlldygpOworCitlbnVtIHsKKyAg
ICB0b3BNYXJnaW4sCisgICAgcmlnaHRNYXJnaW4sCisgICAgYm90dG9tTWFyZ2luLAorICAgIGxl
ZnRNYXJnaW4KK307CisKK1RoZW1lKiBwbGF0Zm9ybVRoZW1lKCkKK3sKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFRoZW1lQ2hyb21pdW1NYWMsIHRoZW1lTWFjLCAoKSk7CisgICAgcmV0dXJuICZ0
aGVtZU1hYzsKK30KKworLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IGEgYnVuY2ggb2YgZGlm
ZmVyZW50IGNvbnRyb2wgcGFydHMuCisKK3N0YXRpYyBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXpl
Rm9yRm9udChjb25zdCBGb250JiBmb250KQoreworICAgIGludCBmb250U2l6ZSA9IGZvbnQucGl4
ZWxTaXplKCk7CisgICAgaWYgKGZvbnRTaXplID49IDE2KQorICAgICAgICByZXR1cm4gTlNSZWd1
bGFyQ29udHJvbFNpemU7CisgICAgaWYgKGZvbnRTaXplID49IDExKQorICAgICAgICByZXR1cm4g
TlNTbWFsbENvbnRyb2xTaXplOworICAgIHJldHVybiBOU01pbmlDb250cm9sU2l6ZTsKK30KKwor
c3RhdGljIExlbmd0aFNpemUgc2l6ZUZyb21Gb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExl
bmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IsIGNvbnN0IEludFNpemUqIHNp
emVzKQoreworICAgIEludFNpemUgY29udHJvbFNpemUgPSBzaXplc1tjb250cm9sU2l6ZUZvckZv
bnQoZm9udCldOworICAgIGlmICh6b29tRmFjdG9yICE9IDEuMGYpCisgICAgICAgIGNvbnRyb2xT
aXplID0gSW50U2l6ZShjb250cm9sU2l6ZS53aWR0aCgpICogem9vbUZhY3RvciwgY29udHJvbFNp
emUuaGVpZ2h0KCkgKiB6b29tRmFjdG9yKTsKKyAgICBMZW5ndGhTaXplIHJlc3VsdCA9IHpvb21l
ZFNpemU7CisgICAgaWYgKHpvb21lZFNpemUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYm
IGNvbnRyb2xTaXplLndpZHRoKCkgPiAwKQorICAgICAgICByZXN1bHQuc2V0V2lkdGgoTGVuZ3Ro
KGNvbnRyb2xTaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgaWYgKHpvb21lZFNpemUuaGVpZ2h0
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBjb250cm9sU2l6ZS5oZWlnaHQoKSA+IDApCisgICAg
ICAgIHJlc3VsdC5zZXRIZWlnaHQoTGVuZ3RoKGNvbnRyb2xTaXplLmhlaWdodCgpLCBGaXhlZCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldENvbnRyb2xTaXplKE5T
Q2VsbCogY2VsbCwgY29uc3QgSW50U2l6ZSogc2l6ZXMsIGNvbnN0IEludFNpemUmIG1pblpvb21l
ZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpCit7CisgICAgTlNDb250cm9sU2l6ZSBzaXplOworICAg
IGlmIChtaW5ab29tZWRTaXplLndpZHRoKCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tOU1Jl
Z3VsYXJDb250cm9sU2l6ZV0ud2lkdGgoKSAqIHpvb21GYWN0b3IpICYmCisgICAgICAgIG1pblpv
b21lZFNpemUuaGVpZ2h0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tOU1JlZ3VsYXJDb250
cm9sU2l6ZV0uaGVpZ2h0KCkgKiB6b29tRmFjdG9yKSkKKyAgICAgICAgc2l6ZSA9IE5TUmVndWxh
ckNvbnRyb2xTaXplOworICAgIGVsc2UgaWYgKG1pblpvb21lZFNpemUud2lkdGgoKSA+PSBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0ud2lkdGgoKSAqIHpvb21GYWN0
b3IpICYmCisgICAgICAgICAgICAgbWluWm9vbWVkU2l6ZS5oZWlnaHQoKSA+PSBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0uaGVpZ2h0KCkgKiB6b29tRmFjdG9yKSkK
KyAgICAgICAgc2l6ZSA9IE5TU21hbGxDb250cm9sU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHNp
emUgPSBOU01pbmlDb250cm9sU2l6ZTsKKyAgICBpZiAoc2l6ZSAhPSBbY2VsbCBjb250cm9sU2l6
ZV0pIC8vIE9ubHkgdXBkYXRlIGlmIHdlIGhhdmUgdG8sIHNpbmNlIEFwcEtpdCBkb2VzIHdvcmsg
ZXZlbiBpZiB0aGUgc2l6ZSBpcyB0aGUgc2FtZS4KKyAgICAgICAgW2NlbGwgc2V0Q29udHJvbFNp
emU6c2l6ZV07Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZVN0YXRlcyhOU0NlbGwqIGNlbGwsIENv
bnRyb2xTdGF0ZXMgc3RhdGVzKQoreworICAgIC8vIEhvdmVyIHN0YXRlIGlzIG5vdCBzdXBwb3J0
ZWQgYnkgQXF1YS4KKyAgICAKKyAgICAvLyBQcmVzc2VkIHN0YXRlCisgICAgYm9vbCBvbGRQcmVz
c2VkID0gW2NlbGwgaXNIaWdobGlnaHRlZF07CisgICAgYm9vbCBwcmVzc2VkID0gc3RhdGVzICYg
UHJlc3NlZFN0YXRlOworICAgIGlmIChwcmVzc2VkICE9IG9sZFByZXNzZWQpCisgICAgICAgIFtj
ZWxsIHNldEhpZ2hsaWdodGVkOnByZXNzZWRdOworICAgIAorICAgIC8vIEVuYWJsZWQgc3RhdGUK
KyAgICBib29sIG9sZEVuYWJsZWQgPSBbY2VsbCBpc0VuYWJsZWRdOworICAgIGJvb2wgZW5hYmxl
ZCA9IHN0YXRlcyAmIEVuYWJsZWRTdGF0ZTsKKyAgICBpZiAoZW5hYmxlZCAhPSBvbGRFbmFibGVk
KQorICAgICAgICBbY2VsbCBzZXRFbmFibGVkOmVuYWJsZWRdOworICAgIAorICAgIC8vIEZvY3Vz
ZWQgc3RhdGUKKyAgICBib29sIG9sZEZvY3VzZWQgPSBbY2VsbCBzaG93c0ZpcnN0UmVzcG9uZGVy
XTsKKyAgICBib29sIGZvY3VzZWQgPSBzdGF0ZXMgJiBGb2N1c1N0YXRlOworICAgIGlmIChmb2N1
c2VkICE9IG9sZEZvY3VzZWQpCisgICAgICAgIFtjZWxsIHNldFNob3dzRmlyc3RSZXNwb25kZXI6
Zm9jdXNlZF07CisKKyAgICAvLyBDaGVja2VkIGFuZCBJbmRldGVybWluYXRlCisgICAgYm9vbCBv
bGRJbmRldGVybWluYXRlID0gW2NlbGwgc3RhdGVdID09IE5TTWl4ZWRTdGF0ZTsKKyAgICBib29s
IGluZGV0ZXJtaW5hdGUgPSAoc3RhdGVzICYgSW5kZXRlcm1pbmF0ZVN0YXRlKTsKKyAgICBib29s
IGNoZWNrZWQgPSBzdGF0ZXMgJiBDaGVja2VkU3RhdGU7CisgICAgYm9vbCBvbGRDaGVja2VkID0g
W2NlbGwgc3RhdGVdID09IE5TT25TdGF0ZTsKKyAgICBpZiAob2xkSW5kZXRlcm1pbmF0ZSAhPSBp
bmRldGVybWluYXRlIHx8IGNoZWNrZWQgIT0gb2xkQ2hlY2tlZCkKKyAgICAgICAgW2NlbGwgc2V0
U3RhdGU6aW5kZXRlcm1pbmF0ZSA/IE5TTWl4ZWRTdGF0ZSA6IChjaGVja2VkID8gTlNPblN0YXRl
IDogTlNPZmZTdGF0ZSldOworICAgICAgICAKKyAgICAvLyBXaW5kb3cgSW5hY3RpdmUgc3RhdGUK
KyAgICBOU0NvbnRyb2xUaW50IG9sZFRpbnQgPSBbY2VsbCBjb250cm9sVGludF07CisgICAgYm9v
bCB3aW5kb3dJbmFjdGl2ZSA9IChzdGF0ZXMgJiBXaW5kb3dJbmFjdGl2ZVN0YXRlKTsKKyAgICBO
U0NvbnRyb2xUaW50IHRpbnQgPSB3aW5kb3dJbmFjdGl2ZSA/IE5TQ2xlYXJDb250cm9sVGludCA6
IFtOU0NvbG9yIGN1cnJlbnRDb250cm9sVGludF07CisgICAgaWYgKHRpbnQgIT0gb2xkVGludCkK
KyAgICAgICAgW2NlbGwgc2V0Q29udHJvbFRpbnQ6dGludF07Cit9CisKK3N0YXRpYyBJbnRSZWN0
IGluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGNvbnN0IEludFNpemUmIHpv
b21lZFNpemUsIGNvbnN0IGludCogbWFyZ2lucywgZmxvYXQgem9vbUZhY3RvcikKK3sKKyAgICAv
LyBPbmx5IGRvIHRoZSBpbmZsYXRpb24gaWYgdGhlIGF2YWlsYWJsZSB3aWR0aC9oZWlnaHQgYXJl
IHRvbyBzbWFsbC4gIE90aGVyd2lzZSB0cnkgdG8KKyAgICAvLyBmaXQgdGhlIGdsb3cvY2hlY2sg
c3BhY2UgaW50byB0aGUgYXZhaWxhYmxlIGJveCdzIHdpZHRoL2hlaWdodC4KKyAgICBpbnQgd2lk
dGhEZWx0YSA9IHpvb21lZFJlY3Qud2lkdGgoKSAtICh6b29tZWRTaXplLndpZHRoKCkgKyBtYXJn
aW5zW2xlZnRNYXJnaW5dICogem9vbUZhY3RvciArIG1hcmdpbnNbcmlnaHRNYXJnaW5dICogem9v
bUZhY3Rvcik7CisgICAgaW50IGhlaWdodERlbHRhID0gem9vbWVkUmVjdC5oZWlnaHQoKSAtICh6
b29tZWRTaXplLmhlaWdodCgpICsgbWFyZ2luc1t0b3BNYXJnaW5dICogem9vbUZhY3RvciArIG1h
cmdpbnNbYm90dG9tTWFyZ2luXSAqIHpvb21GYWN0b3IpOworICAgIEludFJlY3QgcmVzdWx0KHpv
b21lZFJlY3QpOworICAgIGlmICh3aWR0aERlbHRhIDwgMCkgeworICAgICAgICByZXN1bHQuc2V0
WChyZXN1bHQueCgpIC0gbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21GYWN0b3IpOworICAgICAg
ICByZXN1bHQuc2V0V2lkdGgocmVzdWx0LndpZHRoKCkgLSB3aWR0aERlbHRhKTsKKyAgICB9Cisg
ICAgaWYgKGhlaWdodERlbHRhIDwgMCkgeworICAgICAgICByZXN1bHQuc2V0WShyZXN1bHQueSgp
IC0gbWFyZ2luc1t0b3BNYXJnaW5dICogem9vbUZhY3Rvcik7CisgICAgICAgIHJlc3VsdC5zZXRI
ZWlnaHQocmVzdWx0LmhlaWdodCgpIC0gaGVpZ2h0RGVsdGEpOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCisvLyBDaGVja2JveGVzCisKK3N0YXRpYyBjb25zdCBJbnRTaXplKiBjaGVj
a2JveFNpemVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50
U2l6ZSgxNCwgMTQpLCBJbnRTaXplKDEyLCAxMiksIEludFNpemUoMTAsIDEwKSB9OworICAgIHJl
dHVybiBzaXplczsKK30KKworc3RhdGljIGNvbnN0IGludCogY2hlY2tib3hNYXJnaW5zKE5TQ29u
dHJvbFNpemUgY29udHJvbFNpemUpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXJnaW5zWzNd
WzRdID0KKyAgICB7CisgICAgICAgIHsgMywgNCwgNCwgMiB9LAorICAgICAgICB7IDQsIDMsIDMs
IDMgfSwKKyAgICAgICAgeyA0LCAzLCAzLCAzIH0sCisgICAgfTsKKyAgICByZXR1cm4gbWFyZ2lu
c1tjb250cm9sU2l6ZV07Cit9CisKK3N0YXRpYyBMZW5ndGhTaXplIGNoZWNrYm94U2l6ZShjb25z
dCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFj
dG9yKQoreworICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmll
ZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCF6b29tZWRTaXplLndpZHRo
KCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNp
Y09yQXV0bygpKQorICAgICAgICByZXR1cm4gem9vbWVkU2l6ZTsKKworICAgIC8vIFVzZSB0aGUg
Zm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9s
LgorICAgIHJldHVybiBzaXplRnJvbUZvbnQoZm9udCwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvciwg
Y2hlY2tib3hTaXplcygpKTsKK30KKworc3RhdGljIE5TQnV0dG9uQ2VsbCogY2hlY2tib3goQ29u
dHJvbFN0YXRlcyBzdGF0ZXMsIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21G
YWN0b3IpCit7CisgICAgc3RhdGljIE5TQnV0dG9uQ2VsbCogY2hlY2tib3hDZWxsOworICAgIGlm
ICghY2hlY2tib3hDZWxsKSB7CisgICAgICAgIGNoZWNrYm94Q2VsbCA9IFtbTlNCdXR0b25DZWxs
IGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2NoZWNrYm94Q2VsbCBzZXRCdXR0b25UeXBlOk5TU3dp
dGNoQnV0dG9uXTsKKyAgICAgICAgW2NoZWNrYm94Q2VsbCBzZXRUaXRsZTpuaWxdOworICAgICAg
ICBbY2hlY2tib3hDZWxsIHNldEFsbG93c01peGVkU3RhdGU6WUVTXTsKKyAgICAgICAgW2NoZWNr
Ym94Q2VsbCBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZUV4dGVyaW9yXTsKKyAgICB9
CisgICAgCisgICAgLy8gU2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSByZWN0YW5n
bGUgd2UncmUgcGFpbnRpbmcgaW50by4KKyAgICBzZXRDb250cm9sU2l6ZShjaGVja2JveENlbGws
IGNoZWNrYm94U2l6ZXMoKSwgem9vbWVkUmVjdC5zaXplKCksIHpvb21GYWN0b3IpOworCisgICAg
Ly8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgorICAgIHVwZGF0ZVN0
YXRlcyhjaGVja2JveENlbGwsIHN0YXRlcyk7CisgICAgCisgICAgcmV0dXJuIGNoZWNrYm94Q2Vs
bDsKK30KKworLy8gRklYTUU6IFNoYXJlIG1vcmUgY29kZSB3aXRoIHJhZGlvIGJ1dHRvbnMuCitz
dGF0aWMgdm9pZCBwYWludENoZWNrYm94KENvbnRyb2xTdGF0ZXMgc3RhdGVzLCBHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0
b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENF
UFRJT05TCisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZv
ciB0aGUgY29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCisgICAgTlNC
dXR0b25DZWxsKiBjaGVja2JveENlbGwgPSBjaGVja2JveChzdGF0ZXMsIHpvb21lZFJlY3QsIHpv
b21GYWN0b3IpOworCisgICAgY29udGV4dC0+c2F2ZSgpOworCisgICAgTlNDb250cm9sU2l6ZSBj
b250cm9sU2l6ZSA9IFtjaGVja2JveENlbGwgY29udHJvbFNpemVdOworICAgIEludFNpemUgem9v
bWVkU2l6ZSA9IGNoZWNrYm94U2l6ZXMoKVtjb250cm9sU2l6ZV07CisgICAgem9vbWVkU2l6ZS5z
ZXRXaWR0aCh6b29tZWRTaXplLndpZHRoKCkgKiB6b29tRmFjdG9yKTsKKyAgICB6b29tZWRTaXpl
LnNldEhlaWdodCh6b29tZWRTaXplLmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAgSW50UmVj
dCBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCBjaGVj
a2JveE1hcmdpbnMoY29udHJvbFNpemUpLCB6b29tRmFjdG9yKTsKKyAgICAKKyAgICBpZiAoem9v
bUZhY3RvciAhPSAxLjBmKSB7CisgICAgICAgIGluZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRl
ZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOworICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVp
Z2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOworICAgICAgICBjb250ZXh0
LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAgICAg
IGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAg
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55
KCkpOworICAgIH0KKyAgICAKKyAgICBbY2hlY2tib3hDZWxsIGRyYXdXaXRoRnJhbWU6TlNSZWN0
KGluZmxhdGVkUmVjdCkgaW5WaWV3OkZsaXBwZWRWaWV3KCldOworICAgIFtjaGVja2JveENlbGwg
c2V0Q29udHJvbFZpZXc6bmlsXTsKKworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKKy8vIFJhZGlvIEJ1dHRvbnMKKworc3Rh
dGljIGNvbnN0IEludFNpemUqIHJhZGlvU2l6ZXMoKQoreworICAgIHN0YXRpYyBjb25zdCBJbnRT
aXplIHNpemVzWzNdID0geyBJbnRTaXplKDE0LCAxNSksIEludFNpemUoMTIsIDEzKSwgSW50U2l6
ZSgxMCwgMTApIH07CisgICAgcmV0dXJuIHNpemVzOworfQorCitzdGF0aWMgY29uc3QgaW50KiBy
YWRpb01hcmdpbnMoTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK3sKKyAgICBzdGF0aWMgY29u
c3QgaW50IG1hcmdpbnNbM11bNF0gPQorICAgIHsKKyAgICAgICAgeyAyLCAyLCA0LCAyIH0sCisg
ICAgICAgIHsgMywgMiwgMywgMiB9LAorICAgICAgICB7IDEsIDAsIDIsIDAgfSwKKyAgICB9Owor
ICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKK30KKworc3RhdGljIExlbmd0aFNpemUg
cmFkaW9TaXplKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUs
IGZsb2F0IHpvb21GYWN0b3IpCit7CisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJl
IGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoIXpv
b21lZFNpemUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICF6b29tZWRTaXplLmhlaWdo
dCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHJldHVybiB6b29tZWRTaXplOworCisg
ICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGgg
b2YgdGhlIGNvbnRyb2wuCisgICAgcmV0dXJuIHNpemVGcm9tRm9udChmb250LCB6b29tZWRTaXpl
LCB6b29tRmFjdG9yLCByYWRpb1NpemVzKCkpOworfQorCitzdGF0aWMgTlNCdXR0b25DZWxsKiBy
YWRpbyhDb250cm9sU3RhdGVzIHN0YXRlcywgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxv
YXQgem9vbUZhY3RvcikKK3sKKyAgICBzdGF0aWMgTlNCdXR0b25DZWxsKiByYWRpb0NlbGw7Cisg
ICAgaWYgKCFyYWRpb0NlbGwpIHsKKyAgICAgICAgcmFkaW9DZWxsID0gW1tOU0J1dHRvbkNlbGwg
YWxsb2NdIGluaXRdOworICAgICAgICBbcmFkaW9DZWxsIHNldEJ1dHRvblR5cGU6TlNSYWRpb0J1
dHRvbl07CisgICAgICAgIFtyYWRpb0NlbGwgc2V0VGl0bGU6bmlsXTsKKyAgICAgICAgW3JhZGlv
Q2VsbCBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZUV4dGVyaW9yXTsKKyAgICB9Cisg
ICAgCisgICAgLy8gU2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSByZWN0YW5nbGUg
d2UncmUgcGFpbnRpbmcgaW50by4KKyAgICBzZXRDb250cm9sU2l6ZShyYWRpb0NlbGwsIHJhZGlv
U2l6ZXMoKSwgem9vbWVkUmVjdC5zaXplKCksIHpvb21GYWN0b3IpOworCisgICAgLy8gVXBkYXRl
IHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgorICAgIHVwZGF0ZVN0YXRlcyhyYWRp
b0NlbGwsIHN0YXRlcyk7CisgICAgCisgICAgcmV0dXJuIHJhZGlvQ2VsbDsKK30KKworc3RhdGlj
IHZvaWQgcGFpbnRSYWRpbyhDb250cm9sU3RhdGVzIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3Jv
bGxWaWV3KiBzY3JvbGxWaWV3KQoreworICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5kIGhl
aWdodCBuZWVkZWQgZm9yIHRoZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBwYWlu
dGluZy4KKyAgICBOU0J1dHRvbkNlbGwqIHJhZGlvQ2VsbCA9IHJhZGlvKHN0YXRlcywgem9vbWVk
UmVjdCwgem9vbUZhY3Rvcik7CisKKyAgICBjb250ZXh0LT5zYXZlKCk7CisKKyAgICBOU0NvbnRy
b2xTaXplIGNvbnRyb2xTaXplID0gW3JhZGlvQ2VsbCBjb250cm9sU2l6ZV07CisgICAgSW50U2l6
ZSB6b29tZWRTaXplID0gcmFkaW9TaXplcygpW2NvbnRyb2xTaXplXTsKKyAgICB6b29tZWRTaXpl
LnNldFdpZHRoKHpvb21lZFNpemUud2lkdGgoKSAqIHpvb21GYWN0b3IpOworICAgIHpvb21lZFNp
emUuc2V0SGVpZ2h0KHpvb21lZFNpemUuaGVpZ2h0KCkgKiB6b29tRmFjdG9yKTsKKyAgICBJbnRS
ZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KHpvb21lZFJlY3QsIHpvb21lZFNpemUsIHJh
ZGlvTWFyZ2lucyhjb250cm9sU2l6ZSksIHpvb21GYWN0b3IpOworICAgIAorICAgIGlmICh6b29t
RmFjdG9yICE9IDEuMGYpIHsKKyAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGluZmxhdGVk
UmVjdC53aWR0aCgpIC8gem9vbUZhY3Rvcik7CisgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWln
aHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgICAgIGNvbnRleHQt
PnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgpLCBpbmZsYXRlZFJlY3QueSgpKTsKKyAgICAgICAg
Y29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsKKyAgICAg
ICAgY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0Lnko
KSk7CisgICAgfQorICAgIAorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFty
YWRpb0NlbGwgZHJhd1dpdGhGcmFtZTpOU1JlY3QoaW5mbGF0ZWRSZWN0KSBpblZpZXc6RmxpcHBl
ZFZpZXcoKV07CisgICAgW3JhZGlvQ2VsbCBzZXRDb250cm9sVmlldzpuaWxdOworICAgIEVORF9C
TE9DS19PQkpDX0VYQ0VQVElPTlMKKworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKK30KKworLy8g
QnV0dG9ucworCisvLyBCdXR0b25zIHJlYWxseSBvbmx5IGNvbnN0cmFpbiBoZWlnaHQuIFRoZXkg
cmVzcGVjdCB3aWR0aC4KK3N0YXRpYyBjb25zdCBJbnRTaXplKiBidXR0b25TaXplcygpCit7Cisg
ICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMCwgMjEpLCBJbnRT
aXplKDAsIDE4KSwgSW50U2l6ZSgwLCAxNSkgfTsKKyAgICByZXR1cm4gc2l6ZXM7Cit9CisKK3N0
YXRpYyBjb25zdCBpbnQqIGJ1dHRvbk1hcmdpbnMoTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkK
K3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0gPQorICAgIHsKKyAgICAgICAg
eyA0LCA2LCA3LCA2IH0sCisgICAgICAgIHsgNCwgNSwgNiwgNSB9LAorICAgICAgICB7IDAsIDEs
IDEsIDEgfSwKKyAgICB9OworICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKK30KKwor
c3RhdGljIE5TQnV0dG9uQ2VsbCogYnV0dG9uKENvbnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xTdGF0
ZXMgc3RhdGVzLCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yKQor
eworICAgIHN0YXRpYyBOU0J1dHRvbkNlbGwgKmJ1dHRvbkNlbGw7CisgICAgc3RhdGljIGJvb2wg
ZGVmYXVsdEJ1dHRvbjsKKyAgICBpZiAoIWJ1dHRvbkNlbGwpIHsKKyAgICAgICAgYnV0dG9uQ2Vs
bCA9IFtbTlNCdXR0b25DZWxsIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRvbkNlbGwgc2V0
VGl0bGU6bmlsXTsKKyAgICAgICAgW2J1dHRvbkNlbGwgc2V0QnV0dG9uVHlwZTpOU01vbWVudGFy
eVB1c2hJbkJ1dHRvbl07CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBjb250cm9sIHNpemUgYmFz
ZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUgcGFpbnRpbmcgaW50by4KKyAgICBpZiAocGFydCA9
PSBTcXVhcmVCdXR0b25QYXJ0IHx8IHpvb21lZFJlY3QuaGVpZ2h0KCkgPiBidXR0b25TaXplcygp
W05TUmVndWxhckNvbnRyb2xTaXplXS5oZWlnaHQoKSAqIHpvb21GYWN0b3IpIHsKKyAgICAgICAg
Ly8gVXNlIHRoZSBzcXVhcmUgYnV0dG9uCisgICAgICAgIGlmIChbYnV0dG9uQ2VsbCBiZXplbFN0
eWxlXSAhPSBOU1NoYWRvd2xlc3NTcXVhcmVCZXplbFN0eWxlKQorICAgICAgICAgICAgW2J1dHRv
bkNlbGwgc2V0QmV6ZWxTdHlsZTpOU1NoYWRvd2xlc3NTcXVhcmVCZXplbFN0eWxlXTsKKyAgICB9
IGVsc2UgaWYgKFtidXR0b25DZWxsIGJlemVsU3R5bGVdICE9IE5TUm91bmRlZEJlemVsU3R5bGUp
CisgICAgICAgIFtidXR0b25DZWxsIHNldEJlemVsU3R5bGU6TlNSb3VuZGVkQmV6ZWxTdHlsZV07
CisKKyAgICBzZXRDb250cm9sU2l6ZShidXR0b25DZWxsLCBidXR0b25TaXplcygpLCB6b29tZWRS
ZWN0LnNpemUoKSwgem9vbUZhY3Rvcik7CisKKyAgICBpZiAoZGVmYXVsdEJ1dHRvbiAhPSAoc3Rh
dGVzICYgRGVmYXVsdFN0YXRlKSkgeworICAgICAgICBkZWZhdWx0QnV0dG9uID0gIWRlZmF1bHRC
dXR0b247CisgICAgICAgIFtidXR0b25DZWxsIHNldEtleUVxdWl2YWxlbnQ6KGRlZmF1bHRCdXR0
b24gPyBAIlxyIiA6IEAiIildOworICAgIH0KKworICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBz
dGF0ZXMgd2UgcmVzcG9uZCB0by4KKyAgICB1cGRhdGVTdGF0ZXMoYnV0dG9uQ2VsbCwgc3RhdGVz
KTsKKyAgICAKKyAgICByZXR1cm4gYnV0dG9uQ2VsbDsKK30KKworc3RhdGljIHZvaWQgcGFpbnRC
dXR0b24oQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rv
ciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQ
VElPTlMKKyAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVk
IGZvciB0aGUgY29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCisgICAg
TlNCdXR0b25DZWxsICpidXR0b25DZWxsID0gYnV0dG9uKHBhcnQsIHN0YXRlcywgem9vbWVkUmVj
dCwgem9vbUZhY3Rvcik7CisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29u
dGV4dChjb250ZXh0KTsKKworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbYnV0dG9u
Q2VsbCBjb250cm9sU2l6ZV07CisgICAgSW50U2l6ZSB6b29tZWRTaXplID0gYnV0dG9uU2l6ZXMo
KVtjb250cm9sU2l6ZV07CisgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6b29tZWRSZWN0LndpZHRo
KCkpOyAvLyBCdXR0b25zIGRvbid0IGV2ZXIgY29uc3RyYWluIHdpZHRoLCBzbyB0aGUgem9vbWVk
IHdpZHRoIGNhbiBqdXN0IGJlIGhvbm9yZWQuCisgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9v
bWVkU2l6ZS5oZWlnaHQoKSAqIHpvb21GYWN0b3IpOworICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0
ID0gem9vbWVkUmVjdDsKKyAgICBpZiAoW2J1dHRvbkNlbGwgYmV6ZWxTdHlsZV0gPT0gTlNSb3Vu
ZGVkQmV6ZWxTdHlsZSkgeworICAgICAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB3aXRoaW4gdGhl
IGF2YWlsYWJsZSBzcGFjZS4KKyAgICAgICAgaWYgKGluZmxhdGVkUmVjdC5oZWlnaHQoKSA+IHpv
b21lZFNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRZKGluZmxh
dGVkUmVjdC55KCkgKyAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC0gem9vbWVkU2l6ZS5oZWlnaHQo
KSkgLyAyKTsKKyAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoem9vbWVkU2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2Nv
dW50IGZvciB0aGUgc2hhZG93LgorICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChp
bmZsYXRlZFJlY3QsIHpvb21lZFNpemUsIGJ1dHRvbk1hcmdpbnMoY29udHJvbFNpemUpLCB6b29t
RmFjdG9yKTsKKworICAgICAgICBpZiAoem9vbUZhY3RvciAhPSAxLjBmKSB7CisgICAgICAgICAg
ICBpbmZsYXRlZFJlY3Quc2V0V2lkdGgoaW5mbGF0ZWRSZWN0LndpZHRoKCkgLyB6b29tRmFjdG9y
KTsKKyAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdo
dCgpIC8gem9vbUZhY3Rvcik7CisgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0
ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zY2Fs
ZShGbG9hdFNpemUoem9vbUZhY3Rvciwgem9vbUZhY3RvcikpOworICAgICAgICAgICAgY29udGV4
dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAg
ICAgIH0KKyAgICB9IAorCisgICAgW2J1dHRvbkNlbGwgZHJhd1dpdGhGcmFtZTpOU1JlY3QoaW5m
bGF0ZWRSZWN0KSBpblZpZXc6RmxpcHBlZFZpZXcoKV07CisgICAgW2J1dHRvbkNlbGwgc2V0Q29u
dHJvbFZpZXc6bmlsXTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKworLy8g
VGhlbWUgb3ZlcnJpZGVzCisKK2ludCBUaGVtZUNocm9taXVtTWFjOjpiYXNlbGluZVBvc2l0aW9u
QWRqdXN0bWVudChDb250cm9sUGFydCBwYXJ0KSBjb25zdAoreworICAgIGlmIChwYXJ0ID09IENo
ZWNrYm94UGFydCB8fCBwYXJ0ID09IFJhZGlvUGFydCkKKyAgICAgICAgcmV0dXJuIC0yOworICAg
IHJldHVybiBUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQocGFydCk7Cit9CisKK0Zv
bnREZXNjcmlwdGlvbiBUaGVtZUNocm9taXVtTWFjOjpjb250cm9sRm9udChDb250cm9sUGFydCBw
YXJ0LCBjb25zdCBGb250JiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAoreworICAgIHN3
aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OiB7CisgICAgICAgICAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOworICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSk7CisKKyAg
ICAgICAgICAgIE5TRm9udCogbnNGb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0Zv
bnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpjb250cm9sU2l6ZUZvckZvbnQoZm9udCld
XTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShb
bnNGb250IGZhbWlseU5hbWVdKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21w
dXRlZFNpemUoW25zRm9udCBwb2ludFNpemVdICogem9vbUZhY3Rvcik7CisgICAgICAgICAgICBm
b250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShbbnNGb250IHBvaW50U2l6ZV0gKiB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBmb250RGVzY3JpcHRpb247CisgICAgICAgIH0K
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUaGVtZTo6Y29udHJvbEZvbnQo
cGFydCwgZm9udCwgem9vbUZhY3Rvcik7CisgICAgfQorfQorCitMZW5ndGhTaXplIFRoZW1lQ2hy
b21pdW1NYWM6OmNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQs
IGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0Cit7
CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgICAg
ICAgICAgcmV0dXJuIGNoZWNrYm94U2l6ZShmb250LCB6b29tZWRTaXplLCB6b29tRmFjdG9yKTsK
KyAgICAgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgICAgICAgICByZXR1cm4gcmFkaW9TaXplKGZv
bnQsIHpvb21lZFNpemUsIHpvb21GYWN0b3IpOworICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0
OgorICAgICAgICAgICAgLy8gSGVpZ2h0IGlzIHJlc2V0IHRvIGF1dG8gc28gdGhhdCBzcGVjaWZp
ZWQgaGVpZ2h0cyBjYW4gYmUgaWdub3JlZC4KKyAgICAgICAgICAgIHJldHVybiBzaXplRnJvbUZv
bnQoZm9udCwgTGVuZ3RoU2l6ZSh6b29tZWRTaXplLndpZHRoKCksIExlbmd0aCgpKSwgem9vbUZh
Y3RvciwgYnV0dG9uU2l6ZXMoKSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gem9vbWVkU2l6ZTsKKyAgICB9Cit9CisKK0xlbmd0aFNpemUgVGhlbWVDaHJvbWl1bU1hYzo6
bWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZs
b2F0IHpvb21GYWN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNh
c2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAg
ICAgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgICAgICAgICAgcmV0dXJuIExlbmd0aFNpemUoTGVu
Z3RoKDAsIEZpeGVkKSwgTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oMTUgKiB6b29tRmFjdG9yKSwg
Rml4ZWQpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUaGVtZTo6bWlu
aW11bUNvbnRyb2xTaXplKHBhcnQsIGZvbnQsIHpvb21GYWN0b3IpOworICAgIH0KK30KKworTGVu
Z3RoQm94IFRoZW1lQ2hyb21pdW1NYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFydCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgU3F1YXJl
QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2Fz
ZSBCdXR0b25QYXJ0OgorICAgICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgwLCB6b29tZWRCb3gu
cmlnaHQoKS52YWx1ZSgpLCAwLCB6b29tZWRCb3gubGVmdCgpLnZhbHVlKCkpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFRoZW1lOjpjb250cm9sQm9yZGVyKHBhcnQsIGZv
bnQsIHpvb21lZEJveCwgem9vbUZhY3Rvcik7CisgICAgfQorfQorCitMZW5ndGhCb3ggVGhlbWVD
aHJvbWl1bU1hYzo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6IHsK
KyAgICAgICAgICAgIC8vIEp1c3QgdXNlIDhweC4gIEFwcEtpdCB3YW50cyB0byB1c2UgMTFweCBm
b3IgbWluaSBidXR0b25zLCBidXQgdGhhdCBwYWRkaW5nIGlzIGp1c3QgdG9vIGxhcmdlCisgICAg
ICAgICAgICAvLyBmb3IgcmVhbC13b3JsZCBXZWIgc2l0ZXMgKGNyZWF0aW5nIGEgaHVnZSBuZWNl
c3NhcnkgbWluaW11bSB3aWR0aCBmb3IgYnV0dG9ucyB3aG9zZSBzcGFjZSBpcworICAgICAgICAg
ICAgLy8gYnkgZGVmaW5pdGlvbiBjb25zdHJhaW5lZCwgc2luY2Ugd2Ugc2VsZWN0IG1pbmkgb25s
eSBmb3Igc21hbGwgY3JhbXBlZCBlbnZpcm9ubWVudHMuCisgICAgICAgICAgICAvLyBUaGlzIGFs
c28gZ3VhcmFudGVlcyB0aGUgSFRNTCA8YnV0dG9uPiB3aWxsIG1hdGNoIG91ciByZW5kZXJpbmcg
YnkgZGVmYXVsdCwgc2luY2Ugd2UncmUgdXNpbmcgYSBjb25zaXN0ZW50CisgICAgICAgICAgICAv
LyBwYWRkaW5nLgorICAgICAgICAgICAgY29uc3QgaW50IHBhZGRpbmcgPSA4ICogem9vbUZhY3Rv
cjsKKyAgICAgICAgICAgIHJldHVybiBMZW5ndGhCb3goMCwgcGFkZGluZywgMCwgcGFkZGluZyk7
CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUaGVtZTo6
Y29udHJvbFBhZGRpbmcocGFydCwgZm9udCwgem9vbWVkQm94LCB6b29tRmFjdG9yKTsKKyAgICB9
Cit9CisKK3ZvaWQgVGhlbWVDaHJvbWl1bU1hYzo6aW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29u
dHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEludFJlY3QmIHpvb21lZFJlY3Qs
IGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJ
T05TCisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OiB7Cisg
ICAgICAgICAgICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZv
ciBwYWRkaW5nIGluY2x1ZGVkIGluIHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBjaGVja2Jv
eAorICAgICAgICAgICAgLy8gc2hhZG93IiBhbmQgdGhlIGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lk
ZXIgdGhpcyBwYXJ0IG9mIHRoZSBib3VuZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0LgorICAg
ICAgICAgICAgTlNDZWxsICpjZWxsID0gY2hlY2tib3goc3RhdGVzLCB6b29tZWRSZWN0LCB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbY2VsbCBj
b250cm9sU2l6ZV07CisgICAgICAgICAgICBJbnRTaXplIHpvb21lZFNpemUgPSBjaGVja2JveFNp
emVzKClbY29udHJvbFNpemVdOworICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9v
bWVkU2l6ZS5oZWlnaHQoKSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgem9vbWVkU2l6ZS5z
ZXRXaWR0aCh6b29tZWRTaXplLndpZHRoKCkgKiB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHpv
b21lZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCBjaGVja2JveE1h
cmdpbnMoY29udHJvbFNpemUpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIGNhc2UgUmFkaW9QYXJ0OiB7CisgICAgICAgICAgICAvLyBXZSBpbmZs
YXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVkIGlu
IHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSByYWRpbyBidXR0b24KKyAgICAgICAgICAgIC8v
IHNoYWRvdyIuICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0
aGUgY29udHJvbCBpbiBXZWJLaXQuCisgICAgICAgICAgICBOU0NlbGwgKmNlbGwgPSByYWRpbyhz
dGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgTlNDb250cm9sU2l6
ZSBjb250cm9sU2l6ZSA9IFtjZWxsIGNvbnRyb2xTaXplXTsKKyAgICAgICAgICAgIEludFNpemUg
em9vbWVkU2l6ZSA9IHJhZGlvU2l6ZXMoKVtjb250cm9sU2l6ZV07CisgICAgICAgICAgICB6b29t
ZWRTaXplLnNldEhlaWdodCh6b29tZWRTaXplLmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAg
ICAgICAgICB6b29tZWRTaXplLnNldFdpZHRoKHpvb21lZFNpemUud2lkdGgoKSAqIHpvb21GYWN0
b3IpOworICAgICAgICAgICAgem9vbWVkUmVjdCA9IGluZmxhdGVSZWN0KHpvb21lZFJlY3QsIHpv
b21lZFNpemUsIHJhZGlvTWFyZ2lucyhjb250cm9sU2l6ZSksIHpvb21GYWN0b3IpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAg
ICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OiB7
CisgICAgICAgICAgICBOU0J1dHRvbkNlbGwgKmNlbGwgPSBidXR0b24ocGFydCwgc3RhdGVzLCB6
b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIE5TQ29udHJvbFNpemUgY29udHJv
bFNpemUgPSBbY2VsbCBjb250cm9sU2l6ZV07CisKKyAgICAgICAgICAgIC8vIFdlIGluZmxhdGUg
dGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHRoZSBBcXVhIGJ1dHRvbidzIHNoYWRv
dy4KKyAgICAgICAgICAgIGlmIChbY2VsbCBiZXplbFN0eWxlXSA9PSBOU1JvdW5kZWRCZXplbFN0
eWxlKSB7CisgICAgICAgICAgICAgICAgSW50U2l6ZSB6b29tZWRTaXplID0gYnV0dG9uU2l6ZXMo
KVtjb250cm9sU2l6ZV07CisgICAgICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9v
bWVkU2l6ZS5oZWlnaHQoKSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIHpvb21lZFNp
emUuc2V0V2lkdGgoem9vbWVkUmVjdC53aWR0aCgpKTsgLy8gQnV0dG9ucyBkb24ndCBldmVyIGNv
bnN0cmFpbiB3aWR0aCwgc28gdGhlIHpvb21lZCB3aWR0aCBjYW4ganVzdCBiZSBob25vcmVkLgor
ICAgICAgICAgICAgICAgIHpvb21lZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29t
ZWRTaXplLCBidXR0b25NYXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUZhY3Rvcik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
K30KKwordm9pZCBUaGVtZUNocm9taXVtTWFjOjpwYWludChDb250cm9sUGFydCBwYXJ0LCBDb250
cm9sU3RhdGVzIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KSBj
b25zdAoreworICAgIHN3aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIENoZWNrYm94UGFydDoK
KyAgICAgICAgICAgIHBhaW50Q2hlY2tib3goc3RhdGVzLCBjb250ZXh0LCB6b29tZWRSZWN0LCB6
b29tRmFjdG9yLCBzY3JvbGxWaWV3KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFJhZGlvUGFydDoKKyAgICAgICAgICAgIHBhaW50UmFkaW8oc3RhdGVzLCBjb250ZXh0LCB6b29t
ZWRSZWN0LCB6b29tRmFjdG9yLCBzY3JvbGxWaWV3KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0
OgorICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFy
dDoKKyAgICAgICAgICAgIHBhaW50QnV0dG9uKHBhcnQsIHN0YXRlcywgY29udGV4dCwgem9vbWVk
UmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLm1t
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHJldmlzaW9uIDQ4MzE0KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2
LDcgQEAKIHR5cGVkZWYgc3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oTUFDKQorI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBQ
TEFURk9STShEQVJXSU4pKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTCiB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiAjZWxzZQpAQCAtODQs
NyArODQsOCBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0OwogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9B
U19DR0dFT01FVFJZX1RZUEVTKQorI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VP
TUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgfHwgKFBMQVRG
T1JNKENIUk9NSVVNKSAmJiBQTEFURk9STShEQVJXSU4pKQogICAgIEZsb2F0UG9pbnQoY29uc3Qg
TlNQb2ludCYpOwogICAgIG9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdDsKICNlbmRpZgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShyZXZpc2lvbiA0ODMxNCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDcgQEAKIHR5cGVkZWYgc3RydWN0IENHUmVjdCBDR1JlY3Q7CiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkg
JiYgUExBVEZPUk0oREFSV0lOKSkKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dH
RU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IE5TUmVjdDsKICNlbHNlCkBAIC0x
MjcsNyArMTI3LDggQEAgcHVibGljOgogICAgIG9wZXJhdG9yIENHUmVjdCgpIGNvbnN0OwogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FN
RV9BU19DR0dFT01FVFJZX1RZUEVTKQorI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5T
R0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgfHwgKFBM
QVRGT1JNKENIUk9NSVVNKSAmJiBQTEFURk9STShEQVJXSU4pKQogICAgIEZsb2F0UmVjdChjb25z
dCBOU1JlY3QmKTsKICAgICBvcGVyYXRvciBOU1JlY3QoKSBjb25zdDsKICNlbmRpZgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCShyZXZpc2lvbiA0ODMxNCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDcgQEAKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBDR1NpemU7CiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkg
JiYgUExBVEZPUk0oREFSV0lOKSkKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dH
RU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dTaXplIE5TU2l6ZTsKICNlbHNlCkBAIC03
OSw3ICs3OSw4IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1NpemUoKSBjb25zdDsKICNlbmRp
ZgogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVf
QVNfQ0dHRU9NRVRSWV9UWVBFUykKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dF
T01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpIFwKKyAgICAgIHx8IChQTEFU
Rk9STShDSFJPTUlVTSkgJiYgUExBVEZPUk0oREFSV0lOKSkKICAgICBleHBsaWNpdCBGbG9hdFNp
emUoY29uc3QgTlNTaXplICYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQn
cyBsb3NzeQogICAgIG9wZXJhdG9yIE5TU2l6ZSgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gNDgzMTQpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBA
QAogdHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IENHUmVjdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0o
TUFDKQorI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBQTEFURk9S
TShEQVJXSU4pKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZ
UEVTCiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0OwogI2Vsc2UKQEAgLTE2MSw3ICsxNjEs
OCBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgU2tJUmVjdCgpIGNvbnN0OwogI2VuZGlmCiAKLSNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dF
T01FVFJZX1RZUEVTKQorI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllf
VFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgfHwgKFBMQVRGT1JNKENI
Uk9NSVVNKSAmJiBQTEFURk9STShEQVJXSU4pKQogICAgIG9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0
OwogI2VuZGlmCiAKQEAgLTE5OCw3ICsxOTksOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEludFJlY3QmIGEsCiBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgQ0dSZWN0Jik7
CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBF
U19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCisjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmlu
ZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCisgICAgICB8
fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIFBMQVRGT1JNKERBUldJTikpCiBJbnRSZWN0IGVuY2xv
c2luZ0ludFJlY3QoY29uc3QgTlNSZWN0Jik7CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaAkocmV2aXNpb24gNDgzMTQpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMsNyArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJ
bmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlLCBJbmMuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjYsNyArMjUsNiBAQAogI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVtTWFjX2gKIAog
I2ltcG9ydCAiUmVuZGVyVGhlbWUuaCIKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KICNpbXBv
cnQgPHd0Zi9IYXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTM2LDE4
NiArMzQsMTY5IEBACiBjbGFzcyBXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZl
cjsKICNlbmRpZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisvLyBUaGlzIGZpbGUgKGFuZCBpdHMg
YXNzb2NpYXRlZCAubW0gZmlsZSkgaXMgYSBjbG9uZSBvZiBSZW5kZXJUaGVtZU1hYy5oLiBTZWUK
Ky8vIHRoZSAubW0gZmlsZSBmb3IgZGV0YWlscy4KIAotICAgIGNsYXNzIFJlbmRlclN0eWxlOwor
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYyA6
IHB1YmxpYyBSZW5kZXJUaGVtZSB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKCk7CitjbGFzcyBSZW5kZXJTdHlsZTsKIAotICAgICAg
ICAvLyBBIG1ldGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJsZWFm
IiBjb250cm9sLiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhIGJhc2VsaW5lCi0gICAgICAg
IC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250
ZW50LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgotICAgICAg
ICAvLyBjb250cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KLSAgICAgICAgdmlydHVhbCBpbnQg
YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKK2NsYXNzIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWMgOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKIAotICAgICAgICAvLyBBIG1l
dGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5k
b3cgaGFzIGZvY3VzIG9yIG5vdC4KLSAgICAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0
c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIC8vIEEgbWV0aG9kIGFza2lu
ZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9j
dXMgb3Igbm90LgorICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBS
ZW5kZXJPYmplY3QqKSBjb25zdDsKIAotICAgICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2lu
ZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCi0gICAgICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlz
IHN1cHBvcnRlZCBhdCBhbGwuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRz
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RS
ZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKTsKIAot
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwg
Y29uc3QgQm9yZGVyRGF0YSYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IEJvcmRlckRhdGEmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmls
bExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKLSAgICAgICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0OwotICAgICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAg
dmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZl
TGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29s
b3IgcGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9y
ZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZvY3VzUmlu
Z0NvbG9yKCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZvY3VzUmlu
Z0NvbG9yKCkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1D
b2xvcnNEaWRDaGFuZ2UoKTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9s
bGJhckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gU21hbGxTY3JvbGxi
YXI7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsK
IAotICAgICAgICAvLyBTeXN0ZW0gZm9udHMuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1G
b250KGludCBjc3NWYWx1ZUlkLCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICAvLyBTeXN0
ZW0gZm9udHMuCisgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IGNzc1ZhbHVlSWQsIEZv
bnREZXNjcmlwdGlvbiYpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51
TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVu
dUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICAgICAgCi0gICAg
ICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNv
bnN0OwotICAgICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRl
clN0eWxlKikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5n
VG9wKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJu
YWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICB2
aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJhckNvbnRyb2xTaXplRm9yUGFydChD
b250cm9sUGFydCkgeyByZXR1cm4gU21hbGxTY3JvbGxiYXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgIAotICAgICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJT
dHlsZSopIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNh
dG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogCi0gICAgICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1Zh
bHVlSWQpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVl
SWQpIGNvbnN0OwogCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3JzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3JzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgICAgICAvLyBNZXRob2RzIGZvciBl
YWNoIGFwcGVhcmFuY2UgdmFsdWUuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94
KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxl
KikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAg
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXpl
KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZp
ZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICAgICAgdmly
dHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChS
ZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBh
aW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNl
ZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtG
b3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRl
clRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1i
KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYygp
OwotICAgICAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUNocm9taXVtTWFjKCk7Ci0KLSAgICAgICAg
SW50UmVjdCBpbmZsYXRlUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0
IGludCogbWFyZ2lucywgZmxvYXQgem9vbUxldmVsID0gMS4wZikgY29uc3Q7Ci0KLSAgICAgICAg
Ly8gR2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiAgVXNlZCBieSBzb21l
IG9mIHRoZSBjb250cm9scyAobGlrZSBidXR0b25zKS4KLSAgICAgICAgTlNDb250cm9sU2l6ZSBj
b250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICAgICAgTlNDb250cm9s
U2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJbnRTaXplKiBzaXplcywgY29u
c3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZik7Ci0gICAgICAgIHZv
aWQgc2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNv
bnN0OwotICAgICAgICBJbnRTaXplIHNpemVGb3JGb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50
U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgICAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJl
bmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgICAgICB2b2lkIHNl
dEZvbnRGcm9tQ29udHJvbFNpemUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgTlND
b250cm9sU2l6ZSkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCB1cGRhdGVBY3RpdmVTdGF0ZShOU0Nl
bGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICAgICAgdm9pZCB1cGRhdGVDaGVja2VkU3Rh
dGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgICAgIHZvaWQgdXBkYXRlRW5h
YmxlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCopOwotICAgICAgICB2b2lkIHVw
ZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICAgICAg
dm9pZCB1cGRhdGVQcmVzc2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0K
LSAgICAgICAgLy8gSGVscGVycyBmb3IgYWRqdXN0aW5nIGFwcGVhcmFuY2UgYW5kIGZvciBwYWlu
dGluZwotICAgICAgICBjb25zdCBJbnRTaXplKiBjaGVja2JveFNpemVzKCkgY29uc3Q7Ci0gICAg
ICAgIGNvbnN0IGludCogY2hlY2tib3hNYXJnaW5zKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0
Q2hlY2tib3hDZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpOwot
Ci0gICAgICAgIGNvbnN0IEludFNpemUqIHJhZGlvU2l6ZXMoKSBjb25zdDsKLSAgICAgICAgY29u
c3QgaW50KiByYWRpb01hcmdpbnMoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRSYWRpb0NlbGxT
dGF0ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdm9p
ZCBzZXRCdXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiwgTlNDb250cm9s
U2l6ZSkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IEludFNpemUqIGJ1dHRvblNpemVzKCkgY29uc3Q7
Ci0gICAgICAgIGNvbnN0IGludCogYnV0dG9uTWFyZ2lucygpIGNvbnN0OwotICAgICAgICB2b2lk
IHNldEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7
Ci0KLSAgICAgICAgdm9pZCBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmpl
Y3QqLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIGNvbnN0IEludFNpemUqIHBvcHVwQnV0dG9u
U2l6ZXMoKSBjb25zdDsKLSAgICAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvbk1hcmdpbnMoKSBj
b25zdDsKLSAgICAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6
ZSkgY29uc3Q7Ci0gICAgICAgIHZvaWQgcGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICAgICAgY29uc3QgSW50U2l6ZSogbWVudUxpc3RTaXplcygpIGNvbnN0OwotCi0gICAg
ICAgIGNvbnN0IEludFNpemUqIHNlYXJjaEZpZWxkU2l6ZXMoKSBjb25zdDsKLSAgICAgICAgY29u
c3QgSW50U2l6ZSogY2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdDsKLSAgICAgICAgY29uc3QgSW50
U2l6ZSogcmVzdWx0c0J1dHRvblNpemVzKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0U2VhcmNo
Q2VsbFN0YXRlKFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdm9pZCBz
ZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAg
IE5TQnV0dG9uQ2VsbCogY2hlY2tib3goKSBjb25zdDsKLSAgICAgICAgTlNCdXR0b25DZWxsKiBy
YWRpbygpIGNvbnN0OwotICAgICAgICBOU0J1dHRvbkNlbGwqIGJ1dHRvbigpIGNvbnN0OwotICAg
ICAgICBOU1BvcFVwQnV0dG9uQ2VsbCogcG9wdXBCdXR0b24oKSBjb25zdDsKLSAgICAgICAgTlNT
ZWFyY2hGaWVsZENlbGwqIHNlYXJjaCgpIGNvbnN0OwotICAgICAgICBOU01lbnUqIHNlYXJjaE1l
bnVUZW1wbGF0ZSgpIGNvbnN0OwotICAgICAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRodW1iSG9y
aXpvbnRhbCgpIGNvbnN0OwotICAgICAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRodW1iVmVydGlj
YWwoKSBjb25zdDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmV0YWluUHRyPE5T
QnV0dG9uQ2VsbD4gbV9jaGVja2JveDsKLSAgICAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNCdXR0
b25DZWxsPiBtX3JhZGlvOwotICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxOU0J1dHRvbkNlbGw+
IG1fYnV0dG9uOwotICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxOU1BvcFVwQnV0dG9uQ2VsbD4g
bV9wb3B1cEJ1dHRvbjsKLSAgICAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNTZWFyY2hGaWVsZENl
bGw+IG1fc2VhcmNoOwotICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxOU01lbnU+IG1fc2VhcmNo
TWVudVRlbXBsYXRlOwotICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxOU1NsaWRlckNlbGw+IG1f
c2xpZGVyVGh1bWJIb3Jpem9udGFsOwotICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxOU1NsaWRl
ckNlbGw+IG1fc2xpZGVyVGh1bWJWZXJ0aWNhbDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgICAgICBi
b29sIG1faXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkOwotICAgICAgICBib29sIG1faXNT
bGlkZXJUaHVtYlZlcnRpY2FsUHJlc3NlZDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJl
YShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICAgICAgbXV0YWJs
ZSBIYXNoTWFwPGludCwgUkdCQTMyPiBtX3N5c3RlbUNvbG9yQ2FjaGU7CisgICAgdmlydHVhbCBi
b29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owog
Ci0gICAgICAgIFJldGFpblB0cjxXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZl
cj4gbV9ub3RpZmljYXRpb25PYnNlcnZlcjsKLSAgICB9OworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1
dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRl
clRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZp
cnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisjaWYg
RU5BQkxFKFZJREVPKQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVy
VGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFUaW1lUmVtYWluaW5nKFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCisgICAgLy8gTWVkaWEg
Y29udHJvbHMKKyAgICB2aXJ0dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0
KCk7CiAjZW5kaWYKKworcHJpdmF0ZToKKyAgICBSZW5kZXJUaGVtZUNocm9taXVtTWFjKCk7Cisg
ICAgdmlydHVhbCB+UmVuZGVyVGhlbWVDaHJvbWl1bU1hYygpOworCisgICAgSW50UmVjdCBpbmZs
YXRlUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IGludCogbWFyZ2lu
cywgZmxvYXQgem9vbUxldmVsID0gMS4wZikgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgY29udmVy
dFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3Qg
UmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBj
b25zdCBJbnRSZWN0JiByKSBjb25zdDsKKyAgICAKKyAgICAvLyBHZXQgdGhlIGNvbnRyb2wgc2l6
ZSBiYXNlZCBvZmYgdGhlIGZvbnQuICBVc2VkIGJ5IHNvbWUgb2YgdGhlIGNvbnRyb2xzIChsaWtl
IGJ1dHRvbnMpLgorICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KFJlbmRlclN0
eWxlKikgY29uc3Q7CisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQo
UmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRyb2xTaXplKE5TQ2VsbCosIGNv
bnN0IEludFNpemUqIHNpemVzLCBjb25zdCBJbnRTaXplJiBtaW5TaXplLCBmbG9hdCB6b29tTGV2
ZWwgPSAxLjBmKTsKKyAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSosIGNvbnN0
IEludFNpemUqIHNpemVzKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JGb250KFJlbmRlclN0
eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIEludFNpemUgc2l6ZUZvclN5
c3RlbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CisgICAg
dm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVBY3RpdmVTdGF0ZShO
U0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0
ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUVuYWJsZWRT
dGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUZvY3Vz
ZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZVBy
ZXNzZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKworICAgIC8vIEhlbHBl
cnMgZm9yIGFkanVzdGluZyBhcHBlYXJhbmNlIGFuZCBmb3IgcGFpbnRpbmcKKworICAgIHZvaWQg
c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVj
dCYpOworICAgIGNvbnN0IEludFNpemUqIHBvcHVwQnV0dG9uU2l6ZXMoKSBjb25zdDsKKyAgICBj
b25zdCBpbnQqIHBvcHVwQnV0dG9uTWFyZ2lucygpIGNvbnN0OworICAgIGNvbnN0IGludCogcG9w
dXBCdXR0b25QYWRkaW5nKE5TQ29udHJvbFNpemUpIGNvbnN0OworICAgIHZvaWQgcGFpbnRNZW51
TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICBjb25zdCBJbnRTaXplKiBtZW51TGlzdFNp
emVzKCkgY29uc3Q7CisKKyAgICBjb25zdCBJbnRTaXplKiBzZWFyY2hGaWVsZFNpemVzKCkgY29u
c3Q7CisgICAgY29uc3QgSW50U2l6ZSogY2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdDsKKyAgICBj
b25zdCBJbnRTaXplKiByZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25zdDsKKyAgICB2b2lkIHNldFNl
YXJjaENlbGxTdGF0ZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBz
ZXRTZWFyY2hGaWVsZFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICAKKyAgICBOU1BvcFVw
QnV0dG9uQ2VsbCogcG9wdXBCdXR0b24oKSBjb25zdDsKKyAgICBOU1NlYXJjaEZpZWxkQ2VsbCog
c2VhcmNoKCkgY29uc3Q7CisgICAgTlNNZW51KiBzZWFyY2hNZW51VGVtcGxhdGUoKSBjb25zdDsK
KyAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRodW1iSG9yaXpvbnRhbCgpIGNvbnN0OworICAgIE5T
U2xpZGVyQ2VsbCogc2xpZGVyVGh1bWJWZXJ0aWNhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAg
IG11dGFibGUgUmV0YWluUHRyPE5TUG9wVXBCdXR0b25DZWxsPiBtX3BvcHVwQnV0dG9uOworICAg
IG11dGFibGUgUmV0YWluUHRyPE5TU2VhcmNoRmllbGRDZWxsPiBtX3NlYXJjaDsKKyAgICBtdXRh
YmxlIFJldGFpblB0cjxOU01lbnU+IG1fc2VhcmNoTWVudVRlbXBsYXRlOworICAgIG11dGFibGUg
UmV0YWluUHRyPE5TU2xpZGVyQ2VsbD4gbV9zbGlkZXJUaHVtYkhvcml6b250YWw7CisgICAgbXV0
YWJsZSBSZXRhaW5QdHI8TlNTbGlkZXJDZWxsPiBtX3NsaWRlclRodW1iVmVydGljYWw7CisKKyAg
ICBib29sIG1faXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkOworICAgIGJvb2wgbV9pc1Ns
aWRlclRodW1iVmVydGljYWxQcmVzc2VkOworCisgICAgbXV0YWJsZSBIYXNoTWFwPGludCwgUkdC
QTMyPiBtX3N5c3RlbUNvbG9yQ2FjaGU7CisKKyAgICBSZXRhaW5QdHI8V2ViQ29yZVJlbmRlclRo
ZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXI+IG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZUNocm9taXVtTWFj
X2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQko
cmV2aXNpb24gNDgzMTQpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2ds
ZSwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDI1ICsxOCwxNiBAQAogICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCiAgKi8KIAotLy8gRklYTUU6IHdlIHN0aWxsIG5lZWQgdG8gZmlndXJl
IG91dCBpZiBwYXNzaW5nIGEgbnVsbCB2aWV3IHRvIHRoZSBjZWxsCi0vLyBkcmF3aW5nIHJvdXRp
bmVzIHdpbGwgd29yay4gSSBleHBlY3Qgbm90LCBhbmQgaWYgdGhhdCdzIHRoZSBjYXNlIHdlJ2xs
IGhhdmUKLS8vIHRvIGZpZ3VyZSBvdXQgc29tZXRoaW5nIGVsc2UuIEZvciBub3csIGF0IGxlYXN0
IGxlYXZlIHRoZSBsaW5lcyBjb21tZW50ZWQKLS8vIGluLCBidXQgdGhlIHByb2N1cmVtZW50IG9m
IHRoZSB2aWV3IGlmIDAnZC4KLQogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJSZW5kZXJU
aGVtZUNocm9taXVtTWFjLmgiCiAKLSNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KLSNpbXBvcnQg
PENvY29hL0NvY29hLmg+Ci0jaW1wb3J0IDxtYXRoLmg+Ci0KICNpbXBvcnQgIkJpdG1hcEltYWdl
LmgiCiAjaW1wb3J0ICJDaHJvbWl1bUJyaWRnZS5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNp
bXBvcnQgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbXBvcnQgIkNTU1ZhbHVlS2V5d29yZHMuaCIK
KyNpbXBvcnQgIkRvY3VtZW50LmgiCiAjaW1wb3J0ICJFbGVtZW50LmgiCi0jaW1wb3J0ICJGb3Vu
ZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2ltcG9ydCAiSFRNTElucHV0RWxlbWVudC5oIgpAQCAtNTAsOSArNDAsMTMg
QEAKICNpbXBvcnQgIlJlbmRlclNsaWRlci5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2lt
cG9ydCAiU2hhcmVkQnVmZmVyLmgiCi0jaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCiAjaW1wb3J0ICJX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0ICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5o
IgorI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgorI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KICNp
bXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bXBvcnQgPG1hdGguaD4KIAogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiB0eXBlZGVmIGludCBO
U0ludGVnZXI7CkBAIC02MSw2ICs1NSwyMyBAQCB0eXBlZGVmIHVuc2lnbmVkIE5TVUludGVnZXI7
CiAKIHVzaW5nIHN0ZDo6bWluOwogCisvLyBUaGlzIGZpbGUgKGFuZCBpdHMgYXNzb2NpYXRlZCAu
aCBmaWxlKSBpcyBhIGNsb25lIG9mIFJlbmRlclRoZW1lTWFjLm1tLgorLy8gQmVjYXVzZSB0aGUg
b3JpZ2luYWwgZmlsZSBpcyBkZXNpZ25lZCB0byBydW4gaW4tcHJvY2VzcyBpbnNpZGUgYSBDb2Nv
YSB2aWV3LAorLy8gd2UgbXVzdCBtYWludGFpbiBhIGZvcmsuIFBsZWFzZSBtYWludGFpbiB0aGlz
IGZpbGUgYnkgcGVyZm9ybWluZyBwYXJhbGxlbAorLy8gY2hhbmdlcyB0byBpdC4KKy8vCisvLyBU
aGUgb25seSBjaGFuZ2VzIGZyb20gUmVuZGVyVGhlbWVNYWMgc2hvdWxkIGJlOgorLy8gLSBUaGUg
Y2xhc3NuYW1lIGNoYW5nZSBmcm9tIFJlbmRlclRoZW1lTWFjIHRvIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWMuCisvLyAtIFRoZSBpbnRyb2R1Y3Rpb24gb2YgUlRDTUZsaXBwZWRWaWV3IGFuZCBGbGlw
cGVkVmlldygpIGFuZCBpdHMgdXNlIGFzIHRoZQorLy8gICBwYXJlbnQgdmlldyBmb3IgY2VsbCBy
ZW5kZXJpbmcuCisvLyAtIEluIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSwgdGhlIHVzZSBvZiBD
aHJvbWl1bUJyaWRnZSB0byBkZXRlcm1pbmUgaWYKKy8vICAgd2UncmUgaW4gbGF5b3V0IHRlc3Qg
bW9kZS4KKy8vIC0gdXBkYXRlQWN0aXZlU3RhdGUoKSBhbmQgaXRzIHVzZSB0byB1cGRhdGUgdGhl
IGNlbGxzJyB2aXN1YWwgYXBwZWFyYW5jZS4KKy8vCisvLyBGb3IgYWxsIG90aGVyIGRpZmZlcmVu
Y2VzLCBpZiBpdCB3YXMgaW50cm9kdWNlZCBpbiB0aGlzIGZpbGUsIHRoZW4gdGhlCisvLyBtYWlu
dGFpbmVyIGZvcmdvdCB0byBpbmNsdWRlIGl0IGluIHRoZSBsaXN0OyBvdGhlcndpc2UgaXQgaXMg
YW4gdXBkYXRlIHRoYXQKKy8vIHNob3VsZCBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIGZpbGUg
YnV0IHdhcyBub3QuCisKIC8vIFRoZSBtZXRob2RzIGluIHRoaXMgZmlsZSBhcmUgc3BlY2lmaWMg
dG8gdGhlIE1hYyBPUyBYIHBsYXRmb3JtLgogCiAvLyBGSVhNRTogVGhlIHBsYXRmb3JtLWluZGVw
ZW5kZW50IGNvZGUgaW4gdGhpcyBjbGFzcyBzaG91bGQgYmUgZmFjdG9yZWQgb3V0IGFuZCBtZXJn
ZWQgd2l0aCBSZW5kZXJUaGVtZVNhZmFyaS4gCkBAIC04NSw0OCArOTYsNjYgQEAgdXNpbmcgc3Rk
OjptaW47CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpc3lzdGVtQ29sb3JzRGlkQ2hh
bmdlOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZClzeXN0ZW1Db2xvcnNE
aWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopdW51c2VkTm90aWZpY2F0aW9uCiB7Ci0gICAgQVNT
RVJUKFtbbm90aWZpY2F0aW9uIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpOU1N5c3RlbUNvbG9yc0Rp
ZENoYW5nZU5vdGlmaWNhdGlvbl0pOworICAgIEFTU0VSVF9VTlVTRUQodW51c2VkTm90aWZpY2F0
aW9uLCBbW3VudXNlZE5vdGlmaWNhdGlvbiBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6TlNTeXN0ZW1D
b2xvcnNEaWRDaGFuZ2VOb3RpZmljYXRpb25dKTsKICAgICBfdGhlbWUtPnBsYXRmb3JtQ29sb3Jz
RGlkQ2hhbmdlKCk7CiB9CiAKIEBlbmQKIAorQGludGVyZmFjZSBSVENNRmxpcHBlZFZpZXcgOiBO
U1ZpZXcKK3t9CisKKy0gKEJPT0wpaXNGbGlwcGVkOworLSAoTlNUZXh0ICopY3VycmVudEVkaXRv
cjsKKworQGVuZAorCitAaW1wbGVtZW50YXRpb24gUlRDTUZsaXBwZWRWaWV3CisKKy0gKEJPT0wp
aXNGbGlwcGVkIHsKKyAgICByZXR1cm4gW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4
dF0gaXNGbGlwcGVkXTsKK30KKworLSAoTlNUZXh0ICopY3VycmVudEVkaXRvciB7CisgICAgcmV0
dXJuIG5pbDsKK30KKworQGVuZAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVz
cGFjZSBIVE1MTmFtZXM7CiAKIGVudW0gewotICAgIFRvcE1hcmdpbiwKLSAgICBSaWdodE1hcmdp
biwKLSAgICBCb3R0b21NYXJnaW4sCi0gICAgTGVmdE1hcmdpbgorICAgIHRvcE1hcmdpbiwKKyAg
ICByaWdodE1hcmdpbiwKKyAgICBib3R0b21NYXJnaW4sCisgICAgbGVmdE1hcmdpbgogfTsKIAog
ZW51bSB7Ci0gICAgVG9wUGFkZGluZywKLSAgICBSaWdodFBhZGRpbmcsCi0gICAgQm90dG9tUGFk
ZGluZywKLSAgICBMZWZ0UGFkZGluZworICAgIHRvcFBhZGRpbmcsCisgICAgcmlnaHRQYWRkaW5n
LAorICAgIGJvdHRvbVBhZGRpbmcsCisgICAgbGVmdFBhZGRpbmcKIH07CiAKLS8vIEluIG91ciBN
YWMgcG9ydCwgd2UgZG9uJ3QgZGVmaW5lIFBMQVRGT1JNKE1BQykgYW5kIHRodXMgZG9uJ3QgcGlj
ayB1cCB0aGUKLS8vIHxvcGVyYXRvciBOU1JlY3QoKXwgb24gV2ViQ29yZTo6SW50UmVjdCBhbmQg
RmxvYXRSZWN0LiBUaGlzIHN1YnN0aXR1ZXMgZm9yCi0vLyB0aGF0IG1pc3NpbmcgY29udmVyc2lv
biBvcGVyYXRvci4KLU5TUmVjdCBJbnRSZWN0VG9OU1JlY3QoY29uc3QgSW50UmVjdCAmIHJlY3Qp
Ci17Ci0gICAgcmV0dXJuIE5TTWFrZVJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRo
KCksIHJlY3QuaGVpZ2h0KCkpOwotfQotCi1OU1JlY3QgRmxvYXRSZWN0VG9OU1JlY3QoY29uc3Qg
RmxvYXRSZWN0ICYgcmVjdCkKKy8vIEluIFNub3cgTGVvcGFyZCwgbWFueSBjZWxscyBvbmx5IGNo
ZWNrIHRvIHNlZSBpZiB0aGUgdmlldyB0aGV5J3JlIHBhc3NlZCBpcworLy8gZmxpcHBlZCwgYW5k
IGlmIGEgbmlsIHZpZXcgaXMgcGFzc2VkLCBuZWdsZWN0IHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50
CisvLyBncmFwaGljcyBjb250ZXh0IGlzIGZsaXBwZWQuIFRodXMgd2UgcGFzcyBhIHNoYW0gdmll
dyB0byB0aGVtLCBvbmUgd2hvc2UKKy8vIGZsaXBwZWQgc3RhdGUganVzdCByZWZsZWN0cyB0aGUg
c3RhdGUgb2YgdGhlIGNvbnRleHQuCitOU1ZpZXcqIEZsaXBwZWRWaWV3KCkKIHsKLSAgICByZXR1
cm4gTlNNYWtlUmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7CisgICAgc3RhdGljIE5TVmlldyogdmlldyA9IFtbUlRDTUZsaXBwZWRWaWV3IGFsbG9j
XSBpbml0XTsKKyAgICByZXR1cm4gdmlldzsKIH0KIAotSW50UmVjdCBOU1JlY3RUb0ludFJlY3Qo
Y29uc3QgTlNSZWN0ICYgcmVjdCkKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1l
Ojp0aGVtZUZvclBhZ2UoUGFnZSopCiB7Ci0gICAgcmV0dXJuIEludFJlY3QocmVjdC5vcmlnaW4u
eCwgcmVjdC5vcmlnaW4ueSwgcmVjdC5zaXplLndpZHRoLCByZWN0LnNpemUuaGVpZ2h0KTsKKyAg
ICBzdGF0aWMgUmVuZGVyVGhlbWUqIHJ0ID0gUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y3JlYXRl
KCkucmVsZWFzZVJlZigpOworICAgIHJldHVybiBydDsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJU
aGVtZT4gUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y3JlYXRlKCkKQEAgLTEzNCwxMiArMTYzLDYg
QEAgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVDaHJvbQogICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYyk7CiB9CiAKLVBhc3NSZWZQdHI8UmVu
ZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSogcGFnZSkKLXsKLSAgICBz
dGF0aWMgUmVuZGVyVGhlbWUqIHJ0ID0gUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y3JlYXRlKCku
cmVsZWFzZVJlZigpOwotICAgIHJldHVybiBydDsKLX0KLQogUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYygpCiAgICAgOiBtX2lzU2xpZGVyVGh1bWJIb3Jpem9u
dGFsUHJlc3NlZChmYWxzZSkKICAgICAsIG1faXNTbGlkZXJUaHVtYlZlcnRpY2FsUHJlc3NlZChm
YWxzZSkKQEAgLTE3NCw2ICsxOTcsMTYgQEAgQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cGxhdGZvcm1BYwogICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2Nv
bG9yIHJlZENvbXBvbmVudF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIGdyZWVu
Q29tcG9uZW50XSksIHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3IgYmx1ZUNvbXBvbmVu
dF0pKTsKIH0KIAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1BY3RpdmVM
aXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29s
b3I6OndoaXRlOworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUlu
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIENvbG9yOjpibGFjazsKK30KKwogQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxh
dGZvcm1Gb2N1c1JpbmdDb2xvcigpIGNvbnN0CiB7CiAgICAgaWYgKENocm9taXVtQnJpZGdlOjps
YXlvdXRUZXN0TW9kZSgpKQpAQCAtMTgyLDYgKzIxNSwxMSBAQCBDb2xvciBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwbGF0Zm9ybUZvCiAgICAgcmV0dXJuIHN5c3RlbUNvbG9yKENTU1ZhbHVlV2Vi
a2l0Rm9jdXNSaW5nQ29sb3IpOwogfQogCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpw
bGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsK
K30KKwogc3RhdGljIEZvbnRXZWlnaHQgdG9Gb250V2VpZ2h0KE5TSW50ZWdlciBhcHBLaXRGb250
V2VpZ2h0KQogewogICAgIEFTU0VSVChhcHBLaXRGb250V2VpZ2h0ID4gMCAmJiBhcHBLaXRGb250
V2VpZ2h0IDwgMTUpOwpAQCAtMjExLDUxICsyNDksNTEgQEAgc3RhdGljIEZvbnRXZWlnaHQgdG9G
b250V2VpZ2h0KE5TSW50ZWdlcgogCiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnN5c3Rl
bUZvbnQoaW50IGNzc1ZhbHVlSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBj
b25zdAogewotICAgIHN0YXRpYyBGb250RGVzY3JpcHRpb24gc3lzdGVtRm9udDsKLSAgICBzdGF0
aWMgRm9udERlc2NyaXB0aW9uIHNtYWxsU3lzdGVtRm9udDsKLSAgICBzdGF0aWMgRm9udERlc2Ny
aXB0aW9uIG1lbnVGb250OwotICAgIHN0YXRpYyBGb250RGVzY3JpcHRpb24gbGFiZWxGb250Owot
ICAgIHN0YXRpYyBGb250RGVzY3JpcHRpb24gbWluaUNvbnRyb2xGb250OwotICAgIHN0YXRpYyBG
b250RGVzY3JpcHRpb24gc21hbGxDb250cm9sRm9udDsKLSAgICBzdGF0aWMgRm9udERlc2NyaXB0
aW9uIGNvbnRyb2xGb250OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9u
LCBzeXN0ZW1Gb250LCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRp
b24sIHNtYWxsU3lzdGVtRm9udCwgKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERl
c2NyaXB0aW9uLCBtZW51Rm9udCwgKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERl
c2NyaXB0aW9uLCBsYWJlbEZvbnQsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRE
ZXNjcmlwdGlvbiwgbWluaUNvbnRyb2xGb250LCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChGb250RGVzY3JpcHRpb24sIHNtYWxsQ29udHJvbEZvbnQsICgpKTsKKyAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgY29udHJvbEZvbnQsICgpKTsKIAogICAgIEZvbnRE
ZXNjcmlwdGlvbiogY2FjaGVkRGVzYzsKICAgICBOU0ZvbnQqIGZvbnQgPSBuaWw7CiAgICAgc3dp
dGNoIChjc3NWYWx1ZUlkKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwdGlvbjoKLSAgICAg
ICAgY2FjaGVkRGVzYyA9ICZzbWFsbFN5c3RlbUZvbnQ7Ci0gICAgICAgIGlmICghc21hbGxTeXN0
ZW1Gb250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0
ZW1Gb250T2ZTaXplOltOU0ZvbnQgc21hbGxTeXN0ZW1Gb250U2l6ZV1dOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIENTU1ZhbHVlTWVudToKLSAgICAgICAgY2FjaGVkRGVzYyA9ICZtZW51Rm9u
dDsKLSAgICAgICAgaWYgKCFtZW51Rm9udC5pc0Fic29sdXRlU2l6ZSgpKQotICAgICAgICAgICAg
Zm9udCA9IFtOU0ZvbnQgbWVudUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZV1dOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlU3RhdHVzQmFyOgotICAgICAgICBjYWNo
ZWREZXNjID0gJmxhYmVsRm9udDsKLSAgICAgICAgaWYgKCFsYWJlbEZvbnQuaXNBYnNvbHV0ZVNp
emUoKSkKLSAgICAgICAgICAgIGZvbnQgPSBbTlNGb250IGxhYmVsRm9udE9mU2l6ZTpbTlNGb250
IGxhYmVsRm9udFNpemVdXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dE1pbmlDb250cm9sOgotICAgICAgICBjYWNoZWREZXNjID0gJm1pbmlDb250cm9sRm9udDsKLSAg
ICAgICAgaWYgKCFtaW5pQ29udHJvbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKLSAgICAgICAgICAg
IGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZv
ckNvbnRyb2xTaXplOk5TTWluaUNvbnRyb2xTaXplXV07Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2w6Ci0gICAgICAgIGNhY2hlZERlc2MgPSAmc21h
bGxDb250cm9sRm9udDsKLSAgICAgICAgaWYgKCFzbWFsbENvbnRyb2xGb250LmlzQWJzb2x1dGVT
aXplKCkpCi0gICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0Zv
bnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1NtYWxsQ29udHJvbFNpemVdXTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENvbnRyb2w6Ci0gICAgICAgIGNh
Y2hlZERlc2MgPSAmY29udHJvbEZvbnQ7Ci0gICAgICAgIGlmICghY29udHJvbEZvbnQuaXNBYnNv
bHV0ZVNpemUoKSkKLSAgICAgICAgICAgIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6
W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOk5TUmVndWxhckNvbnRyb2xTaXpl
XV07Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNhY2hlZERlc2MgPSAm
c3lzdGVtRm9udDsKLSAgICAgICAgaWYgKCFzeXN0ZW1Gb250LmlzQWJzb2x1dGVTaXplKCkpCi0g
ICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVt
Rm9udFNpemVdXTsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwdGlvbjoKKyAgICAgICAg
ICAgIGNhY2hlZERlc2MgPSAmc21hbGxTeXN0ZW1Gb250OworICAgICAgICAgICAgaWYgKCFzbWFs
bFN5c3RlbUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05T
Rm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc21hbGxTeXN0ZW1Gb250U2l6ZV1dOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVNZW51OgorICAgICAgICAgICAg
Y2FjaGVkRGVzYyA9ICZtZW51Rm9udDsKKyAgICAgICAgICAgIGlmICghbWVudUZvbnQuaXNBYnNv
bHV0ZVNpemUoKSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBtZW51Rm9udE9mU2l6
ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplXV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZVN0YXR1c0JhcjoKKyAgICAgICAgICAgIGNhY2hlZERlc2MgPSAmbGFiZWxG
b250OworICAgICAgICAgICAgaWYgKCFsYWJlbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAg
ICAgICAgICAgICBmb250ID0gW05TRm9udCBsYWJlbEZvbnRPZlNpemU6W05TRm9udCBsYWJlbEZv
bnRTaXplXV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dE1pbmlDb250cm9sOgorICAgICAgICAgICAgY2FjaGVkRGVzYyA9ICZtaW5pQ29udHJvbEZvbnQ7
CisgICAgICAgICAgICBpZiAoIW1pbmlDb250cm9sRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAg
ICAgICAgICAgICAgIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0
ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOk5TTWluaUNvbnRyb2xTaXplXV07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbDoKKyAgICAg
ICAgICAgIGNhY2hlZERlc2MgPSAmc21hbGxDb250cm9sRm9udDsKKyAgICAgICAgICAgIGlmICgh
c21hbGxDb250cm9sRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgICAgIGZvbnQg
PSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRy
b2xTaXplOk5TU21hbGxDb250cm9sU2l6ZV1dOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgorICAgICAgICAgICAgY2FjaGVkRGVzYyA9ICZj
b250cm9sRm9udDsKKyAgICAgICAgICAgIGlmICghY29udHJvbEZvbnQuaXNBYnNvbHV0ZVNpemUo
KSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0Zv
bnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1JlZ3VsYXJDb250cm9sU2l6ZV1dOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjYWNoZWRE
ZXNjID0gJnN5c3RlbUZvbnQ7CisgICAgICAgICAgICBpZiAoIXN5c3RlbUZvbnQuaXNBYnNvbHV0
ZVNpemUoKSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXpl
OltOU0ZvbnQgc3lzdGVtRm9udFNpemVdXTsKICAgICB9CiAKICAgICBpZiAoZm9udCkgewpAQCAt
MjcyLDcgKzMxMCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3lzdGVtRm9udCgK
IAogc3RhdGljIFJHQkEzMiBjb252ZXJ0TlNDb2xvclRvQ29sb3IoTlNDb2xvciAqY29sb3IpCiB7
Ci0gICAgTlNDb2xvciAqY29sb3JJbkNvbG9yU3BhY2UgPSBbY29sb3IgY29sb3JVc2luZ0NvbG9y
U3BhY2VOYW1lOk5TQ2FsaWJyYXRlZFJHQkNvbG9yU3BhY2VdOworICAgIE5TQ29sb3IgKmNvbG9y
SW5Db2xvclNwYWNlID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJH
QkNvbG9yU3BhY2VdOwogICAgIGlmIChjb2xvckluQ29sb3JTcGFjZSkgewogICAgICAgICBzdGF0
aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1Ni4wLCAwLjApOwogICAg
ICAgICByZXR1cm4gbWFrZVJHQihzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRmFjdG9yICogW2NvbG9y
SW5Db2xvclNwYWNlIHJlZENvbXBvbmVudF0pLApAQCAtMjkyLDcgKzMzMCw3IEBAIHN0YXRpYyBS
R0JBMzIgY29udmVydE5TQ29sb3JUb0NvbG9yKE5TQ28KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXNQ
ZXJQaXhlbDo0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQWxwaGE6WUVTCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNQbGFuYXI6Tk8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlTmFtZTpO
U0NhbGlicmF0ZWRSR0JDb2xvclNwYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZU5hbWU6
TlNEZXZpY2VSR0JDb2xvclNwYWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNQZXJSb3c6NAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYml0c1BlclBpeGVsOjMyXTsKIApAQCAtMzE5LDcgKzM1Nyw3IEBA
IHN0YXRpYyBSR0JBMzIgbWVudUJhY2tncm91bmRDb2xvcigpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1w
bGVzUGVyUGl4ZWw6NAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0FscGhhOllFUwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlzUGxhbmFyOk5PCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZU5h
bWU6TlNDYWxpYnJhdGVkUkdCQ29sb3JTcGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2VO
YW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUGVyUm93
OjQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJpdHNQZXJQaXhlbDozMl07CiAKQEAgLTM1MSwxMDEgKzM4
OSwxMDEgQEAgQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3lzdGVtQ29sbwogICAgIAog
ICAgIENvbG9yIGNvbG9yOwogICAgIHN3aXRjaCAoY3NzVmFsdWVJZCkgewotICAgIGNhc2UgQ1NT
VmFsdWVBY3RpdmVib3JkZXI6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9y
KFtOU0NvbG9yIGtleWJvYXJkRm9jdXNJbmRpY2F0b3JDb2xvcl0pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENTU1ZhbHVlQWN0aXZlY2FwdGlvbjoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0
TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igd2luZG93RnJhbWVUZXh0Q29sb3JdKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUFwcHdvcmtzcGFjZToKLSAgICAgICAgY29sb3IgPSBj
b252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgaGVhZGVyQ29sb3JdKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUJhY2tncm91bmQ6Ci0gICAgICAgIC8vIFVzZSB0aGVtZSBp
bmRlcGVuZGVudCBkZWZhdWx0Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVCdXR0
b25mYWNlOgotICAgICAgICAvLyBXZSB1c2UgdGhpcyB2YWx1ZSBpbnN0ZWFkIG9mIE5TQ29sb3In
cyBjb250cm9sQ29sb3IgdG8gYXZvaWQgd2Vic2l0ZSBpbmNvbXBhdGliaWxpdGllcy4KLSAgICAg
ICAgLy8gV2UgbWF5IHdhbnQgdG8gY2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBOU0NvbG9yIGluIGZ1
dHVyZS4KLSAgICAgICAgY29sb3IgPSAweEZGQzBDMEMwOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1ZhbHVlQnV0dG9uaGlnaGxpZ2h0OgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0Nv
bG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sSGlnaGxpZ2h0Q29sb3JdKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnNoYWRvdzoKLSAgICAgICAgY29sb3IgPSBjb252
ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbFNoYWRvd0NvbG9yXSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVCdXR0b250ZXh0OgotICAgICAgICBjb2xvciA9IGNv
bnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sVGV4dENvbG9yXSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVDYXB0aW9udGV4dDoKLSAgICAgICAgY29sb3IgPSBj
b252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENvbG9yXSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ1NTVmFsdWVHcmF5dGV4dDoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlND
b2xvclRvQ29sb3IoW05TQ29sb3IgZGlzYWJsZWRDb250cm9sVGV4dENvbG9yXSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVIaWdobGlnaHQ6Ci0gICAgICAgIGNvbG9yID0gY29u
dmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHNlbGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcl0p
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlSGlnaGxpZ2h0dGV4dDoKLSAgICAg
ICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2VsZWN0ZWRUZXh0Q29s
b3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUluYWN0aXZlYm9yZGVyOgot
ICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sQmFj
a2dyb3VuZENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2
ZWNhcHRpb246Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9y
IGNvbnRyb2xCYWNrZ3JvdW5kQ29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NW
YWx1ZUluYWN0aXZlY2FwdGlvbnRleHQ6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JU
b0NvbG9yKFtOU0NvbG9yIHRleHRDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1ZhbHVlSW5mb2JhY2tncm91bmQ6Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRp
bmcgTlNDb2xvciBmb3IgdGhpcyBzbyB3ZSB1c2UgYSBoYXJkIGNvZGVkIHZhbHVlLgotICAgICAg
ICBjb2xvciA9IDB4RkZGQkZDQzU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVJ
bmZvdGV4dDoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Ig
dGV4dENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVNZW51OgotICAg
ICAgICBjb2xvciA9IG1lbnVCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NWYWx1ZU1lbnV0ZXh0OgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9D
b2xvcihbTlNDb2xvciBzZWxlY3RlZE1lbnVJdGVtVGV4dENvbG9yXSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ1NTVmFsdWVTY3JvbGxiYXI6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5T
Q29sb3JUb0NvbG9yKFtOU0NvbG9yIHNjcm9sbEJhckNvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTVmFsdWVUZXh0OgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9D
b2xvcihbTlNDb2xvciB0ZXh0Q29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NW
YWx1ZVRocmVlZGRhcmtzaGFkb3c6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0Nv
bG9yKFtOU0NvbG9yIGNvbnRyb2xEYXJrU2hhZG93Q29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NWYWx1ZVRocmVlZHNoYWRvdzoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlND
b2xvclRvQ29sb3IoW05TQ29sb3Igc2hhZG93Q29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NWYWx1ZVRocmVlZGZhY2U6Ci0gICAgICAgIC8vIFdlIHVzZSB0aGlzIHZhbHVlIGlu
c3RlYWQgb2YgTlNDb2xvcidzIGNvbnRyb2xDb2xvciB0byBhdm9pZCB3ZWJzaXRlIGluY29tcGF0
aWJpbGl0aWVzLgotICAgICAgICAvLyBXZSBtYXkgd2FudCB0byBjaGFuZ2UgdGhpcyB0byB1c2Ug
dGhlIE5TQ29sb3IgaW4gZnV0dXJlLgotICAgICAgICBjb2xvciA9IDB4RkZDMEMwQzA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRoaWdobGlnaHQ6Ci0gICAgICAgIGNv
bG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGhpZ2hsaWdodENvbG9yXSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRsaWdodHNoYWRvdzoKLSAgICAg
ICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbExpZ2h0SGln
aGxpZ2h0Q29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZv
Y3VzUmluZ0NvbG9yOgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlND
b2xvciBrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NWYWx1ZVdpbmRvdzoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29s
b3IoW05TQ29sb3Igd2luZG93QmFja2dyb3VuZENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQ1NTVmFsdWVXaW5kb3dmcmFtZToKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xv
clRvQ29sb3IoW05TQ29sb3Igd2luZG93RnJhbWVDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENTU1ZhbHVlV2luZG93dGV4dDoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xv
clRvQ29sb3IoW05TQ29sb3Igd2luZG93RnJhbWVUZXh0Q29sb3JdKTsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTVmFsdWVBY3RpdmVib3JkZXI6CisgICAgICAgICAgICBjb2xvciA9
IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29s
b3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlQWN0aXZlY2Fw
dGlvbjoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9y
IHdpbmRvd0ZyYW1lVGV4dENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUFwcHdvcmtzcGFjZToKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29s
b3JUb0NvbG9yKFtOU0NvbG9yIGhlYWRlckNvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZUJhY2tncm91bmQ6CisgICAgICAgICAgICAvLyBVc2UgdGhlbWUg
aW5kZXBlbmRlbnQgZGVmYXVsdAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVCdXR0b25mYWNlOgorICAgICAgICAgICAgLy8gV2UgdXNlIHRoaXMgdmFsdWUgaW5zdGVh
ZCBvZiBOU0NvbG9yJ3MgY29udHJvbENvbG9yIHRvIGF2b2lkIHdlYnNpdGUgaW5jb21wYXRpYmls
aXRpZXMuCisgICAgICAgICAgICAvLyBXZSBtYXkgd2FudCB0byBjaGFuZ2UgdGhpcyB0byB1c2Ug
dGhlIE5TQ29sb3IgaW4gZnV0dXJlLgorICAgICAgICAgICAgY29sb3IgPSAweEZGQzBDMEMwOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVCdXR0b25oaWdobGlnaHQ6
CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250
cm9sSGlnaGxpZ2h0Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1ZhbHVlQnV0dG9uc2hhZG93OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRv
Q29sb3IoW05TQ29sb3IgY29udHJvbFNoYWRvd0NvbG9yXSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6CisgICAgICAgICAgICBjb2xvciA9IGNv
bnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sVGV4dENvbG9yXSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgorICAgICAgICAg
ICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENvbG9yXSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUdyYXl0ZXh0OgorICAgICAg
ICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgZGlzYWJsZWRDb250
cm9sVGV4dENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZUhpZ2hsaWdodDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtO
U0NvbG9yIHNlbGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTVmFsdWVIaWdobGlnaHR0ZXh0OgorICAgICAgICAgICAgY29sb3Ig
PSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2VsZWN0ZWRUZXh0Q29sb3JdKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlSW5hY3RpdmVib3JkZXI6Cisg
ICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9s
QmFja2dyb3VuZENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZUluYWN0aXZlY2FwdGlvbjoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JU
b0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xCYWNrZ3JvdW5kQ29sb3JdKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlSW5hY3RpdmVjYXB0aW9udGV4dDoKKyAgICAgICAg
ICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHRleHRDb2xvcl0pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVJbmZvYmFja2dyb3VuZDoK
KyAgICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgTlNDb2xvciBmb3IgdGhp
cyBzbyB3ZSB1c2UgYSBoYXJkIGNvZGVkIHZhbHVlLgorICAgICAgICAgICAgY29sb3IgPSAweEZG
RkJGQ0M1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVJbmZvdGV4
dDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHRl
eHRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVNZW51
OgorICAgICAgICAgICAgY29sb3IgPSBtZW51QmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU1lbnV0ZXh0OgorICAgICAgICAgICAgY29s
b3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2VsZWN0ZWRNZW51SXRlbVRleHRD
b2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTY3JvbGxi
YXI6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBz
Y3JvbGxCYXJDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFs
dWVUZXh0OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29s
b3IgdGV4dENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZVRocmVlZGRhcmtzaGFkb3c6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9D
b2xvcihbTlNDb2xvciBjb250cm9sRGFya1NoYWRvd0NvbG9yXSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRocmVlZHNoYWRvdzoKKyAgICAgICAgICAgIGNvbG9y
ID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHNoYWRvd0NvbG9yXSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRocmVlZGZhY2U6CisgICAgICAgICAg
ICAvLyBXZSB1c2UgdGhpcyB2YWx1ZSBpbnN0ZWFkIG9mIE5TQ29sb3IncyBjb250cm9sQ29sb3Ig
dG8gYXZvaWQgd2Vic2l0ZSBpbmNvbXBhdGliaWxpdGllcy4KKyAgICAgICAgICAgIC8vIFdlIG1h
eSB3YW50IHRvIGNoYW5nZSB0aGlzIHRvIHVzZSB0aGUgTlNDb2xvciBpbiBmdXR1cmUuCisgICAg
ICAgICAgICBjb2xvciA9IDB4RkZDMEMwQzA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZVRocmVlZGhpZ2hsaWdodDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVy
dE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGhpZ2hsaWdodENvbG9yXSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRocmVlZGxpZ2h0c2hhZG93OgorICAgICAgICAg
ICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbExpZ2h0SGln
aGxpZ2h0Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVl
V2Via2l0Rm9jdXNSaW5nQ29sb3I6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9y
VG9Db2xvcihbTlNDb2xvciBrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlV2luZG93OgorICAgICAgICAgICAgY29s
b3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igd2luZG93QmFja2dyb3VuZENvbG9y
XSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdpbmRvd2ZyYW1l
OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igd2lu
ZG93RnJhbWVDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFs
dWVXaW5kb3d0ZXh0OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3Io
W05TQ29sb3Igd2luZG93RnJhbWVUZXh0Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
IH0KIAogICAgIGlmICghY29sb3IuaXNWYWxpZCgpKQpAQCAtNDU4LDcgKzQ5Niw3IEBAIENvbG9y
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnN5c3RlbUNvbG8KIH0KIAogYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBCb3JkZXJEYXRhJiBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBi
YWNrZ3JvdW5kQ29sb3IpIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENv
bG9yKSBjb25zdAogewogICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBh
cnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBhcnQgfHwgc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBMaXN0Ym94UGFydCkKICAgICAgICAgcmV0dXJuIHN0eWxlLT5ib3JkZXIoKSAh
PSBib3JkZXI7CkBAIC00NzMsNjIgKzUxMSwzMiBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OmlzQ29udHJvbFN0CiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQo
c3R5bGUsIGJvcmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIAotLy8gRklY
TUU6IFVzZSB0aGUgY29kZSBmcm9tIHRoZSBvbGQgdXBzdHJlYW0gdmVyc2lvbiwgYmVmb3JlIGl0
IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkgaW4gcjM3NzMxLgogdm9pZCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3Qq
IG8sIEludFJlY3QmIHIpCiB7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0eWxlKCktPmFw
cGVhcmFuY2UoKTsKKyAgICAKKyNpZiBVU0UoTkVXX1RIRU1FKQorICAgIHN3aXRjaCAocGFydCkg
eworICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAgY2FzZSBSYWRpb1BhcnQ6Cisg
ICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFy
dDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25Q
YXJ0OgorICAgICAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjphZGp1c3RSZXBhaW50UmVjdChv
LCByKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRp
ZgorCiAgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwog
Ci0gICAgc3dpdGNoIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIENoZWNr
Ym94UGFydDogewotICAgICAgICAvLyBTaW5jZSB3ZSBxdWVyeSB0aGUgcHJvdG90eXBlIGNlbGws
IHdlIG5lZWQgdG8gdXBkYXRlIGl0cyBzdGF0ZSB0byBtYXRjaC4KLSAgICAgICAgc2V0Q2hlY2ti
b3hDZWxsU3RhdGUobywgcik7Ci0KLSAgICAgICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBu
ZWVkZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0byBhY2Nv
bW1vZGF0ZSB0aGUgY2hlY2tib3gKLSAgICAgICAgLy8gc2hhZG93IiBhbmQgdGhlIGNoZWNrLiAg
V2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9mIHRoZSBib3VuZHMgb2YgdGhlIGNvbnRyb2wg
aW4gV2ViS2l0LgotICAgICAgICBJbnRTaXplIHNpemUgPSBjaGVja2JveFNpemVzKClbW2NoZWNr
Ym94KCkgY29udHJvbFNpemVdXTsKLSAgICAgICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQo
KSAqIHpvb21MZXZlbCk7Ci0gICAgICAgIHNpemUuc2V0V2lkdGgoc2l6ZS53aWR0aCgpICogem9v
bUxldmVsKTsKLSAgICAgICAgciA9IGluZmxhdGVSZWN0KHIsIHNpemUsIGNoZWNrYm94TWFyZ2lu
cygpLCB6b29tTGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBSYWRpb1Bh
cnQ6IHsKLSAgICAgICAgLy8gU2luY2Ugd2UgcXVlcnkgdGhlIHByb3RvdHlwZSBjZWxsLCB3ZSBu
ZWVkIHRvIHVwZGF0ZSBpdHMgc3RhdGUgdG8gbWF0Y2guCi0gICAgICAgIHNldFJhZGlvQ2VsbFN0
YXRlKG8sIHIpOwotCi0gICAgICAgIC8vIFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRv
IGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVkZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUg
dGhlIGNoZWNrYm94Ci0gICAgICAgIC8vIHNoYWRvdyIgYW5kIHRoZSBjaGVjay4gIFdlIGRvbid0
IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktp
dC4KLSAgICAgICAgSW50U2l6ZSBzaXplID0gcmFkaW9TaXplcygpW1tyYWRpbygpIGNvbnRyb2xT
aXplXV07Ci0gICAgICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwp
OwotICAgICAgICBzaXplLnNldFdpZHRoKHNpemUud2lkdGgoKSAqIHpvb21MZXZlbCk7Ci0gICAg
ICAgIHIgPSBpbmZsYXRlUmVjdChyLCBzaXplLCByYWRpb01hcmdpbnMoKSwgem9vbUxldmVsKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2Fz
ZSBEZWZhdWx0QnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6IHsKLSAgICAgICAgLy8g
U2luY2Ugd2UgcXVlcnkgdGhlIHByb3RvdHlwZSBjZWxsLCB3ZSBuZWVkIHRvIHVwZGF0ZSBpdHMg
c3RhdGUgdG8gbWF0Y2guCi0gICAgICAgIHNldEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKLQotICAg
ICAgICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRk
aW5nIGluY2x1ZGVkIGluIHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBjaGVja2JveAotICAg
ICAgICAvLyBzaGFkb3ciIGFuZCB0aGUgY2hlY2suICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBh
cnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBXZWJLaXQuCi0gICAgICAgIGlmIChb
YnV0dG9uKCkgYmV6ZWxTdHlsZV0gPT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkgewotICAgICAgICAg
ICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZXMoKVtbYnV0dG9uKCkgY29udHJvbFNpemVdXTsK
LSAgICAgICAgICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwot
ICAgICAgICAgICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwotICAgICAgICAgICAgciA9IGlu
ZmxhdGVSZWN0KHIsIHNpemUsIGJ1dHRvbk1hcmdpbnMoKSwgem9vbUxldmVsKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBNZW51bGlzdFBhcnQ6IHsKKyAgICBp
ZiAocGFydCA9PSBNZW51bGlzdFBhcnQpIHsKICAgICAgICAgc2V0UG9wdXBCdXR0b25DZWxsU3Rh
dGUobywgcik7CiAgICAgICAgIEludFNpemUgc2l6ZSA9IHBvcHVwQnV0dG9uU2l6ZXMoKVtbcG9w
dXBCdXR0b24oKSBjb250cm9sU2l6ZV1dOwogICAgICAgICBzaXplLnNldEhlaWdodChzaXplLmhl
aWdodCgpICogem9vbUxldmVsKTsKICAgICAgICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwog
ICAgICAgICByID0gaW5mbGF0ZVJlY3Qociwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCksIHpv
b21MZXZlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBi
cmVhazsKICAgICB9CiB9CiAKQEAgLTUzNiwyMCArNTQ0LDQyIEBAIEludFJlY3QgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6aW5mbGF0ZVIKIHsKICAgICAvLyBPbmx5IGRvIHRoZSBpbmZsYXRpb24g
aWYgdGhlIGF2YWlsYWJsZSB3aWR0aC9oZWlnaHQgYXJlIHRvbyBzbWFsbC4gIE90aGVyd2lzZSB0
cnkgdG8KICAgICAvLyBmaXQgdGhlIGdsb3cvY2hlY2sgc3BhY2UgaW50byB0aGUgYXZhaWxhYmxl
IGJveCdzIHdpZHRoL2hlaWdodC4KLSAgICBpbnQgd2lkdGhEZWx0YSA9IHIud2lkdGgoKSAtIChz
aXplLndpZHRoKCkgKyBtYXJnaW5zW0xlZnRNYXJnaW5dICogem9vbUxldmVsICsgbWFyZ2luc1tS
aWdodE1hcmdpbl0gKiB6b29tTGV2ZWwpOwotICAgIGludCBoZWlnaHREZWx0YSA9IHIuaGVpZ2h0
KCkgLSAoc2l6ZS5oZWlnaHQoKSArIG1hcmdpbnNbVG9wTWFyZ2luXSAqIHpvb21MZXZlbCArIG1h
cmdpbnNbQm90dG9tTWFyZ2luXSAqIHpvb21MZXZlbCk7CisgICAgaW50IHdpZHRoRGVsdGEgPSBy
LndpZHRoKCkgLSAoc2l6ZS53aWR0aCgpICsgbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21MZXZl
bCArIG1hcmdpbnNbcmlnaHRNYXJnaW5dICogem9vbUxldmVsKTsKKyAgICBpbnQgaGVpZ2h0RGVs
dGEgPSByLmhlaWdodCgpIC0gKHNpemUuaGVpZ2h0KCkgKyBtYXJnaW5zW3RvcE1hcmdpbl0gKiB6
b29tTGV2ZWwgKyBtYXJnaW5zW2JvdHRvbU1hcmdpbl0gKiB6b29tTGV2ZWwpOwogICAgIEludFJl
Y3QgcmVzdWx0KHIpOwogICAgIGlmICh3aWR0aERlbHRhIDwgMCkgewotICAgICAgICByZXN1bHQu
c2V0WChyZXN1bHQueCgpIC0gbWFyZ2luc1tMZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCk7CisgICAg
ICAgIHJlc3VsdC5zZXRYKHJlc3VsdC54KCkgLSBtYXJnaW5zW2xlZnRNYXJnaW5dICogem9vbUxl
dmVsKTsKICAgICAgICAgcmVzdWx0LnNldFdpZHRoKHJlc3VsdC53aWR0aCgpIC0gd2lkdGhEZWx0
YSk7CiAgICAgfQogICAgIGlmIChoZWlnaHREZWx0YSA8IDApIHsKLSAgICAgICAgcmVzdWx0LnNl
dFkocmVzdWx0LnkoKSAtIG1hcmdpbnNbVG9wTWFyZ2luXSAqIHpvb21MZXZlbCk7CisgICAgICAg
IHJlc3VsdC5zZXRZKHJlc3VsdC55KCkgLSBtYXJnaW5zW3RvcE1hcmdpbl0gKiB6b29tTGV2ZWwp
OwogICAgICAgICByZXN1bHQuc2V0SGVpZ2h0KHJlc3VsdC5oZWlnaHQoKSAtIGhlaWdodERlbHRh
KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRmxvYXRSZWN0IFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlu
cHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9h
dFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKK3sKKyAgICBGbG9hdFJl
Y3QgcGFydFJlY3QoaW5wdXRSZWN0KTsKKyAgICAKKyAgICAvLyBDb21wdXRlIGFuIG9mZnNldCBi
ZXR3ZWVuIHRoZSBwYXJ0IHJlbmRlcmVyIGFuZCB0aGUgaW5wdXQgcmVuZGVyZXIKKyAgICBGbG9h
dFNpemUgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXI7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IHBhcnRSZW5kZXJlcjsKKyAgICB3aGlsZSAocmVuZGVyZXIgJiYgcmVuZGVyZXIg
IT0gaW5wdXRSZW5kZXJlcikgeworICAgICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5pbmdSZW5k
ZXJlciA9IHJlbmRlcmVyLT5jb250YWluZXIoKTsKKyAgICAgICAgb2Zmc2V0RnJvbUlucHV0UmVu
ZGVyZXIgLT0gcmVuZGVyZXItPm9mZnNldEZyb21Db250YWluZXIoY29udGFpbmluZ1JlbmRlcmVy
KTsKKyAgICAgICAgcmVuZGVyZXIgPSBjb250YWluaW5nUmVuZGVyZXI7CisgICAgfQorICAgIC8v
IElmIHRoZSBpbnB1dCByZW5kZXJlciB3YXMgbm90IGEgY29udGFpbmVyLCBzb21ldGhpbmcgd2Vu
dCB3cm9uZworICAgIEFTU0VSVChyZW5kZXJlciA9PSBpbnB1dFJlbmRlcmVyKTsKKyAgICAvLyBN
b3ZlIHRoZSByZWN0IGludG8gcGFydFJlbmRlcmVyJ3MgY29vcmRzCisgICAgcGFydFJlY3QubW92
ZShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7CisgICAgLy8gQWNjb3VudCBmb3IgdGhlIGxvY2Fs
IGRyYXdpbmcgb2Zmc2V0ICh0eCwgdHkpCisgICAgcGFydFJlY3QubW92ZShyLngoKSwgci55KCkp
OworCisgICAgcmV0dXJuIHBhcnRSZWN0OworfQorCiAvLyBVcGRhdGVzIHRoZSBjb250cm9sIHRp
bnQgKGEuay5hLiBhY3RpdmUgc3RhdGUpIG9mIHxjZWxsfCAoZnJvbSB8b3wpLgogLy8gSW4gdGhl
IENocm9taXVtIHBvcnQsIHRoZSByZW5kZXJlciBydW5zIGFzIGEgYmFja2dyb3VuZCBwcm9jZXNz
IGFuZCBjb250cm9scycKIC8vIE5TQ2VsbChzKSBsYWNrIGEgcGFyZW50IE5TVmlldy4gVGhlcmVm
b3JlIGNvbnRyb2xzIGRvbid0IGhhdmUgdGhlaXIgdGludApAQCAtNjA5LDE5ICs2MzksNiBAQCB2
b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnVwZGF0ZVByZXNzCiAgICAgICAgIFtjZWxsIHNl
dEhpZ2hsaWdodGVkOnByZXNzZWRdOwogfQogCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGlu
IHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0
aGVtZSBBUEkgaW4gcjM3NzMxLgotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmJhc2VsaW5l
UG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIGlmICghby0+aXNC
b3goKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5j
ZSgpID09IENoZWNrYm94UGFydCB8fCBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gUmFkaW9Q
YXJ0KSB7Ci0gICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7Ci0g
ICAgICAgIHJldHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5oZWlnaHQoKSAtIDIgKiBvLT5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCk7IC8vIFRoZSBiYXNlbGluZSBpcyAycHggdXAgZnJvbSB0
aGUgYm90dG9tIG9mIHRoZSBjaGVja2JveC9yYWRpbyBpbiBBcHBLaXQuCi0gICAgfQotICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihvKTsKLX0KLQogYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3Qq
IG8pIGNvbnN0CiB7CiAgICAgLy8gQW4gYWx0ZXJuYXRlIHdheSB0byBpbXBsZW1lbnQgdGhpcyB3
b3VsZCBiZSB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIGNlbGwgb2JqZWN0CkBAIC02OTMsNyArNzEw
LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRTaXplRnJvbQogICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2V0Rm9udEZyb21D
b250cm9sU2l6ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBOU0NvbnRy
b2xTaXplIGNvbnRyb2xTaXplKSBjb25zdAogewogICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb247CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwpA
QCAtNzIxLDM1MiArNzM4LDEwIEBAIE5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6Y28KICAgICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7CiB9CiAKLS8vIEZJWE1FOiBUaGlz
IHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRl
ZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1ib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotCi0g
ICAgLy8gRGV0ZXJtaW5lIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG5lZWRlZCBmb3IgdGhlIGNvbnRy
b2wgYW5kIHByZXBhcmUgdGhlIGNlbGwgZm9yIHBhaW50aW5nLgotICAgIHNldENoZWNrYm94Q2Vs
bFN0YXRlKG8sIHIpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLQotICAgIGZs
b2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIC8vIFdl
IGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVk
ZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGNoZWNrYm94Ci0gICAgLy8gc2hhZG93
IiBhbmQgdGhlIGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9mIHRoZSBib3Vu
ZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0LgotICAgIE5TQnV0dG9uQ2VsbCogY2hlY2tib3gg
PSB0aGlzLT5jaGVja2JveCgpOwotICAgIEludFNpemUgc2l6ZSA9IGNoZWNrYm94U2l6ZXMoKVtb
Y2hlY2tib3ggY29udHJvbFNpemVdXTsKLSAgICBzaXplLnNldFdpZHRoKHNpemUud2lkdGgoKSAq
IHpvb21MZXZlbCk7Ci0gICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZl
bCk7Ci0gICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChyLCBzaXplLCBjaGVj
a2JveE1hcmdpbnMoKSwgem9vbUxldmVsKTsKLSAgICAKLSAgICBpZiAoem9vbUxldmVsICE9IDEu
MGYpIHsKLSAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGluZmxhdGVkUmVjdC53aWR0aCgp
IC8gem9vbUxldmVsKTsKLSAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChpbmZsYXRlZFJl
Y3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwpOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJh
bnNsYXRlKGluZmxhdGVkUmVjdC54KCksIGluZmxhdGVkUmVjdC55KCkpOwotICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7Ci0g
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1p
bmZsYXRlZFJlY3QueSgpKTsKLSAgICB9Ci0gICAgCi0gICAgW2NoZWNrYm94IGRyYXdXaXRoRnJh
bWU6TlNSZWN0KEludFJlY3RUb05TUmVjdChpbmZsYXRlZFJlY3QpKSBpblZpZXc6bmlsXTsKLSAg
ICBbY2hlY2tib3ggc2V0Q29udHJvbFZpZXc6bmlsXTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0
LT5yZXN0b3JlKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVz
ZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0
byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1jb25zdCBJbnRTaXplKiBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpjaGVja2JveFNpemVzKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3Qg
SW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgxNCwgMTQpLCBJbnRTaXplKDEyLCAxMiksIElu
dFNpemUoMTAsIDEwKSB9OwotICAgIHJldHVybiBzaXplczsKLX0KLQotLy8gRklYTUU6IFRoaXMg
dXNlZCB0byBiZSBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB1bnRpbCBpdCB3YXMgY29udmVydGVk
IHRvIHRoZSBuZXcgdGhlbWUgQVBJIGluIHIzNzczMS4KLWNvbnN0IGludCogUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6Y2hlY2tib3hNYXJnaW5zKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3Qg
aW50IG1hcmdpbnNbM11bNF0gPQotICAgIHsKLSAgICAgICAgeyAzLCA0LCA0LCAyIH0sCi0gICAg
ICAgIHsgNCwgMywgMywgMyB9LAotICAgICAgICB7IDQsIDMsIDMsIDMgfSwKLSAgICB9OwotICAg
IHJldHVybiBtYXJnaW5zW1tjaGVja2JveCgpIGNvbnRyb2xTaXplXV07Ci19Ci0KLS8vIEZJWE1F
OiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNv
bnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi12b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnNldENoZWNrYm94Q2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCogbywg
Y29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBOU0J1dHRvbkNlbGwqIGNoZWNrYm94ID0gdGhpcy0+
Y2hlY2tib3goKTsKLQotICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUg
cmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8uCi0gICAgc2V0Q29udHJvbFNpemUoY2hlY2ti
b3gsIGNoZWNrYm94U2l6ZXMoKSwgci5zaXplKCksIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCi0g
ICAgdXBkYXRlQWN0aXZlU3RhdGUoY2hlY2tib3gsIG8pOwotICAgIHVwZGF0ZUNoZWNrZWRTdGF0
ZShjaGVja2JveCwgbyk7Ci0gICAgdXBkYXRlRW5hYmxlZFN0YXRlKGNoZWNrYm94LCBvKTsKLSAg
ICB1cGRhdGVQcmVzc2VkU3RhdGUoY2hlY2tib3gsIG8pOwotICAgIHVwZGF0ZUZvY3VzZWRTdGF0
ZShjaGVja2JveCwgbyk7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVw
c3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQ
SSBpbiByMzc3MzEuCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldENoZWNrYm94U2l6
ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBo
ZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAg
ICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWln
aHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVXNlIHRoZSBmb250IHNp
emUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCi0gICAg
c2V0U2l6ZUZyb21Gb250KHN0eWxlLCBjaGVja2JveFNpemVzKCkpOwotfQotCi0vLyBGSVhNRTog
VGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252
ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkgaW4gcjM3NzMxLgotYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBMb2NhbEN1
cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLQot
ICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5kIGhlaWdodCBuZWVkZWQgZm9yIHRoZSBjb250
cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBwYWludGluZy4KLSAgICBzZXRSYWRpb0NlbGxT
dGF0ZShvLCByKTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0KLSAgICBmbG9h
dCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICAvLyBXZSBp
bmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVk
IGluIHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBjaGVja2JveAotICAgIC8vIHNoYWRvdyIg
YW5kIHRoZSBjaGVjay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRz
IG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KLSAgICBOU0J1dHRvbkNlbGwqIHJhZGlvID0gdGhp
cy0+cmFkaW8oKTsKLSAgICBJbnRTaXplIHNpemUgPSByYWRpb1NpemVzKClbW3JhZGlvIGNvbnRy
b2xTaXplXV07Ci0gICAgc2l6ZS5zZXRXaWR0aChzaXplLndpZHRoKCkgKiB6b29tTGV2ZWwpOwot
ICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgIEludFJl
Y3QgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3Qociwgc2l6ZSwgcmFkaW9NYXJnaW5zKCksIHpv
b21MZXZlbCk7Ci0gICAgCi0gICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7Ci0gICAgICAgIGlu
ZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7Ci0g
ICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9v
bUxldmVsKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJl
Y3QueCgpLCBpbmZsYXRlZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNj
YWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOwotICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7
Ci0gICAgfQotCi0gICAgW3JhZGlvIGRyYXdXaXRoRnJhbWU6TlNSZWN0KEludFJlY3RUb05TUmVj
dChpbmZsYXRlZFJlY3QpKSBpblZpZXc6bmlsXTsKLSAgICBbcmFkaW8gc2V0Q29udHJvbFZpZXc6
bmlsXTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZl
cnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3
MzEuCi1jb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpyYWRpb1NpemVzKCkg
Y29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgx
NCwgMTUpLCBJbnRTaXplKDEyLCAxMyksIEludFNpemUoMTAsIDEwKSB9OwotICAgIHJldHVybiBz
aXplczsKLX0KLQotLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUgdXBzdHJlYW0gdmVy
c2lvbiB1bnRpbCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUgQVBJIGluIHIzNzcz
MS4KLWNvbnN0IGludCogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cmFkaW9NYXJnaW5zKCkgY29u
c3QKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0gPQotICAgIHsKLSAgICAg
ICAgeyAyLCAyLCA0LCAyIH0sCi0gICAgICAgIHsgMywgMiwgMywgMiB9LAotICAgICAgICB7IDEs
IDAsIDIsIDAgfSwKLSAgICB9OwotICAgIHJldHVybiBtYXJnaW5zW1tyYWRpbygpIGNvbnRyb2xT
aXplXV07Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZl
cnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3
MzEuCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldFJhZGlvQ2VsbFN0YXRlKGNvbnN0
IFJlbmRlck9iamVjdCogbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBOU0J1dHRvbkNlbGwq
IHJhZGlvID0gdGhpcy0+cmFkaW8oKTsKLQotICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJh
c2VkIG9mZiB0aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8uCi0gICAgc2V0Q29udHJv
bFNpemUocmFkaW8sIHJhZGlvU2l6ZXMoKSwgci5zaXplKCksIG8tPnN0eWxlKCktPmVmZmVjdGl2
ZVpvb20oKSk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQg
dG8uCi0gICAgdXBkYXRlQWN0aXZlU3RhdGUocmFkaW8sIG8pOwotICAgIHVwZGF0ZUNoZWNrZWRT
dGF0ZShyYWRpbywgbyk7Ci0gICAgdXBkYXRlRW5hYmxlZFN0YXRlKHJhZGlvLCBvKTsKLSAgICB1
cGRhdGVQcmVzc2VkU3RhdGUocmFkaW8sIG8pOwotICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShyYWRp
bywgbyk7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZl
cnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3
MzEuCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJv
dGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxl
LT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8o
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJt
aW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCi0gICAgc2V0U2l6ZUZyb21G
b250KHN0eWxlLCByYWRpb1NpemVzKCkpOwotfQotCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJl
IGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5l
dyB0aGVtZSBBUEkgaW4gcjM3NzMxLgotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRC
dXR0b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250cm9s
U2l6ZSBzaXplKSBjb25zdAotewotICAgIC8vIEp1c3QgdXNlIDhweC4gIEFwcEtpdCB3YW50cyB0
byB1c2UgMTFweCBmb3IgbWluaSBidXR0b25zLCBidXQgdGhhdCBwYWRkaW5nIGlzIGp1c3QgdG9v
IGxhcmdlCi0gICAgLy8gZm9yIHJlYWwtd29ybGQgV2ViIHNpdGVzIChjcmVhdGluZyBhIGh1Z2Ug
bmVjZXNzYXJ5IG1pbmltdW0gd2lkdGggZm9yIGJ1dHRvbnMgd2hvc2Ugc3BhY2UgaXMKLSAgICAv
LyBieSBkZWZpbml0aW9uIGNvbnN0cmFpbmVkLCBzaW5jZSB3ZSBzZWxlY3QgbWluaSBvbmx5IGZv
ciBzbWFsbCBjcmFtcGVkIGVudmlyb25tZW50cy4KLSAgICAvLyBUaGlzIGFsc28gZ3VhcmFudGVl
cyB0aGUgSFRNTDQgPGJ1dHRvbj4gd2lsbCBtYXRjaCBvdXIgcmVuZGVyaW5nIGJ5IGRlZmF1bHQs
IHNpbmNlIHdlJ3JlIHVzaW5nIGEgY29uc2lzdGVudAotICAgIC8vIHBhZGRpbmcuCi0gICAgY29u
c3QgaW50IHBhZGRpbmcgPSA4ICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBzdHlsZS0+
c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z1RvcChMZW5ndGgoMCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5n
dGgoMCwgRml4ZWQpKTsKLX0KLQotLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUgdXBz
dHJlYW0gdmVyc2lvbiB1bnRpbCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUgQVBJ
IGluIHIzNzczMS4KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0QnV0dG9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCogZSkgY29uc3QKLXsKLSAgICAvLyBUaGVyZSBhcmUgdGhyZWUgYXBwZWFyYW5jZSBjb25zdGFu
dHMgZm9yIGJ1dHRvbnMuCi0gICAgLy8gKDEpIFB1c2gtYnV0dG9uIGlzIHRoZSBjb25zdGFudCBm
b3IgdGhlIGRlZmF1bHQgQXF1YSBzeXN0ZW0gYnV0dG9uLiAgUHVzaCBidXR0b25zIHdpbGwgbm90
IHNjYWxlIHZlcnRpY2FsbHkgYW5kIHdpbGwgbm90IGFsbG93Ci0gICAgLy8gY3VzdG9tIGZvbnRz
IG9yIGNvbG9ycy4gIDxpbnB1dD5zIHVzZSB0aGlzIGNvbnN0YW50LiAgVGhpcyBidXR0b24gd2ls
bCBhbGxvdyBjdXN0b20gY29sb3JzIGFuZCBmb250IHdlaWdodHMvdmFyaWFudHMgYnV0IHdvbid0
Ci0gICAgLy8gc2NhbGUgdmVydGljYWxseS4KLSAgICAvLyAoMikgc3F1YXJlLWJ1dHRvbiBpcyB0
aGUgY29uc3RhbnQgZm9yIHRoZSBzcXVhcmUgYnV0dG9uLiAgVGhpcyBidXR0b24gd2lsbCBhbGxv
dyBjdXN0b20gZm9udHMgYW5kIGNvbG9ycyBhbmQgd2lsbCBzY2FsZSB2ZXJ0aWNhbGx5LgotICAg
IC8vICgzKSBCdXR0b24gaXMgdGhlIGNvbnN0YW50IHRoYXQgbWVhbnMgInBpY2sgdGhlIGJlc3Qg
YnV0dG9uIGFzIGFwcHJvcHJpYXRlLiIgIDxidXR0b24+cyB1c2UgdGhpcyBjb25zdGFudC4gIFRo
aXMgYnV0dG9uIHdpbGwKLSAgICAvLyBhbHNvIHNjYWxlIHZlcnRpY2FsbHkgYW5kIGFsbG93IGN1
c3RvbSBmb250cyBhbmQgY29sb3JzLiAgSXQgd2lsbCBhdHRlbXB0IHRvIHVzZSBBcXVhIGlmIHBv
c3NpYmxlIGFuZCB3aWxsIG1ha2UgdGhpcyBkZXRlcm1pbmF0aW9uCi0gICAgLy8gc29sZWx5IG9u
IHRoZSByZWN0YW5nbGUgb2YgdGhlIGNvbnRyb2wuCi0KLSAgICAvLyBEZXRlcm1pbmUgb3VyIGNv
bnRyb2wgc2l6ZSBiYXNlZCBvZmYgb3VyIGZvbnQuCi0gICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSA9IGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSk7Ci0KLSAgICBpZiAoc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBQdXNoQnV0dG9uUGFydCkgewotICAgICAgICAvLyBEaXRjaCB0aGUgYm9yZGVy
LgotICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLQotICAgICAgICAvLyBIZWlnaHQgaXMg
bG9ja2VkIHRvIGF1dG8uCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsK
LQotICAgICAgICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCi0gICAgICAgIHN0eWxl
LT5zZXRXaGl0ZVNwYWNlKFBSRSk7Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBidXR0b24ncyB2ZXJ0
aWNhbCBzaXplLgotICAgICAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKLQotICAgICAgICAvLyBB
ZGQgaW4gdGhlIHBhZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNlLgotICAgICAgICBzZXRCdXR0
b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKHN0eWxlLCBjb250cm9sU2l6ZSk7Ci0KLSAgICAgICAg
Ly8gT3VyIGZvbnQgaXMgbG9ja2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBzeXN0ZW0gZm9udCBzaXpl
IGZvciB0aGUgY29udHJvbC4gIFRvIGNsYXJpZnksIHdlIGZpcnN0IHVzZSB0aGUgQ1NTLXNwZWNp
ZmllZCBmb250IHRvIGZpZ3VyZSBvdXQKLSAgICAgICAgLy8gYSByZWFzb25hYmxlIGNvbnRyb2wg
c2l6ZSwgYnV0IG9uY2UgdGhhdCBjb250cm9sIHNpemUgaXMgZGV0ZXJtaW5lZCwgd2UgdGhyb3cg
dGhhdCBmb250IGF3YXkgYW5kIHVzZSB0aGUgYXBwcm9wcmlhdGUKLSAgICAgICAgLy8gc3lzdGVt
IGZvbnQgZm9yIHRoZSBjb250cm9sIHNpemUgaW5zdGVhZC4KLSAgICAgICAgc2V0Rm9udEZyb21D
b250cm9sU2l6ZShzZWxlY3Rvciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBTZXQgYSBtaW4taGVpZ2h0IHNvIHRoYXQgd2UgY2FuJ3QgZ2V0IHNtYWxsZXIg
dGhhbiB0aGUgbWluaSBidXR0b24uCi0gICAgICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3Ro
KHN0YXRpY19jYXN0PGludD4oMTUgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSwgRml4ZWQpKTsK
LQotICAgICAgICAvLyBSZXNldCB0aGUgdG9wIGFuZCBib3R0b20gYm9yZGVycy4KLSAgICAgICAg
c3R5bGUtPnJlc2V0Qm9yZGVyVG9wKCk7Ci0gICAgICAgIHN0eWxlLT5yZXNldEJvcmRlckJvdHRv
bSgpOwotICAgIH0KLQotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7Ci19Ci0KLS8vIEZJWE1F
OiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNv
bnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1jb25zdCBJbnRTaXplKiBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpidXR0b25TaXplcygpIGNvbnN0Ci17Ci0gICAgc3RhdGlj
IGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMCwgMjEpLCBJbnRTaXplKDAsIDE4
KSwgSW50U2l6ZSgwLCAxNSkgfTsKLSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLS8vIEZJWE1FOiBU
aGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZl
cnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1jb25zdCBpbnQqIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OmJ1dHRvbk1hcmdpbnMoKSBjb25zdAotewotICAgIHN0YXRpYyBjb25z
dCBpbnQgbWFyZ2luc1szXVs0XSA9Ci0gICAgewotICAgICAgICB7IDQsIDYsIDcsIDYgfSwKLSAg
ICAgICAgeyA0LCA1LCA2LCA1IH0sCi0gICAgICAgIHsgMCwgMSwgMSwgMSB9LAotICAgIH07Ci0g
ICAgcmV0dXJuIG1hcmdpbnNbW2J1dHRvbigpIGNvbnRyb2xTaXplXV07Ci19Ci0KLS8vIEZJWE1F
OiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNv
bnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi12b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewot
ICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3
ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNp
Y09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdp
ZHRoIG9mIHRoZSBjb250cm9sLgotICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgYnV0dG9uU2l6
ZXMoKSk7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZl
cnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3
MzEuCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldEJ1dHRvbkNlbGxTdGF0ZShjb25z
dCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgTlNCdXR0b25DZWxs
KiBidXR0b24gPSB0aGlzLT5idXR0b24oKTsKLQotICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXpl
IGJhc2VkIG9mZiB0aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8uCi0gICAgaWYgKG8t
PnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTcXVhcmVCdXR0b25QYXJ0IHx8Ci0gICAgICAgIHIu
aGVpZ2h0KCkgPiBidXR0b25TaXplcygpW05TUmVndWxhckNvbnRyb2xTaXplXS5oZWlnaHQoKSAq
IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICAvLyBVc2UgdGhlIHNxdWFy
ZSBidXR0b24KLSAgICAgICAgaWYgKFtidXR0b24gYmV6ZWxTdHlsZV0gIT0gTlNTaGFkb3dsZXNz
U3F1YXJlQmV6ZWxTdHlsZSkKLSAgICAgICAgICAgIFtidXR0b24gc2V0QmV6ZWxTdHlsZTpOU1No
YWRvd2xlc3NTcXVhcmVCZXplbFN0eWxlXTsKLSAgICB9IGVsc2UgaWYgKFtidXR0b24gYmV6ZWxT
dHlsZV0gIT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkKLSAgICAgICAgW2J1dHRvbiBzZXRCZXplbFN0
eWxlOk5TUm91bmRlZEJlemVsU3R5bGVdOwotCi0gICAgc2V0Q29udHJvbFNpemUoYnV0dG9uLCBi
dXR0b25TaXplcygpLCByLnNpemUoKSwgby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKLQot
ICAgIE5TV2luZG93ICp3aW5kb3cgPSBbbmlsIHdpbmRvd107Ci0gICAgQk9PTCBpc0RlZmF1bHRC
dXR0b24gPSAoaXNEZWZhdWx0KG8pICYmIFt3aW5kb3cgaXNLZXlXaW5kb3ddKTsKLSAgICBbYnV0
dG9uIHNldEtleUVxdWl2YWxlbnQ6KGlzRGVmYXVsdEJ1dHRvbiA/IEAiXHIiIDogQCIiKV07Ci0K
LSAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCi0gICAgdXBk
YXRlQWN0aXZlU3RhdGUoYnV0dG9uLCBvKTsKLSAgICB1cGRhdGVDaGVja2VkU3RhdGUoYnV0dG9u
LCBvKTsKLSAgICB1cGRhdGVFbmFibGVkU3RhdGUoYnV0dG9uLCBvKTsKLSAgICB1cGRhdGVQcmVz
c2VkU3RhdGUoYnV0dG9uLCBvKTsKLSAgICB1cGRhdGVGb2N1c2VkU3RhdGUoYnV0dG9uLCBvKTsK
LX0KLQotLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB1
bnRpbCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUgQVBJIGluIHIzNzczMS4KLWJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQotewotICAgIE5TQnV0dG9uQ2VsbCogYnV0dG9uID0gdGhpcy0+YnV0dG9uKCk7Ci0gICAgTG9j
YWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7
Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUg
Y29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCi0gICAgc2V0QnV0dG9u
Q2VsbFN0YXRlKG8sIHIpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLQotICAg
IC8vIFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcg
aW5jbHVkZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGJ1dHRvbgotICAgIC8vIHNo
YWRvdy4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBj
b250cm9sIGluIFdlYktpdC4KLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCk7Ci0gICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZXMoKVtbYnV0dG9uIGNv
bnRyb2xTaXplXV07Ci0gICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwotICAgIHNpemUuc2V0
SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgIEludFJlY3QgaW5mbGF0ZWRS
ZWN0ID0gcjsKLSAgICBpZiAoW2J1dHRvbiBiZXplbFN0eWxlXSA9PSBOU1JvdW5kZWRCZXplbFN0
eWxlKSB7Ci0gICAgICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHdpdGhpbiB0aGUgYXZhaWxhYmxl
IHNwYWNlLgotICAgICAgICBpZiAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpID4gc2l6ZS5oZWlnaHQo
KSkgewotICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFkoaW5mbGF0ZWRSZWN0LnkoKSArIChp
bmZsYXRlZFJlY3QuaGVpZ2h0KCkgLSBzaXplLmhlaWdodCgpKSAvIDIpOwotICAgICAgICAgICAg
aW5mbGF0ZWRSZWN0LnNldEhlaWdodChzaXplLmhlaWdodCgpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291bnQgZm9yIHRoZSBzaGFkb3cuCi0gICAgICAg
IGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgYnV0dG9uTWFy
Z2lucygpLCB6b29tTGV2ZWwpOwotCi0gICAgICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZikgewot
ICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGluZmxhdGVkUmVjdC53aWR0aCgpIC8g
em9vbUxldmVsKTsKLSAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRS
ZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKLSAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxl
dmVsKSk7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRl
ZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAgIH0KLSAgICB9IAotCi0gICAg
TlNWaWV3ICp2aWV3ID0gbmlsOwotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbdmlldyB3aW5kb3dd
OwotICAgIE5TQnV0dG9uQ2VsbCAqcHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCA9IFt3aW5kb3cg
ZGVmYXVsdEJ1dHRvbkNlbGxdOwotCi0gICAgaWYgKGlzRGVmYXVsdChvKSAmJiBbd2luZG93IGlz
S2V5V2luZG93XSkgewotICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOmJ1dHRv
bl07Ci0gICAgICAgIHdrQWR2YW5jZURlZmF1bHRCdXR0b25QdWxzZUFuaW1hdGlvbihidXR0b24p
OwotICAgIH0gZWxzZSBpZiAoW3ByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgaXNFcXVhbDpidXR0
b25dKQotICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOm5pbF07Ci0KLSAgICBb
YnV0dG9uIGRyYXdXaXRoRnJhbWU6TlNSZWN0KEludFJlY3RUb05TUmVjdChpbmZsYXRlZFJlY3Qp
KSBpblZpZXc6dmlld107Ci0gICAgW2J1dHRvbiBzZXRDb250cm9sVmlldzpuaWxdOwotCi0gICAg
aWYgKCFbcHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCBpc0VxdWFsOmJ1dHRvbl0pCi0gICAgICAg
IFt3aW5kb3cgc2V0RGVmYXVsdEJ1dHRvbkNlbGw6cHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbF07
Ci0KLSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50VGV4dEZpZWxkKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKIHsKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxD
b250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdCZXplbGVkVGV4dEZpZWxkQ2Vs
bChJbnRSZWN0VG9OU1JlY3QociksIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRyb2wo
bykpOworICAgIHdrRHJhd0JlemVsZWRUZXh0RmllbGRDZWxsKHIsIGlzRW5hYmxlZChvKSAmJiAh
aXNSZWFkT25seUNvbnRyb2wobykpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTA3NCw3
ICs3NDksNyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFRleHRGCiB7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50Q2Fw
c0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAocGFpbnRJbmZvLmNv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDg4
LDcgKzc2Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRDYXBzTG8KIGJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCiB7CiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWlu
dEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3QmV6ZWxlZFRleHRBcmVhKEludFJlY3RUb05TUmVj
dChyKSwgaXNFbmFibGVkKG8pICYmICFpc1JlYWRPbmx5Q29udHJvbChvKSk7CisgICAgd2tEcmF3
QmV6ZWxlZFRleHRBcmVhKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRyb2wobykp
OwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTEyNiw4ICs4MDEsNiBAQCBjb25zdCBpbnQq
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwCiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgTG9jYWxDdXJy
ZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0KICAg
ICBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKIAogICAgIE5TUG9wVXBCdXR0b25DZWxs
KiBwb3B1cEJ1dHRvbiA9IHRoaXMtPnBvcHVwQnV0dG9uKCk7CkBAIC0xMTU3LDcgKzgzMCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGkKICAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55
KCkpOwogICAgIH0KIAotICAgIFtwb3B1cEJ1dHRvbiBkcmF3V2l0aEZyYW1lOkludFJlY3RUb05T
UmVjdChpbmZsYXRlZFJlY3QpIGluVmlldzpuaWxdOworICAgIFtwb3B1cEJ1dHRvbiBkcmF3V2l0
aEZyYW1lOmluZmxhdGVkUmVjdCBpblZpZXc6RmxpcHBlZFZpZXcoKV07CiAgICAgW3BvcHVwQnV0
dG9uIHNldENvbnRyb2xWaWV3Om5pbF07CiAKICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9y
ZSgpOwpAQCAtMTE2NSwxOSArODM4LDE5IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cGFpbnRNZW51TGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBjb25zdCBmbG9hdCBi
YXNlRm9udFNpemUgPSAxMS4wZjsKLXN0YXRpYyBjb25zdCBmbG9hdCBiYXNlQXJyb3dIZWlnaHQg
PSA0LjBmOwotc3RhdGljIGNvbnN0IGZsb2F0IGJhc2VBcnJvd1dpZHRoID0gNS4wZjsKLXN0YXRp
YyBjb25zdCBmbG9hdCBiYXNlU3BhY2VCZXR3ZWVuQXJyb3dzID0gMi4wZjsKLXN0YXRpYyBjb25z
dCBpbnQgYXJyb3dQYWRkaW5nTGVmdCA9IDY7Ci1zdGF0aWMgY29uc3QgaW50IGFycm93UGFkZGlu
Z1JpZ2h0ID0gNjsKLXN0YXRpYyBjb25zdCBpbnQgcGFkZGluZ0JlZm9yZVNlcGFyYXRvciA9IDQ7
Ci1zdGF0aWMgY29uc3QgaW50IGJhc2VCb3JkZXJSYWRpdXMgPSA1Owotc3RhdGljIGNvbnN0IGlu
dCBzdHlsZWRQb3B1cFBhZGRpbmdMZWZ0ID0gODsKLXN0YXRpYyBjb25zdCBpbnQgc3R5bGVkUG9w
dXBQYWRkaW5nVG9wID0gMTsKLXN0YXRpYyBjb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5nQm90
dG9tID0gMjsKK2NvbnN0IGZsb2F0IGJhc2VGb250U2l6ZSA9IDExLjBmOworY29uc3QgZmxvYXQg
YmFzZUFycm93SGVpZ2h0ID0gNC4wZjsKK2NvbnN0IGZsb2F0IGJhc2VBcnJvd1dpZHRoID0gNS4w
ZjsKK2NvbnN0IGZsb2F0IGJhc2VTcGFjZUJldHdlZW5BcnJvd3MgPSAyLjBmOworY29uc3QgaW50
IGFycm93UGFkZGluZ0xlZnQgPSA2OworY29uc3QgaW50IGFycm93UGFkZGluZ1JpZ2h0ID0gNjsK
K2NvbnN0IGludCBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yID0gNDsKK2NvbnN0IGludCBiYXNlQm9y
ZGVyUmFkaXVzID0gNTsKK2NvbnN0IGludCBzdHlsZWRQb3B1cFBhZGRpbmdMZWZ0ID0gODsKK2Nv
bnN0IGludCBzdHlsZWRQb3B1cFBhZGRpbmdUb3AgPSAxOworY29uc3QgaW50IHN0eWxlZFBvcHVw
UGFkZGluZ0JvdHRvbSA9IDI7CiAKLXN0YXRpYyB2b2lkIFRvcEdyYWRpZW50SW50ZXJwb2xhdGUo
dm9pZCogaW5mbywgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQorc3Rh
dGljIHZvaWQgVG9wR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5E
YXRhLCBDR0Zsb2F0KiBvdXREYXRhKQogewogICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAx
LjBmLCAxLjBmLCAxLjBmLCAwLjRmIH07CiAgICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAx
LjBmLCAxLjBmLCAxLjBmLCAwLjE1ZiB9OwpAQCAtMTE4Nyw3ICs4NjAsNyBAQCBzdGF0aWMgdm9p
ZCBUb3BHcmFkaWVudEludGVycG9sYXRlKHZvaWQqCiAgICAgICAgIG91dERhdGFbaV0gPSAoMS4w
ZiAtIGEpICogZGFya1tpXSArIGEgKiBsaWdodFtpXTsKIH0KIAotc3RhdGljIHZvaWQgQm90dG9t
R3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiBpbmZvLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENH
RmxvYXQqIG91dERhdGEpCitzdGF0aWMgdm9pZCBCb3R0b21HcmFkaWVudEludGVycG9sYXRlKHZv
aWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCiB7CiAgICAgc3Rh
dGljIGZsb2F0IGRhcmtbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDAuMGYgfTsKICAgICBzdGF0
aWMgZmxvYXQgbGlnaHRbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDAuM2YgfTsKQEAgLTExOTcs
NyArODcwLDcgQEAgc3RhdGljIHZvaWQgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSh2bwogICAg
ICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBhKSAqIGRhcmtbaV0gKyBhICogbGlnaHRbaV07CiB9
CiAKLXN0YXRpYyB2b2lkIE1haW5HcmFkaWVudEludGVycG9sYXRlKHZvaWQqIGluZm8sIGNvbnN0
IENHRmxvYXQqIGluRGF0YSwgQ0dGbG9hdCogb3V0RGF0YSkKK3N0YXRpYyB2b2lkIE1haW5HcmFk
aWVudEludGVycG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91
dERhdGEpCiB7CiAgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYs
IDAuMTVmIH07CiAgICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAwLjBmLCAwLjBmLCAwLjBm
LCAwLjBmIH07CkBAIC0xMjA3LDcgKzg4MCw3IEBAIHN0YXRpYyB2b2lkIE1haW5HcmFkaWVudElu
dGVycG9sYXRlKHZvaWQKICAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ld
ICsgYSAqIGxpZ2h0W2ldOwogfQogCi1zdGF0aWMgdm9pZCBUcmFja0dyYWRpZW50SW50ZXJwb2xh
dGUodm9pZCogaW5mbywgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQor
c3RhdGljIHZvaWQgVHJhY2tHcmFkaWVudEludGVycG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0
KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCiB7CiAgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0g
PSB7IDAuMGYsIDAuMGYsIDAuMGYsIDAuNjc4ZiB9OwogICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0
XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC4xM2YgfTsKQEAgLTEyMTksMTEgKzg5MiwyMSBAQCBz
dGF0aWMgdm9pZCBUcmFja0dyYWRpZW50SW50ZXJwb2xhdGUodm9pCiAKIHZvaWQgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCiB7CisgICAgaWYgKHIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICBpbnQgcmFkaXVzID0g
by0+c3R5bGUoKS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLndpZHRoKCk7CisgICAgSW50U2l6ZSB0
b3BMZWZ0UmFkaXVzOworICAgIEludFNpemUgdG9wUmlnaHRSYWRpdXM7CisgICAgSW50U2l6ZSBi
b3R0b21MZWZ0UmFkaXVzOworICAgIEludFNpemUgYm90dG9tUmlnaHRSYWRpdXM7CisKKyAgICBv
LT5zdHlsZSgpLT5nZXRCb3JkZXJSYWRpaUZvclJlY3QociwgdG9wTGVmdFJhZGl1cywgdG9wUmln
aHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKworICAgIGlu
dCByYWRpdXMgPSB0b3BMZWZ0UmFkaXVzLndpZHRoKCk7CiAKICAgICBSZXRhaW5QdHI8Q0dDb2xv
clNwYWNlUmVmPiBjc3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkp
OwogCkBAIC0xMjQ2LDMzICs5MjksMjcgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpw
YWludE1lbnVMaQogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhBZG9w
dENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UuZ2V0KCksIENHUG9pbnRNYWtlKHIucmln
aHQoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1h
aW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNhdmUoKTsKICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHIpOwotICAgIHBhaW50
SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAociwKLSAgICAgICAgby0+c3R5bGUoKS0+
Ym9yZGVyVG9wTGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3JkZXJUb3BSaWdodFJhZGl1cygp
LAotICAgICAgICBvLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCksIG8tPnN0eWxl
KCktPmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5h
ZGRSb3VuZGVkUmVjdENsaXAociwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRv
bUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKICAgICBDR0NvbnRleHREcmF3U2hhZGlu
Zyhjb250ZXh0LCBtYWluU2hhZGluZy5nZXQoKSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJl
c3RvcmUoKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgQ0dDb250ZXh0
Q2xpcFRvUmVjdChjb250ZXh0LCB0b3BHcmFkaWVudCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQt
PmFkZFJvdW5kZWRSZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwKLSAgICAg
ICAgby0+c3R5bGUoKS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3JkZXJU
b3BSaWdodFJhZGl1cygpLAotICAgICAgICBJbnRTaXplKCksIEludFNpemUoKSk7CisgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KHRvcEdy
YWRpZW50KSwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIEludFNpemUoKSwgSW50U2l6
ZSgpKTsKICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCB0b3BTaGFkaW5nLmdldCgp
KTsKICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogCi0gICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNhdmUoKTsKLSAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGJvdHRvbUdy
YWRpZW50KTsKLSAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGVuY2xv
c2luZ0ludFJlY3QoYm90dG9tR3JhZGllbnQpLAotICAgICAgICBJbnRTaXplKCksIEludFNpemUo
KSwKLSAgICAgICAgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLCBvLT5zdHls
ZSgpLT5ib3JkZXJCb3R0b21SaWdodFJhZGl1cygpKTsKLSAgICBDR0NvbnRleHREcmF3U2hhZGlu
Zyhjb250ZXh0LCBib3R0b21TaGFkaW5nLmdldCgpKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+
cmVzdG9yZSgpOworICAgIGlmICghYm90dG9tR3JhZGllbnQuaXNFbXB0eSgpKSB7CisgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
Y29udGV4dCwgYm90dG9tR3JhZGllbnQpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+YWRk
Um91bmRlZFJlY3RDbGlwKGVuY2xvc2luZ0ludFJlY3QoYm90dG9tR3JhZGllbnQpLCBJbnRTaXpl
KCksIEludFNpemUoKSwgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOworICAg
ICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBib3R0b21TaGFkaW5nLmdldCgpKTsK
KyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9CiAKICAgICBwYWlu
dEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwg
cik7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChyLAotICAgICAg
ICBvLT5zdHlsZSgpLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCksIG8tPnN0eWxlKCktPmJvcmRlclRv
cFJpZ2h0UmFkaXVzKCksCi0gICAgICAgIG8tPnN0eWxlKCktPmJvcmRlckJvdHRvbUxlZnRSYWRp
dXMoKSwgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKSk7CisgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChyLCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdo
dFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOwogICAgIENHQ29u
dGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIGxlZnRTaGFkaW5nLmdldCgpKTsKICAgICBDR0NvbnRl
eHREcmF3U2hhZGluZyhjb250ZXh0LCByaWdodFNoYWRpbmcuZ2V0KCkpOwogICAgIHBhaW50SW5m
by5jb250ZXh0LT5yZXN0b3JlKCk7CkBAIC0xMjgyLDggKzk1OSw2IEBAIHZvaWQgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGkKIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBwYWludElu
Zm8uY29udGV4dC0+c2F2ZSgpOwotCiAgICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHIueCgp
ICsgby0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHIueSgpICsgby0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgci53aWR0aCgpIC0gby0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRo
KCkgLSBvLT5zdHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCksCkBAIC0xMzAyLDYgKzk3Nyw4IEBA
IGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGkKICAgICBpZiAoYm91bmRz
LndpZHRoKCkgPCBhcnJvd1dpZHRoICsgYXJyb3dQYWRkaW5nTGVmdCAqIG8tPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7CisKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9y
KG8tPnN0eWxlKCktPmNvbG9yKCkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VT
dHlsZShOb1N0cm9rZSk7CiAKQEAgLTEzODAsNyArMTA1Nyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6YWRqdXN0TWVudUwKIGludCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1
cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIGlm
IChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIHBv
cHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtMZWZ0UGFkZGluZ10g
KiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRk
aW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2xlZnRQYWRkaW5nXSAqIHN0eWxlLT5lZmZl
Y3RpdmVab29tKCk7CiAgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0
b25QYXJ0KQogICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLT5l
ZmZlY3RpdmVab29tKCk7CiAgICAgcmV0dXJuIDA7CkBAIC0xMzg5LDcgKzEwNjYsNyBAQCBpbnQg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hCiBpbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CiB7CiAgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAg
ICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkp
W1JpZ2h0UGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICByZXR1cm4g
cG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3JpZ2h0UGFkZGlu
Z10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IE1lbnVsaXN0QnV0dG9uUGFydCkgewogICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHls
ZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKICAgICAgICAgZmxvYXQgYXJyb3dXaWR0aCA9
IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOwpAQCAtMTQwMSw3ICsxMDc4LDcgQEAgaW50IFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYQogaW50IFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
IHsKICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAg
IHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbVG9w
UGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICByZXR1cm4gcG9wdXBC
dXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3RvcFBhZGRpbmddICogc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKTsKICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51
bGlzdEJ1dHRvblBhcnQpCiAgICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdUb3AgKiBz
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIHJldHVybiAwOwpAQCAtMTQxMCwxMyArMTA4Nywx
MyBAQCBpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hCiBpbnQgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAogewogICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
UGFydCkKLSAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZv
bnQoc3R5bGUpKVtCb3R0b21QYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAg
ICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlb
Ym90dG9tUGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIGlmIChzdHlsZS0+
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKICAgICAgICAgcmV0dXJuIHN0eWxl
ZFBvcHVwUGFkZGluZ0JvdHRvbSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CiAgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RNZW51
TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqKSBjb25zdAogewogICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgp
IC8gYmFzZUZvbnRTaXplOwogCkBAIC0xNDU1LDEwICsxMTMyLDEwIEBAIGludCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjptaW5pbXVtTWVudUwKICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQo
c3R5bGUsIG1lbnVMaXN0U2l6ZXMoKSkud2lkdGgoKTsKIH0KIAotc3RhdGljIGNvbnN0IGludCB0
cmFja1dpZHRoID0gNTsKLXN0YXRpYyBjb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAyOworY29uc3Qg
aW50IHRyYWNrV2lkdGggPSA1OworY29uc3QgaW50IHRyYWNrUmFkaXVzID0gMjsKIAotdm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAg
c3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KQEAgLTE1MDIsMTIgKzExNzksMTIgQEAgYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNsaWRlcgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
CiB7CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KIAotc3RhdGljIGNvbnN0IGZsb2F0
IHZlcnRpY2FsU2xpZGVySGVpZ2h0UGFkZGluZyA9IDAuMWY7Citjb25zdCBmbG9hdCB2ZXJ0aWNh
bFNsaWRlckhlaWdodFBhZGRpbmcgPSAwLjFmOwogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewpAQCAtMTU2Miw3ICsx
MjM5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNsaWRlcgogICAgICAg
ICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpvb21lZFJlY3QueCgpLCAtdW56b29t
ZWRSZWN0LnkoKSk7CiAgICAgfQogCi0gICAgW3NsaWRlclRodW1iQ2VsbCBkcmF3V2l0aEZyYW1l
OkZsb2F0UmVjdFRvTlNSZWN0KHVuem9vbWVkUmVjdCkgaW5WaWV3Om5pbF07CisgICAgW3NsaWRl
clRodW1iQ2VsbCBkcmF3V2l0aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6RmxpcHBlZFZpZXco
KV07CiAgICAgW3NsaWRlclRodW1iQ2VsbCBzZXRDb250cm9sVmlldzpuaWxdOwogCiAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKQEAgLTE1NzAsMjMgKzEyNDcsNiBAQCBib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2xpZGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1jb25zdCBpbnQgc2xpZGVyVGh1bWJXaWR0aCA9IDE1OwotY29uc3QgaW50IHNsaWRlclRodW1i
SGVpZ2h0ID0gMTU7Ci1jb25zdCBpbnQgbWVkaWFTbGlkZXJUaHVtYldpZHRoID0gMTM7Ci1jb25z
dCBpbnQgbWVkaWFTbGlkZXJUaHVtYkhlaWdodCA9IDE0OwotCi12b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0Ci17
Ci0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAg
IGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFy
dCB8fCBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQp
IHsKLSAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4o
c2xpZGVyVGh1bWJXaWR0aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgICAgIG8tPnN0eWxl
KCktPnNldEhlaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzbGlkZXJUaHVtYkhlaWdodCAq
IHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgfSBlbHNlIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCkgPT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQpIHsKLSAgICAgICAgby0+c3R5bGUoKS0+c2V0
V2lkdGgoTGVuZ3RoKG1lZGlhU2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgby0+
c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChtZWRpYVNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkp
OwotICAgIH0KLX0KLQogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZp
ZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNo
ID0gdGhpcy0+c2VhcmNoKCk7CkBAIC0xNjExLDcgKzEyNzEsNyBAQCBib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50U2VhcmNoCiAgICAgLy8gU2V0IHRoZSBzZWFyY2ggYnV0dG9uIHRv
IG5pbCBiZWZvcmUgZHJhd2luZy4gIFRoZW4gcmVzZXQgaXQgc28gd2UgY2FuIGRyYXcgaXQgbGF0
ZXIuCiAgICAgW3NlYXJjaCBzZXRTZWFyY2hCdXR0b25DZWxsOm5pbF07CiAKLSAgICBbc2VhcmNo
IGRyYXdXaXRoRnJhbWU6TlNSZWN0KEludFJlY3RUb05TUmVjdCh1bnpvb21lZFJlY3QpKSBpblZp
ZXc6bmlsXTsKKyAgICBbc2VhcmNoIGRyYXdXaXRoRnJhbWU6TlNSZWN0KHVuem9vbWVkUmVjdCkg
aW5WaWV3OkZsaXBwZWRWaWV3KCldOwogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgaWYg
KFtzZWFyY2ggc2hvd3NGaXJzdFJlc3BvbmRlcl0pCiAgICAgICAgIHdrRHJhd1RleHRGaWVsZENl
bGxGb2N1c1Jpbmcoc2VhcmNoLCBOU1JlY3QodW56b29tZWRSZWN0KSk7CkBAIC0xNjI1LDcgKzEy
ODUsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2VhcmNoCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldFNlYXJjaENl
bGxTdGF0ZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3QmIHIpCit2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnNldFNlYXJjaENlbGxTdGF0ZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IEludFJlY3QmKQogewogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFy
Y2goKTsKIApAQCAtMTY1Myw3ICsxMzEzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpzZXRTZWFyY2hGaQogICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgc2VhcmNoRmllbGRTaXpl
cygpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVs
ZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVs
ZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgYm9yZGVyLgogICAgIHN0eWxl
LT5yZXNldEJvcmRlcigpOwpAQCAtMTY4Niw5ICsxMzQ2LDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6YWRqdXN0U2VhcmMKIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBM
b2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0
KTsKLQogICAgIE5vZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsK
KyAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKICAgICBzZXRTZWFyY2hDZWxsU3RhdGUoaW5wdXQtPnJlbmRlcmVyKCksIHIpOwogCiAg
ICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOwpAQCAtMTcwMCw5
ICsxMzYxLDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2gKIAog
ICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAotICAg
IE5TUmVjdCBib3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0
KEludFJlY3RUb05TUmVjdChpbnB1dC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJl
Y3QoKSkpXTsKLSAgICAKLSAgICBJbnRSZWN0IHVuem9vbWVkUmVjdChOU1JlY3RUb0ludFJlY3Qo
Ym91bmRzKSk7CisgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBjYW5jZWxCdXR0
b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3Qo
KSldOworICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5yZW5k
ZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CisKKyAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0
KGxvY2FsQm91bmRzKTsKICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKICAgICAgICAgdW56
b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKICAg
ICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkgLyB6b29t
TGV2ZWwpOwpAQCAtMTcxMSw3ICsxMzczLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwYWludFNlYXJjaAogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpv
b21lZFJlY3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CiAgICAgfQogCi0gICAgW1tzZWFyY2gg
Y2FuY2VsQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTpJbnRSZWN0VG9OU1JlY3QodW56b29tZWRS
ZWN0KSBpblZpZXc6bmlsXTsKKyAgICBbW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSBkcmF3V2l0
aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6RmxpcHBlZFZpZXcoKV07CiAgICAgW1tzZWFyY2gg
Y2FuY2VsQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKIAogICAgIHBhaW50SW5mby5j
b250ZXh0LT5yZXN0b3JlKCk7CkBAIC0xNzI0LDcgKzEzODYsNyBAQCBjb25zdCBJbnRTaXplKiBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpjCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRD
YW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChz
dHlsZSwgY2FuY2VsQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChz
aXplLndpZHRoKCksIEZpeGVkKSk7CkBAIC0xNzM4LDggKzE0MDAsOCBAQCBjb25zdCBJbnRTaXpl
KiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpyCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi1zdGF0
aWMgY29uc3QgaW50IGVtcHR5UmVzdWx0c09mZnNldCA9IDk7Ci12b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Citjb25z
dCBpbnQgZW1wdHlSZXN1bHRzT2Zmc2V0ID0gOTsKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0g
c2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKICAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4
ZWQpKTsKQEAgLTE3NDcsMTIgKzE0MDksMTIgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjphZGp1c3RTZWFyYwogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9CiAKLWJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxk
RGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1G
b250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExl
bmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CkBAIC0xNzYyLDkgKzE0MjQsMTAgQEAgdm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyYwogCiBib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCiB7Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChw
YWludEluZm8uY29udGV4dCk7Ci0KICAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93
QW5jZXN0b3JOb2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5k
ZXJlcigpLCByKTsKIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFy
Y2goKTsKQEAgLTE3NzQsMTQgKzE0MzcsMTYgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwYWludFNlYXJjaAogICAgIGlmIChbc2VhcmNoIHNlYXJjaE1lbnVUZW1wbGF0ZV0gIT0gbmls
KQogICAgICAgICBbc2VhcmNoIHNldFNlYXJjaE1lbnVUZW1wbGF0ZTpuaWxdOwogCi0gICAgTlNS
ZWN0IGJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoSW50
UmVjdFRvTlNSZWN0KGlucHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgp
KSldOwotICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6Ym91bmRz
IGluVmlldzpuaWxdOworICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNo
QnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hS
ZWN0KCkpXTsKKyAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+
cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMsIHIpOworCisgICAgW1tzZWFyY2ggc2VhcmNoQnV0
dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6RmxpcHBlZFZpZXcoKV07
CiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBjb25zdCBpbnQgcmVzdWx0c0Fycm93V2lkdGgg
PSA1Owotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlKSBjb25zdAorY29uc3QgaW50IHJlc3VsdHNBcnJvd1dpZHRoID0gNTsK
K3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJl
c3VsdHNCdXR0b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lk
dGgoKSArIHJlc3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOwpAQCAtMTc5MSw5ICsxNDU2LDEwIEBA
IHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmMKIAogYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCiB7Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4
dChwYWludEluZm8uY29udGV4dCk7Ci0KICAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hh
ZG93QW5jZXN0b3JOb2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5y
ZW5kZXJlcigpLCByKTsKIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5z
ZWFyY2goKTsKQEAgLTE4MDcsOSArMTQ3MywxMCBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50U2VhcmNoCiAKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCk7CiAKLSAgICBOU1JlY3QgYm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25S
ZWN0Rm9yQm91bmRzOk5TUmVjdChJbnRSZWN0VG9OU1JlY3QoaW5wdXQtPnJlbmRlcmVyKCktPmFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKV07CisgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0g
W3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94
KCktPmJvcmRlckJveFJlY3QoKSldOworICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRp
bmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CiAgICAgCi0gICAg
SW50UmVjdCB1bnpvb21lZFJlY3QoTlNSZWN0VG9JbnRSZWN0KGJvdW5kcykpOworICAgIEludFJl
Y3QgdW56b29tZWRSZWN0KGxvY2FsQm91bmRzKTsKICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYp
IHsKICAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8g
em9vbUxldmVsKTsKICAgICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3Qu
aGVpZ2h0KCkgLyB6b29tTGV2ZWwpOwpAQCAtMTgxOCw3ICsxNDg1LDcgQEAgYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaAogICAgICAgICBwYWludEluZm8uY29udGV4dC0+
dHJhbnNsYXRlKC11bnpvb21lZFJlY3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CiAgICAgfQog
Ci0gICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTpJbnRSZWN0VG9O
U1JlY3QodW56b29tZWRSZWN0KSBpblZpZXc6bmlsXTsKKyAgICBbW3NlYXJjaCBzZWFyY2hCdXR0
b25DZWxsXSBkcmF3V2l0aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6RmxpcHBlZFZpZXcoKV07
CiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKICAg
ICAKICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwpAQCAtMTgyNywxMDIgKzE0OTQs
MTc5IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2gKIH0KIAogI2lm
IEVOQUJMRShWSURFTykKLS8vIEZJWE1FOiBUaGlzIGVudW0gaXMgbGlmdGVkIGZyb20gUmVuZGVy
VGhlbWVNYWMubW0gIFdlIG5lZWQgdG8gZGVjaWRlIHdoaWNoIHRoZW1lIHRvIHVzZSBmb3IgdGhl
IGRlZmF1bHQgY29udHJvbHMsIG9yIGRlY2lkZSB0byBhdm9pZCB3a0RyYXdNZWRpYVVJUGFydCBh
bmQgcmVuZGVyIG91ciBvd24uCiB0eXBlZGVmIGVudW0gewogICAgIE1lZGlhQ29udHJvbGxlclRo
ZW1lQ2xhc3NpYyAgID0gMSwKICAgICBNZWRpYUNvbnRyb2xsZXJUaGVtZVFUICAgICAgICA9IDIK
IH0gTWVkaWFDb250cm9sbGVyVGhlbWVTdHlsZTsKIAotZW51bSBXS01lZGlhQ29udHJvbGxlclRo
ZW1lU3RhdGUgeworc3RhdGljIGludCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpCit7CisgICAgc3Rh
dGljIGNvbnN0IGxvbmcgbWluaW11bVF1aWNrVGltZVZlcnNpb24gPSAweDA3NjMwMDAwOyAvLyA3
LjYuMworICAgIHN0YXRpYyBTSW50MzIgcXVpY2tUaW1lVmVyc2lvbiA9IDA7CisgICAgc3RhdGlj
IGludCBjb250cm9sbGVyVGhlbWUgPSAtMTsKKyAgICAKKyAgICBpZiAoY29udHJvbGxlclRoZW1l
ICE9IC0xKQorICAgICAgICByZXR1cm4gY29udHJvbGxlclRoZW1lOworCisgICAgY29udHJvbGxl
clRoZW1lID0gTWVkaWFDb250cm9sbGVyVGhlbWVDbGFzc2ljOworCisgICAgaWYgKCFxdWlja1Rp
bWVWZXJzaW9uKSB7CisgICAgICAgIE9TRXJyIGVycjsKKyAgICAgICAgZXJyID0gR2VzdGFsdChn
ZXN0YWx0UXVpY2tUaW1lLCAmcXVpY2tUaW1lVmVyc2lvbik7CisgICAgICAgIGlmIChlcnIgIT0g
bm9FcnIpCisgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlclRoZW1lOworICAgIH0KKyAgICBp
ZiAocXVpY2tUaW1lVmVyc2lvbiA8IG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKQorICAgICAgICBy
ZXR1cm4gY29udHJvbGxlclRoZW1lOworCisgICAgQm9vbGVhbiB2YWxpZEtleTsKKyAgICBCb29s
ZWFuIHVzZVFUTWVkaWFVSSA9IENGUHJlZmVyZW5jZXNHZXRBcHBCb29sZWFuVmFsdWUoQ0ZTVFIo
IlVzZVF1aWNrVGltZU1lZGlhVUkiKSwgQ0ZTVFIoImNvbS5hcHBsZS5XZWJDb3JlIiksICZ2YWxp
ZEtleSk7CisKKyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJ
TERJTkdfT05fTEVPUEFSRCkKKyAgICBpZiAodmFsaWRLZXkgJiYgIXVzZVFUTWVkaWFVSSkKKyAg
ICAgICAgcmV0dXJuIGNvbnRyb2xsZXJUaGVtZTsKKyNlbHNlCisgICAgaWYgKCF2YWxpZEtleSB8
fCAhdXNlUVRNZWRpYVVJKQorICAgICAgICByZXR1cm4gY29udHJvbGxlclRoZW1lOworI2VuZGlm
CisKKyAgICBjb250cm9sbGVyVGhlbWUgPSBNZWRpYUNvbnRyb2xsZXJUaGVtZVFUOworICAgIHJl
dHVybiBjb250cm9sbGVyVGhlbWU7Cit9CisjZW5kaWYKKworY29uc3QgaW50IHNsaWRlclRodW1i
V2lkdGggPSAxNTsKK2NvbnN0IGludCBzbGlkZXJUaHVtYkhlaWdodCA9IDE1OworY29uc3QgaW50
IG1lZGlhU2xpZGVyVGh1bWJXaWR0aCA9IDEzOworY29uc3QgaW50IG1lZGlhU2xpZGVyVGh1bWJI
ZWlnaHQgPSAxNDsKKwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIGZsb2F0IHpvb21MZXZlbCA9
IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFy
YW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgby0+c3R5bGUoKS0+YXBwZWFy
YW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAgICAgIG8tPnN0eWxlKCkt
PnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRodW1iV2lkdGggKiB6b29t
TGV2ZWwpLCBGaXhlZCkpOworICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHN0
YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwor
ICAgIH0gCisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgZWxzZSBpZiAoby0+c3R5bGUoKS0+YXBw
ZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KSB7CisgICAgICAgIGludCB3aWR0aCA9
IG1lZGlhU2xpZGVyVGh1bWJXaWR0aDsKKyAgICAgICAgaW50IGhlaWdodCA9IG1lZGlhU2xpZGVy
VGh1bWJIZWlnaHQ7CisgICAgICAgIAorICAgICAgICBpZiAobWVkaWFDb250cm9sbGVyVGhlbWUo
KSA9PSBNZWRpYUNvbnRyb2xsZXJUaGVtZVFUKSB7CisgICAgICAgICAgICBDR1NpemUgIHNpemU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdrTWVhc3VyZU1lZGlhVUlQYXJ0KE1lZGlhU2xp
ZGVyVGh1bWIsIE1lZGlhQ29udHJvbGxlclRoZW1lUVQsIE5VTEwsICZzaXplKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gc2l6ZS53aWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9IHNpemUuaGVpZ2h0
OworICAgICAgICB9CisKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRp
Y19jYXN0PGludD4od2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgICAgICBvLT5zdHls
ZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oaGVpZ2h0ICogem9vbUxldmVs
KSwgRml4ZWQpKTsKKyAgICB9CisjZW5kaWYKK30KKworCisjaWYgRU5BQkxFKFZJREVPKQorCitl
bnVtIFdLTWVkaWFDb250cm9sbGVyVGhlbWVTdGF0ZSB7IAogICAgIE1lZGlhVUlQYXJ0RGlzYWJs
ZWRGbGFnID0gMSA8PCAwLAogICAgIE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgPSAxIDw8IDEsCiAg
ICAgTWVkaWFVSVBhcnREcmF3RW5kQ2Fwc0ZsYWcgPSAxIDw8IDMsCiB9OwotI2VuZGlmCisKK3N0
YXRpYyB1bnNpZ25lZCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3MoTm9kZSogbm9kZSkKK3sKKyAg
ICB1bnNpZ25lZCBmbGFncyA9IDA7CisKKyAgICBpZiAobm9kZS0+ZGlzYWJsZWQoKSkKKyAgICAg
ICAgZmxhZ3MgfD0gTWVkaWFVSVBhcnREaXNhYmxlZEZsYWc7CisgICAgZWxzZSBpZiAobm9kZS0+
YWN0aXZlKCkpCisgICAgICAgIGZsYWdzIHw9IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWc7CisgICAg
cmV0dXJuIGZsYWdzOworfQorCisvLyBVdGlsaXR5IHRvIHNjYWxlIHdoZW4gdGhlIFVJIHBhcnQg
YXJlIG5vdCBzY2FsZWQgYnkgd2tEcmF3TWVkaWFVSVBhcnQKK3N0YXRpYyBGbG9hdFJlY3QgZ2V0
VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZvcmln
aW5hbFJlY3QpCit7CisgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpOworICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3Qob3JpZ2luYWxSZWN0KTsKKyAgICBp
ZiAoem9vbUxldmVsICE9IDEuMGYgJiYgbWVkaWFDb250cm9sbGVyVGhlbWUoKSA9PSBNZWRpYUNv
bnRyb2xsZXJUaGVtZVFUKSB7CisgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21l
ZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CisgICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWln
aHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKKyAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsK
KyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpv
b21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpvb21l
ZFJlY3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CisgICAgfQorICAgIHJldHVybiB1bnpvb21l
ZFJlY3Q7Cit9CisKIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhRnVs
bHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0jaWYgRU5BQkxFKFZJREVPKQog
ICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0
KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYUZ1bGxzY3Jl
ZW5CdXR0b24sIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYywgIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgCi0gICAgICAgIG5vZGUtPmFjdGl2ZSgpID8gTWVkaWFV
SVBhcnRQcmVzc2VkRmxhZyA6IDApOwotI2VuZGlmCisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVk
aWFGdWxsc2NyZWVuQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2Rl
KSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSNpZiBFTkFCTEUo
VklERU8pCiAgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKICAgICBOb2RlKiBtZWRpYU5vZGUg
PSBub2RlID8gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwogICAgIGlmICghbWVkaWFO
b2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5o
YXNUYWdOYW1lKGF1ZGlvVGFnKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQq
PihtZWRpYU5vZGUpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgCi0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChw
YWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQobWVkaWFFbGVtZW50LT5t
dXRlZCgpID8gTWVkaWFVbk11dGVCdXR0b24gOiBNZWRpYU11dGVCdXR0b24sIE1lZGlhQ29udHJv
bGxlclRoZW1lQ2xhc3NpYywgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBy
LAotICAgICAgICBub2RlLT5hY3RpdmUoKSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsK
LSNlbmRpZgorICAgIGlmIChNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCogYnRuID0gc3Rh
dGljX2Nhc3Q8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQqPihub2RlKSkgeworICAgICAg
ICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250
ZXh0KTsKKyAgICAgICAgd2tEcmF3TWVkaWFVSVBhcnQoYnRuLT5kaXNwbGF5VHlwZSgpLCBtZWRp
YUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCks
IHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisKKyAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFQbGF5
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSNpZiBFTkFCTEUoVklERU8pCiAgICAgTm9k
ZSogbm9kZSA9IG8tPm5vZGUoKTsKICAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8gbm9kZS0+
c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwogICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVkaWFO
b2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKGF1ZGlv
VGFnKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5vZGUpOwot
ICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMb2Nh
bEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsK
LSAgICB3a0RyYXdNZWRpYVVJUGFydChtZWRpYUVsZW1lbnQtPmNhblBsYXkoKSA/IE1lZGlhUGxh
eUJ1dHRvbiA6IE1lZGlhUGF1c2VCdXR0b24sIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYywg
cGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLAotICAgICAgICBub2RlLT5h
Y3RpdmUoKSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgorICAgIGlmIChN
ZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250
cm9sUGxheUJ1dHRvbkVsZW1lbnQqPihub2RlKSkgeworICAgICAgICBMb2NhbEN1cnJlbnRHcmFw
aGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKyAgICAgICAgd2tE
cmF3TWVkaWFVSVBhcnQoYnRuLT5kaXNwbGF5VHlwZSgpLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgp
LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0
U3RhdGVGbGFncyhub2RlKSk7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQogewotI2lmIEVOQUJMRShWSURFTykKICAgICBOb2RlKiBub2RlID0gby0+bm9k
ZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTG9jYWxD
dXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0g
ICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrQmFja0J1dHRvbiwgTWVkaWFDb250cm9sbGVy
VGhlbWVDbGFzc2ljLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsCi0g
ICAgICAgIG5vZGUtPmFjdGl2ZSgpID8gTWVkaWFVSVBhcnRQcmVzc2VkRmxhZyA6IDApOwotI2Vu
ZGlmCisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrQmFja0J1dHRvbiwgbWVkaWFDb250
cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBn
ZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAog
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQogewotI2lmIEVOQUJMRShWSURFTykKICAgICBOb2RlKiBub2Rl
ID0gby0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29u
dGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrRm9yd2FyZEJ1dHRvbiwgTWVk
aWFDb250cm9sbGVyVGhlbWVDbGFzc2ljLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCksIHIsCi0gICAgICAgIG5vZGUtPmFjdGl2ZSgpID8gTWVkaWFVSVBhcnRQcmVzc2VkRmxh
ZyA6IDApOwotI2VuZGlmCisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrRm9yd2FyZEJ1
dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotI2lmIEVOQUJMRShWSURFTykKICAgICBO
b2RlKiBub2RlID0gby0+bm9kZSgpOwogICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2Rl
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CiAgICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFtZWRp
YU5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoYXVk
aW9UYWcpKSkKQEAgLTE5MzIsNzMgKzE2NzYsMTAxIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRNZWRpYVMKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBtZWRpYUVsZW1l
bnQtPmJ1ZmZlcmVkKCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uOwotICAg
IGZsb2F0IHRpbWVMb2FkZWQgPSB0aW1lUmFuZ2VzLT5sZW5ndGgoKSA/IHRpbWVSYW5nZXMtPmVu
ZCgwLCBpZ25vcmVkRXhjZXB0aW9uKSA6IDA7Ci0gICAgZmxvYXQgY3VycmVudFRpbWUgPSBtZWRp
YUVsZW1lbnQtPmN1cnJlbnRUaW1lKCk7Ci0gICAgZmxvYXQgZHVyYXRpb24gPSBtZWRpYUVsZW1l
bnQtPmR1cmF0aW9uKCk7Ci0gICAgaWYgKGlzbmFuKGR1cmF0aW9uKSkKLSAgICAgICAgZHVyYXRp
b24gPSAwOwotCi0gICAgYm9vbCBzaG91bGREcmF3RW5kQ2FwcyA9ICF0b1JlbmRlck1lZGlhKG1l
ZGlhRWxlbWVudC0+cmVuZGVyZXIoKSktPnNob3VsZFNob3dUaW1lRGlzcGxheUNvbnRyb2xzKCk7
Ci0gICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayhNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMs
IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgdGltZUxvYWRlZCwgY3Vy
cmVudFRpbWUsIGR1cmF0aW9uLCBzaG91bGREcmF3RW5kQ2FwcyA/IE1lZGlhVUlQYXJ0RHJhd0Vu
ZENhcHNGbGFnIDogMCk7Ci0jZW5kaWYKKyAgICBmbG9hdCB0aW1lTG9hZGVkID0gMDsKKyAgICBm
bG9hdCBjdXJyZW50VGltZSA9IDA7CisgICAgZmxvYXQgZHVyYXRpb24gPSAwOworICAgIGlmIChN
ZWRpYVBsYXllciogcGxheWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkgeworICAgICAgICBk
dXJhdGlvbiA9IHBsYXllci0+ZHVyYXRpb24oKTsKKyAgICAgICAgdGltZUxvYWRlZCA9IHBsYXll
ci0+bWF4VGltZUJ1ZmZlcmVkKCk7CisgICAgICAgIGN1cnJlbnRUaW1lID0gcGxheWVyLT5jdXJy
ZW50VGltZSgpOworICAgIH0KKyAKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAg
IEZsb2F0UmVjdCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50
Q29udGV4dChvLCBwYWludEluZm8sIHIpOworICAgIHdrRHJhd01lZGlhU2xpZGVyVHJhY2sobWVk
aWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LCB1bnpvb21lZFJlY3QsIAorICAgICAgICB0aW1lTG9hZGVkLCBjdXJyZW50VGltZSwgZHVyYXRp
b24sIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgCisgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnJlc3RvcmUoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKIHsKLSNpZiBFTkFCTEUoVklERU8pCiAgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKICAg
ICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdy
YXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJh
d01lZGlhVUlQYXJ0KE1lZGlhU2xpZGVyVGh1bWIsIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3Np
YywgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLAotICAgICAgICBub2Rl
LT5hY3RpdmUoKSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgorICAgIHdr
RHJhd01lZGlhVUlQYXJ0KE1lZGlhU2xpZGVyVGh1bWIsIG1lZGlhQ29udHJvbGxlclRoZW1lKCks
IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRT
dGF0ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0KLS8vIEZJWE1FOiBUaGlz
IHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRl
ZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1OU0J1dHRvbkNlbGwqIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OmNoZWNrYm94KCkgY29uc3QKKyAgICAKK2Jvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6cGFpbnRNZWRpYVJld2luZEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7
Ci0gICAgaWYgKCFtX2NoZWNrYm94KSB7Ci0gICAgICAgIG1fY2hlY2tib3guYWRvcHROUyhbW05T
QnV0dG9uQ2VsbCBhbGxvY10gaW5pdF0pOwotICAgICAgICBbbV9jaGVja2JveC5nZXQoKSBzZXRC
dXR0b25UeXBlOk5TU3dpdGNoQnV0dG9uXTsKLSAgICAgICAgW21fY2hlY2tib3guZ2V0KCkgc2V0
VGl0bGU6bmlsXTsKLSAgICAgICAgW21fY2hlY2tib3guZ2V0KCkgc2V0QWxsb3dzTWl4ZWRTdGF0
ZTpZRVNdOwotICAgICAgICBbbV9jaGVja2JveC5nZXQoKSBzZXRGb2N1c1JpbmdUeXBlOk5TRm9j
dXNSaW5nVHlwZUV4dGVyaW9yXTsKLSAgICB9CisgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsK
KyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICByZXR1cm4g
bV9jaGVja2JveC5nZXQoKTsKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxD
b250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVJl
d2luZEJ1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAg
IHJldHVybiBmYWxzZTsKIH0KIAotLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUgdXBz
dHJlYW0gdmVyc2lvbiB1bnRpbCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUgQVBJ
IGluIHIzNzczMS4KLU5TQnV0dG9uQ2VsbCogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cmFkaW8o
KSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhUmV0dXJuVG9S
ZWFsdGltZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgaWYgKCFtX3JhZGlvKSB7
Ci0gICAgICAgIG1fcmFkaW8uYWRvcHROUyhbW05TQnV0dG9uQ2VsbCBhbGxvY10gaW5pdF0pOwot
ICAgICAgICBbbV9yYWRpby5nZXQoKSBzZXRCdXR0b25UeXBlOk5TUmFkaW9CdXR0b25dOwotICAg
ICAgICBbbV9yYWRpby5nZXQoKSBzZXRUaXRsZTpuaWxdOwotICAgICAgICBbbV9yYWRpby5nZXQo
KSBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZUV4dGVyaW9yXTsKLSAgICB9CisgICAg
Tm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKLSAgICByZXR1cm4gbV9yYWRpby5nZXQoKTsKKyAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKyAgICB3a0Ry
YXdNZWRpYVVJUGFydChNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24sIG1lZGlhQ29udHJvbGxl
clRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVk
aWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIEZJ
WE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2Fz
IGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1OU0J1dHRvbkNlbGwq
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmJ1dHRvbigpIGNvbnN0CisKK2Jvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZChSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCiB7Ci0gICAgaWYgKCFtX2J1dHRvbikgewotICAgICAgICBtX2J1dHRvbi5hZG9wdE5T
KFtbTlNCdXR0b25DZWxsIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFttX2J1dHRvbi5nZXQoKSBz
ZXRUaXRsZTpuaWxdOwotICAgICAgICBbbV9idXR0b24uZ2V0KCkgc2V0QnV0dG9uVHlwZTpOU01v
bWVudGFyeVB1c2hJbkJ1dHRvbl07Ci0gICAgfQotICAgIAotICAgIHJldHVybiBtX2J1dHRvbi5n
ZXQoKTsKKyAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2Fs
Q29udGV4dChwYWludEluZm8uY29udGV4dCk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFU
aW1lbGluZUNvbnRhaW5lciwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkp
OworICAgIHJldHVybiBmYWxzZTsKIH0KIAorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpw
YWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIE5vZGUqIG5v
ZGUgPSBvLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEZsb2F0UmVjdCB1bnpvb21lZFJl
Y3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBwYWludEluZm8s
IHIpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5LCBtZWRp
YUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCks
IHVuem9vbWVkUmVjdCwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICBwYWlu
dEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhVGltZVJlbWFpbmluZyhSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCit7CisgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7
CisgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1
cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVk
aWFUaW1lUmVtYWluaW5nRGlzcGxheSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0
U3RhdGVGbGFncyhub2RlKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpleHRy
YU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9Cisj
ZW5kaWYKKwogTlNQb3BVcEJ1dHRvbkNlbGwqIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVw
QnV0dG9uKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcG9wdXBCdXR0b24pIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39543</attachid>
            <date>2009-09-14 07:16:32 -0700</date>
            <delta_ts>2009-09-15 08:37:35 -0700</delta_ts>
            <desc>Updated patch; the .gypi file caught unwanted changes</desc>
            <filename>rendertheme.patch</filename>
            <type>text/plain</type>
            <size>135226</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODM1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIxIEBACisyMDA5LTA5LTExICBBdmkgRHJpc3NtYW4gIDxhdmlAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgdGhlIENocm9taXVtIE1hYyB0aGVtaW5nIGZpbGVzIChSZW5kZXJUaGVtZSBhbmQgVGhlbWUp
IHRvIGJlCisgICAgICAgIHVwLXRvLWRhdGUuCisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGlu
ZyB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGhl
bWVDaHJvbWl1bU1hYzo6VGhlbWVDaHJvbWl1bU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpUaGVt
ZUNocm9taXVtTWFjOjp+VGhlbWVDaHJvbWl1bU1hYyk6CisgICAgICAgIChXZWJDb3JlOjpUaGVt
ZUNocm9taXVtTWFjOjpjb250cm9sUmVxdWlyZXNQcmVXaGl0ZVNwYWNlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLm1tOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybVRoZW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRyb2xTaXplRm9yRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpzaXplRnJvbUZv
bnQpOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6dXBkYXRlU3RhdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmluZmxhdGVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNoZWNrYm94U2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tib3hN
YXJnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpjaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpwYWludENoZWNrYm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OnJhZGlvU2l6ZXMpOgorICAgICAgICAoV2ViQ29yZTo6cmFkaW9NYXJnaW5z
KToKKyAgICAgICAgKFdlYkNvcmU6OnJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpyYWRp
byk6CisgICAgICAgIChXZWJDb3JlOjpwYWludFJhZGlvKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1
dHRvblNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1dHRvbk1hcmdpbnMpOgorICAgICAgICAo
V2ViQ29yZTo6YnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50QnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OmNvbnRyb2xGb250KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OmNvbnRyb2xTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6Om1pbmltdW1Db250cm9sU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpUaGVtZUNocm9taXVtTWFjOjpjb250cm9sQm9yZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OmNvbnRyb2xQYWRkaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlRoZW1lQ2hyb21pdW1NYWM6OmluZmxhdGVDb250cm9sUGFpbnRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRS
ZWN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTWFjLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpzdXBwb3J0c0NvbnRyb2xUaW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpzY3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3JzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5t
bToKKyAgICAgICAgKC1bV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXIgc3lz
dGVtQ29sb3JzRGlkQ2hhbmdlOl0pOgorICAgICAgICAoLVtSVENNRmxpcHBlZFZpZXcgaXNGbGlw
cGVkXSk6CisgICAgICAgICgtW1JUQ01GbGlwcGVkVmlldyBjdXJyZW50RWRpdG9yXSk6CisgICAg
ICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6RmxpcHBlZFZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1JbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6c3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0
TlNDb2xvclRvQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6bWVudUJhY2tncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzeXN0ZW1Db2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjppc0NvbnRyb2xTdHls
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0UmVw
YWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6aW5m
bGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y29u
dmVydFRvUGFpbnRpbmdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFRleHRBcmVhKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVudUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VG9wR3JhZGllbnRJbnRlcnBvbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
b3R0b21HcmFkaWVudEludGVycG9sYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5HcmFkaWVu
dEludGVycG9sYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNrR3JhZGllbnRJbnRlcnBvbGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVM
aXN0QnV0dG9uR3JhZGllbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTbGlk
ZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWlu
dFNlYXJjaEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnNldFNlYXJjaENlbGxTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhQ29u
dHJvbGxlclRoZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRNZWRpYVVJUGFy
dFN0YXRlRmxhZ3MpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0VW56b29tZWRSZWN0QW5kQWRqdXN0
Q3VycmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYU11dGVCdXR0b24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVBsYXlCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVk
aWFTZWVrRm9yd2FyZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVJldHVyblRv
UmVhbHRpbWVCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhQ3VycmVudFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVRpbWVSZW1haW5pbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6ZXh0cmFNZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCk6CisKIDIwMDktMDktMTMgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRo
ZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgd3ggYnVpbGQgZml4LCBmaWxlIHdhcyBtaXNzZWQg
ZHVyaW5nIFRMUy5jcHAgcmVtb3ZhbC4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA0ODM1MykKKysrIFdlYkNv
cmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcxLDYgKzE3NzEsOCBAQAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1N1ZGRlblRlcm1pbmF0aW9uQ2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9TeXN0ZW1UaW1lQ2hyb21pdW0uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9UZW1wb3JhcnlMaW5rU3R1YnMuY3Bw
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMubW0nLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpZGdldENocm9taXVtLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2luZG93c1ZlcnNpb24uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVyc2lvbi5oJywKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vVGhlbWVDaHJvbWl1bU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vVGhlbWVDaHJvbWl1bU1hYy5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFRoZW1lQ2hyb21pdW1NYWNfaAorI2RlZmluZSBUaGVtZUNocm9taXVtTWFj
X2gKKworI2luY2x1ZGUgIlRoZW1lLmgiCisKKy8vIFRoaXMgZmlsZSAoYW5kIGl0cyBhc3NvY2lh
dGVkIC5tbSBmaWxlKSBpcyBhIGNsb25lIG9mIFRoZW1lTWFjLmguIFNlZQorLy8gdGhlIC5tbSBm
aWxlIGZvciBkZXRhaWxzLgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRoZW1lQ2hy
b21pdW1NYWMgOiBwdWJsaWMgVGhlbWUgeworcHVibGljOgorICAgIFRoZW1lQ2hyb21pdW1NYWMo
KSB7IH0KKyAgICB2aXJ0dWFsIH5UaGVtZUNocm9taXVtTWFjKCkgeyB9CisgICAgCisgICAgdmly
dHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoQ29udHJvbFBhcnQpIGNvbnN0Owor
CisgICAgdmlydHVhbCBGb250RGVzY3JpcHRpb24gY29udHJvbEZvbnQoQ29udHJvbFBhcnQsIGNv
bnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIExl
bmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5n
dGhTaXplJiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhTaXpl
IG1pbmltdW1Db250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0OworCisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbFBhZGRpbmcoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQg
em9vbUZhY3RvcikgY29uc3Q7CisgICAgdmlydHVhbCBMZW5ndGhCb3ggY29udHJvbEJvcmRlcihD
b250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9h
dCB6b29tRmFjdG9yKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBjb250cm9sUmVxdWlyZXNQ
cmVXaGl0ZVNwYWNlKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0IHsgcmV0dXJuIHBhcnQgPT0gUHVz
aEJ1dHRvblBhcnQ7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwYWludChDb250cm9sUGFydCwgQ29u
dHJvbFN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIGZsb2F0IHpvb21G
YWN0b3IsIFNjcm9sbFZpZXcqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5mbGF0ZUNvbnRy
b2xQYWludFJlY3QoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMsIEludFJlY3QmLCBmbG9hdCB6
b29tRmFjdG9yKSBjb25zdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFRoZW1lQ2hyb21pdW1NYWNfaAoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9s
LXN0eWxlCiAgICsgTEYKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hy
b21pdW1NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVt
ZUNocm9taXVtTWFjLm1tCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9UaGVtZUNocm9taXVtTWFjLm1tCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbXBvcnQgImNvbmZp
Zy5oIgorI2ltcG9ydCAiVGhlbWVDaHJvbWl1bU1hYy5oIgorCisjaW1wb3J0ICJCbG9ja0V4Y2Vw
dGlvbnMuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiTG9jYWxDdXJy
ZW50R3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJTY3JvbGxWaWV3LmgiCisjaW1wb3J0ICJX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworCisvLyBUaGlzIGZpbGUgKGFuZCBpdHMgYXNzb2NpYXRl
ZCAuaCBmaWxlKSBpcyBhIGNsb25lIG9mIFRoZW1lTWFjLm1tLgorLy8gQmVjYXVzZSB0aGUgb3Jp
Z2luYWwgZmlsZSBpcyBkZXNpZ25lZCB0byBydW4gaW4tcHJvY2VzcyBpbnNpZGUgYSBDb2NvYSB2
aWV3LAorLy8gd2UgbXVzdCBtYWludGFpbiBhIGZvcmsuIFBsZWFzZSBtYWludGFpbiB0aGlzIGZp
bGUgYnkgcGVyZm9ybWluZyBwYXJhbGxlbAorLy8gY2hhbmdlcyB0byBpdC4KKy8vCisvLyBUaGUg
b25seSBjaGFuZ2VzIGZyb20gVGhlbWVNYWMgc2hvdWxkIGJlOgorLy8gLSBUaGUgY2xhc3NuYW1l
IGNoYW5nZSBmcm9tIFRoZW1lTWFjIHRvIFRoZW1lQ2hyb21pdW1NYWMuCisvLyAtIFRoZSBpbXBv
cnQgb2YgRmxpcHBlZFZpZXcoKSBhbmQgaXRzIHVzZSBhcyB0aGUgcGFyZW50IHZpZXcgZm9yIGNl
bGwKKy8vICAgcmVuZGVyaW5nLgorLy8gLSBJbiB1cGRhdGVTdGF0ZXMoKSB0aGUgY29kZSB0byB1
cGRhdGUgdGhlIGNlbGxzJyBpbmFjdGl2ZSBzdGF0ZS4KKy8vIC0gSW4gcGFpbnRCdXR0b24oKSB0
aGUgY29kZSB0byBzYXZlL3Jlc3RvcmUgdGhlIHdpbmRvdydzIGRlZmF1bHQgYnV0dG9uIGNlbGwu
CisvLworLy8gRm9yIGFsbCBvdGhlciBkaWZmZXJlbmNlcywgaWYgaXQgd2FzIGludHJvZHVjZWQg
aW4gdGhpcyBmaWxlLCB0aGVuIHRoZQorLy8gbWFpbnRhaW5lciBmb3Jnb3QgdG8gaW5jbHVkZSBp
dCBpbiB0aGUgbGlzdDsgb3RoZXJ3aXNlIGl0IGlzIGFuIHVwZGF0ZSB0aGF0CisvLyBzaG91bGQg
aGF2ZSBiZWVuIGFwcGxpZWQgdG8gdGhpcyBmaWxlIGJ1dCB3YXMgbm90LgorCisvLyBGSVhNRTog
RGVmYXVsdCBidXR0b25zIHJlYWxseSBzaG91bGQgYmUgbW9yZSBsaWtlIHB1c2ggYnV0dG9ucyBh
bmQgbm90IGxpa2UgYnV0dG9ucy4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBQaWNrIHVw
IHV0aWxpdHkgZnVuY3Rpb24gZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtTWFjLgorZXh0ZXJuIE5T
VmlldyogRmxpcHBlZFZpZXcoKTsKKworZW51bSB7CisgICAgdG9wTWFyZ2luLAorICAgIHJpZ2h0
TWFyZ2luLAorICAgIGJvdHRvbU1hcmdpbiwKKyAgICBsZWZ0TWFyZ2luCit9OworCitUaGVtZSog
cGxhdGZvcm1UaGVtZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChUaGVtZUNocm9taXVt
TWFjLCB0aGVtZU1hYywgKCkpOworICAgIHJldHVybiAmdGhlbWVNYWM7Cit9CisKKy8vIEhlbHBl
ciBmdW5jdGlvbnMgdXNlZCBieSBhIGJ1bmNoIG9mIGRpZmZlcmVudCBjb250cm9sIHBhcnRzLgor
CitzdGF0aWMgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoY29uc3QgRm9udCYgZm9u
dCkKK3sKKyAgICBpbnQgZm9udFNpemUgPSBmb250LnBpeGVsU2l6ZSgpOworICAgIGlmIChmb250
U2l6ZSA+PSAxNikKKyAgICAgICAgcmV0dXJuIE5TUmVndWxhckNvbnRyb2xTaXplOworICAgIGlm
IChmb250U2l6ZSA+PSAxMSkKKyAgICAgICAgcmV0dXJuIE5TU21hbGxDb250cm9sU2l6ZTsKKyAg
ICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7Cit9CisKK3N0YXRpYyBMZW5ndGhTaXplIHNpemVG
cm9tRm9udChjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBm
bG9hdCB6b29tRmFjdG9yLCBjb25zdCBJbnRTaXplKiBzaXplcykKK3sKKyAgICBJbnRTaXplIGNv
bnRyb2xTaXplID0gc2l6ZXNbY29udHJvbFNpemVGb3JGb250KGZvbnQpXTsKKyAgICBpZiAoem9v
bUZhY3RvciAhPSAxLjBmKQorICAgICAgICBjb250cm9sU2l6ZSA9IEludFNpemUoY29udHJvbFNp
emUud2lkdGgoKSAqIHpvb21GYWN0b3IsIGNvbnRyb2xTaXplLmhlaWdodCgpICogem9vbUZhY3Rv
cik7CisgICAgTGVuZ3RoU2l6ZSByZXN1bHQgPSB6b29tZWRTaXplOworICAgIGlmICh6b29tZWRT
aXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBjb250cm9sU2l6ZS53aWR0aCgpID4g
MCkKKyAgICAgICAgcmVzdWx0LnNldFdpZHRoKExlbmd0aChjb250cm9sU2l6ZS53aWR0aCgpLCBG
aXhlZCkpOworICAgIGlmICh6b29tZWRTaXplLmhlaWdodCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgY29udHJvbFNpemUuaGVpZ2h0KCkgPiAwKQorICAgICAgICByZXN1bHQuc2V0SGVpZ2h0KExl
bmd0aChjb250cm9sU2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqIGNlbGwsIGNvbnN0IEludFNp
emUqIHNpemVzLCBjb25zdCBJbnRTaXplJiBtaW5ab29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9y
KQoreworICAgIE5TQ29udHJvbFNpemUgc2l6ZTsKKyAgICBpZiAobWluWm9vbWVkU2l6ZS53aWR0
aCgpID49IHN0YXRpY19jYXN0PGludD4oc2l6ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVdLndpZHRo
KCkgKiB6b29tRmFjdG9yKSAmJgorICAgICAgICBtaW5ab29tZWRTaXplLmhlaWdodCgpID49IHN0
YXRpY19jYXN0PGludD4oc2l6ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVdLmhlaWdodCgpICogem9v
bUZhY3RvcikpCisgICAgICAgIHNpemUgPSBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKKyAgICBlbHNl
IGlmIChtaW5ab29tZWRTaXplLndpZHRoKCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tOU1Nt
YWxsQ29udHJvbFNpemVdLndpZHRoKCkgKiB6b29tRmFjdG9yKSAmJgorICAgICAgICAgICAgIG1p
blpvb21lZFNpemUuaGVpZ2h0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tOU1NtYWxsQ29u
dHJvbFNpemVdLmhlaWdodCgpICogem9vbUZhY3RvcikpCisgICAgICAgIHNpemUgPSBOU1NtYWxs
Q29udHJvbFNpemU7CisgICAgZWxzZQorICAgICAgICBzaXplID0gTlNNaW5pQ29udHJvbFNpemU7
CisgICAgaWYgKHNpemUgIT0gW2NlbGwgY29udHJvbFNpemVdKSAvLyBPbmx5IHVwZGF0ZSBpZiB3
ZSBoYXZlIHRvLCBzaW5jZSBBcHBLaXQgZG9lcyB3b3JrIGV2ZW4gaWYgdGhlIHNpemUgaXMgdGhl
IHNhbWUuCisgICAgICAgIFtjZWxsIHNldENvbnRyb2xTaXplOnNpemVdOworfQorCitzdGF0aWMg
dm9pZCB1cGRhdGVTdGF0ZXMoTlNDZWxsKiBjZWxsLCBDb250cm9sU3RhdGVzIHN0YXRlcykKK3sK
KyAgICAvLyBIb3ZlciBzdGF0ZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IEFxdWEuCisgICAgCisgICAg
Ly8gUHJlc3NlZCBzdGF0ZQorICAgIGJvb2wgb2xkUHJlc3NlZCA9IFtjZWxsIGlzSGlnaGxpZ2h0
ZWRdOworICAgIGJvb2wgcHJlc3NlZCA9IHN0YXRlcyAmIFByZXNzZWRTdGF0ZTsKKyAgICBpZiAo
cHJlc3NlZCAhPSBvbGRQcmVzc2VkKQorICAgICAgICBbY2VsbCBzZXRIaWdobGlnaHRlZDpwcmVz
c2VkXTsKKyAgICAKKyAgICAvLyBFbmFibGVkIHN0YXRlCisgICAgYm9vbCBvbGRFbmFibGVkID0g
W2NlbGwgaXNFbmFibGVkXTsKKyAgICBib29sIGVuYWJsZWQgPSBzdGF0ZXMgJiBFbmFibGVkU3Rh
dGU7CisgICAgaWYgKGVuYWJsZWQgIT0gb2xkRW5hYmxlZCkKKyAgICAgICAgW2NlbGwgc2V0RW5h
YmxlZDplbmFibGVkXTsKKyAgICAKKyAgICAvLyBGb2N1c2VkIHN0YXRlCisgICAgYm9vbCBvbGRG
b2N1c2VkID0gW2NlbGwgc2hvd3NGaXJzdFJlc3BvbmRlcl07CisgICAgYm9vbCBmb2N1c2VkID0g
c3RhdGVzICYgRm9jdXNTdGF0ZTsKKyAgICBpZiAoZm9jdXNlZCAhPSBvbGRGb2N1c2VkKQorICAg
ICAgICBbY2VsbCBzZXRTaG93c0ZpcnN0UmVzcG9uZGVyOmZvY3VzZWRdOworCisgICAgLy8gQ2hl
Y2tlZCBhbmQgSW5kZXRlcm1pbmF0ZQorICAgIGJvb2wgb2xkSW5kZXRlcm1pbmF0ZSA9IFtjZWxs
IHN0YXRlXSA9PSBOU01peGVkU3RhdGU7CisgICAgYm9vbCBpbmRldGVybWluYXRlID0gKHN0YXRl
cyAmIEluZGV0ZXJtaW5hdGVTdGF0ZSk7CisgICAgYm9vbCBjaGVja2VkID0gc3RhdGVzICYgQ2hl
Y2tlZFN0YXRlOworICAgIGJvb2wgb2xkQ2hlY2tlZCA9IFtjZWxsIHN0YXRlXSA9PSBOU09uU3Rh
dGU7CisgICAgaWYgKG9sZEluZGV0ZXJtaW5hdGUgIT0gaW5kZXRlcm1pbmF0ZSB8fCBjaGVja2Vk
ICE9IG9sZENoZWNrZWQpCisgICAgICAgIFtjZWxsIHNldFN0YXRlOmluZGV0ZXJtaW5hdGUgPyBO
U01peGVkU3RhdGUgOiAoY2hlY2tlZCA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGUpXTsKKyAgICAg
ICAgCisgICAgLy8gV2luZG93IEluYWN0aXZlIHN0YXRlCisgICAgTlNDb250cm9sVGludCBvbGRU
aW50ID0gW2NlbGwgY29udHJvbFRpbnRdOworICAgIGJvb2wgd2luZG93SW5hY3RpdmUgPSAoc3Rh
dGVzICYgV2luZG93SW5hY3RpdmVTdGF0ZSk7CisgICAgTlNDb250cm9sVGludCB0aW50ID0gd2lu
ZG93SW5hY3RpdmUgPyBOU0NsZWFyQ29udHJvbFRpbnQgOiBbTlNDb2xvciBjdXJyZW50Q29udHJv
bFRpbnRdOworICAgIGlmICh0aW50ICE9IG9sZFRpbnQpCisgICAgICAgIFtjZWxsIHNldENvbnRy
b2xUaW50OnRpbnRdOworfQorCitzdGF0aWMgSW50UmVjdCBpbmZsYXRlUmVjdChjb25zdCBJbnRS
ZWN0JiB6b29tZWRSZWN0LCBjb25zdCBJbnRTaXplJiB6b29tZWRTaXplLCBjb25zdCBpbnQqIG1h
cmdpbnMsIGZsb2F0IHpvb21GYWN0b3IpCit7CisgICAgLy8gT25seSBkbyB0aGUgaW5mbGF0aW9u
IGlmIHRoZSBhdmFpbGFibGUgd2lkdGgvaGVpZ2h0IGFyZSB0b28gc21hbGwuICBPdGhlcndpc2Ug
dHJ5IHRvCisgICAgLy8gZml0IHRoZSBnbG93L2NoZWNrIHNwYWNlIGludG8gdGhlIGF2YWlsYWJs
ZSBib3gncyB3aWR0aC9oZWlnaHQuCisgICAgaW50IHdpZHRoRGVsdGEgPSB6b29tZWRSZWN0Lndp
ZHRoKCkgLSAoem9vbWVkU2l6ZS53aWR0aCgpICsgbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21G
YWN0b3IgKyBtYXJnaW5zW3JpZ2h0TWFyZ2luXSAqIHpvb21GYWN0b3IpOworICAgIGludCBoZWln
aHREZWx0YSA9IHpvb21lZFJlY3QuaGVpZ2h0KCkgLSAoem9vbWVkU2l6ZS5oZWlnaHQoKSArIG1h
cmdpbnNbdG9wTWFyZ2luXSAqIHpvb21GYWN0b3IgKyBtYXJnaW5zW2JvdHRvbU1hcmdpbl0gKiB6
b29tRmFjdG9yKTsKKyAgICBJbnRSZWN0IHJlc3VsdCh6b29tZWRSZWN0KTsKKyAgICBpZiAod2lk
dGhEZWx0YSA8IDApIHsKKyAgICAgICAgcmVzdWx0LnNldFgocmVzdWx0LngoKSAtIG1hcmdpbnNb
bGVmdE1hcmdpbl0gKiB6b29tRmFjdG9yKTsKKyAgICAgICAgcmVzdWx0LnNldFdpZHRoKHJlc3Vs
dC53aWR0aCgpIC0gd2lkdGhEZWx0YSk7CisgICAgfQorICAgIGlmIChoZWlnaHREZWx0YSA8IDAp
IHsKKyAgICAgICAgcmVzdWx0LnNldFkocmVzdWx0LnkoKSAtIG1hcmdpbnNbdG9wTWFyZ2luXSAq
IHpvb21GYWN0b3IpOworICAgICAgICByZXN1bHQuc2V0SGVpZ2h0KHJlc3VsdC5oZWlnaHQoKSAt
IGhlaWdodERlbHRhKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gQ2hlY2ti
b3hlcworCitzdGF0aWMgY29uc3QgSW50U2l6ZSogY2hlY2tib3hTaXplcygpCit7CisgICAgc3Rh
dGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMTQsIDE0KSwgSW50U2l6ZSgx
MiwgMTIpLCBJbnRTaXplKDEwLCAxMCkgfTsKKyAgICByZXR1cm4gc2l6ZXM7Cit9CisKK3N0YXRp
YyBjb25zdCBpbnQqIGNoZWNrYm94TWFyZ2lucyhOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplKQor
eworICAgIHN0YXRpYyBjb25zdCBpbnQgbWFyZ2luc1szXVs0XSA9CisgICAgeworICAgICAgICB7
IDMsIDQsIDQsIDIgfSwKKyAgICAgICAgeyA0LCAzLCAzLCAzIH0sCisgICAgICAgIHsgNCwgMywg
MywgMyB9LAorICAgIH07CisgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOworfQorCitz
dGF0aWMgTGVuZ3RoU2l6ZSBjaGVja2JveFNpemUoY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVu
Z3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikKK3sKKyAgICAvLyBJZiB0aGUg
d2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5n
IHRvIGRvLgorICAgIGlmICghem9vbWVkU2l6ZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgIXpvb21lZFNpemUuaGVpZ2h0KCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAgICAgICAgcmV0
dXJuIHpvb21lZFNpemU7CisKKyAgICAvLyBVc2UgdGhlIGZvbnQgc2l6ZSB0byBkZXRlcm1pbmUg
dGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KKyAgICByZXR1cm4gc2l6ZUZyb21G
b250KGZvbnQsIHpvb21lZFNpemUsIHpvb21GYWN0b3IsIGNoZWNrYm94U2l6ZXMoKSk7Cit9CisK
K3N0YXRpYyBOU0J1dHRvbkNlbGwqIGNoZWNrYm94KENvbnRyb2xTdGF0ZXMgc3RhdGVzLCBjb25z
dCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yKQoreworICAgIHN0YXRpYyBO
U0J1dHRvbkNlbGwqIGNoZWNrYm94Q2VsbDsKKyAgICBpZiAoIWNoZWNrYm94Q2VsbCkgeworICAg
ICAgICBjaGVja2JveENlbGwgPSBbW05TQnV0dG9uQ2VsbCBhbGxvY10gaW5pdF07CisgICAgICAg
IFtjaGVja2JveENlbGwgc2V0QnV0dG9uVHlwZTpOU1N3aXRjaEJ1dHRvbl07CisgICAgICAgIFtj
aGVja2JveENlbGwgc2V0VGl0bGU6bmlsXTsKKyAgICAgICAgW2NoZWNrYm94Q2VsbCBzZXRBbGxv
d3NNaXhlZFN0YXRlOllFU107CisgICAgICAgIFtjaGVja2JveENlbGwgc2V0Rm9jdXNSaW5nVHlw
ZTpOU0ZvY3VzUmluZ1R5cGVFeHRlcmlvcl07CisgICAgfQorICAgIAorICAgIC8vIFNldCB0aGUg
Y29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8u
CisgICAgc2V0Q29udHJvbFNpemUoY2hlY2tib3hDZWxsLCBjaGVja2JveFNpemVzKCksIHpvb21l
ZFJlY3Quc2l6ZSgpLCB6b29tRmFjdG9yKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBz
dGF0ZXMgd2UgcmVzcG9uZCB0by4KKyAgICB1cGRhdGVTdGF0ZXMoY2hlY2tib3hDZWxsLCBzdGF0
ZXMpOworICAgIAorICAgIHJldHVybiBjaGVja2JveENlbGw7Cit9CisKKy8vIEZJWE1FOiBTaGFy
ZSBtb3JlIGNvZGUgd2l0aCByYWRpbyBidXR0b25zLgorc3RhdGljIHZvaWQgcGFpbnRDaGVja2Jv
eChDb250cm9sU3RhdGVzIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBzY3JvbGxW
aWV3KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworCisgICAgLy8gRGV0ZXJt
aW5lIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG5lZWRlZCBmb3IgdGhlIGNvbnRyb2wgYW5kIHByZXBh
cmUgdGhlIGNlbGwgZm9yIHBhaW50aW5nLgorICAgIE5TQnV0dG9uQ2VsbCogY2hlY2tib3hDZWxs
ID0gY2hlY2tib3goc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKKworICAgIGNvbnRl
eHQtPnNhdmUoKTsKKworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbY2hlY2tib3hD
ZWxsIGNvbnRyb2xTaXplXTsKKyAgICBJbnRTaXplIHpvb21lZFNpemUgPSBjaGVja2JveFNpemVz
KClbY29udHJvbFNpemVdOworICAgIHpvb21lZFNpemUuc2V0V2lkdGgoem9vbWVkU2l6ZS53aWR0
aCgpICogem9vbUZhY3Rvcik7CisgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9vbWVkU2l6ZS5o
ZWlnaHQoKSAqIHpvb21GYWN0b3IpOworICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0
ZVJlY3Qoem9vbWVkUmVjdCwgem9vbWVkU2l6ZSwgY2hlY2tib3hNYXJnaW5zKGNvbnRyb2xTaXpl
KSwgem9vbUZhY3Rvcik7CisgICAgCisgICAgaWYgKHpvb21GYWN0b3IgIT0gMS4wZikgeworICAg
ICAgICBpbmZsYXRlZFJlY3Quc2V0V2lkdGgoaW5mbGF0ZWRSZWN0LndpZHRoKCkgLyB6b29tRmFj
dG9yKTsKKyAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0
KCkgLyB6b29tRmFjdG9yKTsKKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKGluZmxhdGVkUmVj
dC54KCksIGluZmxhdGVkUmVjdC55KCkpOworICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNp
emUoem9vbUZhY3Rvciwgem9vbUZhY3RvcikpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUo
LWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKKyAgICB9CisgICAgCisgICAg
W2NoZWNrYm94Q2VsbCBkcmF3V2l0aEZyYW1lOk5TUmVjdChpbmZsYXRlZFJlY3QpIGluVmlldzpG
bGlwcGVkVmlldygpXTsKKyAgICBbY2hlY2tib3hDZWxsIHNldENvbnRyb2xWaWV3Om5pbF07CisK
KyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBU
SU9OUworfQorCisvLyBSYWRpbyBCdXR0b25zCisKK3N0YXRpYyBjb25zdCBJbnRTaXplKiByYWRp
b1NpemVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6
ZSgxNCwgMTUpLCBJbnRTaXplKDEyLCAxMyksIEludFNpemUoMTAsIDEwKSB9OworICAgIHJldHVy
biBzaXplczsKK30KKworc3RhdGljIGNvbnN0IGludCogcmFkaW9NYXJnaW5zKE5TQ29udHJvbFNp
emUgY29udHJvbFNpemUpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXJnaW5zWzNdWzRdID0K
KyAgICB7CisgICAgICAgIHsgMiwgMiwgNCwgMiB9LAorICAgICAgICB7IDMsIDIsIDMsIDIgfSwK
KyAgICAgICAgeyAxLCAwLCAyLCAwIH0sCisgICAgfTsKKyAgICByZXR1cm4gbWFyZ2luc1tjb250
cm9sU2l6ZV07Cit9CisKK3N0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6ZShjb25zdCBGb250JiBm
b250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorewor
ICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3
ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygp
KQorICAgICAgICByZXR1cm4gem9vbWVkU2l6ZTsKKworICAgIC8vIFVzZSB0aGUgZm9udCBzaXpl
IHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgorICAgIHJl
dHVybiBzaXplRnJvbUZvbnQoZm9udCwgem9vbWVkU2l6ZSwgem9vbUZhY3RvciwgcmFkaW9TaXpl
cygpKTsKK30KKworc3RhdGljIE5TQnV0dG9uQ2VsbCogcmFkaW8oQ29udHJvbFN0YXRlcyBzdGF0
ZXMsIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpCit7CisgICAg
c3RhdGljIE5TQnV0dG9uQ2VsbCogcmFkaW9DZWxsOworICAgIGlmICghcmFkaW9DZWxsKSB7Cisg
ICAgICAgIHJhZGlvQ2VsbCA9IFtbTlNCdXR0b25DZWxsIGFsbG9jXSBpbml0XTsKKyAgICAgICAg
W3JhZGlvQ2VsbCBzZXRCdXR0b25UeXBlOk5TUmFkaW9CdXR0b25dOworICAgICAgICBbcmFkaW9D
ZWxsIHNldFRpdGxlOm5pbF07CisgICAgICAgIFtyYWRpb0NlbGwgc2V0Rm9jdXNSaW5nVHlwZTpO
U0ZvY3VzUmluZ1R5cGVFeHRlcmlvcl07CisgICAgfQorICAgIAorICAgIC8vIFNldCB0aGUgY29u
dHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8uCisg
ICAgc2V0Q29udHJvbFNpemUocmFkaW9DZWxsLCByYWRpb1NpemVzKCksIHpvb21lZFJlY3Quc2l6
ZSgpLCB6b29tRmFjdG9yKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2Ug
cmVzcG9uZCB0by4KKyAgICB1cGRhdGVTdGF0ZXMocmFkaW9DZWxsLCBzdGF0ZXMpOworICAgIAor
ICAgIHJldHVybiByYWRpb0NlbGw7Cit9CisKK3N0YXRpYyB2b2lkIHBhaW50UmFkaW8oQ29udHJv
bFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYg
em9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykKK3sK
KyAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUgY29u
dHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCisgICAgTlNCdXR0b25DZWxs
KiByYWRpb0NlbGwgPSByYWRpbyhzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOworCisg
ICAgY29udGV4dC0+c2F2ZSgpOworCisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IFty
YWRpb0NlbGwgY29udHJvbFNpemVdOworICAgIEludFNpemUgem9vbWVkU2l6ZSA9IHJhZGlvU2l6
ZXMoKVtjb250cm9sU2l6ZV07CisgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6b29tZWRTaXplLndp
ZHRoKCkgKiB6b29tRmFjdG9yKTsKKyAgICB6b29tZWRTaXplLnNldEhlaWdodCh6b29tZWRTaXpl
LmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBpbmZs
YXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCByYWRpb01hcmdpbnMoY29udHJvbFNpemUp
LCB6b29tRmFjdG9yKTsKKyAgICAKKyAgICBpZiAoem9vbUZhY3RvciAhPSAxLjBmKSB7CisgICAg
ICAgIGluZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0
b3IpOworICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQo
KSAvIHpvb21GYWN0b3IpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0
LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgt
aW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOworICAgIH0KKyAgICAKKyAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbcmFkaW9DZWxsIGRyYXdXaXRoRnJhbWU6
TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3OkZsaXBwZWRWaWV3KCldOworICAgIFtyYWRpb0Nl
bGwgc2V0Q29udHJvbFZpZXc6bmlsXTsKKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisK
KyAgICBjb250ZXh0LT5yZXN0b3JlKCk7Cit9CisKKy8vIEJ1dHRvbnMKKworLy8gQnV0dG9ucyBy
ZWFsbHkgb25seSBjb25zdHJhaW4gaGVpZ2h0LiBUaGV5IHJlc3BlY3Qgd2lkdGguCitzdGF0aWMg
Y29uc3QgSW50U2l6ZSogYnV0dG9uU2l6ZXMoKQoreworICAgIHN0YXRpYyBjb25zdCBJbnRTaXpl
IHNpemVzWzNdID0geyBJbnRTaXplKDAsIDIxKSwgSW50U2l6ZSgwLCAxOCksIEludFNpemUoMCwg
MTUpIH07CisgICAgcmV0dXJuIHNpemVzOworfQorCitzdGF0aWMgY29uc3QgaW50KiBidXR0b25N
YXJnaW5zKE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpCit7CisgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXJnaW5zWzNdWzRdID0KKyAgICB7CisgICAgICAgIHsgNCwgNiwgNywgNiB9LAorICAgICAg
ICB7IDQsIDUsIDYsIDUgfSwKKyAgICAgICAgeyAwLCAxLCAxLCAxIH0sCisgICAgfTsKKyAgICBy
ZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07Cit9CisKK3N0YXRpYyBOU0J1dHRvbkNlbGwqIGJ1
dHRvbihDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzIHN0YXRlcywgY29uc3QgSW50UmVj
dCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvcikKK3sKKyAgICBzdGF0aWMgTlNCdXR0b25D
ZWxsICpidXR0b25DZWxsOworICAgIHN0YXRpYyBib29sIGRlZmF1bHRCdXR0b247CisgICAgaWYg
KCFidXR0b25DZWxsKSB7CisgICAgICAgIGJ1dHRvbkNlbGwgPSBbW05TQnV0dG9uQ2VsbCBhbGxv
Y10gaW5pdF07CisgICAgICAgIFtidXR0b25DZWxsIHNldFRpdGxlOm5pbF07CisgICAgICAgIFti
dXR0b25DZWxsIHNldEJ1dHRvblR5cGU6TlNNb21lbnRhcnlQdXNoSW5CdXR0b25dOworICAgIH0K
KworICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgcmVjdGFuZ2xlIHdl
J3JlIHBhaW50aW5nIGludG8uCisgICAgaWYgKHBhcnQgPT0gU3F1YXJlQnV0dG9uUGFydCB8fCB6
b29tZWRSZWN0LmhlaWdodCgpID4gYnV0dG9uU2l6ZXMoKVtOU1JlZ3VsYXJDb250cm9sU2l6ZV0u
aGVpZ2h0KCkgKiB6b29tRmFjdG9yKSB7CisgICAgICAgIC8vIFVzZSB0aGUgc3F1YXJlIGJ1dHRv
bgorICAgICAgICBpZiAoW2J1dHRvbkNlbGwgYmV6ZWxTdHlsZV0gIT0gTlNTaGFkb3dsZXNzU3F1
YXJlQmV6ZWxTdHlsZSkKKyAgICAgICAgICAgIFtidXR0b25DZWxsIHNldEJlemVsU3R5bGU6TlNT
aGFkb3dsZXNzU3F1YXJlQmV6ZWxTdHlsZV07CisgICAgfSBlbHNlIGlmIChbYnV0dG9uQ2VsbCBi
ZXplbFN0eWxlXSAhPSBOU1JvdW5kZWRCZXplbFN0eWxlKQorICAgICAgICBbYnV0dG9uQ2VsbCBz
ZXRCZXplbFN0eWxlOk5TUm91bmRlZEJlemVsU3R5bGVdOworCisgICAgc2V0Q29udHJvbFNpemUo
YnV0dG9uQ2VsbCwgYnV0dG9uU2l6ZXMoKSwgem9vbWVkUmVjdC5zaXplKCksIHpvb21GYWN0b3Ip
OworCisgICAgaWYgKGRlZmF1bHRCdXR0b24gIT0gKHN0YXRlcyAmIERlZmF1bHRTdGF0ZSkpIHsK
KyAgICAgICAgZGVmYXVsdEJ1dHRvbiA9ICFkZWZhdWx0QnV0dG9uOworICAgICAgICBbYnV0dG9u
Q2VsbCBzZXRLZXlFcXVpdmFsZW50OihkZWZhdWx0QnV0dG9uID8gQCJcciIgOiBAIiIpXTsKKyAg
ICB9CisKKyAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCisg
ICAgdXBkYXRlU3RhdGVzKGJ1dHRvbkNlbGwsIHN0YXRlcyk7CisgICAgCisgICAgcmV0dXJuIGJ1
dHRvbkNlbGw7Cit9CisKK3N0YXRpYyB2b2lkIHBhaW50QnV0dG9uKENvbnRyb2xQYXJ0IHBhcnQs
IENvbnRyb2xTdGF0ZXMgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZp
ZXcpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgCisgICAgLy8gRGV0
ZXJtaW5lIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG5lZWRlZCBmb3IgdGhlIGNvbnRyb2wgYW5kIHBy
ZXBhcmUgdGhlIGNlbGwgZm9yIHBhaW50aW5nLgorICAgIE5TQnV0dG9uQ2VsbCAqYnV0dG9uQ2Vs
bCA9IGJ1dHRvbihwYXJ0LCBzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOworICAgIExv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQoY29udGV4dCk7CisKKyAgICBO
U0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gW2J1dHRvbkNlbGwgY29udHJvbFNpemVdOworICAg
IEludFNpemUgem9vbWVkU2l6ZSA9IGJ1dHRvblNpemVzKClbY29udHJvbFNpemVdOworICAgIHpv
b21lZFNpemUuc2V0V2lkdGgoem9vbWVkUmVjdC53aWR0aCgpKTsgLy8gQnV0dG9ucyBkb24ndCBl
dmVyIGNvbnN0cmFpbiB3aWR0aCwgc28gdGhlIHpvb21lZCB3aWR0aCBjYW4ganVzdCBiZSBob25v
cmVkLgorICAgIHpvb21lZFNpemUuc2V0SGVpZ2h0KHpvb21lZFNpemUuaGVpZ2h0KCkgKiB6b29t
RmFjdG9yKTsKKyAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHpvb21lZFJlY3Q7CisgICAgaWYg
KFtidXR0b25DZWxsIGJlemVsU3R5bGVdID09IE5TUm91bmRlZEJlemVsU3R5bGUpIHsKKyAgICAg
ICAgLy8gQ2VudGVyIHRoZSBidXR0b24gd2l0aGluIHRoZSBhdmFpbGFibGUgc3BhY2UuCisgICAg
ICAgIGlmIChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgPiB6b29tZWRTaXplLmhlaWdodCgpKSB7Cisg
ICAgICAgICAgICBpbmZsYXRlZFJlY3Quc2V0WShpbmZsYXRlZFJlY3QueSgpICsgKGluZmxhdGVk
UmVjdC5oZWlnaHQoKSAtIHpvb21lZFNpemUuaGVpZ2h0KCkpIC8gMik7CisgICAgICAgICAgICBp
bmZsYXRlZFJlY3Quc2V0SGVpZ2h0KHpvb21lZFNpemUuaGVpZ2h0KCkpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNoYWRvdy4KKyAg
ICAgICAgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3QoaW5mbGF0ZWRSZWN0LCB6b29tZWRTaXpl
LCBidXR0b25NYXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUZhY3Rvcik7CisKKyAgICAgICAgaWYg
KHpvb21GYWN0b3IgIT0gMS4wZikgeworICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRo
KGluZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUZhY3Rvcik7CisgICAgICAgICAgICBpbmZsYXRl
ZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOworICAg
ICAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKGluZmxhdGVkUmVjdC54KCksIGluZmxhdGVkUmVj
dC55KCkpOworICAgICAgICAgICAgY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21GYWN0b3Is
IHpvb21GYWN0b3IpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRS
ZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOworICAgICAgICB9CisgICAgfSAKKworICAgIFti
dXR0b25DZWxsIGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3OkZsaXBw
ZWRWaWV3KCldOworICAgIFtidXR0b25DZWxsIHNldENvbnRyb2xWaWV3Om5pbF07CisKKyAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKKy8vIFRoZW1lIG92ZXJyaWRlcworCitpbnQg
VGhlbWVDaHJvbWl1bU1hYzo6YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoQ29udHJvbFBhcnQg
cGFydCkgY29uc3QKK3sKKyAgICBpZiAocGFydCA9PSBDaGVja2JveFBhcnQgfHwgcGFydCA9PSBS
YWRpb1BhcnQpCisgICAgICAgIHJldHVybiAtMjsKKyAgICByZXR1cm4gVGhlbWU6OmJhc2VsaW5l
UG9zaXRpb25BZGp1c3RtZW50KHBhcnQpOworfQorCitGb250RGVzY3JpcHRpb24gVGhlbWVDaHJv
bWl1bU1hYzo6Y29udHJvbEZvbnQoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwg
ZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAg
Y2FzZSBQdXNoQnV0dG9uUGFydDogeworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnRE
ZXNjcmlwdGlvbjsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6
ZSh0cnVlKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZv
bnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHkpOworCisgICAgICAgICAgICBOU0ZvbnQqIG5zRm9u
dCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29u
dHJvbFNpemU6Y29udHJvbFNpemVGb3JGb250KGZvbnQpXV07CisgICAgICAgICAgICBmb250RGVz
Y3JpcHRpb24uZmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoW25zRm9udCBmYW1pbHlOYW1lXSk7Cisg
ICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFtuc0ZvbnQgcG9pbnRT
aXplXSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoW25zRm9udCBwb2ludFNpemVdICogem9vbUZhY3Rvcik7CisgICAgICAgICAgICBy
ZXR1cm4gZm9udERlc2NyaXB0aW9uOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gVGhlbWU6OmNvbnRyb2xGb250KHBhcnQsIGZvbnQsIHpvb21GYWN0b3Ip
OworICAgIH0KK30KKworTGVuZ3RoU2l6ZSBUaGVtZUNocm9taXVtTWFjOjpjb250cm9sU2l6ZShD
b250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29t
ZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAoreworICAgIHN3aXRjaCAocGFydCkgewor
ICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAgICAgIHJldHVybiBjaGVja2JveFNp
emUoZm9udCwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvcik7CisgICAgICAgIGNhc2UgUmFkaW9QYXJ0
OgorICAgICAgICAgICAgcmV0dXJuIHJhZGlvU2l6ZShmb250LCB6b29tZWRTaXplLCB6b29tRmFj
dG9yKTsKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICAgICAgICAgIC8vIEhlaWdo
dCBpcyByZXNldCB0byBhdXRvIHNvIHRoYXQgc3BlY2lmaWVkIGhlaWdodHMgY2FuIGJlIGlnbm9y
ZWQuCisgICAgICAgICAgICByZXR1cm4gc2l6ZUZyb21Gb250KGZvbnQsIExlbmd0aFNpemUoem9v
bWVkU2l6ZS53aWR0aCgpLCBMZW5ndGgoKSksIHpvb21GYWN0b3IsIGJ1dHRvblNpemVzKCkpOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIHpvb21lZFNpemU7CisgICAgfQor
fQorCitMZW5ndGhTaXplIFRoZW1lQ2hyb21pdW1NYWM6Om1pbmltdW1Db250cm9sU2l6ZShDb250
cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAor
eworICAgIHN3aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6Cisg
ICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgQnV0dG9uUGFydDoK
KyAgICAgICAgICAgIHJldHVybiBMZW5ndGhTaXplKExlbmd0aCgwLCBGaXhlZCksIExlbmd0aChz
dGF0aWNfY2FzdDxpbnQ+KDE1ICogem9vbUZhY3RvciksIEZpeGVkKSk7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gVGhlbWU6Om1pbmltdW1Db250cm9sU2l6ZShwYXJ0LCBm
b250LCB6b29tRmFjdG9yKTsKKyAgICB9Cit9CisKK0xlbmd0aEJveCBUaGVtZUNocm9taXVtTWFj
Ojpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAoreworICAgIHN3
aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CisgICAgICAgIGNh
c2UgRGVmYXVsdEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICAgICAg
ICAgIHJldHVybiBMZW5ndGhCb3goMCwgem9vbWVkQm94LnJpZ2h0KCkudmFsdWUoKSwgMCwgem9v
bWVkQm94LmxlZnQoKS52YWx1ZSgpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBUaGVtZTo6Y29udHJvbEJvcmRlcihwYXJ0LCBmb250LCB6b29tZWRCb3gsIHpvb21GYWN0
b3IpOworICAgIH0KK30KKworTGVuZ3RoQm94IFRoZW1lQ2hyb21pdW1NYWM6OmNvbnRyb2xQYWRk
aW5nKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aEJveCYg
em9vbWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAoreworICAgIHN3aXRjaCAocGFydCkg
eworICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OiB7CisgICAgICAgICAgICAvLyBKdXN0IHVz
ZSA4cHguICBBcHBLaXQgd2FudHMgdG8gdXNlIDExcHggZm9yIG1pbmkgYnV0dG9ucywgYnV0IHRo
YXQgcGFkZGluZyBpcyBqdXN0IHRvbyBsYXJnZQorICAgICAgICAgICAgLy8gZm9yIHJlYWwtd29y
bGQgV2ViIHNpdGVzIChjcmVhdGluZyBhIGh1Z2UgbmVjZXNzYXJ5IG1pbmltdW0gd2lkdGggZm9y
IGJ1dHRvbnMgd2hvc2Ugc3BhY2UgaXMKKyAgICAgICAgICAgIC8vIGJ5IGRlZmluaXRpb24gY29u
c3RyYWluZWQsIHNpbmNlIHdlIHNlbGVjdCBtaW5pIG9ubHkgZm9yIHNtYWxsIGNyYW1wZWQgZW52
aXJvbm1lbnRzLgorICAgICAgICAgICAgLy8gVGhpcyBhbHNvIGd1YXJhbnRlZXMgdGhlIEhUTUwg
PGJ1dHRvbj4gd2lsbCBtYXRjaCBvdXIgcmVuZGVyaW5nIGJ5IGRlZmF1bHQsIHNpbmNlIHdlJ3Jl
IHVzaW5nIGEgY29uc2lzdGVudAorICAgICAgICAgICAgLy8gcGFkZGluZy4KKyAgICAgICAgICAg
IGNvbnN0IGludCBwYWRkaW5nID0gOCAqIHpvb21GYWN0b3I7CisgICAgICAgICAgICByZXR1cm4g
TGVuZ3RoQm94KDAsIHBhZGRpbmcsIDAsIHBhZGRpbmcpOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gVGhlbWU6OmNvbnRyb2xQYWRkaW5nKHBhcnQsIGZv
bnQsIHpvb21lZEJveCwgem9vbUZhY3Rvcik7CisgICAgfQorfQorCit2b2lkIFRoZW1lQ2hyb21p
dW1NYWM6OmluZmxhdGVDb250cm9sUGFpbnRSZWN0KENvbnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xT
dGF0ZXMgc3RhdGVzLCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yKSBjb25z
dAoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIHN3aXRjaCAocGFydCkg
eworICAgICAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICAgICAgLy8gV2UgaW5mbGF0
ZSB0aGUgcmVjdCBhcyBuZWVkZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0
aGUgY2VsbCB0byBhY2NvbW1vZGF0ZSB0aGUgY2hlY2tib3gKKyAgICAgICAgICAgIC8vIHNoYWRv
dyIgYW5kIHRoZSBjaGVjay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91
bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KKyAgICAgICAgICAgIE5TQ2VsbCAqY2VsbCA9
IGNoZWNrYm94KHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICBO
U0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gW2NlbGwgY29udHJvbFNpemVdOworICAgICAgICAg
ICAgSW50U2l6ZSB6b29tZWRTaXplID0gY2hlY2tib3hTaXplcygpW2NvbnRyb2xTaXplXTsKKyAg
ICAgICAgICAgIHpvb21lZFNpemUuc2V0SGVpZ2h0KHpvb21lZFNpemUuaGVpZ2h0KCkgKiB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIHpvb21lZFNpemUuc2V0V2lkdGgoem9vbWVkU2l6ZS53aWR0
aCgpICogem9vbUZhY3Rvcik7CisgICAgICAgICAgICB6b29tZWRSZWN0ID0gaW5mbGF0ZVJlY3Qo
em9vbWVkUmVjdCwgem9vbWVkU2l6ZSwgY2hlY2tib3hNYXJnaW5zKGNvbnRyb2xTaXplKSwgem9v
bUZhY3Rvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFJh
ZGlvUGFydDogeworICAgICAgICAgICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBuZWVkZWQg
dG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0byBhY2NvbW1vZGF0
ZSB0aGUgcmFkaW8gYnV0dG9uCisgICAgICAgICAgICAvLyBzaGFkb3ciLiAgV2UgZG9uJ3QgY29u
c2lkZXIgdGhpcyBwYXJ0IG9mIHRoZSBib3VuZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0Lgor
ICAgICAgICAgICAgTlNDZWxsICpjZWxsID0gcmFkaW8oc3RhdGVzLCB6b29tZWRSZWN0LCB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbY2VsbCBj
b250cm9sU2l6ZV07CisgICAgICAgICAgICBJbnRTaXplIHpvb21lZFNpemUgPSByYWRpb1NpemVz
KClbY29udHJvbFNpemVdOworICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9vbWVk
U2l6ZS5oZWlnaHQoKSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRX
aWR0aCh6b29tZWRTaXplLndpZHRoKCkgKiB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHpvb21l
ZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCByYWRpb01hcmdpbnMo
Y29udHJvbFNpemUpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRv
blBhcnQ6CisgICAgICAgIGNhc2UgQnV0dG9uUGFydDogeworICAgICAgICAgICAgTlNCdXR0b25D
ZWxsICpjZWxsID0gYnV0dG9uKHBhcnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZhY3Rvcik7
CisgICAgICAgICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gW2NlbGwgY29udHJvbFNp
emVdOworCisgICAgICAgICAgICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBh
Y2NvdW50IGZvciB0aGUgQXF1YSBidXR0b24ncyBzaGFkb3cuCisgICAgICAgICAgICBpZiAoW2Nl
bGwgYmV6ZWxTdHlsZV0gPT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkgeworICAgICAgICAgICAgICAg
IEludFNpemUgem9vbWVkU2l6ZSA9IGJ1dHRvblNpemVzKClbY29udHJvbFNpemVdOworICAgICAg
ICAgICAgICAgIHpvb21lZFNpemUuc2V0SGVpZ2h0KHpvb21lZFNpemUuaGVpZ2h0KCkgKiB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgICAgICB6b29tZWRTaXplLnNldFdpZHRoKHpvb21lZFJlY3Qu
d2lkdGgoKSk7IC8vIEJ1dHRvbnMgZG9uJ3QgZXZlciBjb25zdHJhaW4gd2lkdGgsIHNvIHRoZSB6
b29tZWQgd2lkdGggY2FuIGp1c3QgYmUgaG9ub3JlZC4KKyAgICAgICAgICAgICAgICB6b29tZWRS
ZWN0ID0gaW5mbGF0ZVJlY3Qoem9vbWVkUmVjdCwgem9vbWVkU2l6ZSwgYnV0dG9uTWFyZ2lucyhj
b250cm9sU2l6ZSksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKK3ZvaWQgVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnQoQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9v
bUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHBh
cnQpIHsKKyAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgICAgICAgICBwYWludENoZWNr
Ym94KHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgICAgICAg
ICBwYWludFJhZGlvKHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Ny
b2xsVmlldyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFy
dDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25Q
YXJ0OgorICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CisgICAgICAgICAgICBwYWludEJ1
dHRvbihwYXJ0LCBzdGF0ZXMsIGNvbnRleHQsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9s
bFZpZXcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vVGhlbWVDaHJvbWl1bU1hYy5tbQpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpl
b2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5oCShyZXZpc2lvbiA0ODM1MykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiB0eXBlZGVmIHN0cnVjdCBD
R1BvaW50IENHUG9pbnQ7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9S
TShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgUExBVEZPUk0oREFSV0lOKSkKICNpZmRl
ZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1
Y3QgQ0dQb2ludCBOU1BvaW50OwogI2Vsc2UKQEAgLTg0LDcgKzg0LDggQEAgcHVibGljOgogICAg
IG9wZXJhdG9yIENHUG9pbnQoKSBjb25zdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKSAm
JiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykKKyNp
ZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dH
RU9NRVRSWV9UWVBFUykpIFwKKyAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgUExBVEZP
Uk0oREFSV0lOKSkKICAgICBGbG9hdFBvaW50KGNvbnN0IE5TUG9pbnQmKTsKICAgICBvcGVyYXRv
ciBOU1BvaW50KCkgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFJlY3QuaAkocmV2aXNpb24gNDgzNTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiB0eXBlZGVmIHN0
cnVjdCBDR1JlY3QgQ0dSZWN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExB
VEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIFBMQVRGT1JNKERBUldJTikpCiAj
aWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVkZWYg
c3RydWN0IENHUmVjdCBOU1JlY3Q7CiAjZWxzZQpAQCAtMTI3LDcgKzEyNyw4IEBAIHB1YmxpYzoK
ICAgICBvcGVyYXRvciBDR1JlY3QoKSBjb25zdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFD
KSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykK
KyNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNf
Q0dHRU9NRVRSWV9UWVBFUykpIFwKKyAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgUExB
VEZPUk0oREFSV0lOKSkKICAgICBGbG9hdFJlY3QoY29uc3QgTlNSZWN0Jik7CiAgICAgb3BlcmF0
b3IgTlNSZWN0KCkgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFNpemUuaAkocmV2aXNpb24gNDgzNTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiB0eXBlZGVmIHN0
cnVjdCBDR1NpemUgQ0dTaXplOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExB
VEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIFBMQVRGT1JNKERBUldJTikpCiAj
aWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVkZWYg
c3RydWN0IENHU2l6ZSBOU1NpemU7CiAjZWxzZQpAQCAtNzksNyArNzksOCBAQCBwdWJsaWM6CiAg
ICAgb3BlcmF0b3IgQ0dTaXplKCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykg
JiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpCisj
aWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NH
R0VPTUVUUllfVFlQRVMpKSBcCisgICAgICB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIFBMQVRG
T1JNKERBUldJTikpCiAgICAgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IE5TU2l6ZSAmKTsgLy8g
ZG9uJ3QgZG8gdGhpcyBpbXBsaWNpdGx5IHNpbmNlIGl0J3MgbG9zc3kKICAgICBvcGVyYXRvciBO
U1NpemUoKSBjb25zdDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0
LmgJKHJldmlzaW9uIDQ4MzUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKIHR5cGVkZWYgc3RydWN0IENHUmVj
dCBDR1JlY3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMp
IHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgUExBVEZPUk0oREFSV0lOKSkKICNpZmRlZiBOU0dF
T01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dS
ZWN0IE5TUmVjdDsKICNlbHNlCkBAIC0xNjEsNyArMTYxLDggQEAgcHVibGljOgogICAgIG9wZXJh
dG9yIFNrSVJlY3QoKSBjb25zdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKSAmJiAhZGVm
aW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykKKyNpZiAoUExB
VEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRS
WV9UWVBFUykpIFwKKyAgICAgIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgUExBVEZPUk0oREFS
V0lOKSkKICAgICBvcGVyYXRvciBOU1JlY3QoKSBjb25zdDsKICNlbmRpZgogCkBAIC0xOTgsNyAr
MTk5LDggQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJbnRSZWN0JiBhLAogSW50UmVj
dCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IENHUmVjdCYpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZ
UEVTKQorI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FN
RV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAm
JiBQTEFURk9STShEQVJXSU4pKQogSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IE5TUmVj
dCYpOwogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1NYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9t
aXVtTWFjLmgJKHJldmlzaW9uIDQ4MzUzKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNiBAQAogICoKICAqIENv
cHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRlciwgSW5jLgogICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IEdvb2dsZSwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9o
ZGUgQ2hyaXN0aWFuc2VuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2LDcgKzI1LDYgQEAKICNk
ZWZpbmUgUmVuZGVyVGhlbWVDaHJvbWl1bU1hY19oCiAKICNpbXBvcnQgIlJlbmRlclRoZW1lLmgi
Ci0jaW1wb3J0IDxBcHBLaXQvQXBwS2l0Lmg+CiAjaW1wb3J0IDx3dGYvSGFzaE1hcC5oPgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogCkBAIC0zNiwxODYgKzM0LDE2OSBAQAogY2xhc3MgV2Vi
Q29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXI7CiAjZW5kaWYKIAotbmFtZXNwYWNl
IFdlYkNvcmUgeworLy8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLm1tIGZpbGUpIGlz
IGEgY2xvbmUgb2YgUmVuZGVyVGhlbWVNYWMuaC4gU2VlCisvLyB0aGUgLm1tIGZpbGUgZm9yIGRl
dGFpbHMuCiAKLSAgICBjbGFzcyBSZW5kZXJTdHlsZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAot
ICAgIGNsYXNzIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0
ZSgpOworY2xhc3MgUmVuZGVyU3R5bGU7CiAKLSAgICAgICAgLy8gQSBtZXRob2QgdG8gb2J0YWlu
IHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2lsbCBv
bmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQotICAgICAgICAvLyBwb3NpdGlvbiBjYW5ub3QgYmUg
ZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcgY2hpbGQgY29udGVudC4gQ2hlY2tib3hlcyBhbmQgcmFk
aW8gYnV0dG9ucyBhcmUgZXhhbXBsZXMgb2YKLSAgICAgICAgLy8gY29udHJvbHMgdGhhdCBuZWVk
IHRvIGRvIHRoaXMuCi0gICAgICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3Qg
UmVuZGVyT2JqZWN0KikgY29uc3Q7CitjbGFzcyBSZW5kZXJUaGVtZUNocm9taXVtTWFjIDogcHVi
bGljIFJlbmRlclRoZW1lIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJU
aGVtZT4gY3JlYXRlKCk7CiAKLSAgICAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250
cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmpl
Y3QqKSBjb25zdDsKKyAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdl
cyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KKyAgICB2aXJ0dWFs
IGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAK
LSAgICAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGlu
ZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250
cm9sVGludHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgLy8gQSBnZW5lcmFsIG1ldGhv
ZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgorICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVy
T2JqZWN0KiwgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChj
b25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIGlz
Q29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0
IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRy
b2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBi
YWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1B
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0g
ICAgICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1J
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29s
b3IgcGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7
CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0
Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBw
bGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpIGNvbnN0OwogCi0gICAg
ICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpIGNvbnN0OwotICAgICAg
ICAKLSAgICAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7CisgICAg
dmlydHVhbCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzY3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQo
Q29udHJvbFBhcnQpIHsgcmV0dXJuIFNtYWxsU2Nyb2xsYmFyOyB9CisgICAgCisgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7CiAKLSAgICAgICAgLy8gU3lzdGVtIGZv
bnRzLgotICAgICAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgY3NzVmFsdWVJZCwgRm9u
dERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgLy8gU3lzdGVtIGZvbnRzLgorICAgIHZpcnR1YWwg
dm9pZCBzeXN0ZW1Gb250KGludCBjc3NWYWx1ZUlkLCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsK
IAotICAgICAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikg
Y29uc3Q7CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVu
ZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIGludCBwb3B1cElu
dGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBp
bnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgICAg
ICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSopIGNvbnN0
OwotICAgICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJT
dHlsZSopIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCBTY3JvbGxiYXJDb250cm9s
U2l6ZSBzY3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQoQ29udHJvbFBhcnQpIHsgcmV0dXJuIFNt
YWxsU2Nyb2xsYmFyOyB9CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShS
ZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICAKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50Q2Fw
c0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRp
bmdMZWZ0KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHBvcHVw
SW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICAKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAgICB2
aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdDsKKyAgICB2aXJ0
dWFsIENvbG9yIHN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdDsKIAotICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9ycygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycygpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKLSAgICAgICAgLy8gTWV0aG9kcyBmb3IgZWFjaCBhcHBlYXJhbmNlIHZhbHVlLgot
ICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OwotCi0gICAgICAgIHZp
cnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFk
aW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVz
dEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIFdlYkNvcmU6OkVs
ZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0Owot
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRo
dW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICAg
ICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2Fu
Y2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRz
RGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRS
ZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVu
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
LSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMoKTsKLSAgICAgICAgdmlydHVhbCB+UmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYygpOwotCi0gICAgICAgIEludFJlY3QgaW5mbGF0ZVJlY3QoY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZsb2F0IHpv
b21MZXZlbCA9IDEuMGYpIGNvbnN0OwotCi0gICAgICAgIC8vIEdldCB0aGUgY29udHJvbCBzaXpl
IGJhc2VkIG9mZiB0aGUgZm9udC4gIFVzZWQgYnkgc29tZSBvZiB0aGUgY29udHJvbHMgKGxpa2Ug
YnV0dG9ucykuCi0gICAgICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KFJlbmRl
clN0eWxlKikgY29uc3Q7Ci0gICAgICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JTeXN0
ZW1Gb250KFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0Q29udHJvbFNpemUo
TlNDZWxsKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMsIGNvbnN0IEludFNpemUmIG1pblNpemUsIGZs
b2F0IHpvb21MZXZlbCA9IDEuMGYpOwotICAgICAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5k
ZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAgICAgICAgSW50U2l6ZSBz
aXplRm9yRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKLSAg
ICAgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNp
emUqIHNpemVzKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRGb250RnJvbUNvbnRyb2xTaXplKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OwotCi0g
ICAgICAgIHZvaWQgdXBkYXRlQWN0aXZlU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0
Kik7Ci0gICAgICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRl
ck9iamVjdCopOwotICAgICAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqLCBjb25z
dCBSZW5kZXJPYmplY3QqKTsKLSAgICAgICAgdm9pZCB1cGRhdGVGb2N1c2VkU3RhdGUoTlNDZWxs
KiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgICAgIHZvaWQgdXBkYXRlUHJlc3NlZFN0YXRl
KE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCopOwotCi0gICAgICAgIC8vIEhlbHBlcnMgZm9y
IGFkanVzdGluZyBhcHBlYXJhbmNlIGFuZCBmb3IgcGFpbnRpbmcKLSAgICAgICAgY29uc3QgSW50
U2l6ZSogY2hlY2tib3hTaXplcygpIGNvbnN0OwotICAgICAgICBjb25zdCBpbnQqIGNoZWNrYm94
TWFyZ2lucygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldENoZWNrYm94Q2VsbFN0YXRlKGNvbnN0
IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICBjb25zdCBJbnRTaXpl
KiByYWRpb1NpemVzKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IGludCogcmFkaW9NYXJnaW5zKCkg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0UmFkaW9DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0
KiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZ0Zyb21D
b250cm9sU2l6ZShSZW5kZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNvbnN0OwotICAgICAgICBj
b25zdCBJbnRTaXplKiBidXR0b25TaXplcygpIGNvbnN0OwotICAgICAgICBjb25zdCBpbnQqIGJ1
dHRvbk1hcmdpbnMoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRCdXR0b25DZWxsU3RhdGUoY29u
c3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZvaWQgc2V0UG9w
dXBCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpOwot
ICAgICAgICBjb25zdCBJbnRTaXplKiBwb3B1cEJ1dHRvblNpemVzKCkgY29uc3Q7Ci0gICAgICAg
IGNvbnN0IGludCogcG9wdXBCdXR0b25NYXJnaW5zKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IGlu
dCogcG9wdXBCdXR0b25QYWRkaW5nKE5TQ29udHJvbFNpemUpIGNvbnN0OwotICAgICAgICB2b2lk
IHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIGNvbnN0IEludFNp
emUqIG1lbnVMaXN0U2l6ZXMoKSBjb25zdDsKLQotICAgICAgICBjb25zdCBJbnRTaXplKiBzZWFy
Y2hGaWVsZFNpemVzKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IEludFNpemUqIGNhbmNlbEJ1dHRv
blNpemVzKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25TaXpl
cygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFNlYXJjaENlbGxTdGF0ZShSZW5kZXJPYmplY3Qq
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZvaWQgc2V0U2VhcmNoRmllbGRTaXplKFJlbmRl
clN0eWxlKikgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICBOU0J1dHRvbkNlbGwqIGNoZWNrYm94
KCkgY29uc3Q7Ci0gICAgICAgIE5TQnV0dG9uQ2VsbCogcmFkaW8oKSBjb25zdDsKLSAgICAgICAg
TlNCdXR0b25DZWxsKiBidXR0b24oKSBjb25zdDsKLSAgICAgICAgTlNQb3BVcEJ1dHRvbkNlbGwq
IHBvcHVwQnV0dG9uKCkgY29uc3Q7Ci0gICAgICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2go
KSBjb25zdDsKLSAgICAgICAgTlNNZW51KiBzZWFyY2hNZW51VGVtcGxhdGUoKSBjb25zdDsKLSAg
ICAgICAgTlNTbGlkZXJDZWxsKiBzbGlkZXJUaHVtYkhvcml6b250YWwoKSBjb25zdDsKLSAgICAg
ICAgTlNTbGlkZXJDZWxsKiBzbGlkZXJUaHVtYlZlcnRpY2FsKCkgY29uc3Q7Ci0KLSAgICBwcml2
YXRlOgotICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxOU0J1dHRvbkNlbGw+IG1fY2hlY2tib3g7
Ci0gICAgICAgIG11dGFibGUgUmV0YWluUHRyPE5TQnV0dG9uQ2VsbD4gbV9yYWRpbzsKLSAgICAg
ICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNCdXR0b25DZWxsPiBtX2J1dHRvbjsKLSAgICAgICAgbXV0
YWJsZSBSZXRhaW5QdHI8TlNQb3BVcEJ1dHRvbkNlbGw+IG1fcG9wdXBCdXR0b247Ci0gICAgICAg
IG11dGFibGUgUmV0YWluUHRyPE5TU2VhcmNoRmllbGRDZWxsPiBtX3NlYXJjaDsKLSAgICAgICAg
bXV0YWJsZSBSZXRhaW5QdHI8TlNNZW51PiBtX3NlYXJjaE1lbnVUZW1wbGF0ZTsKLSAgICAgICAg
bXV0YWJsZSBSZXRhaW5QdHI8TlNTbGlkZXJDZWxsPiBtX3NsaWRlclRodW1iSG9yaXpvbnRhbDsK
LSAgICAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNTbGlkZXJDZWxsPiBtX3NsaWRlclRodW1iVmVy
dGljYWw7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICAgICAgYm9vbCBtX2lzU2xpZGVyVGh1bWJIb3Jp
em9udGFsUHJlc3NlZDsKLSAgICAgICAgYm9vbCBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNhbFByZXNz
ZWQ7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwogCi0gICAgICAgIG11dGFibGUgSGFzaE1hcDxpbnQsIFJHQkEzMj4g
bV9zeXN0ZW1Db2xvckNhY2hlOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgICAgICBSZXRhaW5QdHI8V2Vi
Q29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXI+IG1fbm90aWZpY2F0aW9uT2JzZXJ2
ZXI7Ci0gICAgfTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJU
aHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtCYWNr
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhUmV3aW5kQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBw
YWludE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVGlt
ZVJlbWFpbmluZyhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKIAorICAgIC8vIE1lZGlhIGNvbnRyb2xzCisgICAgdmlydHVhbCBT
dHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpOwogI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYygpOworICAgIHZpcnR1YWwgflJlbmRlclRoZW1l
Q2hyb21pdW1NYWMoKTsKKworICAgIEludFJlY3QgaW5mbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFNpemUmLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZsb2F0IHpvb21MZXZlbCA9IDEu
MGYpIGNvbnN0OworCisgICAgRmxvYXRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBS
ZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRl
cmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3Q7
CisgICAgCisgICAgLy8gR2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiAg
VXNlZCBieSBzb21lIG9mIHRoZSBjb250cm9scyAobGlrZSBidXR0b25zKS4KKyAgICBOU0NvbnRy
b2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIE5TQ29u
dHJvbFNpemUgY29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKikgY29uc3Q7Cisg
ICAgdm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJbnRTaXplKiBzaXplcywgY29u
c3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZik7CisgICAgdm9pZCBz
ZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7
CisgICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNp
emVzKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiwg
Y29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIHZvaWQgc2V0Rm9udEZyb21Db250cm9s
U2l6ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBOU0NvbnRyb2xTaXplKSBjb25z
dDsKKworICAgIHZvaWQgdXBkYXRlQWN0aXZlU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2Jq
ZWN0Kik7CisgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVy
T2JqZWN0Kik7CisgICAgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVu
ZGVyT2JqZWN0Kik7CisgICAgdm9pZCB1cGRhdGVGb2N1c2VkU3RhdGUoTlNDZWxsKiwgY29uc3Qg
UmVuZGVyT2JqZWN0Kik7CisgICAgdm9pZCB1cGRhdGVQcmVzc2VkU3RhdGUoTlNDZWxsKiwgY29u
c3QgUmVuZGVyT2JqZWN0Kik7CisKKyAgICAvLyBIZWxwZXJzIGZvciBhZGp1c3RpbmcgYXBwZWFy
YW5jZSBhbmQgZm9yIHBhaW50aW5nCisKKyAgICB2b2lkIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRl
KGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKKyAgICBjb25zdCBJbnRTaXpl
KiBwb3B1cEJ1dHRvblNpemVzKCkgY29uc3Q7CisgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvbk1h
cmdpbnMoKSBjb25zdDsKKyAgICBjb25zdCBpbnQqIHBvcHVwQnV0dG9uUGFkZGluZyhOU0NvbnRy
b2xTaXplKSBjb25zdDsKKyAgICB2b2lkIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgY29uc3QgSW50U2l6ZSogbWVudUxpc3RTaXplcygpIGNvbnN0OworCisgICAgY29u
c3QgSW50U2l6ZSogc2VhcmNoRmllbGRTaXplcygpIGNvbnN0OworICAgIGNvbnN0IEludFNpemUq
IGNhbmNlbEJ1dHRvblNpemVzKCkgY29uc3Q7CisgICAgY29uc3QgSW50U2l6ZSogcmVzdWx0c0J1
dHRvblNpemVzKCkgY29uc3Q7CisgICAgdm9pZCBzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgSW50UmVjdCYpOworICAgIHZvaWQgc2V0U2VhcmNoRmllbGRTaXplKFJlbmRl
clN0eWxlKikgY29uc3Q7CisgICAgCisgICAgTlNQb3BVcEJ1dHRvbkNlbGwqIHBvcHVwQnV0dG9u
KCkgY29uc3Q7CisgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCgpIGNvbnN0OworICAgIE5T
TWVudSogc2VhcmNoTWVudVRlbXBsYXRlKCkgY29uc3Q7CisgICAgTlNTbGlkZXJDZWxsKiBzbGlk
ZXJUaHVtYkhvcml6b250YWwoKSBjb25zdDsKKyAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRodW1i
VmVydGljYWwoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBtdXRhYmxlIFJldGFpblB0cjxOU1Bv
cFVwQnV0dG9uQ2VsbD4gbV9wb3B1cEJ1dHRvbjsKKyAgICBtdXRhYmxlIFJldGFpblB0cjxOU1Nl
YXJjaEZpZWxkQ2VsbD4gbV9zZWFyY2g7CisgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNNZW51PiBt
X3NlYXJjaE1lbnVUZW1wbGF0ZTsKKyAgICBtdXRhYmxlIFJldGFpblB0cjxOU1NsaWRlckNlbGw+
IG1fc2xpZGVyVGh1bWJIb3Jpem9udGFsOworICAgIG11dGFibGUgUmV0YWluUHRyPE5TU2xpZGVy
Q2VsbD4gbV9zbGlkZXJUaHVtYlZlcnRpY2FsOworCisgICAgYm9vbCBtX2lzU2xpZGVyVGh1bWJI
b3Jpem9udGFsUHJlc3NlZDsKKyAgICBib29sIG1faXNTbGlkZXJUaHVtYlZlcnRpY2FsUHJlc3Nl
ZDsKKworICAgIG11dGFibGUgSGFzaE1hcDxpbnQsIFJHQkEzMj4gbV9zeXN0ZW1Db2xvckNhY2hl
OworCisgICAgUmV0YWluUHRyPFdlYkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlvbk9ic2VydmVy
PiBtX25vdGlmaWNhdGlvbk9ic2VydmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gUmVuZGVyVGhlbWVDaHJvbWl1bU1hY19oCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDQ4MzUzKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUsIEluYy4KLSAqIENvcHlyaWdodCAo
QykgMjAwOSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC0xOSwyNSArMTgsMTYgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAK
LS8vIEZJWE1FOiB3ZSBzdGlsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgcGFzc2luZyBhIG51bGwg
dmlldyB0byB0aGUgY2VsbAotLy8gZHJhd2luZyByb3V0aW5lcyB3aWxsIHdvcmsuIEkgZXhwZWN0
IG5vdCwgYW5kIGlmIHRoYXQncyB0aGUgY2FzZSB3ZSdsbCBoYXZlCi0vLyB0byBmaWd1cmUgb3V0
IHNvbWV0aGluZyBlbHNlLiBGb3Igbm93LCBhdCBsZWFzdCBsZWF2ZSB0aGUgbGluZXMgY29tbWVu
dGVkCi0vLyBpbiwgYnV0IHRoZSBwcm9jdXJlbWVudCBvZiB0aGUgdmlldyBpZiAwJ2QuCi0KICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oIgogCi0j
aW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+Ci0jaW1wb3J0IDxDb2NvYS9Db2NvYS5oPgotI2ltcG9y
dCA8bWF0aC5oPgotCiAjaW1wb3J0ICJCaXRtYXBJbWFnZS5oIgogI2ltcG9ydCAiQ2hyb21pdW1C
cmlkZ2UuaCIKICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJDU1NTdHlsZVNlbGVjdG9y
LmgiCiAjaW1wb3J0ICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW1wb3J0ICJEb2N1bWVudC5oIgog
I2ltcG9ydCAiRWxlbWVudC5oIgotI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9y
dCAiRnJhbWVWaWV3LmgiCiAjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbXBvcnQgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKQEAgLTUwLDkgKzQwLDEzIEBACiAjaW1wb3J0ICJSZW5kZXJTbGlk
ZXIuaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgot
I2ltcG9ydCAiVGltZVJhbmdlcy5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5o
IgorI2ltcG9ydCAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKKyNpbXBvcnQgPENhcmJvbi9DYXJi
b24uaD4KKyNpbXBvcnQgPENvY29hL0NvY29hLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+
CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW1wb3J0IDxtYXRoLmg+CiAKICNpZmRl
ZiBCVUlMRElOR19PTl9USUdFUgogdHlwZWRlZiBpbnQgTlNJbnRlZ2VyOwpAQCAtNjEsNiArNTUs
MjMgQEAgdHlwZWRlZiB1bnNpZ25lZCBOU1VJbnRlZ2VyOwogCiB1c2luZyBzdGQ6Om1pbjsKIAor
Ly8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLmggZmlsZSkgaXMgYSBjbG9uZSBvZiBS
ZW5kZXJUaGVtZU1hYy5tbS4KKy8vIEJlY2F1c2UgdGhlIG9yaWdpbmFsIGZpbGUgaXMgZGVzaWdu
ZWQgdG8gcnVuIGluLXByb2Nlc3MgaW5zaWRlIGEgQ29jb2EgdmlldywKKy8vIHdlIG11c3QgbWFp
bnRhaW4gYSBmb3JrLiBQbGVhc2UgbWFpbnRhaW4gdGhpcyBmaWxlIGJ5IHBlcmZvcm1pbmcgcGFy
YWxsZWwKKy8vIGNoYW5nZXMgdG8gaXQuCisvLworLy8gVGhlIG9ubHkgY2hhbmdlcyBmcm9tIFJl
bmRlclRoZW1lTWFjIHNob3VsZCBiZToKKy8vIC0gVGhlIGNsYXNzbmFtZSBjaGFuZ2UgZnJvbSBS
ZW5kZXJUaGVtZU1hYyB0byBSZW5kZXJUaGVtZUNocm9taXVtTWFjLgorLy8gLSBUaGUgaW50cm9k
dWN0aW9uIG9mIFJUQ01GbGlwcGVkVmlldyBhbmQgRmxpcHBlZFZpZXcoKSBhbmQgaXRzIHVzZSBh
cyB0aGUKKy8vICAgcGFyZW50IHZpZXcgZm9yIGNlbGwgcmVuZGVyaW5nLgorLy8gLSBJbiBwbGF0
Zm9ybUZvY3VzUmluZ0NvbG9yKCksIHRoZSB1c2Ugb2YgQ2hyb21pdW1CcmlkZ2UgdG8gZGV0ZXJt
aW5lIGlmCisvLyAgIHdlJ3JlIGluIGxheW91dCB0ZXN0IG1vZGUuCisvLyAtIHVwZGF0ZUFjdGl2
ZVN0YXRlKCkgYW5kIGl0cyB1c2UgdG8gdXBkYXRlIHRoZSBjZWxscycgdmlzdWFsIGFwcGVhcmFu
Y2UuCisvLworLy8gRm9yIGFsbCBvdGhlciBkaWZmZXJlbmNlcywgaWYgaXQgd2FzIGludHJvZHVj
ZWQgaW4gdGhpcyBmaWxlLCB0aGVuIHRoZQorLy8gbWFpbnRhaW5lciBmb3Jnb3QgdG8gaW5jbHVk
ZSBpdCBpbiB0aGUgbGlzdDsgb3RoZXJ3aXNlIGl0IGlzIGFuIHVwZGF0ZSB0aGF0CisvLyBzaG91
bGQgaGF2ZSBiZWVuIGFwcGxpZWQgdG8gdGhpcyBmaWxlIGJ1dCB3YXMgbm90LgorCiAvLyBUaGUg
bWV0aG9kcyBpbiB0aGlzIGZpbGUgYXJlIHNwZWNpZmljIHRvIHRoZSBNYWMgT1MgWCBwbGF0Zm9y
bS4KIAogLy8gRklYTUU6IFRoZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBjb2RlIGluIHRoaXMgY2xh
c3Mgc2hvdWxkIGJlIGZhY3RvcmVkIG91dCBhbmQgbWVyZ2VkIHdpdGggUmVuZGVyVGhlbWVTYWZh
cmkuIApAQCAtODUsNDggKzk2LDY2IEBAIHVzaW5nIHN0ZDo6bWluOwogICAgIHJldHVybiBzZWxm
OwogfQogCi0tICh2b2lkKXN5c3RlbUNvbG9yc0RpZENoYW5nZTooTlNOb3RpZmljYXRpb24gKilu
b3RpZmljYXRpb24KKy0gKHZvaWQpc3lzdGVtQ29sb3JzRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlv
biAqKXVudXNlZE5vdGlmaWNhdGlvbgogewotICAgIEFTU0VSVChbW25vdGlmaWNhdGlvbiBuYW1l
XSBpc0VxdWFsVG9TdHJpbmc6TlNTeXN0ZW1Db2xvcnNEaWRDaGFuZ2VOb3RpZmljYXRpb25dKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHVudXNlZE5vdGlmaWNhdGlvbiwgW1t1bnVzZWROb3RpZmljYXRp
b24gbmFtZV0gaXNFcXVhbFRvU3RyaW5nOk5TU3lzdGVtQ29sb3JzRGlkQ2hhbmdlTm90aWZpY2F0
aW9uXSk7CiAgICAgX3RoZW1lLT5wbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOwogfQogCiBAZW5k
CiAKK0BpbnRlcmZhY2UgUlRDTUZsaXBwZWRWaWV3IDogTlNWaWV3Cit7fQorCistIChCT09MKWlz
RmxpcHBlZDsKKy0gKE5TVGV4dCAqKWN1cnJlbnRFZGl0b3I7CisKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFJUQ01GbGlwcGVkVmlldworCistIChCT09MKWlzRmxpcHBlZCB7CisgICAgcmV0dXJu
IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRmxpcHBlZF07Cit9CisKKy0g
KE5TVGV4dCAqKWN1cnJlbnRFZGl0b3IgeworICAgIHJldHVybiBuaWw7Cit9CisKK0BlbmQKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBlbnVt
IHsKLSAgICBUb3BNYXJnaW4sCi0gICAgUmlnaHRNYXJnaW4sCi0gICAgQm90dG9tTWFyZ2luLAot
ICAgIExlZnRNYXJnaW4KKyAgICB0b3BNYXJnaW4sCisgICAgcmlnaHRNYXJnaW4sCisgICAgYm90
dG9tTWFyZ2luLAorICAgIGxlZnRNYXJnaW4KIH07CiAKIGVudW0gewotICAgIFRvcFBhZGRpbmcs
Ci0gICAgUmlnaHRQYWRkaW5nLAotICAgIEJvdHRvbVBhZGRpbmcsCi0gICAgTGVmdFBhZGRpbmcK
KyAgICB0b3BQYWRkaW5nLAorICAgIHJpZ2h0UGFkZGluZywKKyAgICBib3R0b21QYWRkaW5nLAor
ICAgIGxlZnRQYWRkaW5nCiB9OwogCi0vLyBJbiBvdXIgTWFjIHBvcnQsIHdlIGRvbid0IGRlZmlu
ZSBQTEFURk9STShNQUMpIGFuZCB0aHVzIGRvbid0IHBpY2sgdXAgdGhlCi0vLyB8b3BlcmF0b3Ig
TlNSZWN0KCl8IG9uIFdlYkNvcmU6OkludFJlY3QgYW5kIEZsb2F0UmVjdC4gVGhpcyBzdWJzdGl0
dWVzIGZvcgotLy8gdGhhdCBtaXNzaW5nIGNvbnZlcnNpb24gb3BlcmF0b3IuCi1OU1JlY3QgSW50
UmVjdFRvTlNSZWN0KGNvbnN0IEludFJlY3QgJiByZWN0KQotewotICAgIHJldHVybiBOU01ha2VS
ZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLX0K
LQotTlNSZWN0IEZsb2F0UmVjdFRvTlNSZWN0KGNvbnN0IEZsb2F0UmVjdCAmIHJlY3QpCisvLyBJ
biBTbm93IExlb3BhcmQsIG1hbnkgY2VsbHMgb25seSBjaGVjayB0byBzZWUgaWYgdGhlIHZpZXcg
dGhleSdyZSBwYXNzZWQgaXMKKy8vIGZsaXBwZWQsIGFuZCBpZiBhIG5pbCB2aWV3IGlzIHBhc3Nl
ZCwgbmVnbGVjdCB0byBjaGVjayBpZiB0aGUgY3VycmVudAorLy8gZ3JhcGhpY3MgY29udGV4dCBp
cyBmbGlwcGVkLiBUaHVzIHdlIHBhc3MgYSBzaGFtIHZpZXcgdG8gdGhlbSwgb25lIHdob3NlCisv
LyBmbGlwcGVkIHN0YXRlIGp1c3QgcmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBjb250ZXh0Lgor
TlNWaWV3KiBGbGlwcGVkVmlldygpCiB7Ci0gICAgcmV0dXJuIE5TTWFrZVJlY3QocmVjdC54KCks
IHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIHN0YXRpYyBOU1Zp
ZXcqIHZpZXcgPSBbW1JUQ01GbGlwcGVkVmlldyBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIHZp
ZXc7CiB9CiAKLUludFJlY3QgTlNSZWN0VG9JbnRSZWN0KGNvbnN0IE5TUmVjdCAmIHJlY3QpCitQ
YXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqKQog
ewotICAgIHJldHVybiBJbnRSZWN0KHJlY3Qub3JpZ2luLngsIHJlY3Qub3JpZ2luLnksIHJlY3Qu
c2l6ZS53aWR0aCwgcmVjdC5zaXplLmhlaWdodCk7CisgICAgc3RhdGljIFJlbmRlclRoZW1lKiBy
dCA9IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKTsKKyAgICBy
ZXR1cm4gcnQ7CiB9CiAKIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OmNyZWF0ZSgpCkBAIC0xMzQsMTIgKzE2Myw2IEBAIFBhc3NSZWZQdHI8UmVuZGVyVGhl
bWU+IFJlbmRlclRoZW1lQ2hyb20KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1l
Q2hyb21pdW1NYWMpOwogfQogCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6
dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgc3RhdGljIFJlbmRlclRoZW1lKiBydCA9
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKTsKLSAgICByZXR1
cm4gcnQ7Ci19Ci0KIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OlJlbmRlclRoZW1lQ2hyb21pdW1N
YWMoKQogICAgIDogbV9pc1NsaWRlclRodW1iSG9yaXpvbnRhbFByZXNzZWQoZmFsc2UpCiAgICAg
LCBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNhbFByZXNzZWQoZmFsc2UpCkBAIC0xNzQsNiArMTk3LDE2
IEBAIENvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtQWMKICAgICByZXR1cm4g
Q29sb3Ioc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciByZWRDb21wb25lbnRdKSwgc3Rh
dGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciBncmVlbkNvbXBvbmVudF0pLCBzdGF0aWNfY2Fz
dDxpbnQ+KDI1NS4wICogW2NvbG9yIGJsdWVDb21wb25lbnRdKSk7CiB9CiAKK0NvbG9yIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yOjp3aGl0ZTsKK30KKworQ29sb3Ig
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xvcjo6YmxhY2s7Cit9CisK
IENvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBj
b25zdAogewogICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKQEAgLTE4
Miw2ICsyMTUsMTEgQEAgQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1Gbwog
ICAgIHJldHVybiBzeXN0ZW1Db2xvcihDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yKTsKIH0K
IAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBwbGF0Zm9ybUlu
YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7Cit9CisKIHN0YXRpYyBGb250V2VpZ2h0
IHRvRm9udFdlaWdodChOU0ludGVnZXIgYXBwS2l0Rm9udFdlaWdodCkKIHsKICAgICBBU1NFUlQo
YXBwS2l0Rm9udFdlaWdodCA+IDAgJiYgYXBwS2l0Rm9udFdlaWdodCA8IDE1KTsKQEAgLTIxMSw1
MSArMjQ5LDUxIEBAIHN0YXRpYyBGb250V2VpZ2h0IHRvRm9udFdlaWdodChOU0ludGVnZXIKIAog
dm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzeXN0ZW1Gb250KGludCBjc3NWYWx1ZUlkLCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKLSAgICBzdGF0aWMgRm9u
dERlc2NyaXB0aW9uIHN5c3RlbUZvbnQ7Ci0gICAgc3RhdGljIEZvbnREZXNjcmlwdGlvbiBzbWFs
bFN5c3RlbUZvbnQ7Ci0gICAgc3RhdGljIEZvbnREZXNjcmlwdGlvbiBtZW51Rm9udDsKLSAgICBz
dGF0aWMgRm9udERlc2NyaXB0aW9uIGxhYmVsRm9udDsKLSAgICBzdGF0aWMgRm9udERlc2NyaXB0
aW9uIG1pbmlDb250cm9sRm9udDsKLSAgICBzdGF0aWMgRm9udERlc2NyaXB0aW9uIHNtYWxsQ29u
dHJvbEZvbnQ7Ci0gICAgc3RhdGljIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udDsKKyAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgc3lzdGVtRm9udCwgKCkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9uLCBzbWFsbFN5c3RlbUZvbnQsICgp
KTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgbWVudUZvbnQsICgp
KTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgbGFiZWxGb250LCAo
KSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRpb24sIG1pbmlDb250cm9s
Rm9udCwgKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9uLCBzbWFs
bENvbnRyb2xGb250LCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRp
b24sIGNvbnRyb2xGb250LCAoKSk7CiAKICAgICBGb250RGVzY3JpcHRpb24qIGNhY2hlZERlc2M7
CiAgICAgTlNGb250KiBmb250ID0gbmlsOwogICAgIHN3aXRjaCAoY3NzVmFsdWVJZCkgewotICAg
IGNhc2UgQ1NTVmFsdWVTbWFsbENhcHRpb246Ci0gICAgICAgIGNhY2hlZERlc2MgPSAmc21hbGxT
eXN0ZW1Gb250OwotICAgICAgICBpZiAoIXNtYWxsU3lzdGVtRm9udC5pc0Fic29sdXRlU2l6ZSgp
KQotICAgICAgICAgICAgZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHNt
YWxsU3lzdGVtRm9udFNpemVdXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZU1l
bnU6Ci0gICAgICAgIGNhY2hlZERlc2MgPSAmbWVudUZvbnQ7Ci0gICAgICAgIGlmICghbWVudUZv
bnQuaXNBYnNvbHV0ZVNpemUoKSkKLSAgICAgICAgICAgIGZvbnQgPSBbTlNGb250IG1lbnVGb250
T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9udFNpemVdXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NWYWx1ZVN0YXR1c0JhcjoKLSAgICAgICAgY2FjaGVkRGVzYyA9ICZsYWJlbEZvbnQ7Ci0g
ICAgICAgIGlmICghbGFiZWxGb250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAgICAgICAgICBmb250
ID0gW05TRm9udCBsYWJlbEZvbnRPZlNpemU6W05TRm9udCBsYWJlbEZvbnRTaXplXV07Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbDoKLSAgICAgICAg
Y2FjaGVkRGVzYyA9ICZtaW5pQ29udHJvbEZvbnQ7Ci0gICAgICAgIGlmICghbWluaUNvbnRyb2xG
b250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1G
b250T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU01pbmlDb250
cm9sU2l6ZV1dOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxD
b250cm9sOgotICAgICAgICBjYWNoZWREZXNjID0gJnNtYWxsQ29udHJvbEZvbnQ7Ci0gICAgICAg
IGlmICghc21hbGxDb250cm9sRm9udC5pc0Fic29sdXRlU2l6ZSgpKQotICAgICAgICAgICAgZm9u
dCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29u
dHJvbFNpemU6TlNTbWFsbENvbnRyb2xTaXplXV07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTVmFsdWVXZWJraXRDb250cm9sOgotICAgICAgICBjYWNoZWREZXNjID0gJmNvbnRyb2xGb250
OwotICAgICAgICBpZiAoIWNvbnRyb2xGb250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAgICAgICAg
ICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9udFNpemVG
b3JDb250cm9sU2l6ZTpOU1JlZ3VsYXJDb250cm9sU2l6ZV1dOwotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBjYWNoZWREZXNjID0gJnN5c3RlbUZvbnQ7Ci0gICAgICAgIGlm
ICghc3lzdGVtRm9udC5pc0Fic29sdXRlU2l6ZSgpKQotICAgICAgICAgICAgZm9udCA9IFtOU0Zv
bnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplXV07CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVTbWFsbENhcHRpb246CisgICAgICAgICAgICBjYWNoZWREZXNjID0gJnNtYWxs
U3lzdGVtRm9udDsKKyAgICAgICAgICAgIGlmICghc21hbGxTeXN0ZW1Gb250LmlzQWJzb2x1dGVT
aXplKCkpCisgICAgICAgICAgICAgICAgZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpb
TlNGb250IHNtYWxsU3lzdGVtRm9udFNpemVdXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENTU1ZhbHVlTWVudToKKyAgICAgICAgICAgIGNhY2hlZERlc2MgPSAmbWVudUZvbnQ7
CisgICAgICAgICAgICBpZiAoIW1lbnVGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAg
ICAgICAgZm9udCA9IFtOU0ZvbnQgbWVudUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6
ZV1dOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTdGF0dXNCYXI6
CisgICAgICAgICAgICBjYWNoZWREZXNjID0gJmxhYmVsRm9udDsKKyAgICAgICAgICAgIGlmICgh
bGFiZWxGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICAgICAgZm9udCA9IFtOU0Zv
bnQgbGFiZWxGb250T2ZTaXplOltOU0ZvbnQgbGFiZWxGb250U2l6ZV1dOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRNaW5pQ29udHJvbDoKKyAgICAgICAg
ICAgIGNhY2hlZERlc2MgPSAmbWluaUNvbnRyb2xGb250OworICAgICAgICAgICAgaWYgKCFtaW5p
Q29udHJvbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05T
Rm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6
ZTpOU01pbmlDb250cm9sU2l6ZV1dOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q1NTVmFsdWVXZWJraXRTbWFsbENvbnRyb2w6CisgICAgICAgICAgICBjYWNoZWREZXNjID0gJnNt
YWxsQ29udHJvbEZvbnQ7CisgICAgICAgICAgICBpZiAoIXNtYWxsQ29udHJvbEZvbnQuaXNBYnNv
bHV0ZVNpemUoKSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZT
aXplOltOU0ZvbnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1NtYWxsQ29udHJvbFNp
emVdXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Q29u
dHJvbDoKKyAgICAgICAgICAgIGNhY2hlZERlc2MgPSAmY29udHJvbEZvbnQ7CisgICAgICAgICAg
ICBpZiAoIWNvbnRyb2xGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICAgICAgZm9u
dCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29u
dHJvbFNpemU6TlNSZWd1bGFyQ29udHJvbFNpemVdXTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY2FjaGVkRGVzYyA9ICZzeXN0ZW1Gb250OworICAg
ICAgICAgICAgaWYgKCFzeXN0ZW1Gb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICAg
ICAgZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXpl
XV07CiAgICAgfQogCiAgICAgaWYgKGZvbnQpIHsKQEAgLTI3Miw3ICszMTAsNyBAQCB2b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnN5c3RlbUZvbnQoCiAKIHN0YXRpYyBSR0JBMzIgY29udmVy
dE5TQ29sb3JUb0NvbG9yKE5TQ29sb3IgKmNvbG9yKQogewotICAgIE5TQ29sb3IgKmNvbG9ySW5D
b2xvclNwYWNlID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0NhbGlicmF0ZWRS
R0JDb2xvclNwYWNlXTsKKyAgICBOU0NvbG9yICpjb2xvckluQ29sb3JTcGFjZSA9IFtjb2xvciBj
b2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKICAgICBpZiAo
Y29sb3JJbkNvbG9yU3BhY2UpIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2FsZUZh
Y3RvciA9IG5leHRhZnRlcigyNTYuMCwgMC4wKTsKICAgICAgICAgcmV0dXJuIG1ha2VSR0Ioc3Rh
dGljX2Nhc3Q8aW50PihzY2FsZUZhY3RvciAqIFtjb2xvckluQ29sb3JTcGFjZSByZWRDb21wb25l
bnRdKSwKQEAgLTI5Miw3ICszMzAsNyBAQCBzdGF0aWMgUkdCQTMyIGNvbnZlcnROU0NvbG9yVG9D
b2xvcihOU0NvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVzUGVyUGl4ZWw6NAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhhc0FscGhhOllFUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGxhbmFyOk5P
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZU5hbWU6TlNDYWxpYnJhdGVkUkdCQ29sb3JTcGFj
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJ5dGVzUGVyUm93OjQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNQ
ZXJQaXhlbDozMl07CiAKQEAgLTMxOSw3ICszNTcsNyBAQCBzdGF0aWMgUkdCQTMyIG1lbnVCYWNr
Z3JvdW5kQ29sb3IoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlc1BlclBpeGVsOjQKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoYXNBbHBoYTpZRVMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BsYW5h
cjpOTwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2VOYW1lOk5TQ2FsaWJyYXRlZFJHQkNvbG9y
U3BhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3Bh
Y2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBieXRlc1BlclJvdzo0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
aXRzUGVyUGl4ZWw6MzJdOwogCkBAIC0zNTEsMTAxICszODksMTAxIEBAIENvbG9yIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnN5c3RlbUNvbG8KICAgICAKICAgICBDb2xvciBjb2xvcjsKICAgICBz
d2l0Y2ggKGNzc1ZhbHVlSWQpIHsKLSAgICBjYXNlIENTU1ZhbHVlQWN0aXZlYm9yZGVyOgotICAg
ICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBrZXlib2FyZEZvY3Vz
SW5kaWNhdG9yQ29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUFjdGl2
ZWNhcHRpb246Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9y
IHdpbmRvd0ZyYW1lVGV4dENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFs
dWVBcHB3b3Jrc3BhY2U6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtO
U0NvbG9yIGhlYWRlckNvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVC
YWNrZ3JvdW5kOgotICAgICAgICAvLyBVc2UgdGhlbWUgaW5kZXBlbmRlbnQgZGVmYXVsdAotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9uZmFjZToKLSAgICAgICAgLy8gV2Ug
dXNlIHRoaXMgdmFsdWUgaW5zdGVhZCBvZiBOU0NvbG9yJ3MgY29udHJvbENvbG9yIHRvIGF2b2lk
IHdlYnNpdGUgaW5jb21wYXRpYmlsaXRpZXMuCi0gICAgICAgIC8vIFdlIG1heSB3YW50IHRvIGNo
YW5nZSB0aGlzIHRvIHVzZSB0aGUgTlNDb2xvciBpbiBmdXR1cmUuCi0gICAgICAgIGNvbG9yID0g
MHhGRkMwQzBDMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbmhpZ2hs
aWdodDoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29u
dHJvbEhpZ2hsaWdodENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVC
dXR0b25zaGFkb3c6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0Nv
bG9yIGNvbnRyb2xTaGFkb3dDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Zh
bHVlQnV0dG9udGV4dDoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05T
Q29sb3IgY29udHJvbFRleHRDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Zh
bHVlQ2FwdGlvbnRleHQ6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtO
U0NvbG9yIHRleHRDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlR3Jh
eXRleHQ6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGRp
c2FibGVkQ29udHJvbFRleHRDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Zh
bHVlSGlnaGxpZ2h0OgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlND
b2xvciBzZWxlY3RlZFRleHRCYWNrZ3JvdW5kQ29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NWYWx1ZUhpZ2hsaWdodHRleHQ6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29s
b3JUb0NvbG9yKFtOU0NvbG9yIHNlbGVjdGVkVGV4dENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWJvcmRlcjoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0
TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbEJhY2tncm91bmRDb2xvcl0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlSW5hY3RpdmVjYXB0aW9uOgotICAgICAgICBjb2xv
ciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sQmFja2dyb3VuZENvbG9y
XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWNhcHRpb250ZXh0
OgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB0ZXh0Q29s
b3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUluZm9iYWNrZ3JvdW5kOgot
ICAgICAgICAvLyBUaGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIE5TQ29sb3IgZm9yIHRoaXMgc28g
d2UgdXNlIGEgaGFyZCBjb2RlZCB2YWx1ZS4KLSAgICAgICAgY29sb3IgPSAweEZGRkJGQ0M1Owot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlSW5mb3RleHQ6Ci0gICAgICAgIGNvbG9y
ID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHRleHRDb2xvcl0pOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1ZhbHVlTWVudToKLSAgICAgICAgY29sb3IgPSBtZW51QmFja2dy
b3VuZENvbG9yKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVNZW51dGV4dDoK
LSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2VsZWN0ZWRN
ZW51SXRlbVRleHRDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlU2Ny
b2xsYmFyOgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBz
Y3JvbGxCYXJDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlVGV4dDoK
LSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENvbG9y
XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRkYXJrc2hhZG93Ogot
ICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sRGFy
a1NoYWRvd0NvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRz
aGFkb3c6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHNo
YWRvd0NvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRmYWNl
OgotICAgICAgICAvLyBXZSB1c2UgdGhpcyB2YWx1ZSBpbnN0ZWFkIG9mIE5TQ29sb3IncyBjb250
cm9sQ29sb3IgdG8gYXZvaWQgd2Vic2l0ZSBpbmNvbXBhdGliaWxpdGllcy4KLSAgICAgICAgLy8g
V2UgbWF5IHdhbnQgdG8gY2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBOU0NvbG9yIGluIGZ1dHVyZS4K
LSAgICAgICAgY29sb3IgPSAweEZGQzBDMEMwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1ZhbHVlVGhyZWVkaGlnaGxpZ2h0OgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9D
b2xvcihbTlNDb2xvciBoaWdobGlnaHRDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1ZhbHVlVGhyZWVkbGlnaHRzaGFkb3c6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29s
b3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xMaWdodEhpZ2hsaWdodENvbG9yXSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcjoKLSAgICAgICAg
Y29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGlj
YXRvckNvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVXaW5kb3c6Ci0g
ICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHdpbmRvd0JhY2tn
cm91bmRDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlV2luZG93ZnJh
bWU6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHdpbmRv
d0ZyYW1lQ29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVdpbmRvd3Rl
eHQ6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHdpbmRv
d0ZyYW1lVGV4dENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVl
QWN0aXZlYm9yZGVyOgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3Io
W05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUFjdGl2ZWNhcHRpb246CisgICAgICAgICAgICBjb2xv
ciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB3aW5kb3dGcmFtZVRleHRDb2xvcl0p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVBcHB3b3Jrc3BhY2U6
CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBoZWFk
ZXJDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVCYWNr
Z3JvdW5kOgorICAgICAgICAgICAgLy8gVXNlIHRoZW1lIGluZGVwZW5kZW50IGRlZmF1bHQKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlQnV0dG9uZmFjZToKKyAgICAg
ICAgICAgIC8vIFdlIHVzZSB0aGlzIHZhbHVlIGluc3RlYWQgb2YgTlNDb2xvcidzIGNvbnRyb2xD
b2xvciB0byBhdm9pZCB3ZWJzaXRlIGluY29tcGF0aWJpbGl0aWVzLgorICAgICAgICAgICAgLy8g
V2UgbWF5IHdhbnQgdG8gY2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBOU0NvbG9yIGluIGZ1dHVyZS4K
KyAgICAgICAgICAgIGNvbG9yID0gMHhGRkMwQzBDMDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1ZhbHVlQnV0dG9uaGlnaGxpZ2h0OgorICAgICAgICAgICAgY29sb3IgPSBj
b252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbEhpZ2hsaWdodENvbG9yXSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnNoYWRvdzoKKyAg
ICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xT
aGFkb3dDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVC
dXR0b250ZXh0OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05T
Q29sb3IgY29udHJvbFRleHRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVDYXB0aW9udGV4dDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29s
b3JUb0NvbG9yKFtOU0NvbG9yIHRleHRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ1NTVmFsdWVHcmF5dGV4dDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5T
Q29sb3JUb0NvbG9yKFtOU0NvbG9yIGRpc2FibGVkQ29udHJvbFRleHRDb2xvcl0pOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVIaWdobGlnaHQ6CisgICAgICAgICAg
ICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBzZWxlY3RlZFRleHRCYWNr
Z3JvdW5kQ29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVl
SGlnaGxpZ2h0dGV4dDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9y
KFtOU0NvbG9yIHNlbGVjdGVkVGV4dENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NWYWx1ZUluYWN0aXZlYm9yZGVyOgorICAgICAgICAgICAgY29sb3IgPSBjb252
ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbEJhY2tncm91bmRDb2xvcl0pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWNhcHRpb246Cisg
ICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9s
QmFja2dyb3VuZENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZUluYWN0aXZlY2FwdGlvbnRleHQ6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0Nv
bG9yVG9Db2xvcihbTlNDb2xvciB0ZXh0Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1ZhbHVlSW5mb2JhY2tncm91bmQ6CisgICAgICAgICAgICAvLyBUaGVyZSBp
cyBubyBjb3JyZXNwb25kaW5nIE5TQ29sb3IgZm9yIHRoaXMgc28gd2UgdXNlIGEgaGFyZCBjb2Rl
ZCB2YWx1ZS4KKyAgICAgICAgICAgIGNvbG9yID0gMHhGRkZCRkNDNTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlSW5mb3RleHQ6CisgICAgICAgICAgICBjb2xvciA9
IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB0ZXh0Q29sb3JdKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlTWVudToKKyAgICAgICAgICAgIGNvbG9yID0g
bWVudUJhY2tncm91bmRDb2xvcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q1NTVmFsdWVNZW51dGV4dDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0Nv
bG9yKFtOU0NvbG9yIHNlbGVjdGVkTWVudUl0ZW1UZXh0Q29sb3JdKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlU2Nyb2xsYmFyOgorICAgICAgICAgICAgY29sb3Ig
PSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2Nyb2xsQmFyQ29sb3JdKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlVGV4dDoKKyAgICAgICAgICAgIGNv
bG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHRleHRDb2xvcl0pOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRkYXJrc2hhZG93OgorICAg
ICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbERh
cmtTaGFkb3dDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFs
dWVUaHJlZWRzaGFkb3c6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xv
cihbTlNDb2xvciBzaGFkb3dDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVUaHJlZWRmYWNlOgorICAgICAgICAgICAgLy8gV2UgdXNlIHRoaXMgdmFsdWUg
aW5zdGVhZCBvZiBOU0NvbG9yJ3MgY29udHJvbENvbG9yIHRvIGF2b2lkIHdlYnNpdGUgaW5jb21w
YXRpYmlsaXRpZXMuCisgICAgICAgICAgICAvLyBXZSBtYXkgd2FudCB0byBjaGFuZ2UgdGhpcyB0
byB1c2UgdGhlIE5TQ29sb3IgaW4gZnV0dXJlLgorICAgICAgICAgICAgY29sb3IgPSAweEZGQzBD
MEMwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRoaWdo
bGlnaHQ6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xv
ciBoaWdobGlnaHRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVUaHJlZWRsaWdodHNoYWRvdzoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29s
b3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xMaWdodEhpZ2hsaWdodENvbG9yXSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0NvbG9yOgor
ICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Iga2V5Ym9h
cmRGb2N1c0luZGljYXRvckNvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NWYWx1ZVdpbmRvdzoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0Nv
bG9yKFtOU0NvbG9yIHdpbmRvd0JhY2tncm91bmRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTVmFsdWVXaW5kb3dmcmFtZToKKyAgICAgICAgICAgIGNvbG9yID0g
Y29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHdpbmRvd0ZyYW1lQ29sb3JdKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlV2luZG93dGV4dDoKKyAgICAgICAg
ICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHdpbmRvd0ZyYW1lVGV4
dENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBpZiAoIWNvbG9yLmlz
VmFsaWQoKSkKQEAgLTQ1OCw3ICs0OTYsNyBAQCBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpzeXN0ZW1Db2xvCiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6aXNDb250cm9s
U3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmls
bExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciYgYmFj
a2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKICAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gVGV4dEFyZWFQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQp
CiAgICAgICAgIHJldHVybiBzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyOwpAQCAtNDczLDYyICs1
MTEsMzIgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjppc0NvbnRyb2xTdAogICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91
bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKLS8vIEZJWE1FOiBVc2UgdGhlIGNvZGUgZnJvbSB0
aGUgb2xkIHVwc3RyZWFtIHZlcnNpb24sIGJlZm9yZSBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBu
ZXcgdGhlbWUgQVBJIGluIHIzNzczMS4KIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRq
dXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByKQogeworICAg
IENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7CisgICAgCisjaWYg
VVNFKE5FV19USEVNRSkKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAgY2FzZSBDaGVja2Jv
eFBhcnQ6CisgICAgICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgICAgICBjYXNlIFB1c2hCdXR0b25Q
YXJ0OgorICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgRGVmYXVs
dEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICAgICAgICAgIHJldHVy
biBSZW5kZXJUaGVtZTo6YWRqdXN0UmVwYWludFJlY3Qobywgcik7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKwogICAgIGZsb2F0IHpvb21MZXZl
bCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAotICAgIHN3aXRjaCAoby0+c3R5bGUo
KS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAgY2FzZSBDaGVja2JveFBhcnQ6IHsKLSAgICAgICAgLy8g
U2luY2Ugd2UgcXVlcnkgdGhlIHByb3RvdHlwZSBjZWxsLCB3ZSBuZWVkIHRvIHVwZGF0ZSBpdHMg
c3RhdGUgdG8gbWF0Y2guCi0gICAgICAgIHNldENoZWNrYm94Q2VsbFN0YXRlKG8sIHIpOwotCi0g
ICAgICAgIC8vIFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBh
ZGRpbmcgaW5jbHVkZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGNoZWNrYm94Ci0g
ICAgICAgIC8vIHNoYWRvdyIgYW5kIHRoZSBjaGVjay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMg
cGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KLSAgICAgICAgSW50
U2l6ZSBzaXplID0gY2hlY2tib3hTaXplcygpW1tjaGVja2JveCgpIGNvbnRyb2xTaXplXV07Ci0g
ICAgICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgICAg
ICBzaXplLnNldFdpZHRoKHNpemUud2lkdGgoKSAqIHpvb21MZXZlbCk7Ci0gICAgICAgIHIgPSBp
bmZsYXRlUmVjdChyLCBzaXplLCBjaGVja2JveE1hcmdpbnMoKSwgem9vbUxldmVsKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUmFkaW9QYXJ0OiB7Ci0gICAgICAgIC8vIFNpbmNl
IHdlIHF1ZXJ5IHRoZSBwcm90b3R5cGUgY2VsbCwgd2UgbmVlZCB0byB1cGRhdGUgaXRzIHN0YXRl
IHRvIG1hdGNoLgotICAgICAgICBzZXRSYWRpb0NlbGxTdGF0ZShvLCByKTsKLQotICAgICAgICAv
LyBXZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGlu
Y2x1ZGVkIGluIHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBjaGVja2JveAotICAgICAgICAv
LyBzaGFkb3ciIGFuZCB0aGUgY2hlY2suICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2Yg
dGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBXZWJLaXQuCi0gICAgICAgIEludFNpemUgc2l6
ZSA9IHJhZGlvU2l6ZXMoKVtbcmFkaW8oKSBjb250cm9sU2l6ZV1dOwotICAgICAgICBzaXplLnNl
dEhlaWdodChzaXplLmhlaWdodCgpICogem9vbUxldmVsKTsKLSAgICAgICAgc2l6ZS5zZXRXaWR0
aChzaXplLndpZHRoKCkgKiB6b29tTGV2ZWwpOwotICAgICAgICByID0gaW5mbGF0ZVJlY3Qociwg
c2l6ZSwgcmFkaW9NYXJnaW5zKCksIHpvb21MZXZlbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6Ci0g
ICAgY2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAgICAgIC8vIFNpbmNlIHdlIHF1ZXJ5IHRoZSBwcm90
b3R5cGUgY2VsbCwgd2UgbmVlZCB0byB1cGRhdGUgaXRzIHN0YXRlIHRvIG1hdGNoLgotICAgICAg
ICBzZXRCdXR0b25DZWxsU3RhdGUobywgcik7Ci0KLSAgICAgICAgLy8gV2UgaW5mbGF0ZSB0aGUg
cmVjdCBhcyBuZWVkZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2Vs
bCB0byBhY2NvbW1vZGF0ZSB0aGUgY2hlY2tib3gKLSAgICAgICAgLy8gc2hhZG93IiBhbmQgdGhl
IGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9mIHRoZSBib3VuZHMgb2YgdGhl
IGNvbnRyb2wgaW4gV2ViS2l0LgotICAgICAgICBpZiAoW2J1dHRvbigpIGJlemVsU3R5bGVdID09
IE5TUm91bmRlZEJlemVsU3R5bGUpIHsKLSAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGJ1dHRv
blNpemVzKClbW2J1dHRvbigpIGNvbnRyb2xTaXplXV07Ci0gICAgICAgICAgICBzaXplLnNldEhl
aWdodChzaXplLmhlaWdodCgpICogem9vbUxldmVsKTsKLSAgICAgICAgICAgIHNpemUuc2V0V2lk
dGgoci53aWR0aCgpKTsKLSAgICAgICAgICAgIHIgPSBpbmZsYXRlUmVjdChyLCBzaXplLCBidXR0
b25NYXJnaW5zKCksIHpvb21MZXZlbCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgTWVudWxpc3RQYXJ0OiB7CisgICAgaWYgKHBhcnQgPT0gTWVudWxpc3RQYXJ0
KSB7CiAgICAgICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIpOwogICAgICAgICBJbnRT
aXplIHNpemUgPSBwb3B1cEJ1dHRvblNpemVzKClbW3BvcHVwQnV0dG9uKCkgY29udHJvbFNpemVd
XTsKICAgICAgICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZlbCk7CiAg
ICAgICAgIHNpemUuc2V0V2lkdGgoci53aWR0aCgpKTsKICAgICAgICAgciA9IGluZmxhdGVSZWN0
KHIsIHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucygpLCB6b29tTGV2ZWwpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBAIC01
MzYsMjAgKzU0NCw0MiBAQCBJbnRSZWN0IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmluZmxhdGVS
CiB7CiAgICAgLy8gT25seSBkbyB0aGUgaW5mbGF0aW9uIGlmIHRoZSBhdmFpbGFibGUgd2lkdGgv
aGVpZ2h0IGFyZSB0b28gc21hbGwuICBPdGhlcndpc2UgdHJ5IHRvCiAgICAgLy8gZml0IHRoZSBn
bG93L2NoZWNrIHNwYWNlIGludG8gdGhlIGF2YWlsYWJsZSBib3gncyB3aWR0aC9oZWlnaHQuCi0g
ICAgaW50IHdpZHRoRGVsdGEgPSByLndpZHRoKCkgLSAoc2l6ZS53aWR0aCgpICsgbWFyZ2luc1tM
ZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCArIG1hcmdpbnNbUmlnaHRNYXJnaW5dICogem9vbUxldmVs
KTsKLSAgICBpbnQgaGVpZ2h0RGVsdGEgPSByLmhlaWdodCgpIC0gKHNpemUuaGVpZ2h0KCkgKyBt
YXJnaW5zW1RvcE1hcmdpbl0gKiB6b29tTGV2ZWwgKyBtYXJnaW5zW0JvdHRvbU1hcmdpbl0gKiB6
b29tTGV2ZWwpOworICAgIGludCB3aWR0aERlbHRhID0gci53aWR0aCgpIC0gKHNpemUud2lkdGgo
KSArIG1hcmdpbnNbbGVmdE1hcmdpbl0gKiB6b29tTGV2ZWwgKyBtYXJnaW5zW3JpZ2h0TWFyZ2lu
XSAqIHpvb21MZXZlbCk7CisgICAgaW50IGhlaWdodERlbHRhID0gci5oZWlnaHQoKSAtIChzaXpl
LmhlaWdodCgpICsgbWFyZ2luc1t0b3BNYXJnaW5dICogem9vbUxldmVsICsgbWFyZ2luc1tib3R0
b21NYXJnaW5dICogem9vbUxldmVsKTsKICAgICBJbnRSZWN0IHJlc3VsdChyKTsKICAgICBpZiAo
d2lkdGhEZWx0YSA8IDApIHsKLSAgICAgICAgcmVzdWx0LnNldFgocmVzdWx0LngoKSAtIG1hcmdp
bnNbTGVmdE1hcmdpbl0gKiB6b29tTGV2ZWwpOworICAgICAgICByZXN1bHQuc2V0WChyZXN1bHQu
eCgpIC0gbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCk7CiAgICAgICAgIHJlc3VsdC5z
ZXRXaWR0aChyZXN1bHQud2lkdGgoKSAtIHdpZHRoRGVsdGEpOwogICAgIH0KICAgICBpZiAoaGVp
Z2h0RGVsdGEgPCAwKSB7Ci0gICAgICAgIHJlc3VsdC5zZXRZKHJlc3VsdC55KCkgLSBtYXJnaW5z
W1RvcE1hcmdpbl0gKiB6b29tTGV2ZWwpOworICAgICAgICByZXN1bHQuc2V0WShyZXN1bHQueSgp
IC0gbWFyZ2luc1t0b3BNYXJnaW5dICogem9vbUxldmVsKTsKICAgICAgICAgcmVzdWx0LnNldEhl
aWdodChyZXN1bHQuaGVpZ2h0KCkgLSBoZWlnaHREZWx0YSk7CiAgICAgfQogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKK0Zsb2F0UmVjdCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpjb252ZXJ0VG9Q
YWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5k
ZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0
IEludFJlY3QmIHIpIGNvbnN0Cit7CisgICAgRmxvYXRSZWN0IHBhcnRSZWN0KGlucHV0UmVjdCk7
CisgICAgCisgICAgLy8gQ29tcHV0ZSBhbiBvZmZzZXQgYmV0d2VlbiB0aGUgcGFydCByZW5kZXJl
ciBhbmQgdGhlIGlucHV0IHJlbmRlcmVyCisgICAgRmxvYXRTaXplIG9mZnNldEZyb21JbnB1dFJl
bmRlcmVyOworICAgIGNvbnN0IFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBwYXJ0UmVuZGVyZXI7
CisgICAgd2hpbGUgKHJlbmRlcmVyICYmIHJlbmRlcmVyICE9IGlucHV0UmVuZGVyZXIpIHsKKyAg
ICAgICAgUmVuZGVyT2JqZWN0KiBjb250YWluaW5nUmVuZGVyZXIgPSByZW5kZXJlci0+Y29udGFp
bmVyKCk7CisgICAgICAgIG9mZnNldEZyb21JbnB1dFJlbmRlcmVyIC09IHJlbmRlcmVyLT5vZmZz
ZXRGcm9tQ29udGFpbmVyKGNvbnRhaW5pbmdSZW5kZXJlcik7CisgICAgICAgIHJlbmRlcmVyID0g
Y29udGFpbmluZ1JlbmRlcmVyOworICAgIH0KKyAgICAvLyBJZiB0aGUgaW5wdXQgcmVuZGVyZXIg
d2FzIG5vdCBhIGNvbnRhaW5lciwgc29tZXRoaW5nIHdlbnQgd3JvbmcKKyAgICBBU1NFUlQocmVu
ZGVyZXIgPT0gaW5wdXRSZW5kZXJlcik7CisgICAgLy8gTW92ZSB0aGUgcmVjdCBpbnRvIHBhcnRS
ZW5kZXJlcidzIGNvb3JkcworICAgIHBhcnRSZWN0Lm1vdmUob2Zmc2V0RnJvbUlucHV0UmVuZGVy
ZXIpOworICAgIC8vIEFjY291bnQgZm9yIHRoZSBsb2NhbCBkcmF3aW5nIG9mZnNldCAodHgsIHR5
KQorICAgIHBhcnRSZWN0Lm1vdmUoci54KCksIHIueSgpKTsKKworICAgIHJldHVybiBwYXJ0UmVj
dDsKK30KKwogLy8gVXBkYXRlcyB0aGUgY29udHJvbCB0aW50IChhLmsuYS4gYWN0aXZlIHN0YXRl
KSBvZiB8Y2VsbHwgKGZyb20gfG98KS4KIC8vIEluIHRoZSBDaHJvbWl1bSBwb3J0LCB0aGUgcmVu
ZGVyZXIgcnVucyBhcyBhIGJhY2tncm91bmQgcHJvY2VzcyBhbmQgY29udHJvbHMnCiAvLyBOU0Nl
bGwocykgbGFjayBhIHBhcmVudCBOU1ZpZXcuIFRoZXJlZm9yZSBjb250cm9scyBkb24ndCBoYXZl
IHRoZWlyIHRpbnQKQEAgLTYwOSwxOSArNjM5LDYgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjp1cGRhdGVQcmVzcwogICAgICAgICBbY2VsbCBzZXRIaWdobGlnaHRlZDpwcmVzc2VkXTsK
IH0KIAotLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB1
bnRpbCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUgQVBJIGluIHIzNzczMS4KLWlu
dCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9i
amVjdCogbykgY29uc3QKLXsKLSAgICBpZiAoIW8tPmlzQm94KCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQgfHwg
by0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkgewotICAgICAgICBjb25zdCBS
ZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KG8pOwotICAgICAgICByZXR1cm4gYm94LT5tYXJn
aW5Ub3AoKSArIGJveC0+aGVpZ2h0KCkgLSAyICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
OyAvLyBUaGUgYmFzZWxpbmUgaXMgMnB4IHVwIGZyb20gdGhlIGJvdHRvbSBvZiB0aGUgY2hlY2ti
b3gvcmFkaW8gaW4gQXBwS2l0LgotICAgIH0KLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2Vs
aW5lUG9zaXRpb24obyk7Ci19Ci0KIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y29udHJv
bFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogewogICAgIC8vIEFu
IGFsdGVybmF0ZSB3YXkgdG8gaW1wbGVtZW50IHRoaXMgd291bGQgYmUgdG8gZ2V0IHRoZSBhcHBy
b3ByaWF0ZSBjZWxsIG9iamVjdApAQCAtNjkzLDcgKzcxMCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6c2V0U2l6ZUZyb20KICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgo
c2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpzZXRGb250RnJvbUNvbnRyb2xTaXplKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkgY29u
c3QKIHsKICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKQEAgLTcyMSwzNTIgKzczOCwxMCBAQCBO
U0NvbnRyb2xTaXplIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmNvCiAgICAgcmV0dXJuIE5TTWlu
aUNvbnRyb2xTaXplOwogfQogCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1cHN0
cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkg
aW4gcjM3NzMxLgotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludENoZWNrYm94KFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9j
YWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLQotICAgIC8vIERldGVybWluZSB0aGUgd2lk
dGggYW5kIGhlaWdodCBuZWVkZWQgZm9yIHRoZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxs
IGZvciBwYWludGluZy4KLSAgICBzZXRDaGVja2JveENlbGxTdGF0ZShvLCByKTsKLQotICAgIHBh
aW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0KLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHls
ZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5l
ZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVkIGluIHRoZSBjZWxsIHRvIGFjY29t
bW9kYXRlIHRoZSBjaGVja2JveAotICAgIC8vIHNoYWRvdyIgYW5kIHRoZSBjaGVjay4gIFdlIGRv
bid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGluIFdl
YktpdC4KLSAgICBOU0J1dHRvbkNlbGwqIGNoZWNrYm94ID0gdGhpcy0+Y2hlY2tib3goKTsKLSAg
ICBJbnRTaXplIHNpemUgPSBjaGVja2JveFNpemVzKClbW2NoZWNrYm94IGNvbnRyb2xTaXplXV07
Ci0gICAgc2l6ZS5zZXRXaWR0aChzaXplLndpZHRoKCkgKiB6b29tTGV2ZWwpOwotICAgIHNpemUu
c2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgIEludFJlY3QgaW5mbGF0
ZWRSZWN0ID0gaW5mbGF0ZVJlY3Qociwgc2l6ZSwgY2hlY2tib3hNYXJnaW5zKCksIHpvb21MZXZl
bCk7Ci0gICAgCi0gICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7Ci0gICAgICAgIGluZmxhdGVk
UmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7Ci0gICAgICAg
IGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVs
KTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgp
LCBpbmZsYXRlZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZs
b2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4
dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAg
fQotICAgIAotICAgIFtjaGVja2JveCBkcmF3V2l0aEZyYW1lOk5TUmVjdChJbnRSZWN0VG9OU1Jl
Y3QoaW5mbGF0ZWRSZWN0KSkgaW5WaWV3Om5pbF07Ci0gICAgW2NoZWNrYm94IHNldENvbnRyb2xW
aWV3Om5pbF07Ci0KLSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1cHN0cmVh
bSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkgaW4g
cjM3NzMxLgotY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y2hlY2tib3hT
aXplcygpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IElu
dFNpemUoMTQsIDE0KSwgSW50U2l6ZSgxMiwgMTIpLCBJbnRTaXplKDEwLCAxMCkgfTsKLSAgICBy
ZXR1cm4gc2l6ZXM7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3Ry
ZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBp
biByMzc3MzEuCi1jb25zdCBpbnQqIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmNoZWNrYm94TWFy
Z2lucygpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IGludCBtYXJnaW5zWzNdWzRdID0KLSAg
ICB7Ci0gICAgICAgIHsgMywgNCwgNCwgMiB9LAotICAgICAgICB7IDQsIDMsIDMsIDMgfSwKLSAg
ICAgICAgeyA0LCAzLCAzLCAzIH0sCi0gICAgfTsKLSAgICByZXR1cm4gbWFyZ2luc1tbY2hlY2ti
b3goKSBjb250cm9sU2l6ZV1dOwotfQotCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGluIHRo
ZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVt
ZSBBUEkgaW4gcjM3NzMxLgotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRDaGVja2Jv
eENlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0g
ICAgTlNCdXR0b25DZWxsKiBjaGVja2JveCA9IHRoaXMtPmNoZWNrYm94KCk7Ci0KLSAgICAvLyBT
ZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIHJlY3RhbmdsZSB3ZSdyZSBwYWludGlu
ZyBpbnRvLgotICAgIHNldENvbnRyb2xTaXplKGNoZWNrYm94LCBjaGVja2JveFNpemVzKCksIHIu
c2l6ZSgpLCBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwotCi0gICAgLy8gVXBkYXRlIHRo
ZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgotICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKGNo
ZWNrYm94LCBvKTsKLSAgICB1cGRhdGVDaGVja2VkU3RhdGUoY2hlY2tib3gsIG8pOwotICAgIHVw
ZGF0ZUVuYWJsZWRTdGF0ZShjaGVja2JveCwgbyk7Ci0gICAgdXBkYXRlUHJlc3NlZFN0YXRlKGNo
ZWNrYm94LCBvKTsKLSAgICB1cGRhdGVGb2N1c2VkU3RhdGUoY2hlY2tib3gsIG8pOwotfQotCi0v
LyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0
IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkgaW4gcjM3NzMxLgotdm9pZCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAotewotICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmll
ZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50
cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgotICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwg
Y2hlY2tib3hTaXplcygpKTsKLX0KLQotLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUg
dXBzdHJlYW0gdmVyc2lvbiB1bnRpbCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUg
QVBJIGluIHIzNzczMS4KLWJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRSYWRpbyhS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxv
Y2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHdp
ZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUgY29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2Vs
bCBmb3IgcGFpbnRpbmcuCi0gICAgc2V0UmFkaW9DZWxsU3RhdGUobywgcik7Ci0KLSAgICBwYWlu
dEluZm8uY29udGV4dC0+c2F2ZSgpOwotCi0gICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpOwotCi0gICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBuZWVk
ZWQgdG8gYWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0byBhY2NvbW1v
ZGF0ZSB0aGUgY2hlY2tib3gKLSAgICAvLyBzaGFkb3ciIGFuZCB0aGUgY2hlY2suICBXZSBkb24n
dCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBXZWJL
aXQuCi0gICAgTlNCdXR0b25DZWxsKiByYWRpbyA9IHRoaXMtPnJhZGlvKCk7Ci0gICAgSW50U2l6
ZSBzaXplID0gcmFkaW9TaXplcygpW1tyYWRpbyBjb250cm9sU2l6ZV1dOwotICAgIHNpemUuc2V0
V2lkdGgoc2l6ZS53aWR0aCgpICogem9vbUxldmVsKTsKLSAgICBzaXplLnNldEhlaWdodChzaXpl
LmhlaWdodCgpICogem9vbUxldmVsKTsKLSAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxh
dGVSZWN0KHIsIHNpemUsIHJhZGlvTWFyZ2lucygpLCB6b29tTGV2ZWwpOwotICAgIAotICAgIGlm
ICh6b29tTGV2ZWwgIT0gMS4wZikgewotICAgICAgICBpbmZsYXRlZFJlY3Quc2V0V2lkdGgoaW5m
bGF0ZWRSZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwpOwotICAgICAgICBpbmZsYXRlZFJlY3Quc2V0
SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21MZXZlbCk7Ci0gICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0Lnko
KSk7Ci0gICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUxldmVs
LCB6b29tTGV2ZWwpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtaW5m
bGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOwotICAgIH0KLQotICAgIFtyYWRpbyBk
cmF3V2l0aEZyYW1lOk5TUmVjdChJbnRSZWN0VG9OU1JlY3QoaW5mbGF0ZWRSZWN0KSkgaW5WaWV3
Om5pbF07Ci0gICAgW3JhZGlvIHNldENvbnRyb2xWaWV3Om5pbF07Ci0KLSAgICBwYWludEluZm8u
Y29udGV4dC0+cmVzdG9yZSgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBGSVhNRTog
VGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252
ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkgaW4gcjM3NzMxLgotY29uc3QgSW50U2l6ZSogUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cmFkaW9TaXplcygpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNv
bnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMTQsIDE1KSwgSW50U2l6ZSgxMiwgMTMp
LCBJbnRTaXplKDEwLCAxMCkgfTsKLSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLS8vIEZJWE1FOiBU
aGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZl
cnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1jb25zdCBpbnQqIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnJhZGlvTWFyZ2lucygpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0
IGludCBtYXJnaW5zWzNdWzRdID0KLSAgICB7Ci0gICAgICAgIHsgMiwgMiwgNCwgMiB9LAotICAg
ICAgICB7IDMsIDIsIDMsIDIgfSwKLSAgICAgICAgeyAxLCAwLCAyLCAwIH0sCi0gICAgfTsKLSAg
ICByZXR1cm4gbWFyZ2luc1tbcmFkaW8oKSBjb250cm9sU2l6ZV1dOwotfQotCi0vLyBGSVhNRTog
VGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252
ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkgaW4gcjM3NzMxLgotdm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpzZXRSYWRpb0NlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IEludFJlY3QmIHIpCi17Ci0gICAgTlNCdXR0b25DZWxsKiByYWRpbyA9IHRoaXMtPnJhZGlvKCk7
Ci0KLSAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIHJlY3RhbmdsZSB3
ZSdyZSBwYWludGluZyBpbnRvLgotICAgIHNldENvbnRyb2xTaXplKHJhZGlvLCByYWRpb1NpemVz
KCksIHIuc2l6ZSgpLCBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOwotCi0gICAgLy8gVXBk
YXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgotICAgIHVwZGF0ZUFjdGl2ZVN0
YXRlKHJhZGlvLCBvKTsKLSAgICB1cGRhdGVDaGVja2VkU3RhdGUocmFkaW8sIG8pOwotICAgIHVw
ZGF0ZUVuYWJsZWRTdGF0ZShyYWRpbywgbyk7Ci0gICAgdXBkYXRlUHJlc3NlZFN0YXRlKHJhZGlv
LCBvKTsKLSAgICB1cGRhdGVGb2N1c2VkU3RhdGUocmFkaW8sIG8pOwotfQotCi0vLyBGSVhNRTog
VGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252
ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkgaW4gcjM3NzMxLgotdm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAg
IC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBo
YXZlIG5vdGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09y
QXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRo
IG9mIHRoZSBjb250cm9sLgotICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgcmFkaW9TaXplcygp
KTsKLX0KLQotLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUgdXBzdHJlYW0gdmVyc2lv
biB1bnRpbCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUgQVBJIGluIHIzNzczMS4K
LXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2V0QnV0dG9uUGFkZGluZ0Zyb21Db250cm9s
U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUgc2l6ZSkgY29uc3QKLXsKLSAg
ICAvLyBKdXN0IHVzZSA4cHguICBBcHBLaXQgd2FudHMgdG8gdXNlIDExcHggZm9yIG1pbmkgYnV0
dG9ucywgYnV0IHRoYXQgcGFkZGluZyBpcyBqdXN0IHRvbyBsYXJnZQotICAgIC8vIGZvciByZWFs
LXdvcmxkIFdlYiBzaXRlcyAoY3JlYXRpbmcgYSBodWdlIG5lY2Vzc2FyeSBtaW5pbXVtIHdpZHRo
IGZvciBidXR0b25zIHdob3NlIHNwYWNlIGlzCi0gICAgLy8gYnkgZGVmaW5pdGlvbiBjb25zdHJh
aW5lZCwgc2luY2Ugd2Ugc2VsZWN0IG1pbmkgb25seSBmb3Igc21hbGwgY3JhbXBlZCBlbnZpcm9u
bWVudHMuCi0gICAgLy8gVGhpcyBhbHNvIGd1YXJhbnRlZXMgdGhlIEhUTUw0IDxidXR0b24+IHdp
bGwgbWF0Y2ggb3VyIHJlbmRlcmluZyBieSBkZWZhdWx0LCBzaW5jZSB3ZSdyZSB1c2luZyBhIGNv
bnNpc3RlbnQKLSAgICAvLyBwYWRkaW5nLgotICAgIGNvbnN0IGludCBwYWRkaW5nID0gOCAqIHN0
eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChw
YWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRp
bmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDAsIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDAsIEZpeGVkKSk7Ci19Ci0KLS8v
IEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQg
d2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi12b2lkIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgLy8g
VGhlcmUgYXJlIHRocmVlIGFwcGVhcmFuY2UgY29uc3RhbnRzIGZvciBidXR0b25zLgotICAgIC8v
ICgxKSBQdXNoLWJ1dHRvbiBpcyB0aGUgY29uc3RhbnQgZm9yIHRoZSBkZWZhdWx0IEFxdWEgc3lz
dGVtIGJ1dHRvbi4gIFB1c2ggYnV0dG9ucyB3aWxsIG5vdCBzY2FsZSB2ZXJ0aWNhbGx5IGFuZCB3
aWxsIG5vdCBhbGxvdwotICAgIC8vIGN1c3RvbSBmb250cyBvciBjb2xvcnMuICA8aW5wdXQ+cyB1
c2UgdGhpcyBjb25zdGFudC4gIFRoaXMgYnV0dG9uIHdpbGwgYWxsb3cgY3VzdG9tIGNvbG9ycyBh
bmQgZm9udCB3ZWlnaHRzL3ZhcmlhbnRzIGJ1dCB3b24ndAotICAgIC8vIHNjYWxlIHZlcnRpY2Fs
bHkuCi0gICAgLy8gKDIpIHNxdWFyZS1idXR0b24gaXMgdGhlIGNvbnN0YW50IGZvciB0aGUgc3F1
YXJlIGJ1dHRvbi4gIFRoaXMgYnV0dG9uIHdpbGwgYWxsb3cgY3VzdG9tIGZvbnRzIGFuZCBjb2xv
cnMgYW5kIHdpbGwgc2NhbGUgdmVydGljYWxseS4KLSAgICAvLyAoMykgQnV0dG9uIGlzIHRoZSBj
b25zdGFudCB0aGF0IG1lYW5zICJwaWNrIHRoZSBiZXN0IGJ1dHRvbiBhcyBhcHByb3ByaWF0ZS4i
ICA8YnV0dG9uPnMgdXNlIHRoaXMgY29uc3RhbnQuICBUaGlzIGJ1dHRvbiB3aWxsCi0gICAgLy8g
YWxzbyBzY2FsZSB2ZXJ0aWNhbGx5IGFuZCBhbGxvdyBjdXN0b20gZm9udHMgYW5kIGNvbG9ycy4g
IEl0IHdpbGwgYXR0ZW1wdCB0byB1c2UgQXF1YSBpZiBwb3NzaWJsZSBhbmQgd2lsbCBtYWtlIHRo
aXMgZGV0ZXJtaW5hdGlvbgotICAgIC8vIHNvbGVseSBvbiB0aGUgcmVjdGFuZ2xlIG9mIHRoZSBj
b250cm9sLgotCi0gICAgLy8gRGV0ZXJtaW5lIG91ciBjb250cm9sIHNpemUgYmFzZWQgb2ZmIG91
ciBmb250LgotICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZv
bnQoc3R5bGUpOwotCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBh
cnQpIHsKLSAgICAgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KLSAgICAgICAgc3R5bGUtPnJlc2V0
Qm9yZGVyKCk7Ci0KLSAgICAgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgotICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0KLSAgICAgICAgLy8gV2hpdGUtc3Bh
Y2UgaXMgbG9ja2VkIHRvIHByZQotICAgICAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOwot
Ci0gICAgICAgIC8vIFNldCB0aGUgYnV0dG9uJ3MgdmVydGljYWwgc2l6ZS4KLSAgICAgICAgc2V0
QnV0dG9uU2l6ZShzdHlsZSk7Ci0KLSAgICAgICAgLy8gQWRkIGluIHRoZSBwYWRkaW5nIHRoYXQg
d2UnZCBsaWtlIHRvIHVzZS4KLSAgICAgICAgc2V0QnV0dG9uUGFkZGluZ0Zyb21Db250cm9sU2l6
ZShzdHlsZSwgY29udHJvbFNpemUpOwotCi0gICAgICAgIC8vIE91ciBmb250IGlzIGxvY2tlZCB0
byB0aGUgYXBwcm9wcmlhdGUgc3lzdGVtIGZvbnQgc2l6ZSBmb3IgdGhlIGNvbnRyb2wuICBUbyBj
bGFyaWZ5LCB3ZSBmaXJzdCB1c2UgdGhlIENTUy1zcGVjaWZpZWQgZm9udCB0byBmaWd1cmUgb3V0
Ci0gICAgICAgIC8vIGEgcmVhc29uYWJsZSBjb250cm9sIHNpemUsIGJ1dCBvbmNlIHRoYXQgY29u
dHJvbCBzaXplIGlzIGRldGVybWluZWQsIHdlIHRocm93IHRoYXQgZm9udCBhd2F5IGFuZCB1c2Ug
dGhlIGFwcHJvcHJpYXRlCi0gICAgICAgIC8vIHN5c3RlbSBmb250IGZvciB0aGUgY29udHJvbCBz
aXplIGluc3RlYWQuCi0gICAgICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc2VsZWN0b3IsIHN0
eWxlLCBjb250cm9sU2l6ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gU2V0IGEgbWluLWhl
aWdodCBzbyB0aGF0IHdlIGNhbid0IGdldCBzbWFsbGVyIHRoYW4gdGhlIG1pbmkgYnV0dG9uLgot
ICAgICAgICBzdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KDE1ICog
c3R5bGUtPmVmZmVjdGl2ZVpvb20oKSksIEZpeGVkKSk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdGhl
IHRvcCBhbmQgYm90dG9tIGJvcmRlcnMuCi0gICAgICAgIHN0eWxlLT5yZXNldEJvcmRlclRvcCgp
OwotICAgICAgICBzdHlsZS0+cmVzZXRCb3JkZXJCb3R0b20oKTsKLSAgICB9Ci0KLSAgICBzdHls
ZS0+c2V0Qm94U2hhZG93KDApOwotfQotCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGluIHRo
ZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVt
ZSBBUEkgaW4gcjM3NzMxLgotY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
YnV0dG9uU2l6ZXMoKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNd
ID0geyBJbnRTaXplKDAsIDIxKSwgSW50U2l6ZSgwLCAxOCksIEludFNpemUoMCwgMTUpIH07Ci0g
ICAgcmV0dXJuIHNpemVzOwotfQotCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1
cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBB
UEkgaW4gcjM3NzMxLgotY29uc3QgaW50KiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpidXR0b25N
YXJnaW5zKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0gPQot
ICAgIHsKLSAgICAgICAgeyA0LCA2LCA3LCA2IH0sCi0gICAgICAgIHsgNCwgNSwgNiwgNSB9LAot
ICAgICAgICB7IDAsIDEsIDEsIDEgfSwKLSAgICB9OwotICAgIHJldHVybiBtYXJnaW5zW1tidXR0
b24oKSBjb250cm9sU2l6ZV1dOwotfQotCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGluIHRo
ZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVt
ZSBBUEkgaW4gcjM3NzMxLgotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRCdXR0b25T
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICAvLyBJZiB0aGUgd2lkdGggYW5k
IGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgot
ICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhl
aWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBVc2UgdGhlIGZvbnQg
c2l6ZSB0byBkZXRlcm1pbmUgdGhlIGludHJpbnNpYyB3aWR0aCBvZiB0aGUgY29udHJvbC4KLSAg
ICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIGJ1dHRvblNpemVzKCkpOwotfQotCi0vLyBGSVhNRTog
VGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252
ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkgaW4gcjM3NzMxLgotdm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpzZXRCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBJbnRSZWN0JiByKQotewotICAgIE5TQnV0dG9uQ2VsbCogYnV0dG9uID0gdGhpcy0+YnV0dG9u
KCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYgdGhlIHJlY3Rhbmds
ZSB3ZSdyZSBwYWludGluZyBpbnRvLgotICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkg
PT0gU3F1YXJlQnV0dG9uUGFydCB8fAotICAgICAgICByLmhlaWdodCgpID4gYnV0dG9uU2l6ZXMo
KVtOU1JlZ3VsYXJDb250cm9sU2l6ZV0uaGVpZ2h0KCkgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCkpIHsKLSAgICAgICAgLy8gVXNlIHRoZSBzcXVhcmUgYnV0dG9uCi0gICAgICAgIGlmIChb
YnV0dG9uIGJlemVsU3R5bGVdICE9IE5TU2hhZG93bGVzc1NxdWFyZUJlemVsU3R5bGUpCi0gICAg
ICAgICAgICBbYnV0dG9uIHNldEJlemVsU3R5bGU6TlNTaGFkb3dsZXNzU3F1YXJlQmV6ZWxTdHls
ZV07Ci0gICAgfSBlbHNlIGlmIChbYnV0dG9uIGJlemVsU3R5bGVdICE9IE5TUm91bmRlZEJlemVs
U3R5bGUpCi0gICAgICAgIFtidXR0b24gc2V0QmV6ZWxTdHlsZTpOU1JvdW5kZWRCZXplbFN0eWxl
XTsKLQotICAgIHNldENvbnRyb2xTaXplKGJ1dHRvbiwgYnV0dG9uU2l6ZXMoKSwgci5zaXplKCks
IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0KLSAgICBOU1dpbmRvdyAqd2luZG93ID0g
W25pbCB3aW5kb3ddOwotICAgIEJPT0wgaXNEZWZhdWx0QnV0dG9uID0gKGlzRGVmYXVsdChvKSAm
JiBbd2luZG93IGlzS2V5V2luZG93XSk7Ci0gICAgW2J1dHRvbiBzZXRLZXlFcXVpdmFsZW50Oihp
c0RlZmF1bHRCdXR0b24gPyBAIlxyIiA6IEAiIildOwotCi0gICAgLy8gVXBkYXRlIHRoZSB2YXJp
b3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgotICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKGJ1dHRvbiwg
byk7Ci0gICAgdXBkYXRlQ2hlY2tlZFN0YXRlKGJ1dHRvbiwgbyk7Ci0gICAgdXBkYXRlRW5hYmxl
ZFN0YXRlKGJ1dHRvbiwgbyk7Ci0gICAgdXBkYXRlUHJlc3NlZFN0YXRlKGJ1dHRvbiwgbyk7Ci0g
ICAgdXBkYXRlRm9jdXNlZFN0YXRlKGJ1dHRvbiwgbyk7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVz
ZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0
byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBOU0J1dHRvbkNlbGwq
IGJ1dHRvbiA9IHRoaXMtPmJ1dHRvbigpOwotICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4
dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotCi0gICAgLy8gRGV0ZXJtaW5lIHRo
ZSB3aWR0aCBhbmQgaGVpZ2h0IG5lZWRlZCBmb3IgdGhlIGNvbnRyb2wgYW5kIHByZXBhcmUgdGhl
IGNlbGwgZm9yIHBhaW50aW5nLgotICAgIHNldEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKLQotICAg
IHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0KLSAgICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0
IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVkIGluIHRoZSBjZWxsIHRv
IGFjY29tbW9kYXRlIHRoZSBidXR0b24KLSAgICAvLyBzaGFkb3cuICBXZSBkb24ndCBjb25zaWRl
ciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBXZWJLaXQuCi0gICAg
ZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIEludFNp
emUgc2l6ZSA9IGJ1dHRvblNpemVzKClbW2J1dHRvbiBjb250cm9sU2l6ZV1dOwotICAgIHNpemUu
c2V0V2lkdGgoci53aWR0aCgpKTsKLSAgICBzaXplLnNldEhlaWdodChzaXplLmhlaWdodCgpICog
em9vbUxldmVsKTsKLSAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHI7Ci0gICAgaWYgKFtidXR0
b24gYmV6ZWxTdHlsZV0gPT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkgewotICAgICAgICAvLyBDZW50
ZXIgdGhlIGJ1dHRvbiB3aXRoaW4gdGhlIGF2YWlsYWJsZSBzcGFjZS4KLSAgICAgICAgaWYgKGlu
ZmxhdGVkUmVjdC5oZWlnaHQoKSA+IHNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIGluZmxh
dGVkUmVjdC5zZXRZKGluZmxhdGVkUmVjdC55KCkgKyAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC0g
c2l6ZS5oZWlnaHQoKSkgLyAyKTsKLSAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQo
c2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0
byBhY2NvdW50IGZvciB0aGUgc2hhZG93LgotICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZsYXRl
UmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIGJ1dHRvbk1hcmdpbnMoKSwgem9vbUxldmVsKTsKLQot
ICAgICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKLSAgICAgICAgICAgIGluZmxhdGVkUmVj
dC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7Ci0gICAgICAgICAg
ICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21MZXZl
bCk7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKGluZmxhdGVkUmVj
dC54KCksIGluZmxhdGVkUmVjdC55KCkpOwotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOwotICAgICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVj
dC55KCkpOwotICAgICAgICB9Ci0gICAgfSAKLQotICAgIE5TVmlldyAqdmlldyA9IG5pbDsKLSAg
ICBOU1dpbmRvdyAqd2luZG93ID0gW3ZpZXcgd2luZG93XTsKLSAgICBOU0J1dHRvbkNlbGwgKnBy
ZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgPSBbd2luZG93IGRlZmF1bHRCdXR0b25DZWxsXTsKLQot
ICAgIGlmIChpc0RlZmF1bHQobykgJiYgW3dpbmRvdyBpc0tleVdpbmRvd10pIHsKLSAgICAgICAg
W3dpbmRvdyBzZXREZWZhdWx0QnV0dG9uQ2VsbDpidXR0b25dOwotICAgICAgICB3a0FkdmFuY2VE
ZWZhdWx0QnV0dG9uUHVsc2VBbmltYXRpb24oYnV0dG9uKTsKLSAgICB9IGVsc2UgaWYgKFtwcmV2
aW91c0RlZmF1bHRCdXR0b25DZWxsIGlzRXF1YWw6YnV0dG9uXSkKLSAgICAgICAgW3dpbmRvdyBz
ZXREZWZhdWx0QnV0dG9uQ2VsbDpuaWxdOwotCi0gICAgW2J1dHRvbiBkcmF3V2l0aEZyYW1lOk5T
UmVjdChJbnRSZWN0VG9OU1JlY3QoaW5mbGF0ZWRSZWN0KSkgaW5WaWV3OnZpZXddOwotICAgIFti
dXR0b24gc2V0Q29udHJvbFZpZXc6bmlsXTsKLQotICAgIGlmICghW3ByZXZpb3VzRGVmYXVsdEJ1
dHRvbkNlbGwgaXNFcXVhbDpidXR0b25dKQotICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0
b25DZWxsOnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGxdOwotCi0gICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnJlc3RvcmUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAg
TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4
dCk7Ci0gICAgd2tEcmF3QmV6ZWxlZFRleHRGaWVsZENlbGwoSW50UmVjdFRvTlNSZWN0KHIpLCBp
c0VuYWJsZWQobykgJiYgIWlzUmVhZE9ubHlDb250cm9sKG8pKTsKKyAgICB3a0RyYXdCZXplbGVk
VGV4dEZpZWxkQ2VsbChyLCBpc0VuYWJsZWQobykgJiYgIWlzUmVhZE9ubHlDb250cm9sKG8pKTsK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEwNzQsNyArNzQ5LDcgQEAgdm9pZCBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjphZGp1c3RUZXh0RgogewogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCiB7CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTA4OCw3ICs3NjMsNyBAQCBib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBhaW50Q2Fwc0xvCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIExvY2FsQ3VycmVu
dEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdr
RHJhd0JlemVsZWRUZXh0QXJlYShJbnRSZWN0VG9OU1JlY3QociksIGlzRW5hYmxlZChvKSAmJiAh
aXNSZWFkT25seUNvbnRyb2wobykpOworICAgIHdrRHJhd0JlemVsZWRUZXh0QXJlYShyLCBpc0Vu
YWJsZWQobykgJiYgIWlzUmVhZE9ubHlDb250cm9sKG8pKTsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKQEAgLTExMjYsOCArODAxLDYgQEAgY29uc3QgaW50KiBSZW5kZXJUaGVtZUNocm9taXVtTWFj
Ojpwb3B1cAogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVudUxpc3QoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQogewotICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2Nh
bENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotCiAgICAgc2V0UG9wdXBCdXR0b25DZWxsU3Rh
dGUobywgcik7CiAKICAgICBOU1BvcFVwQnV0dG9uQ2VsbCogcG9wdXBCdXR0b24gPSB0aGlzLT5w
b3B1cEJ1dHRvbigpOwpAQCAtMTE1Nyw3ICs4MzAsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50TWVudUxpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUo
LWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKICAgICB9CiAKLSAgICBbcG9w
dXBCdXR0b24gZHJhd1dpdGhGcmFtZTpJbnRSZWN0VG9OU1JlY3QoaW5mbGF0ZWRSZWN0KSBpblZp
ZXc6bmlsXTsKKyAgICBbcG9wdXBCdXR0b24gZHJhd1dpdGhGcmFtZTppbmZsYXRlZFJlY3QgaW5W
aWV3OkZsaXBwZWRWaWV3KCldOwogICAgIFtwb3B1cEJ1dHRvbiBzZXRDb250cm9sVmlldzpuaWxd
OwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKQEAgLTExNjUsMTkgKzgzOCwx
OSBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVudUxpCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1zdGF0aWMgY29uc3QgZmxvYXQgYmFzZUZvbnRTaXplID0gMTEuMGY7Ci1z
dGF0aWMgY29uc3QgZmxvYXQgYmFzZUFycm93SGVpZ2h0ID0gNC4wZjsKLXN0YXRpYyBjb25zdCBm
bG9hdCBiYXNlQXJyb3dXaWR0aCA9IDUuMGY7Ci1zdGF0aWMgY29uc3QgZmxvYXQgYmFzZVNwYWNl
QmV0d2VlbkFycm93cyA9IDIuMGY7Ci1zdGF0aWMgY29uc3QgaW50IGFycm93UGFkZGluZ0xlZnQg
PSA2Owotc3RhdGljIGNvbnN0IGludCBhcnJvd1BhZGRpbmdSaWdodCA9IDY7Ci1zdGF0aWMgY29u
c3QgaW50IHBhZGRpbmdCZWZvcmVTZXBhcmF0b3IgPSA0Owotc3RhdGljIGNvbnN0IGludCBiYXNl
Qm9yZGVyUmFkaXVzID0gNTsKLXN0YXRpYyBjb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5nTGVm
dCA9IDg7Ci1zdGF0aWMgY29uc3QgaW50IHN0eWxlZFBvcHVwUGFkZGluZ1RvcCA9IDE7Ci1zdGF0
aWMgY29uc3QgaW50IHN0eWxlZFBvcHVwUGFkZGluZ0JvdHRvbSA9IDI7Citjb25zdCBmbG9hdCBi
YXNlRm9udFNpemUgPSAxMS4wZjsKK2NvbnN0IGZsb2F0IGJhc2VBcnJvd0hlaWdodCA9IDQuMGY7
Citjb25zdCBmbG9hdCBiYXNlQXJyb3dXaWR0aCA9IDUuMGY7Citjb25zdCBmbG9hdCBiYXNlU3Bh
Y2VCZXR3ZWVuQXJyb3dzID0gMi4wZjsKK2NvbnN0IGludCBhcnJvd1BhZGRpbmdMZWZ0ID0gNjsK
K2NvbnN0IGludCBhcnJvd1BhZGRpbmdSaWdodCA9IDY7Citjb25zdCBpbnQgcGFkZGluZ0JlZm9y
ZVNlcGFyYXRvciA9IDQ7Citjb25zdCBpbnQgYmFzZUJvcmRlclJhZGl1cyA9IDU7Citjb25zdCBp
bnQgc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCA9IDg7Citjb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRk
aW5nVG9wID0gMTsKK2NvbnN0IGludCBzdHlsZWRQb3B1cFBhZGRpbmdCb3R0b20gPSAyOwogCi1z
dGF0aWMgdm9pZCBUb3BHcmFkaWVudEludGVycG9sYXRlKHZvaWQqIGluZm8sIGNvbnN0IENHRmxv
YXQqIGluRGF0YSwgQ0dGbG9hdCogb3V0RGF0YSkKK3N0YXRpYyB2b2lkIFRvcEdyYWRpZW50SW50
ZXJwb2xhdGUodm9pZCosIGNvbnN0IENHRmxvYXQqIGluRGF0YSwgQ0dGbG9hdCogb3V0RGF0YSkK
IHsKICAgICBzdGF0aWMgZmxvYXQgZGFya1s0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMC40ZiB9
OwogICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsgMS4wZiwgMS4wZiwgMS4wZiwgMC4xNWYg
fTsKQEAgLTExODcsNyArODYwLDcgQEAgc3RhdGljIHZvaWQgVG9wR3JhZGllbnRJbnRlcnBvbGF0
ZSh2b2lkKgogICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBhKSAqIGRhcmtbaV0gKyBhICog
bGlnaHRbaV07CiB9CiAKLXN0YXRpYyB2b2lkIEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUodm9p
ZCogaW5mbywgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQorc3RhdGlj
IHZvaWQgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5E
YXRhLCBDR0Zsb2F0KiBvdXREYXRhKQogewogICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAx
LjBmLCAxLjBmLCAxLjBmLCAwLjBmIH07CiAgICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAx
LjBmLCAxLjBmLCAxLjBmLCAwLjNmIH07CkBAIC0xMTk3LDcgKzg3MCw3IEBAIHN0YXRpYyB2b2lk
IEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUodm8KICAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBm
IC0gYSkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOwogfQogCi1zdGF0aWMgdm9pZCBNYWluR3Jh
ZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiBpbmZvLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxv
YXQqIG91dERhdGEpCitzdGF0aWMgdm9pZCBNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwg
Y29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQogewogICAgIHN0YXRpYyBm
bG9hdCBkYXJrWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAwLjE1ZiB9OwogICAgIHN0YXRpYyBm
bG9hdCBsaWdodFs0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC4wZiB9OwpAQCAtMTIwNyw3ICs4
ODAsNyBAQCBzdGF0aWMgdm9pZCBNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkCiAgICAgICAg
IG91dERhdGFbaV0gPSAoMS4wZiAtIGEpICogZGFya1tpXSArIGEgKiBsaWdodFtpXTsKIH0KIAot
c3RhdGljIHZvaWQgVHJhY2tHcmFkaWVudEludGVycG9sYXRlKHZvaWQqIGluZm8sIGNvbnN0IENH
RmxvYXQqIGluRGF0YSwgQ0dGbG9hdCogb3V0RGF0YSkKK3N0YXRpYyB2b2lkIFRyYWNrR3JhZGll
bnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXRE
YXRhKQogewogICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAw
LjY3OGYgfTsKICAgICBzdGF0aWMgZmxvYXQgbGlnaHRbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYs
IDAuMTNmIH07CkBAIC0xMjE5LDExICs4OTIsMjEgQEAgc3RhdGljIHZvaWQgVHJhY2tHcmFkaWVu
dEludGVycG9sYXRlKHZvaQogCiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVu
dUxpc3RCdXR0b25HcmFkaWVudHMoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogeworICAgIGlmIChyLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBwYWludEluZm8uY29u
dGV4dC0+c2F2ZSgpOwogCi0gICAgaW50IHJhZGl1cyA9IG8tPnN0eWxlKCktPmJvcmRlclRvcExl
ZnRSYWRpdXMoKS53aWR0aCgpOworICAgIEludFNpemUgdG9wTGVmdFJhZGl1czsKKyAgICBJbnRT
aXplIHRvcFJpZ2h0UmFkaXVzOworICAgIEludFNpemUgYm90dG9tTGVmdFJhZGl1czsKKyAgICBJ
bnRTaXplIGJvdHRvbVJpZ2h0UmFkaXVzOworCisgICAgby0+c3R5bGUoKS0+Z2V0Qm9yZGVyUmFk
aWlGb3JSZWN0KHIsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFk
aXVzLCBib3R0b21SaWdodFJhZGl1cyk7CisKKyAgICBpbnQgcmFkaXVzID0gdG9wTGVmdFJhZGl1
cy53aWR0aCgpOwogCiAgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY3NwYWNlKEFkb3B0
Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpKTsKIApAQCAtMTI0NiwzMyArOTI5LDI3
IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGkKICAgICBSZXRhaW5Q
dHI8Q0dTaGFkaW5nUmVmPiByaWdodFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhp
YWwoY3NwYWNlLmdldCgpLCBDR1BvaW50TWFrZShyLnJpZ2h0KCksICByLnkoKSksIENHUG9pbnRN
YWtlKHIucmlnaHQoKSAtIHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0KCksIGZhbHNl
LCBmYWxzZSkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgQ0dDb250ZXh0
Q2xpcFRvUmVjdChjb250ZXh0LCByKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRl
ZFJlY3RDbGlwKHIsCi0gICAgICAgIG8tPnN0eWxlKCktPmJvcmRlclRvcExlZnRSYWRpdXMoKSwg
by0+c3R5bGUoKS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKSwKLSAgICAgICAgby0+c3R5bGUoKS0+
Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21SaWdodFJh
ZGl1cygpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHIsIHRv
cExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdo
dFJhZGl1cyk7CiAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbWFpblNoYWRpbmcu
Z2V0KCkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAKICAgICBwYWludElu
Zm8uY29udGV4dC0+c2F2ZSgpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgdG9w
R3JhZGllbnQpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoZW5j
bG9zaW5nSW50UmVjdCh0b3BHcmFkaWVudCksCi0gICAgICAgIG8tPnN0eWxlKCktPmJvcmRlclRv
cExlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+Ym9yZGVyVG9wUmlnaHRSYWRpdXMoKSwKLSAgICAg
ICAgSW50U2l6ZSgpLCBJbnRTaXplKCkpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3Vu
ZGVkUmVjdENsaXAoZW5jbG9zaW5nSW50UmVjdCh0b3BHcmFkaWVudCksIHRvcExlZnRSYWRpdXMs
IHRvcFJpZ2h0UmFkaXVzLCBJbnRTaXplKCksIEludFNpemUoKSk7CiAgICAgQ0dDb250ZXh0RHJh
d1NoYWRpbmcoY29udGV4dCwgdG9wU2hhZGluZy5nZXQoKSk7CiAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnJlc3RvcmUoKTsKIAotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgQ0dD
b250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBib3R0b21HcmFkaWVudCk7Ci0gICAgcGFpbnRJbmZv
LmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KGJvdHRvbUdyYWRp
ZW50KSwKLSAgICAgICAgSW50U2l6ZSgpLCBJbnRTaXplKCksCi0gICAgICAgIG8tPnN0eWxlKCkt
PmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKSwgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tUmlnaHRS
YWRpdXMoKSk7Ci0gICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgYm90dG9tU2hhZGlu
Zy5nZXQoKSk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICBpZiAoIWJv
dHRvbUdyYWRpZW50LmlzRW1wdHkoKSkgeworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2
ZSgpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGJvdHRvbUdyYWRpZW50
KTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChlbmNsb3Np
bmdJbnRSZWN0KGJvdHRvbUdyYWRpZW50KSwgSW50U2l6ZSgpLCBJbnRTaXplKCksIGJvdHRvbUxl
ZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRp
bmcoY29udGV4dCwgYm90dG9tU2hhZGluZy5nZXQoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5yZXN0b3JlKCk7CisgICAgfQogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsK
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHIpOwotICAgIHBhaW50SW5mby5jb250
ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAociwKLSAgICAgICAgby0+c3R5bGUoKS0+Ym9yZGVyVG9w
TGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLAotICAgICAg
ICBvLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCksIG8tPnN0eWxlKCktPmJvcmRl
ckJvdHRvbVJpZ2h0UmFkaXVzKCkpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVk
UmVjdENsaXAociwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRp
dXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0
LCBsZWZ0U2hhZGluZy5nZXQoKSk7CiAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwg
cmlnaHRTaGFkaW5nLmdldCgpKTsKICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwpA
QCAtMTI4Miw4ICs5NTksNiBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVu
dUxpCiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLQog
ICAgIEludFJlY3QgYm91bmRzID0gSW50UmVjdChyLngoKSArIG8tPnN0eWxlKCktPmJvcmRlckxl
ZnRXaWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnkoKSArIG8tPnN0eWxl
KCktPmJvcmRlclRvcFdpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIud2lk
dGgoKSAtIG8tPnN0eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpIC0gby0+c3R5bGUoKS0+Ym9yZGVy
UmlnaHRXaWR0aCgpLApAQCAtMTMwMiw2ICs5NzcsOCBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50TWVudUxpCiAgICAgaWYgKGJvdW5kcy53aWR0aCgpIDwgYXJyb3dXaWR0aCAr
IGFycm93UGFkZGluZ0xlZnQgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworCiAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihvLT5zdHlsZSgpLT5jb2xvcigpKTsK
ICAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOwogCkBAIC0x
MzgwLDcgKzEwNTcsNyBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdE1lbnVM
CiBpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9
PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJv
bFNpemVGb3JGb250KHN0eWxlKSlbTGVmdFBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20o
KTsKKyAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQo
c3R5bGUpKVtsZWZ0UGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIGlmIChz
dHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKICAgICAgICAgcmV0dXJu
IHN0eWxlZFBvcHVwUGFkZGluZ0xlZnQgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIHJl
dHVybiAwOwpAQCAtMTM4OSw3ICsxMDY2LDcgQEAgaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBvcHVwSW50ZXJuYQogaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIGlmIChzdHlsZS0+
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9u
UGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtSaWdodFBhZGRpbmddICogc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250
cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtyaWdodFBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQp
IHsKICAgICAgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBiYXNlRm9u
dFNpemU7CiAgICAgICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRT
Y2FsZTsKQEAgLTE0MDEsNyArMTA3OCw3IEBAIGludCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpw
b3B1cEludGVybmEKIGludCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1cEludGVybmFsUGFk
ZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlLT5hcHBl
YXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRk
aW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW1RvcFBhZGRpbmddICogc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKKyAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6
ZUZvckZvbnQoc3R5bGUpKVt0b3BQYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CiAg
ICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQogICAgICAg
ICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nVG9wICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsK
ICAgICByZXR1cm4gMDsKQEAgLTE0MTAsMTMgKzEwODcsMTMgQEAgaW50IFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBvcHVwSW50ZXJuYQogaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBp
ZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBw
b3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbQm90dG9tUGFkZGlu
Z10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25Q
YWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRvbVBhZGRpbmddICogc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKTsKICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlz
dEJ1dHRvblBhcnQpCiAgICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdCb3R0b20gKiBz
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBm
bG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKIApAQCAt
MTQ1NSwxMCArMTEzMiwxMCBAQCBpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6bWluaW11bU1l
bnVMCiAgICAgcmV0dXJuIHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBtZW51TGlzdFNpemVzKCkp
LndpZHRoKCk7CiB9CiAKLXN0YXRpYyBjb25zdCBpbnQgdHJhY2tXaWR0aCA9IDU7Ci1zdGF0aWMg
Y29uc3QgaW50IHRyYWNrUmFkaXVzID0gMjsKK2NvbnN0IGludCB0cmFja1dpZHRoID0gNTsKK2Nv
bnN0IGludCB0cmFja1JhZGl1cyA9IDI7CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7
CiB9CkBAIC0xNTAyLDEyICsxMTc5LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cGFpbnRTbGlkZXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLT5zZXRCb3hT
aGFkb3coMCk7CiB9CiAKLXN0YXRpYyBjb25zdCBmbG9hdCB2ZXJ0aWNhbFNsaWRlckhlaWdodFBh
ZGRpbmcgPSAwLjFmOworY29uc3QgZmxvYXQgdmVydGljYWxTbGlkZXJIZWlnaHRQYWRkaW5nID0g
MC4xZjsKIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNsaWRlclRodW1iKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKIHsKQEAgLTE1NjIsNyArMTIzOSw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRTbGlkZXIKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRy
YW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KIAot
ICAgIFtzbGlkZXJUaHVtYkNlbGwgZHJhd1dpdGhGcmFtZTpGbG9hdFJlY3RUb05TUmVjdCh1bnpv
b21lZFJlY3QpIGluVmlldzpuaWxdOworICAgIFtzbGlkZXJUaHVtYkNlbGwgZHJhd1dpdGhGcmFt
ZTp1bnpvb21lZFJlY3QgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwogICAgIFtzbGlkZXJUaHVtYkNl
bGwgc2V0Q29udHJvbFZpZXc6bmlsXTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3Jl
KCk7CkBAIC0xNTcwLDIzICsxMjQ3LDYgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpw
YWludFNsaWRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotY29uc3QgaW50IHNsaWRlclRodW1i
V2lkdGggPSAxNTsKLWNvbnN0IGludCBzbGlkZXJUaHVtYkhlaWdodCA9IDE1OwotY29uc3QgaW50
IG1lZGlhU2xpZGVyVGh1bWJXaWR0aCA9IDEzOwotY29uc3QgaW50IG1lZGlhU2xpZGVyVGh1bWJI
ZWlnaHQgPSAxNDsKLQotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJU
aHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIGZsb2F0IHpvb21MZXZlbCA9
IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFy
YW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgby0+c3R5bGUoKS0+YXBwZWFy
YW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7Ci0gICAgICAgIG8tPnN0eWxlKCkt
PnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRodW1iV2lkdGggKiB6b29t
TGV2ZWwpLCBGaXhlZCkpOwotICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHN0
YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwot
ICAgIH0gZWxzZSBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyVGh1
bWJQYXJ0KSB7Ci0gICAgICAgIG8tPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChtZWRpYVNsaWRl
clRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgICAgIG8tPnN0eWxlKCktPnNldEhlaWdodChMZW5n
dGgobWVkaWFTbGlkZXJUaHVtYkhlaWdodCwgRml4ZWQpKTsKLSAgICB9Ci19Ci0KIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
CiB7CiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOwpAQCAt
MTYxMSw3ICsxMjcxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJj
aAogICAgIC8vIFNldCB0aGUgc2VhcmNoIGJ1dHRvbiB0byBuaWwgYmVmb3JlIGRyYXdpbmcuICBU
aGVuIHJlc2V0IGl0IHNvIHdlIGNhbiBkcmF3IGl0IGxhdGVyLgogICAgIFtzZWFyY2ggc2V0U2Vh
cmNoQnV0dG9uQ2VsbDpuaWxdOwogCi0gICAgW3NlYXJjaCBkcmF3V2l0aEZyYW1lOk5TUmVjdChJ
bnRSZWN0VG9OU1JlY3QodW56b29tZWRSZWN0KSkgaW5WaWV3Om5pbF07CisgICAgW3NlYXJjaCBk
cmF3V2l0aEZyYW1lOk5TUmVjdCh1bnpvb21lZFJlY3QpIGluVmlldzpGbGlwcGVkVmlldygpXTsK
ICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIGlmIChbc2VhcmNoIHNob3dzRmlyc3RSZXNw
b25kZXJdKQogICAgICAgICB3a0RyYXdUZXh0RmllbGRDZWxsRm9jdXNSaW5nKHNlYXJjaCwgTlNS
ZWN0KHVuem9vbWVkUmVjdCkpOwpAQCAtMTYyNSw3ICsxMjg1LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpwYWludFNlYXJjaAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRTZWFy
Y2hDZWxsU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRSZWN0JikKIHsKICAgICBOU1Nl
YXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKQEAgLTE2NTMsNyArMTMx
Myw3IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2V0U2VhcmNoRmkKICAgICBzZXRT
aXplRnJvbUZvbnQoc3R5bGUsIHNlYXJjaEZpZWxkU2l6ZXMoKSk7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAordm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewog
ICAgIC8vIE92ZXJyaWRlIGJvcmRlci4KICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKQEAgLTE2
ODYsOSArMTM0NiwxMCBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJj
CiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250
ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0KICAgICBOb2RlKiBpbnB1dCA9
IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVy
ZXIoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgc2V0U2VhcmNoQ2Vs
bFN0YXRlKGlucHV0LT5yZW5kZXJlcigpLCByKTsKIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBz
ZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKQEAgLTE3MDAsOSArMTM2MSwxMCBAQCBib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2VhcmNoCiAKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBv
LT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAKLSAgICBOU1JlY3QgYm91bmRzID0gW3NlYXJj
aCBjYW5jZWxCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChJbnRSZWN0VG9OU1JlY3QoaW5wdXQt
PnJlbmRlcmVyKCktPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKV07Ci0gICAgCi0gICAgSW50
UmVjdCB1bnpvb21lZFJlY3QoTlNSZWN0VG9JbnRSZWN0KGJvdW5kcykpOworICAgIEZsb2F0UmVj
dCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggY2FuY2VsQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3Qo
aW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsKKyAgICBsb2NhbEJvdW5kcyA9
IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwgbywgbG9jYWxCb3VuZHMs
IHIpOworCisgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJvdW5kcyk7CiAgICAgaWYg
KHpvb21MZXZlbCAhPSAxLjBmKSB7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpv
b21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVuem9vbWVkUmVjdC5zZXRI
ZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKQEAgLTE3MTEsNyArMTM3
Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2gKICAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVk
UmVjdC55KCkpOwogICAgIH0KIAotICAgIFtbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdIGRyYXdX
aXRoRnJhbWU6SW50UmVjdFRvTlNSZWN0KHVuem9vbWVkUmVjdCkgaW5WaWV3Om5pbF07CisgICAg
W1tzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTp1bnpvb21lZFJlY3QgaW5W
aWV3OkZsaXBwZWRWaWV3KCldOwogICAgIFtbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdIHNldENv
bnRyb2xWaWV3Om5pbF07CiAKICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwpAQCAt
MTcyNCw3ICsxMzg2LDcgQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
YwogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjph
ZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAg
SW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIGNhbmNlbEJ1dHRvblNpemVz
KCkpOwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwpA
QCAtMTczOCw4ICsxNDAwLDggQEAgY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cgogICAgIHJldHVybiBzaXplczsKIH0KIAotc3RhdGljIGNvbnN0IGludCBlbXB0eVJlc3Vs
dHNPZmZzZXQgPSA5Owotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hG
aWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAorY29uc3QgaW50IGVtcHR5UmVzdWx0c09mZnNl
dCA9IDk7Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxl
LCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXpl
LndpZHRoKCkgLSBlbXB0eVJlc3VsdHNPZmZzZXQsIEZpeGVkKSk7CkBAIC0xNzQ3LDEyICsxNDA5
LDEyIEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmMKICAgICBzdHls
ZS0+c2V0Qm94U2hhZG93KDApOwogfQogCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBh
aW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKIHsKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsK
ICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRv
blNpemVzKCkpOwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOwpAQCAtMTc2Miw5ICsxNDI0LDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
YWRqdXN0U2VhcmMKIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotCiAg
ICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIGlm
ICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIHNldFNlYXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBOU1Nl
YXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CkBAIC0xNzc0LDE0ICsxNDM3
LDE2IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2gKICAgICBpZiAo
W3NlYXJjaCBzZWFyY2hNZW51VGVtcGxhdGVdICE9IG5pbCkKICAgICAgICAgW3NlYXJjaCBzZXRT
ZWFyY2hNZW51VGVtcGxhdGU6bmlsXTsKIAotICAgIE5TUmVjdCBib3VuZHMgPSBbc2VhcmNoIHNl
YXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KEludFJlY3RUb05TUmVjdChpbnB1dC0+cmVu
ZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpXTsKLSAgICBbW3NlYXJjaCBzZWFy
Y2hCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOmJvdW5kcyBpblZpZXc6bmlsXTsKKyAgICBGbG9h
dFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNS
ZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKV07CisgICAgbG9jYWxCb3Vu
ZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91
bmRzLCByKTsKKworICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6
bG9jYWxCb3VuZHMgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwogICAgIFtbc2VhcmNoIHNlYXJjaEJ1
dHRvbkNlbGxdIHNldENvbnRyb2xWaWV3Om5pbF07CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1z
dGF0aWMgY29uc3QgaW50IHJlc3VsdHNBcnJvd1dpZHRoID0gNTsKLXZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
K2NvbnN0IGludCByZXN1bHRzQXJyb3dXaWR0aCA9IDU7Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIEludFNpemUg
c2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAg
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0
aCwgRml4ZWQpKTsKQEAgLTE3OTEsOSArMTQ1NiwxMCBAQCB2b2lkIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OmFkanVzdFNlYXJjCiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIExvY2Fs
Q3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwot
CiAgICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAg
IGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KwogICAgIHNldFNlYXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CiAKICAgICBO
U1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CkBAIC0xODA3LDkgKzE0
NzMsMTAgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaAogCiAgICAg
ZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCi0gICAgTlNS
ZWN0IGJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoSW50
UmVjdFRvTlNSZWN0KGlucHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgp
KSldOworICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVj
dEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsK
KyAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIo
KSwgbywgbG9jYWxCb3VuZHMsIHIpOwogICAgIAotICAgIEludFJlY3QgdW56b29tZWRSZWN0KE5T
UmVjdFRvSW50UmVjdChib3VuZHMpKTsKKyAgICBJbnRSZWN0IHVuem9vbWVkUmVjdChsb2NhbEJv
dW5kcyk7CiAgICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7CiAgICAgICAgIHVuem9vbWVkUmVj
dC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CiAgICAgICAgIHVu
em9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsK
QEAgLTE4MTgsNyArMTQ4NSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRT
ZWFyY2gKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0
LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KIAotICAgIFtbc2VhcmNoIHNlYXJjaEJ1
dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6SW50UmVjdFRvTlNSZWN0KHVuem9vbWVkUmVjdCkgaW5W
aWV3Om5pbF07CisgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTp1
bnpvb21lZFJlY3QgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwogICAgIFtbc2VhcmNoIHNlYXJjaEJ1
dHRvbkNlbGxdIHNldENvbnRyb2xWaWV3Om5pbF07CiAgICAgCiAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnJlc3RvcmUoKTsKQEAgLTE4MjcsMTAyICsxNDk0LDE3OSBAQCBib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50U2VhcmNoCiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi0vLyBGSVhN
RTogVGhpcyBlbnVtIGlzIGxpZnRlZCBmcm9tIFJlbmRlclRoZW1lTWFjLm1tICBXZSBuZWVkIHRv
IGRlY2lkZSB3aGljaCB0aGVtZSB0byB1c2UgZm9yIHRoZSBkZWZhdWx0IGNvbnRyb2xzLCBvciBk
ZWNpZGUgdG8gYXZvaWQgd2tEcmF3TWVkaWFVSVBhcnQgYW5kIHJlbmRlciBvdXIgb3duLgogdHlw
ZWRlZiBlbnVtIHsKICAgICBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMgICA9IDEsCiAgICAg
TWVkaWFDb250cm9sbGVyVGhlbWVRVCAgICAgICAgPSAyCiB9IE1lZGlhQ29udHJvbGxlclRoZW1l
U3R5bGU7CiAKLWVudW0gV0tNZWRpYUNvbnRyb2xsZXJUaGVtZVN0YXRlIHsKK3N0YXRpYyBpbnQg
bWVkaWFDb250cm9sbGVyVGhlbWUoKQoreworICAgIHN0YXRpYyBjb25zdCBsb25nIG1pbmltdW1R
dWlja1RpbWVWZXJzaW9uID0gMHgwNzYzMDAwMDsgLy8gNy42LjMKKyAgICBzdGF0aWMgU0ludDMy
IHF1aWNrVGltZVZlcnNpb24gPSAwOworICAgIHN0YXRpYyBpbnQgY29udHJvbGxlclRoZW1lID0g
LTE7CisgICAgCisgICAgaWYgKGNvbnRyb2xsZXJUaGVtZSAhPSAtMSkKKyAgICAgICAgcmV0dXJu
IGNvbnRyb2xsZXJUaGVtZTsKKworICAgIGNvbnRyb2xsZXJUaGVtZSA9IE1lZGlhQ29udHJvbGxl
clRoZW1lQ2xhc3NpYzsKKworICAgIGlmICghcXVpY2tUaW1lVmVyc2lvbikgeworICAgICAgICBP
U0VyciBlcnI7CisgICAgICAgIGVyciA9IEdlc3RhbHQoZ2VzdGFsdFF1aWNrVGltZSwgJnF1aWNr
VGltZVZlcnNpb24pOworICAgICAgICBpZiAoZXJyICE9IG5vRXJyKQorICAgICAgICAgICAgcmV0
dXJuIGNvbnRyb2xsZXJUaGVtZTsKKyAgICB9CisgICAgaWYgKHF1aWNrVGltZVZlcnNpb24gPCBt
aW5pbXVtUXVpY2tUaW1lVmVyc2lvbikKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJUaGVtZTsK
KworICAgIEJvb2xlYW4gdmFsaWRLZXk7CisgICAgQm9vbGVhbiB1c2VRVE1lZGlhVUkgPSBDRlBy
ZWZlcmVuY2VzR2V0QXBwQm9vbGVhblZhbHVlKENGU1RSKCJVc2VRdWlja1RpbWVNZWRpYVVJIiks
IENGU1RSKCJjb20uYXBwbGUuV2ViQ29yZSIpLCAmdmFsaWRLZXkpOworCisjaWYgIWRlZmluZWQo
QlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAg
aWYgKHZhbGlkS2V5ICYmICF1c2VRVE1lZGlhVUkpCisgICAgICAgIHJldHVybiBjb250cm9sbGVy
VGhlbWU7CisjZWxzZQorICAgIGlmICghdmFsaWRLZXkgfHwgIXVzZVFUTWVkaWFVSSkKKyAgICAg
ICAgcmV0dXJuIGNvbnRyb2xsZXJUaGVtZTsKKyNlbmRpZgorCisgICAgY29udHJvbGxlclRoZW1l
ID0gTWVkaWFDb250cm9sbGVyVGhlbWVRVDsKKyAgICByZXR1cm4gY29udHJvbGxlclRoZW1lOwor
fQorI2VuZGlmCisKK2NvbnN0IGludCBzbGlkZXJUaHVtYldpZHRoID0gMTU7Citjb25zdCBpbnQg
c2xpZGVyVGh1bWJIZWlnaHQgPSAxNTsKK2NvbnN0IGludCBtZWRpYVNsaWRlclRodW1iV2lkdGgg
PSAxMzsKK2NvbnN0IGludCBtZWRpYVNsaWRlclRodW1iSGVpZ2h0ID0gMTQ7CisKK3ZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCog
bykgY29uc3QKK3sKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCk7CisgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhv
cml6b250YWxQYXJ0IHx8IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZl
cnRpY2FsUGFydCkgeworICAgICAgICBvLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgoc3RhdGlj
X2Nhc3Q8aW50PihzbGlkZXJUaHVtYldpZHRoICogem9vbUxldmVsKSwgRml4ZWQpKTsKKyAgICAg
ICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRo
dW1iSGVpZ2h0ICogem9vbUxldmVsKSwgRml4ZWQpKTsKKyAgICB9IAorCisjaWYgRU5BQkxFKFZJ
REVPKQorICAgIGVsc2UgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVNsaWRl
clRodW1iUGFydCkgeworICAgICAgICBpbnQgd2lkdGggPSBtZWRpYVNsaWRlclRodW1iV2lkdGg7
CisgICAgICAgIGludCBoZWlnaHQgPSBtZWRpYVNsaWRlclRodW1iSGVpZ2h0OworICAgICAgICAK
KyAgICAgICAgaWYgKG1lZGlhQ29udHJvbGxlclRoZW1lKCkgPT0gTWVkaWFDb250cm9sbGVyVGhl
bWVRVCkgeworICAgICAgICAgICAgQ0dTaXplICBzaXplOworICAgICAgICAgICAgCisgICAgICAg
ICAgICB3a01lYXN1cmVNZWRpYVVJUGFydChNZWRpYVNsaWRlclRodW1iLCBNZWRpYUNvbnRyb2xs
ZXJUaGVtZVFULCBOVUxMLCAmc2l6ZSk7CisgICAgICAgICAgICB3aWR0aCA9IHNpemUud2lkdGg7
CisgICAgICAgICAgICBoZWlnaHQgPSBzaXplLmhlaWdodDsKKyAgICAgICAgfQorCisgICAgICAg
IG8tPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoICogem9v
bUxldmVsKSwgRml4ZWQpKTsKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0SGVpZ2h0KExlbmd0aChz
dGF0aWNfY2FzdDxpbnQ+KGhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVkKSk7CisgICAgfQorI2Vu
ZGlmCit9CisKKworI2lmIEVOQUJMRShWSURFTykKKworZW51bSBXS01lZGlhQ29udHJvbGxlclRo
ZW1lU3RhdGUgeyAKICAgICBNZWRpYVVJUGFydERpc2FibGVkRmxhZyA9IDEgPDwgMCwKICAgICBN
ZWRpYVVJUGFydFByZXNzZWRGbGFnID0gMSA8PCAxLAogICAgIE1lZGlhVUlQYXJ0RHJhd0VuZENh
cHNGbGFnID0gMSA8PCAzLAogfTsKLSNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgZ2V0TWVkaWFV
SVBhcnRTdGF0ZUZsYWdzKE5vZGUqIG5vZGUpCit7CisgICAgdW5zaWduZWQgZmxhZ3MgPSAwOwor
CisgICAgaWYgKG5vZGUtPmRpc2FibGVkKCkpCisgICAgICAgIGZsYWdzIHw9IE1lZGlhVUlQYXJ0
RGlzYWJsZWRGbGFnOworICAgIGVsc2UgaWYgKG5vZGUtPmFjdGl2ZSgpKQorICAgICAgICBmbGFn
cyB8PSBNZWRpYVVJUGFydFByZXNzZWRGbGFnOworICAgIHJldHVybiBmbGFnczsKK30KKworLy8g
VXRpbGl0eSB0byBzY2FsZSB3aGVuIHRoZSBVSSBwYXJ0IGFyZSBub3Qgc2NhbGVkIGJ5IHdrRHJh
d01lZGlhVUlQYXJ0CitzdGF0aWMgRmxvYXRSZWN0IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1
cnJlbnRDb250ZXh0KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmb3JpZ2luYWxSZWN0KQoreworICAgIGZsb2F0
IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBGbG9hdFJlY3Qg
dW56b29tZWRSZWN0KG9yaWdpbmFsUmVjdCk7CisgICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmICYm
IG1lZGlhQ29udHJvbGxlclRoZW1lKCkgPT0gTWVkaWFDb250cm9sbGVyVGhlbWVRVCkgeworICAg
ICAgICB1bnpvb21lZFJlY3Quc2V0V2lkdGgodW56b29tZWRSZWN0LndpZHRoKCkgLyB6b29tTGV2
ZWwpOworICAgICAgICB1bnpvb21lZFJlY3Quc2V0SGVpZ2h0KHVuem9vbWVkUmVjdC5oZWlnaHQo
KSAvIHpvb21MZXZlbCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUodW56
b29tZWRSZWN0LngoKSwgdW56b29tZWRSZWN0LnkoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250
ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUxldmVsLCB6b29tTGV2ZWwpKTsKKyAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVj
dC55KCkpOworICAgIH0KKyAgICByZXR1cm4gdW56b29tZWRSZWN0OworfQorCiAKIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQogewotI2lmIEVOQUJMRShWSURFTykKICAgICBOb2RlKiBub2RlID0gby0+bm9k
ZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTG9jYWxD
dXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0g
ICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFGdWxsc2NyZWVuQnV0dG9uLCBNZWRpYUNvbnRyb2xs
ZXJUaGVtZUNsYXNzaWMsICBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIs
IAotICAgICAgICBub2RlLT5hY3RpdmUoKSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsK
LSNlbmRpZgorICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhRnVsbHNjcmVlbkJ1dHRvbiwgbWVk
aWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCiB7Ci0jaWYgRU5BQkxFKFZJREVPKQogICAgIE5vZGUqIG5vZGUg
PSBvLT5ub2RlKCk7CiAgICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRvd0Fu
Y2VzdG9yTm9kZSgpIDogMDsKICAgICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9kZS0+aGFz
VGFnTmFtZSh2aWRlb1RhZykgJiYgIW1lZGlhTm9kZS0+aGFzVGFnTmFtZShhdWRpb1RhZykpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKLSAgICBpZiAo
IW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIExvY2FsQ3Vy
cmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAg
IHdrRHJhd01lZGlhVUlQYXJ0KG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IE1lZGlhVW5NdXRlQnV0
dG9uIDogTWVkaWFNdXRlQnV0dG9uLCBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMsIHBhaW50
SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwKLSAgICAgICAgbm9kZS0+YWN0aXZl
KCkgPyBNZWRpYVVJUGFydFByZXNzZWRGbGFnIDogMCk7Ci0jZW5kaWYKKyAgICBpZiAoTWVkaWFD
b250cm9sUGxheUJ1dHRvbkVsZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFBs
YXlCdXR0b25FbGVtZW50Kj4obm9kZSkpIHsKKyAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3ND
b250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CisgICAgICAgIHdrRHJhd01l
ZGlhVUlQYXJ0KGJ0bi0+ZGlzcGxheVR5cGUoKSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFp
bnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRl
RmxhZ3Mobm9kZSkpOworCisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCiB7Ci0jaWYgRU5BQkxFKFZJREVPKQogICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CiAg
ICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDog
MDsKICAgICBpZiAoIW1lZGlhTm9kZSB8fCAoIW1lZGlhTm9kZS0+aGFzVGFnTmFtZSh2aWRlb1Rh
ZykgJiYgIW1lZGlhTm9kZS0+aGFzVGFnTmFtZShhdWRpb1RhZykpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFOb2RlKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0
IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQo
bWVkaWFFbGVtZW50LT5jYW5QbGF5KCkgPyBNZWRpYVBsYXlCdXR0b24gOiBNZWRpYVBhdXNlQnV0
dG9uLCBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMsIHBhaW50SW5mby5jb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKSwgciwKLSAgICAgICAgbm9kZS0+YWN0aXZlKCkgPyBNZWRpYVVJUGFydFBy
ZXNzZWRGbGFnIDogMCk7Ci0jZW5kaWYKKyAgICBpZiAoTWVkaWFDb250cm9sUGxheUJ1dHRvbkVs
ZW1lbnQqIGJ0biA9IHN0YXRpY19jYXN0PE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50Kj4o
bm9kZSkpIHsKKyAgICAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4
dChwYWludEluZm8uY29udGV4dCk7CisgICAgICAgIHdrRHJhd01lZGlhVUlQYXJ0KGJ0bi0+ZGlz
cGxheVR5cGUoKSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAg
IH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSNpZiBFTkFC
TEUoVklERU8pCiAgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBs
b2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1l
ZGlhU2Vla0JhY2tCdXR0b24sIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYywgcGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLAotICAgICAgICBub2RlLT5hY3RpdmUoKSA/
IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgorICAgIHdrRHJhd01lZGlhVUlQ
YXJ0KE1lZGlhU2Vla0JhY2tCdXR0b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdz
KG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsK
LSNpZiBFTkFCTEUoVklERU8pCiAgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKICAgICBpZiAo
IW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNz
Q29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlh
VUlQYXJ0KE1lZGlhU2Vla0ZvcndhcmRCdXR0b24sIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3Np
YywgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLAotICAgICAgICBub2Rl
LT5hY3RpdmUoKSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgorICAgIHdr
RHJhd01lZGlhVUlQYXJ0KE1lZGlhU2Vla0ZvcndhcmRCdXR0b24sIG1lZGlhQ29udHJvbGxlclRo
ZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFV
SVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKIHsKLSNpZiBFTkFCTEUoVklERU8pCiAgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsK
ICAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkg
OiAwOwogICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKHZpZGVv
VGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkpCkBAIC0xOTMyLDczICsx
Njc2LDEwMSBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTCiAgICAg
aWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxU
aW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gbWVkaWFFbGVtZW50LT5idWZmZXJlZCgpOwotICAgIEV4
Y2VwdGlvbkNvZGUgaWdub3JlZEV4Y2VwdGlvbjsKLSAgICBmbG9hdCB0aW1lTG9hZGVkID0gdGlt
ZVJhbmdlcy0+bGVuZ3RoKCkgPyB0aW1lUmFuZ2VzLT5lbmQoMCwgaWdub3JlZEV4Y2VwdGlvbikg
OiAwOwotICAgIGZsb2F0IGN1cnJlbnRUaW1lID0gbWVkaWFFbGVtZW50LT5jdXJyZW50VGltZSgp
OwotICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFFbGVtZW50LT5kdXJhdGlvbigpOwotICAgIGlm
IChpc25hbihkdXJhdGlvbikpCi0gICAgICAgIGR1cmF0aW9uID0gMDsKLQotICAgIGJvb2wgc2hv
dWxkRHJhd0VuZENhcHMgPSAhdG9SZW5kZXJNZWRpYShtZWRpYUVsZW1lbnQtPnJlbmRlcmVyKCkp
LT5zaG91bGRTaG93VGltZURpc3BsYXlDb250cm9scygpOwotICAgIHdrRHJhd01lZGlhU2xpZGVy
VHJhY2soTWVkaWFDb250cm9sbGVyVGhlbWVDbGFzc2ljLCBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCksIHIsIHRpbWVMb2FkZWQsIGN1cnJlbnRUaW1lLCBkdXJhdGlvbiwgc2hv
dWxkRHJhd0VuZENhcHMgPyBNZWRpYVVJUGFydERyYXdFbmRDYXBzRmxhZyA6IDApOwotI2VuZGlm
CisgICAgZmxvYXQgdGltZUxvYWRlZCA9IDA7CisgICAgZmxvYXQgY3VycmVudFRpbWUgPSAwOwor
ICAgIGZsb2F0IGR1cmF0aW9uID0gMDsKKyAgICBpZiAoTWVkaWFQbGF5ZXIqIHBsYXllciA9IG1l
ZGlhRWxlbWVudC0+cGxheWVyKCkpIHsKKyAgICAgICAgZHVyYXRpb24gPSBwbGF5ZXItPmR1cmF0
aW9uKCk7CisgICAgICAgIHRpbWVMb2FkZWQgPSBwbGF5ZXItPm1heFRpbWVCdWZmZXJlZCgpOwor
ICAgICAgICBjdXJyZW50VGltZSA9IHBsYXllci0+Y3VycmVudFRpbWUoKTsKKyAgICB9CisgCisg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0
ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCBy
KTsKKyAgICB3a0RyYXdNZWRpYVNsaWRlclRyYWNrKG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBh
aW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgdW56b29tZWRSZWN0LCAKKyAgICAg
ICAgdGltZUxvYWRlZCwgY3VycmVudFRpbWUsIGR1cmF0aW9uLCBnZXRNZWRpYVVJUGFydFN0YXRl
RmxhZ3Mobm9kZSkpOworICAgIAorICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50
TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0jaWYgRU5BQkxFKFZJREVP
KQogICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250
ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVNsaWRl
clRodW1iLCBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMsIHBhaW50SW5mby5jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSwgciwKLSAgICAgICAgbm9kZS0+YWN0aXZlKCkgPyBNZWRpYVVJUGFy
dFByZXNzZWRGbGFnIDogMCk7Ci0jZW5kaWYKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVNs
aWRlclRodW1iLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQotCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1cHN0
cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkg
aW4gcjM3NzMxLgotTlNCdXR0b25DZWxsKiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpjaGVja2Jv
eCgpIGNvbnN0CisgICAgCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFS
ZXdpbmRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIGlmICghbV9jaGVja2JveCkg
ewotICAgICAgICBtX2NoZWNrYm94LmFkb3B0TlMoW1tOU0J1dHRvbkNlbGwgYWxsb2NdIGluaXRd
KTsKLSAgICAgICAgW21fY2hlY2tib3guZ2V0KCkgc2V0QnV0dG9uVHlwZTpOU1N3aXRjaEJ1dHRv
bl07Ci0gICAgICAgIFttX2NoZWNrYm94LmdldCgpIHNldFRpdGxlOm5pbF07Ci0gICAgICAgIFtt
X2NoZWNrYm94LmdldCgpIHNldEFsbG93c01peGVkU3RhdGU6WUVTXTsKLSAgICAgICAgW21fY2hl
Y2tib3guZ2V0KCkgc2V0Rm9jdXNSaW5nVHlwZTpOU0ZvY3VzUmluZ1R5cGVFeHRlcmlvcl07Ci0g
ICAgfQorICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJuIG1fY2hlY2tib3guZ2V0KCk7CisgICAg
TG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4
dCk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFSZXdpbmRCdXR0b24sIG1lZGlhQ29udHJv
bGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0
TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8v
IEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQg
d2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1OU0J1dHRvbkNl
bGwqIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnJhZGlvKCkgY29uc3QKK2Jvb2wgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQogewotICAgIGlmICghbV9yYWRpbykgewotICAgICAgICBtX3JhZGlvLmFkb3B0
TlMoW1tOU0J1dHRvbkNlbGwgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgW21fcmFkaW8uZ2V0KCkg
c2V0QnV0dG9uVHlwZTpOU1JhZGlvQnV0dG9uXTsKLSAgICAgICAgW21fcmFkaW8uZ2V0KCkgc2V0
VGl0bGU6bmlsXTsKLSAgICAgICAgW21fcmFkaW8uZ2V0KCkgc2V0Rm9jdXNSaW5nVHlwZTpOU0Zv
Y3VzUmluZ1R5cGVFeHRlcmlvcl07Ci0gICAgfQorICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7
CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgcmV0dXJu
IG1fcmFkaW8uZ2V0KCk7CisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29u
dGV4dChwYWludEluZm8uY29udGV4dCk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFSZXR1
cm5Ub1JlYWx0aW1lQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2Rl
KSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGlu
IHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0
aGVtZSBBUEkgaW4gcjM3NzMxLgotTlNCdXR0b25DZWxsKiBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpidXR0b24oKSBjb25zdAorCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVk
aWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIGlmICghbV9i
dXR0b24pIHsKLSAgICAgICAgbV9idXR0b24uYWRvcHROUyhbW05TQnV0dG9uQ2VsbCBhbGxvY10g
aW5pdF0pOwotICAgICAgICBbbV9idXR0b24uZ2V0KCkgc2V0VGl0bGU6bmlsXTsKLSAgICAgICAg
W21fYnV0dG9uLmdldCgpIHNldEJ1dHRvblR5cGU6TlNNb21lbnRhcnlQdXNoSW5CdXR0b25dOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9idXR0b24uZ2V0KCk7CisgICAgTm9kZSogbm9kZSA9
IG8tPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRl
eHQpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhVGltZWxpbmVDb250YWluZXIsIG1lZGlh
Q29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwg
ciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnNhdmUoKTsKKyAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5k
QWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKKyAgICB3a0RyYXdNZWRpYVVJ
UGFydChNZWRpYUN1cnJlbnRUaW1lRGlzcGxheSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFp
bnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlh
VUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cGFpbnRNZWRpYVRpbWVSZW1haW5pbmcoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIE5vZGUq
IG5vZGUgPSBvLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEZsb2F0UmVjdCB1bnpvb21l
ZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBwYWludElu
Zm8sIHIpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhVGltZVJlbWFpbmluZ0Rpc3BsYXks
IG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgdW56b29tZWRSZWN0LCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAg
IHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitT
dHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVl
dCgpCit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorI2VuZGlmCisKIE5TUG9wVXBCdXR0b25D
ZWxsKiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1cEJ1dHRvbigpIGNvbnN0CiB7CiAgICAg
aWYgKCFtX3BvcHVwQnV0dG9uKSB7Cg==
</data>
<flag name="review"
          id="20645"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39601</attachid>
            <date>2009-09-15 08:16:15 -0700</date>
            <delta_ts>2009-09-15 09:03:48 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>rendertheme.patch</filename>
            <type>text/plain</type>
            <size>135297</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODM5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI0IEBACisyMDA5LTA5LTExICBBdmkgRHJpc3NtYW4gIDxhdmlAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgdGhlIENocm9taXVtIE1hYyB0aGVtaW5nIGZpbGVzIChSZW5kZXJUaGVtZSBhbmQgVGhlbWUp
IHRvIGJlCisgICAgICAgIHVwLXRvLWRhdGUuCisgICAgICAgIAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkyNDMKKyAgICAgICAgaHR0cDovL2NyYnVn
LmNvbS8xOTYwNAorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGhlbWVDaHJv
bWl1bU1hYy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OlRo
ZW1lQ2hyb21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVDaHJvbWl1bU1hYzo6flRo
ZW1lQ2hyb21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVDaHJvbWl1bU1hYzo6Y29u
dHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
VGhlbWVDaHJvbWl1bU1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAg
ICAoV2ViQ29yZTo6cGxhdGZvcm1UaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250cm9sU2l6
ZUZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2l6ZUZyb21Gb250KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVN0YXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjppbmZsYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjaGVj
a2JveFNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrYm94TWFyZ2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpjaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tib3gpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFpbnRDaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpyYWRp
b1NpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OnJhZGlvTWFyZ2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpyYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6cmFkaW8pOgorICAgICAgICAoV2Vi
Q29yZTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpidXR0b25TaXplcyk6CisgICAg
ICAgIChXZWJDb3JlOjpidXR0b25NYXJnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpUaGVt
ZUNocm9taXVtTWFjOjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZUNocm9taXVtTWFjOjpjb250cm9sRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpU
aGVtZUNocm9taXVtTWFjOjpjb250cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNo
cm9taXVtTWFjOjptaW5pbXVtQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVD
aHJvbWl1bU1hYzo6Y29udHJvbEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNocm9t
aXVtTWFjOjpjb250cm9sUGFkZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNocm9taXVt
TWFjOjppbmZsYXRlQ29udHJvbFBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNo
cm9taXVtTWFjOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3VwcG9ydHND
b250cm9sVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
c2Nyb2xsYmFyQ29udHJvbFNpemVGb3JQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW06CisgICAgICAgICgtW1dl
YkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlvbk9ic2VydmVyIHN5c3RlbUNvbG9yc0RpZENoYW5n
ZTpdKToKKyAgICAgICAgKC1bUlRDTUZsaXBwZWRWaWV3IGlzRmxpcHBlZF0pOgorICAgICAgICAo
LVtSVENNRmxpcHBlZFZpZXcgY3VycmVudEVkaXRvcl0pOgorICAgICAgICAoV2ViQ29yZTo6KToK
KyAgICAgICAgKFdlYkNvcmU6OkZsaXBwZWRWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtSW5hY3Rp
dmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydE5TQ29sb3JUb0NvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6Om1lbnVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3lzdGVtQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6aXNDb250cm9sU3R5bGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmluZmxhdGVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmNvbnZlcnRUb1BhaW50aW5nUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRGb250RnJv
bUNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRvcEdy
YWRpZW50SW50ZXJwb2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Qm90dG9tR3JhZGllbnRJbnRl
cnBvbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFja0dyYWRpZW50SW50ZXJwb2xhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVM
aXN0QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
Qm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRTZWFyY2hDZWxsU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmll
bGREZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjptZWRpYUNvbnRyb2xsZXJUaGVtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVt
YlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFGdWxs
c2NyZWVuQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwYWludE1lZGlhUmV3aW5kQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFDb250
cm9sc0JhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50TWVkaWFUaW1lUmVtYWluaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgor
CiAyMDA5LTA5LTE1ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ4
MzkyKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE3NzEsNiAr
MTc3MSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRp
b25DaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1N5c3RlbVRp
bWVDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hy
b21pdW1NYWMuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vVGhlbWVDaHJvbWl1
bU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2lkZ2V0Q2hyb21pdW0u
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVyc2lvbi5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpbmRvd3NWZXJzaW9uLmgnLApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVGhlbWVDaHJvbWl1bU1hY19oCisjZGVmaW5lIFRo
ZW1lQ2hyb21pdW1NYWNfaAorCisjaW5jbHVkZSAiVGhlbWUuaCIKKworLy8gVGhpcyBmaWxlIChh
bmQgaXRzIGFzc29jaWF0ZWQgLm1tIGZpbGUpIGlzIGEgY2xvbmUgb2YgVGhlbWVNYWMuaC4gU2Vl
CisvLyB0aGUgLm1tIGZpbGUgZm9yIGRldGFpbHMuCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgVGhlbWVDaHJvbWl1bU1hYyA6IHB1YmxpYyBUaGVtZSB7CitwdWJsaWM6CisgICAgVGhl
bWVDaHJvbWl1bU1hYygpIHsgfQorICAgIHZpcnR1YWwgflRoZW1lQ2hyb21pdW1NYWMoKSB7IH0K
KyAgICAKKyAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChDb250cm9s
UGFydCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIEZvbnREZXNjcmlwdGlvbiBjb250cm9sRm9udChD
b250cm9sUGFydCwgY29uc3QgRm9udCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAgIAor
ICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBjb250cm9sU2l6ZShDb250cm9sUGFydCwgY29uc3QgRm9u
dCYsIGNvbnN0IExlbmd0aFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0
dWFsIExlbmd0aFNpemUgbWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0LCBjb25zdCBGb250
JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIExlbmd0aEJveCBjb250
cm9sUGFkZGluZyhDb250cm9sUGFydCwgY29uc3QgRm9udCYsIGNvbnN0IExlbmd0aEJveCYgem9v
bWVkQm94LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKyAgICB2aXJ0dWFsIExlbmd0aEJveCBj
b250cm9sQm9yZGVyKENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoQm94JiB6
b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGNv
bnRyb2xSZXF1aXJlc1ByZVdoaXRlU3BhY2UoQ29udHJvbFBhcnQgcGFydCkgY29uc3QgeyByZXR1
cm4gcGFydCA9PSBQdXNoQnV0dG9uUGFydDsgfQorCisgICAgdmlydHVhbCB2b2lkIHBhaW50KENv
bnRyb2xQYXJ0LCBDb250cm9sU3RhdGVzLCBHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0
JiwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyopIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBpbmZsYXRlQ29udHJvbFBhaW50UmVjdChDb250cm9sUGFydCwgQ29udHJvbFN0YXRlcywgSW50
UmVjdCYsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVGhlbWVDaHJvbWl1bU1hY19oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMuaApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vVGhlbWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJUaGVtZUNocm9taXVtTWFjLmgiCisKKyNpbXBv
cnQgIkJsb2NrRXhjZXB0aW9ucy5oIgorI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW1w
b3J0ICJMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQuaCIKKyNpbXBvcnQgIlNjcm9sbFZpZXcu
aCIKKyNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKKy8vIFRoaXMgZmlsZSAoYW5k
IGl0cyBhc3NvY2lhdGVkIC5oIGZpbGUpIGlzIGEgY2xvbmUgb2YgVGhlbWVNYWMubW0uCisvLyBC
ZWNhdXNlIHRoZSBvcmlnaW5hbCBmaWxlIGlzIGRlc2lnbmVkIHRvIHJ1biBpbi1wcm9jZXNzIGlu
c2lkZSBhIENvY29hIHZpZXcsCisvLyB3ZSBtdXN0IG1haW50YWluIGEgZm9yay4gUGxlYXNlIG1h
aW50YWluIHRoaXMgZmlsZSBieSBwZXJmb3JtaW5nIHBhcmFsbGVsCisvLyBjaGFuZ2VzIHRvIGl0
LgorLy8KKy8vIFRoZSBvbmx5IGNoYW5nZXMgZnJvbSBUaGVtZU1hYyBzaG91bGQgYmU6CisvLyAt
IFRoZSBjbGFzc25hbWUgY2hhbmdlIGZyb20gVGhlbWVNYWMgdG8gVGhlbWVDaHJvbWl1bU1hYy4K
Ky8vIC0gVGhlIGltcG9ydCBvZiBGbGlwcGVkVmlldygpIGFuZCBpdHMgdXNlIGFzIHRoZSBwYXJl
bnQgdmlldyBmb3IgY2VsbAorLy8gICByZW5kZXJpbmcuCisvLyAtIEluIHVwZGF0ZVN0YXRlcygp
IHRoZSBjb2RlIHRvIHVwZGF0ZSB0aGUgY2VsbHMnIGluYWN0aXZlIHN0YXRlLgorLy8gLSBJbiBw
YWludEJ1dHRvbigpIHRoZSBjb2RlIHRvIHNhdmUvcmVzdG9yZSB0aGUgd2luZG93J3MgZGVmYXVs
dCBidXR0b24gY2VsbC4KKy8vCisvLyBGb3IgYWxsIG90aGVyIGRpZmZlcmVuY2VzLCBpZiBpdCB3
YXMgaW50cm9kdWNlZCBpbiB0aGlzIGZpbGUsIHRoZW4gdGhlCisvLyBtYWludGFpbmVyIGZvcmdv
dCB0byBpbmNsdWRlIGl0IGluIHRoZSBsaXN0OyBvdGhlcndpc2UgaXQgaXMgYW4gdXBkYXRlIHRo
YXQKKy8vIHNob3VsZCBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIGZpbGUgYnV0IHdhcyBub3Qu
CisKKy8vIEZJWE1FOiBEZWZhdWx0IGJ1dHRvbnMgcmVhbGx5IHNob3VsZCBiZSBtb3JlIGxpa2Ug
cHVzaCBidXR0b25zIGFuZCBub3QgbGlrZSBidXR0b25zLgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKy8vIFBpY2sgdXAgdXRpbGl0eSBmdW5jdGlvbiBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWMuCitleHRlcm4gTlNWaWV3KiBGbGlwcGVkVmlldygpOworCitlbnVtIHsKKyAgICB0b3BNYXJn
aW4sCisgICAgcmlnaHRNYXJnaW4sCisgICAgYm90dG9tTWFyZ2luLAorICAgIGxlZnRNYXJnaW4K
K307CisKK1RoZW1lKiBwbGF0Zm9ybVRoZW1lKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFRoZW1lQ2hyb21pdW1NYWMsIHRoZW1lTWFjLCAoKSk7CisgICAgcmV0dXJuICZ0aGVtZU1hYzsK
K30KKworLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IGEgYnVuY2ggb2YgZGlmZmVyZW50IGNv
bnRyb2wgcGFydHMuCisKK3N0YXRpYyBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yRm9udChj
b25zdCBGb250JiBmb250KQoreworICAgIGludCBmb250U2l6ZSA9IGZvbnQucGl4ZWxTaXplKCk7
CisgICAgaWYgKGZvbnRTaXplID49IDE2KQorICAgICAgICByZXR1cm4gTlNSZWd1bGFyQ29udHJv
bFNpemU7CisgICAgaWYgKGZvbnRTaXplID49IDExKQorICAgICAgICByZXR1cm4gTlNTbWFsbENv
bnRyb2xTaXplOworICAgIHJldHVybiBOU01pbmlDb250cm9sU2l6ZTsKK30KKworc3RhdGljIExl
bmd0aFNpemUgc2l6ZUZyb21Gb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUm
IHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IsIGNvbnN0IEludFNpemUqIHNpemVzKQorewor
ICAgIEludFNpemUgY29udHJvbFNpemUgPSBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoZm9udCld
OworICAgIGlmICh6b29tRmFjdG9yICE9IDEuMGYpCisgICAgICAgIGNvbnRyb2xTaXplID0gSW50
U2l6ZShjb250cm9sU2l6ZS53aWR0aCgpICogem9vbUZhY3RvciwgY29udHJvbFNpemUuaGVpZ2h0
KCkgKiB6b29tRmFjdG9yKTsKKyAgICBMZW5ndGhTaXplIHJlc3VsdCA9IHpvb21lZFNpemU7Cisg
ICAgaWYgKHpvb21lZFNpemUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmIGNvbnRyb2xT
aXplLndpZHRoKCkgPiAwKQorICAgICAgICByZXN1bHQuc2V0V2lkdGgoTGVuZ3RoKGNvbnRyb2xT
aXplLndpZHRoKCksIEZpeGVkKSk7CisgICAgaWYgKHpvb21lZFNpemUuaGVpZ2h0KCkuaXNJbnRy
aW5zaWNPckF1dG8oKSAmJiBjb250cm9sU2l6ZS5oZWlnaHQoKSA+IDApCisgICAgICAgIHJlc3Vs
dC5zZXRIZWlnaHQoTGVuZ3RoKGNvbnRyb2xTaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldENvbnRyb2xTaXplKE5TQ2VsbCogY2Vs
bCwgY29uc3QgSW50U2l6ZSogc2l6ZXMsIGNvbnN0IEludFNpemUmIG1pblpvb21lZFNpemUsIGZs
b2F0IHpvb21GYWN0b3IpCit7CisgICAgTlNDb250cm9sU2l6ZSBzaXplOworICAgIGlmIChtaW5a
b29tZWRTaXplLndpZHRoKCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tOU1JlZ3VsYXJDb250
cm9sU2l6ZV0ud2lkdGgoKSAqIHpvb21GYWN0b3IpICYmCisgICAgICAgIG1pblpvb21lZFNpemUu
aGVpZ2h0KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tOU1JlZ3VsYXJDb250cm9sU2l6ZV0u
aGVpZ2h0KCkgKiB6b29tRmFjdG9yKSkKKyAgICAgICAgc2l6ZSA9IE5TUmVndWxhckNvbnRyb2xT
aXplOworICAgIGVsc2UgaWYgKG1pblpvb21lZFNpemUud2lkdGgoKSA+PSBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0ud2lkdGgoKSAqIHpvb21GYWN0b3IpICYmCisg
ICAgICAgICAgICAgbWluWm9vbWVkU2l6ZS5oZWlnaHQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVzW05TU21hbGxDb250cm9sU2l6ZV0uaGVpZ2h0KCkgKiB6b29tRmFjdG9yKSkKKyAgICAgICAg
c2l6ZSA9IE5TU21hbGxDb250cm9sU2l6ZTsKKyAgICBlbHNlCisgICAgICAgIHNpemUgPSBOU01p
bmlDb250cm9sU2l6ZTsKKyAgICBpZiAoc2l6ZSAhPSBbY2VsbCBjb250cm9sU2l6ZV0pIC8vIE9u
bHkgdXBkYXRlIGlmIHdlIGhhdmUgdG8sIHNpbmNlIEFwcEtpdCBkb2VzIHdvcmsgZXZlbiBpZiB0
aGUgc2l6ZSBpcyB0aGUgc2FtZS4KKyAgICAgICAgW2NlbGwgc2V0Q29udHJvbFNpemU6c2l6ZV07
Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZVN0YXRlcyhOU0NlbGwqIGNlbGwsIENvbnRyb2xTdGF0
ZXMgc3RhdGVzKQoreworICAgIC8vIEhvdmVyIHN0YXRlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgQXF1
YS4KKyAgICAKKyAgICAvLyBQcmVzc2VkIHN0YXRlCisgICAgYm9vbCBvbGRQcmVzc2VkID0gW2Nl
bGwgaXNIaWdobGlnaHRlZF07CisgICAgYm9vbCBwcmVzc2VkID0gc3RhdGVzICYgUHJlc3NlZFN0
YXRlOworICAgIGlmIChwcmVzc2VkICE9IG9sZFByZXNzZWQpCisgICAgICAgIFtjZWxsIHNldEhp
Z2hsaWdodGVkOnByZXNzZWRdOworICAgIAorICAgIC8vIEVuYWJsZWQgc3RhdGUKKyAgICBib29s
IG9sZEVuYWJsZWQgPSBbY2VsbCBpc0VuYWJsZWRdOworICAgIGJvb2wgZW5hYmxlZCA9IHN0YXRl
cyAmIEVuYWJsZWRTdGF0ZTsKKyAgICBpZiAoZW5hYmxlZCAhPSBvbGRFbmFibGVkKQorICAgICAg
ICBbY2VsbCBzZXRFbmFibGVkOmVuYWJsZWRdOworICAgIAorICAgIC8vIEZvY3VzZWQgc3RhdGUK
KyAgICBib29sIG9sZEZvY3VzZWQgPSBbY2VsbCBzaG93c0ZpcnN0UmVzcG9uZGVyXTsKKyAgICBi
b29sIGZvY3VzZWQgPSBzdGF0ZXMgJiBGb2N1c1N0YXRlOworICAgIGlmIChmb2N1c2VkICE9IG9s
ZEZvY3VzZWQpCisgICAgICAgIFtjZWxsIHNldFNob3dzRmlyc3RSZXNwb25kZXI6Zm9jdXNlZF07
CisKKyAgICAvLyBDaGVja2VkIGFuZCBJbmRldGVybWluYXRlCisgICAgYm9vbCBvbGRJbmRldGVy
bWluYXRlID0gW2NlbGwgc3RhdGVdID09IE5TTWl4ZWRTdGF0ZTsKKyAgICBib29sIGluZGV0ZXJt
aW5hdGUgPSAoc3RhdGVzICYgSW5kZXRlcm1pbmF0ZVN0YXRlKTsKKyAgICBib29sIGNoZWNrZWQg
PSBzdGF0ZXMgJiBDaGVja2VkU3RhdGU7CisgICAgYm9vbCBvbGRDaGVja2VkID0gW2NlbGwgc3Rh
dGVdID09IE5TT25TdGF0ZTsKKyAgICBpZiAob2xkSW5kZXRlcm1pbmF0ZSAhPSBpbmRldGVybWlu
YXRlIHx8IGNoZWNrZWQgIT0gb2xkQ2hlY2tlZCkKKyAgICAgICAgW2NlbGwgc2V0U3RhdGU6aW5k
ZXRlcm1pbmF0ZSA/IE5TTWl4ZWRTdGF0ZSA6IChjaGVja2VkID8gTlNPblN0YXRlIDogTlNPZmZT
dGF0ZSldOworICAgICAgICAKKyAgICAvLyBXaW5kb3cgSW5hY3RpdmUgc3RhdGUKKyAgICBOU0Nv
bnRyb2xUaW50IG9sZFRpbnQgPSBbY2VsbCBjb250cm9sVGludF07CisgICAgYm9vbCB3aW5kb3dJ
bmFjdGl2ZSA9IChzdGF0ZXMgJiBXaW5kb3dJbmFjdGl2ZVN0YXRlKTsKKyAgICBOU0NvbnRyb2xU
aW50IHRpbnQgPSB3aW5kb3dJbmFjdGl2ZSA/IE5TQ2xlYXJDb250cm9sVGludCA6IFtOU0NvbG9y
IGN1cnJlbnRDb250cm9sVGludF07CisgICAgaWYgKHRpbnQgIT0gb2xkVGludCkKKyAgICAgICAg
W2NlbGwgc2V0Q29udHJvbFRpbnQ6dGludF07Cit9CisKK3N0YXRpYyBJbnRSZWN0IGluZmxhdGVS
ZWN0KGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGNvbnN0IEludFNpemUmIHpvb21lZFNpemUs
IGNvbnN0IGludCogbWFyZ2lucywgZmxvYXQgem9vbUZhY3RvcikKK3sKKyAgICAvLyBPbmx5IGRv
IHRoZSBpbmZsYXRpb24gaWYgdGhlIGF2YWlsYWJsZSB3aWR0aC9oZWlnaHQgYXJlIHRvbyBzbWFs
bC4gIE90aGVyd2lzZSB0cnkgdG8KKyAgICAvLyBmaXQgdGhlIGdsb3cvY2hlY2sgc3BhY2UgaW50
byB0aGUgYXZhaWxhYmxlIGJveCdzIHdpZHRoL2hlaWdodC4KKyAgICBpbnQgd2lkdGhEZWx0YSA9
IHpvb21lZFJlY3Qud2lkdGgoKSAtICh6b29tZWRTaXplLndpZHRoKCkgKyBtYXJnaW5zW2xlZnRN
YXJnaW5dICogem9vbUZhY3RvciArIG1hcmdpbnNbcmlnaHRNYXJnaW5dICogem9vbUZhY3Rvcik7
CisgICAgaW50IGhlaWdodERlbHRhID0gem9vbWVkUmVjdC5oZWlnaHQoKSAtICh6b29tZWRTaXpl
LmhlaWdodCgpICsgbWFyZ2luc1t0b3BNYXJnaW5dICogem9vbUZhY3RvciArIG1hcmdpbnNbYm90
dG9tTWFyZ2luXSAqIHpvb21GYWN0b3IpOworICAgIEludFJlY3QgcmVzdWx0KHpvb21lZFJlY3Qp
OworICAgIGlmICh3aWR0aERlbHRhIDwgMCkgeworICAgICAgICByZXN1bHQuc2V0WChyZXN1bHQu
eCgpIC0gbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21GYWN0b3IpOworICAgICAgICByZXN1bHQu
c2V0V2lkdGgocmVzdWx0LndpZHRoKCkgLSB3aWR0aERlbHRhKTsKKyAgICB9CisgICAgaWYgKGhl
aWdodERlbHRhIDwgMCkgeworICAgICAgICByZXN1bHQuc2V0WShyZXN1bHQueSgpIC0gbWFyZ2lu
c1t0b3BNYXJnaW5dICogem9vbUZhY3Rvcik7CisgICAgICAgIHJlc3VsdC5zZXRIZWlnaHQocmVz
dWx0LmhlaWdodCgpIC0gaGVpZ2h0RGVsdGEpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCisvLyBDaGVja2JveGVzCisKK3N0YXRpYyBjb25zdCBJbnRTaXplKiBjaGVja2JveFNpemVz
KCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgxNCwg
MTQpLCBJbnRTaXplKDEyLCAxMiksIEludFNpemUoMTAsIDEwKSB9OworICAgIHJldHVybiBzaXpl
czsKK30KKworc3RhdGljIGNvbnN0IGludCogY2hlY2tib3hNYXJnaW5zKE5TQ29udHJvbFNpemUg
Y29udHJvbFNpemUpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXJnaW5zWzNdWzRdID0KKyAg
ICB7CisgICAgICAgIHsgMywgNCwgNCwgMiB9LAorICAgICAgICB7IDQsIDMsIDMsIDMgfSwKKyAg
ICAgICAgeyA0LCAzLCAzLCAzIH0sCisgICAgfTsKKyAgICByZXR1cm4gbWFyZ2luc1tjb250cm9s
U2l6ZV07Cit9CisKK3N0YXRpYyBMZW5ndGhTaXplIGNoZWNrYm94U2l6ZShjb25zdCBGb250JiBm
b250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQorewor
ICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3
ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRy
aW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygp
KQorICAgICAgICByZXR1cm4gem9vbWVkU2l6ZTsKKworICAgIC8vIFVzZSB0aGUgZm9udCBzaXpl
IHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgorICAgIHJl
dHVybiBzaXplRnJvbUZvbnQoZm9udCwgem9vbWVkU2l6ZSwgem9vbUZhY3RvciwgY2hlY2tib3hT
aXplcygpKTsKK30KKworc3RhdGljIE5TQnV0dG9uQ2VsbCogY2hlY2tib3goQ29udHJvbFN0YXRl
cyBzdGF0ZXMsIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpCit7
CisgICAgc3RhdGljIE5TQnV0dG9uQ2VsbCogY2hlY2tib3hDZWxsOworICAgIGlmICghY2hlY2ti
b3hDZWxsKSB7CisgICAgICAgIGNoZWNrYm94Q2VsbCA9IFtbTlNCdXR0b25DZWxsIGFsbG9jXSBp
bml0XTsKKyAgICAgICAgW2NoZWNrYm94Q2VsbCBzZXRCdXR0b25UeXBlOk5TU3dpdGNoQnV0dG9u
XTsKKyAgICAgICAgW2NoZWNrYm94Q2VsbCBzZXRUaXRsZTpuaWxdOworICAgICAgICBbY2hlY2ti
b3hDZWxsIHNldEFsbG93c01peGVkU3RhdGU6WUVTXTsKKyAgICAgICAgW2NoZWNrYm94Q2VsbCBz
ZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZUV4dGVyaW9yXTsKKyAgICB9CisgICAgCisg
ICAgLy8gU2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUg
cGFpbnRpbmcgaW50by4KKyAgICBzZXRDb250cm9sU2l6ZShjaGVja2JveENlbGwsIGNoZWNrYm94
U2l6ZXMoKSwgem9vbWVkUmVjdC5zaXplKCksIHpvb21GYWN0b3IpOworCisgICAgLy8gVXBkYXRl
IHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgorICAgIHVwZGF0ZVN0YXRlcyhjaGVj
a2JveENlbGwsIHN0YXRlcyk7CisgICAgCisgICAgcmV0dXJuIGNoZWNrYm94Q2VsbDsKK30KKwor
Ly8gRklYTUU6IFNoYXJlIG1vcmUgY29kZSB3aXRoIHJhZGlvIGJ1dHRvbnMuCitzdGF0aWMgdm9p
ZCBwYWludENoZWNrYm94KENvbnRyb2xTdGF0ZXMgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9s
bFZpZXcqIHNjcm9sbFZpZXcpCit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisK
KyAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUgY29u
dHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCisgICAgTlNCdXR0b25DZWxs
KiBjaGVja2JveENlbGwgPSBjaGVja2JveChzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3Ip
OworCisgICAgY29udGV4dC0+c2F2ZSgpOworCisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSA9IFtjaGVja2JveENlbGwgY29udHJvbFNpemVdOworICAgIEludFNpemUgem9vbWVkU2l6ZSA9
IGNoZWNrYm94U2l6ZXMoKVtjb250cm9sU2l6ZV07CisgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6
b29tZWRTaXplLndpZHRoKCkgKiB6b29tRmFjdG9yKTsKKyAgICB6b29tZWRTaXplLnNldEhlaWdo
dCh6b29tZWRTaXplLmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAgSW50UmVjdCBpbmZsYXRl
ZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCBjaGVja2JveE1hcmdp
bnMoY29udHJvbFNpemUpLCB6b29tRmFjdG9yKTsKKyAgICAKKyAgICBpZiAoem9vbUZhY3RvciAh
PSAxLjBmKSB7CisgICAgICAgIGluZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lk
dGgoKSAvIHpvb21GYWN0b3IpOworICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxh
dGVkUmVjdC5oZWlnaHQoKSAvIHpvb21GYWN0b3IpOworICAgICAgICBjb250ZXh0LT50cmFuc2xh
dGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAgICAgIGNvbnRleHQt
PnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGNvbnRl
eHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOworICAg
IH0KKyAgICAKKyAgICBbY2hlY2tib3hDZWxsIGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVk
UmVjdCkgaW5WaWV3OkZsaXBwZWRWaWV3KCldOworICAgIFtjaGVja2JveENlbGwgc2V0Q29udHJv
bFZpZXc6bmlsXTsKKworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAKKyAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TCit9CisKKy8vIFJhZGlvIEJ1dHRvbnMKKworc3RhdGljIGNvbnN0
IEludFNpemUqIHJhZGlvU2l6ZXMoKQoreworICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIHNpemVz
WzNdID0geyBJbnRTaXplKDE0LCAxNSksIEludFNpemUoMTIsIDEzKSwgSW50U2l6ZSgxMCwgMTAp
IH07CisgICAgcmV0dXJuIHNpemVzOworfQorCitzdGF0aWMgY29uc3QgaW50KiByYWRpb01hcmdp
bnMoTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG1h
cmdpbnNbM11bNF0gPQorICAgIHsKKyAgICAgICAgeyAyLCAyLCA0LCAyIH0sCisgICAgICAgIHsg
MywgMiwgMywgMiB9LAorICAgICAgICB7IDEsIDAsIDIsIDAgfSwKKyAgICB9OworICAgIHJldHVy
biBtYXJnaW5zW2NvbnRyb2xTaXplXTsKK30KKworc3RhdGljIExlbmd0aFNpemUgcmFkaW9TaXpl
KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpv
b21GYWN0b3IpCit7CisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3Bl
Y2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoIXpvb21lZFNpemUu
d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICF6b29tZWRTaXplLmhlaWdodCgpLmlzSW50
cmluc2ljT3JBdXRvKCkpCisgICAgICAgIHJldHVybiB6b29tZWRTaXplOworCisgICAgLy8gVXNl
IHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNv
bnRyb2wuCisgICAgcmV0dXJuIHNpemVGcm9tRm9udChmb250LCB6b29tZWRTaXplLCB6b29tRmFj
dG9yLCByYWRpb1NpemVzKCkpOworfQorCitzdGF0aWMgTlNCdXR0b25DZWxsKiByYWRpbyhDb250
cm9sU3RhdGVzIHN0YXRlcywgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZh
Y3RvcikKK3sKKyAgICBzdGF0aWMgTlNCdXR0b25DZWxsKiByYWRpb0NlbGw7CisgICAgaWYgKCFy
YWRpb0NlbGwpIHsKKyAgICAgICAgcmFkaW9DZWxsID0gW1tOU0J1dHRvbkNlbGwgYWxsb2NdIGlu
aXRdOworICAgICAgICBbcmFkaW9DZWxsIHNldEJ1dHRvblR5cGU6TlNSYWRpb0J1dHRvbl07Cisg
ICAgICAgIFtyYWRpb0NlbGwgc2V0VGl0bGU6bmlsXTsKKyAgICAgICAgW3JhZGlvQ2VsbCBzZXRG
b2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZUV4dGVyaW9yXTsKKyAgICB9CisgICAgCisgICAg
Ly8gU2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUgcGFp
bnRpbmcgaW50by4KKyAgICBzZXRDb250cm9sU2l6ZShyYWRpb0NlbGwsIHJhZGlvU2l6ZXMoKSwg
em9vbWVkUmVjdC5zaXplKCksIHpvb21GYWN0b3IpOworCisgICAgLy8gVXBkYXRlIHRoZSB2YXJp
b3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgorICAgIHVwZGF0ZVN0YXRlcyhyYWRpb0NlbGwsIHN0
YXRlcyk7CisgICAgCisgICAgcmV0dXJuIHJhZGlvQ2VsbDsKK30KKworc3RhdGljIHZvaWQgcGFp
bnRSYWRpbyhDb250cm9sU3RhdGVzIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBz
Y3JvbGxWaWV3KQoreworICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5kIGhlaWdodCBuZWVk
ZWQgZm9yIHRoZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBwYWludGluZy4KKyAg
ICBOU0J1dHRvbkNlbGwqIHJhZGlvQ2VsbCA9IHJhZGlvKHN0YXRlcywgem9vbWVkUmVjdCwgem9v
bUZhY3Rvcik7CisKKyAgICBjb250ZXh0LT5zYXZlKCk7CisKKyAgICBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplID0gW3JhZGlvQ2VsbCBjb250cm9sU2l6ZV07CisgICAgSW50U2l6ZSB6b29tZWRT
aXplID0gcmFkaW9TaXplcygpW2NvbnRyb2xTaXplXTsKKyAgICB6b29tZWRTaXplLnNldFdpZHRo
KHpvb21lZFNpemUud2lkdGgoKSAqIHpvb21GYWN0b3IpOworICAgIHpvb21lZFNpemUuc2V0SGVp
Z2h0KHpvb21lZFNpemUuaGVpZ2h0KCkgKiB6b29tRmFjdG9yKTsKKyAgICBJbnRSZWN0IGluZmxh
dGVkUmVjdCA9IGluZmxhdGVSZWN0KHpvb21lZFJlY3QsIHpvb21lZFNpemUsIHJhZGlvTWFyZ2lu
cyhjb250cm9sU2l6ZSksIHpvb21GYWN0b3IpOworICAgIAorICAgIGlmICh6b29tRmFjdG9yICE9
IDEuMGYpIHsKKyAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGluZmxhdGVkUmVjdC53aWR0
aCgpIC8gem9vbUZhY3Rvcik7CisgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0
ZWRSZWN0LmhlaWdodCgpIC8gem9vbUZhY3Rvcik7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0
ZShpbmZsYXRlZFJlY3QueCgpLCBpbmZsYXRlZFJlY3QueSgpKTsKKyAgICAgICAgY29udGV4dC0+
c2NhbGUoRmxvYXRTaXplKHpvb21GYWN0b3IsIHpvb21GYWN0b3IpKTsKKyAgICAgICAgY29udGV4
dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAg
fQorICAgIAorICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFtyYWRpb0NlbGwg
ZHJhd1dpdGhGcmFtZTpOU1JlY3QoaW5mbGF0ZWRSZWN0KSBpblZpZXc6RmxpcHBlZFZpZXcoKV07
CisgICAgW3JhZGlvQ2VsbCBzZXRDb250cm9sVmlldzpuaWxdOworICAgIEVORF9CTE9DS19PQkpD
X0VYQ0VQVElPTlMKKworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKK30KKworLy8gQnV0dG9ucwor
CisvLyBCdXR0b25zIHJlYWxseSBvbmx5IGNvbnN0cmFpbiBoZWlnaHQuIFRoZXkgcmVzcGVjdCB3
aWR0aC4KK3N0YXRpYyBjb25zdCBJbnRTaXplKiBidXR0b25TaXplcygpCit7CisgICAgc3RhdGlj
IGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMCwgMjEpLCBJbnRTaXplKDAsIDE4
KSwgSW50U2l6ZSgwLCAxNSkgfTsKKyAgICByZXR1cm4gc2l6ZXM7Cit9CisKK3N0YXRpYyBjb25z
dCBpbnQqIGJ1dHRvbk1hcmdpbnMoTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK3sKKyAgICBz
dGF0aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0gPQorICAgIHsKKyAgICAgICAgeyA0LCA2LCA3
LCA2IH0sCisgICAgICAgIHsgNCwgNSwgNiwgNSB9LAorICAgICAgICB7IDAsIDEsIDEsIDEgfSwK
KyAgICB9OworICAgIHJldHVybiBtYXJnaW5zW2NvbnRyb2xTaXplXTsKK30KKworc3RhdGljIE5T
QnV0dG9uQ2VsbCogYnV0dG9uKENvbnRyb2xQYXJ0IHBhcnQsIENvbnRyb2xTdGF0ZXMgc3RhdGVz
LCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yKQoreworICAgIHN0
YXRpYyBOU0J1dHRvbkNlbGwgKmJ1dHRvbkNlbGw7CisgICAgc3RhdGljIGJvb2wgZGVmYXVsdEJ1
dHRvbjsKKyAgICBpZiAoIWJ1dHRvbkNlbGwpIHsKKyAgICAgICAgYnV0dG9uQ2VsbCA9IFtbTlNC
dXR0b25DZWxsIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2J1dHRvbkNlbGwgc2V0VGl0bGU6bmls
XTsKKyAgICAgICAgW2J1dHRvbkNlbGwgc2V0QnV0dG9uVHlwZTpOU01vbWVudGFyeVB1c2hJbkJ1
dHRvbl07CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRo
ZSByZWN0YW5nbGUgd2UncmUgcGFpbnRpbmcgaW50by4KKyAgICBpZiAocGFydCA9PSBTcXVhcmVC
dXR0b25QYXJ0IHx8IHpvb21lZFJlY3QuaGVpZ2h0KCkgPiBidXR0b25TaXplcygpW05TUmVndWxh
ckNvbnRyb2xTaXplXS5oZWlnaHQoKSAqIHpvb21GYWN0b3IpIHsKKyAgICAgICAgLy8gVXNlIHRo
ZSBzcXVhcmUgYnV0dG9uCisgICAgICAgIGlmIChbYnV0dG9uQ2VsbCBiZXplbFN0eWxlXSAhPSBO
U1NoYWRvd2xlc3NTcXVhcmVCZXplbFN0eWxlKQorICAgICAgICAgICAgW2J1dHRvbkNlbGwgc2V0
QmV6ZWxTdHlsZTpOU1NoYWRvd2xlc3NTcXVhcmVCZXplbFN0eWxlXTsKKyAgICB9IGVsc2UgaWYg
KFtidXR0b25DZWxsIGJlemVsU3R5bGVdICE9IE5TUm91bmRlZEJlemVsU3R5bGUpCisgICAgICAg
IFtidXR0b25DZWxsIHNldEJlemVsU3R5bGU6TlNSb3VuZGVkQmV6ZWxTdHlsZV07CisKKyAgICBz
ZXRDb250cm9sU2l6ZShidXR0b25DZWxsLCBidXR0b25TaXplcygpLCB6b29tZWRSZWN0LnNpemUo
KSwgem9vbUZhY3Rvcik7CisKKyAgICBpZiAoZGVmYXVsdEJ1dHRvbiAhPSAoc3RhdGVzICYgRGVm
YXVsdFN0YXRlKSkgeworICAgICAgICBkZWZhdWx0QnV0dG9uID0gIWRlZmF1bHRCdXR0b247Cisg
ICAgICAgIFtidXR0b25DZWxsIHNldEtleUVxdWl2YWxlbnQ6KGRlZmF1bHRCdXR0b24gPyBAIlxy
IiA6IEAiIildOworICAgIH0KKworICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2Ug
cmVzcG9uZCB0by4KKyAgICB1cGRhdGVTdGF0ZXMoYnV0dG9uQ2VsbCwgc3RhdGVzKTsKKyAgICAK
KyAgICByZXR1cm4gYnV0dG9uQ2VsbDsKK30KKworc3RhdGljIHZvaWQgcGFpbnRCdXR0b24oQ29u
dHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xs
Vmlldyogc2Nyb2xsVmlldykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAg
ICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUg
Y29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCisgICAgTlNCdXR0b25D
ZWxsICpidXR0b25DZWxsID0gYnV0dG9uKHBhcnQsIHN0YXRlcywgem9vbWVkUmVjdCwgem9vbUZh
Y3Rvcik7CisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChjb250
ZXh0KTsKKworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbYnV0dG9uQ2VsbCBjb250
cm9sU2l6ZV07CisgICAgSW50U2l6ZSB6b29tZWRTaXplID0gYnV0dG9uU2l6ZXMoKVtjb250cm9s
U2l6ZV07CisgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6b29tZWRSZWN0LndpZHRoKCkpOyAvLyBC
dXR0b25zIGRvbid0IGV2ZXIgY29uc3RyYWluIHdpZHRoLCBzbyB0aGUgem9vbWVkIHdpZHRoIGNh
biBqdXN0IGJlIGhvbm9yZWQuCisgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9vbWVkU2l6ZS5o
ZWlnaHQoKSAqIHpvb21GYWN0b3IpOworICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gem9vbWVk
UmVjdDsKKyAgICBpZiAoW2J1dHRvbkNlbGwgYmV6ZWxTdHlsZV0gPT0gTlNSb3VuZGVkQmV6ZWxT
dHlsZSkgeworICAgICAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB3aXRoaW4gdGhlIGF2YWlsYWJs
ZSBzcGFjZS4KKyAgICAgICAgaWYgKGluZmxhdGVkUmVjdC5oZWlnaHQoKSA+IHpvb21lZFNpemUu
aGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRZKGluZmxhdGVkUmVjdC55
KCkgKyAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC0gem9vbWVkU2l6ZS5oZWlnaHQoKSkgLyAyKTsK
KyAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoem9vbWVkU2l6ZS5oZWlnaHQoKSk7
CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgaW5mbGF0ZSBpdCB0byBhY2NvdW50IGZvciB0
aGUgc2hhZG93LgorICAgICAgICBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChpbmZsYXRlZFJl
Y3QsIHpvb21lZFNpemUsIGJ1dHRvbk1hcmdpbnMoY29udHJvbFNpemUpLCB6b29tRmFjdG9yKTsK
KworICAgICAgICBpZiAoem9vbUZhY3RvciAhPSAxLjBmKSB7CisgICAgICAgICAgICBpbmZsYXRl
ZFJlY3Quc2V0V2lkdGgoaW5mbGF0ZWRSZWN0LndpZHRoKCkgLyB6b29tRmFjdG9yKTsKKyAgICAg
ICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9v
bUZhY3Rvcik7CisgICAgICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0Lngo
KSwgaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5zY2FsZShGbG9hdFNp
emUoem9vbUZhY3Rvciwgem9vbUZhY3RvcikpOworICAgICAgICAgICAgY29udGV4dC0+dHJhbnNs
YXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAgICAgIH0KKyAg
ICB9IAorCisgICAgW2J1dHRvbkNlbGwgZHJhd1dpdGhGcmFtZTpOU1JlY3QoaW5mbGF0ZWRSZWN0
KSBpblZpZXc6RmxpcHBlZFZpZXcoKV07CisgICAgW2J1dHRvbkNlbGwgc2V0Q29udHJvbFZpZXc6
bmlsXTsKKworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKworLy8gVGhlbWUgb3Zl
cnJpZGVzCisKK2ludCBUaGVtZUNocm9taXVtTWFjOjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVu
dChDb250cm9sUGFydCBwYXJ0KSBjb25zdAoreworICAgIGlmIChwYXJ0ID09IENoZWNrYm94UGFy
dCB8fCBwYXJ0ID09IFJhZGlvUGFydCkKKyAgICAgICAgcmV0dXJuIC0yOworICAgIHJldHVybiBU
aGVtZTo6YmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQocGFydCk7Cit9CisKK0ZvbnREZXNjcmlw
dGlvbiBUaGVtZUNocm9taXVtTWFjOjpjb250cm9sRm9udChDb250cm9sUGFydCBwYXJ0LCBjb25z
dCBGb250JiBmb250LCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAoreworICAgIHN3aXRjaCAocGFy
dCkgeworICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OiB7CisgICAgICAgICAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNl
dElzQWJzb2x1dGVTaXplKHRydWUpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEdl
bmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSk7CisKKyAgICAgICAgICAg
IE5TRm9udCogbnNGb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVt
Rm9udFNpemVGb3JDb250cm9sU2l6ZTpjb250cm9sU2l6ZUZvckZvbnQoZm9udCldXTsKKyAgICAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShbbnNGb250IGZh
bWlseU5hbWVdKTsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUo
W25zRm9udCBwb2ludFNpemVdICogem9vbUZhY3Rvcik7CisgICAgICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0U3BlY2lmaWVkU2l6ZShbbnNGb250IHBvaW50U2l6ZV0gKiB6b29tRmFjdG9yKTsK
KyAgICAgICAgICAgIHJldHVybiBmb250RGVzY3JpcHRpb247CisgICAgICAgIH0KKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUaGVtZTo6Y29udHJvbEZvbnQocGFydCwgZm9u
dCwgem9vbUZhY3Rvcik7CisgICAgfQorfQorCitMZW5ndGhTaXplIFRoZW1lQ2hyb21pdW1NYWM6
OmNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExl
bmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgICAgICAgICAgcmV0
dXJuIGNoZWNrYm94U2l6ZShmb250LCB6b29tZWRTaXplLCB6b29tRmFjdG9yKTsKKyAgICAgICAg
Y2FzZSBSYWRpb1BhcnQ6CisgICAgICAgICAgICByZXR1cm4gcmFkaW9TaXplKGZvbnQsIHpvb21l
ZFNpemUsIHpvb21GYWN0b3IpOworICAgICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgICAg
ICAgICAgLy8gSGVpZ2h0IGlzIHJlc2V0IHRvIGF1dG8gc28gdGhhdCBzcGVjaWZpZWQgaGVpZ2h0
cyBjYW4gYmUgaWdub3JlZC4KKyAgICAgICAgICAgIHJldHVybiBzaXplRnJvbUZvbnQoZm9udCwg
TGVuZ3RoU2l6ZSh6b29tZWRTaXplLndpZHRoKCksIExlbmd0aCgpKSwgem9vbUZhY3RvciwgYnV0
dG9uU2l6ZXMoKSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gem9vbWVk
U2l6ZTsKKyAgICB9Cit9CisKK0xlbmd0aFNpemUgVGhlbWVDaHJvbWl1bU1hYzo6bWluaW11bUNv
bnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgU3F1YXJl
QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2Fz
ZSBCdXR0b25QYXJ0OgorICAgICAgICAgICAgcmV0dXJuIExlbmd0aFNpemUoTGVuZ3RoKDAsIEZp
eGVkKSwgTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oMTUgKiB6b29tRmFjdG9yKSwgRml4ZWQpKTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUaGVtZTo6bWluaW11bUNvbnRy
b2xTaXplKHBhcnQsIGZvbnQsIHpvb21GYWN0b3IpOworICAgIH0KK30KKworTGVuZ3RoQm94IFRo
ZW1lQ2hyb21pdW1NYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFy
dDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25Q
YXJ0OgorICAgICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgwLCB6b29tZWRCb3gucmlnaHQoKS52
YWx1ZSgpLCAwLCB6b29tZWRCb3gubGVmdCgpLnZhbHVlKCkpOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIFRoZW1lOjpjb250cm9sQm9yZGVyKHBhcnQsIGZvbnQsIHpvb21l
ZEJveCwgem9vbUZhY3Rvcik7CisgICAgfQorfQorCitMZW5ndGhCb3ggVGhlbWVDaHJvbWl1bU1h
Yzo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgY29u
c3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6IHsKKyAgICAgICAg
ICAgIC8vIEp1c3QgdXNlIDhweC4gIEFwcEtpdCB3YW50cyB0byB1c2UgMTFweCBmb3IgbWluaSBi
dXR0b25zLCBidXQgdGhhdCBwYWRkaW5nIGlzIGp1c3QgdG9vIGxhcmdlCisgICAgICAgICAgICAv
LyBmb3IgcmVhbC13b3JsZCBXZWIgc2l0ZXMgKGNyZWF0aW5nIGEgaHVnZSBuZWNlc3NhcnkgbWlu
aW11bSB3aWR0aCBmb3IgYnV0dG9ucyB3aG9zZSBzcGFjZSBpcworICAgICAgICAgICAgLy8gYnkg
ZGVmaW5pdGlvbiBjb25zdHJhaW5lZCwgc2luY2Ugd2Ugc2VsZWN0IG1pbmkgb25seSBmb3Igc21h
bGwgY3JhbXBlZCBlbnZpcm9ubWVudHMuCisgICAgICAgICAgICAvLyBUaGlzIGFsc28gZ3VhcmFu
dGVlcyB0aGUgSFRNTCA8YnV0dG9uPiB3aWxsIG1hdGNoIG91ciByZW5kZXJpbmcgYnkgZGVmYXVs
dCwgc2luY2Ugd2UncmUgdXNpbmcgYSBjb25zaXN0ZW50CisgICAgICAgICAgICAvLyBwYWRkaW5n
LgorICAgICAgICAgICAgY29uc3QgaW50IHBhZGRpbmcgPSA4ICogem9vbUZhY3RvcjsKKyAgICAg
ICAgICAgIHJldHVybiBMZW5ndGhCb3goMCwgcGFkZGluZywgMCwgcGFkZGluZyk7CisgICAgICAg
IH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUaGVtZTo6Y29udHJvbFBh
ZGRpbmcocGFydCwgZm9udCwgem9vbWVkQm94LCB6b29tRmFjdG9yKTsKKyAgICB9Cit9CisKK3Zv
aWQgVGhlbWVDaHJvbWl1bU1hYzo6aW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBhcnQg
cGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpv
b21GYWN0b3IpIGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAg
c3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OiB7CisgICAgICAgICAg
ICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5n
IGluY2x1ZGVkIGluIHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBjaGVja2JveAorICAgICAg
ICAgICAgLy8gc2hhZG93IiBhbmQgdGhlIGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBw
YXJ0IG9mIHRoZSBib3VuZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0LgorICAgICAgICAgICAg
TlNDZWxsICpjZWxsID0gY2hlY2tib3goc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsK
KyAgICAgICAgICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbY2VsbCBjb250cm9sU2l6
ZV07CisgICAgICAgICAgICBJbnRTaXplIHpvb21lZFNpemUgPSBjaGVja2JveFNpemVzKClbY29u
dHJvbFNpemVdOworICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9vbWVkU2l6ZS5o
ZWlnaHQoKSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6
b29tZWRTaXplLndpZHRoKCkgKiB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHpvb21lZFJlY3Qg
PSBpbmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCBjaGVja2JveE1hcmdpbnMoY29u
dHJvbFNpemUpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgUmFkaW9QYXJ0OiB7CisgICAgICAgICAgICAvLyBXZSBpbmZsYXRlIHRoZSBy
ZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVkIGluIHRoZSBjZWxs
IHRvIGFjY29tbW9kYXRlIHRoZSByYWRpbyBidXR0b24KKyAgICAgICAgICAgIC8vIHNoYWRvdyIu
ICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJv
bCBpbiBXZWJLaXQuCisgICAgICAgICAgICBOU0NlbGwgKmNlbGwgPSByYWRpbyhzdGF0ZXMsIHpv
b21lZFJlY3QsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgTlNDb250cm9sU2l6ZSBjb250cm9s
U2l6ZSA9IFtjZWxsIGNvbnRyb2xTaXplXTsKKyAgICAgICAgICAgIEludFNpemUgem9vbWVkU2l6
ZSA9IHJhZGlvU2l6ZXMoKVtjb250cm9sU2l6ZV07CisgICAgICAgICAgICB6b29tZWRTaXplLnNl
dEhlaWdodCh6b29tZWRTaXplLmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAgICAgICAgICB6
b29tZWRTaXplLnNldFdpZHRoKHpvb21lZFNpemUud2lkdGgoKSAqIHpvb21GYWN0b3IpOworICAg
ICAgICAgICAgem9vbWVkUmVjdCA9IGluZmxhdGVSZWN0KHpvb21lZFJlY3QsIHpvb21lZFNpemUs
IHJhZGlvTWFyZ2lucyhjb250cm9sU2l6ZSksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICAgICAgY2Fz
ZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OiB7CisgICAgICAg
ICAgICBOU0J1dHRvbkNlbGwgKmNlbGwgPSBidXR0b24ocGFydCwgc3RhdGVzLCB6b29tZWRSZWN0
LCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBb
Y2VsbCBjb250cm9sU2l6ZV07CisKKyAgICAgICAgICAgIC8vIFdlIGluZmxhdGUgdGhlIHJlY3Qg
YXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHRoZSBBcXVhIGJ1dHRvbidzIHNoYWRvdy4KKyAgICAg
ICAgICAgIGlmIChbY2VsbCBiZXplbFN0eWxlXSA9PSBOU1JvdW5kZWRCZXplbFN0eWxlKSB7Cisg
ICAgICAgICAgICAgICAgSW50U2l6ZSB6b29tZWRTaXplID0gYnV0dG9uU2l6ZXMoKVtjb250cm9s
U2l6ZV07CisgICAgICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9vbWVkU2l6ZS5o
ZWlnaHQoKSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIHpvb21lZFNpemUuc2V0V2lk
dGgoem9vbWVkUmVjdC53aWR0aCgpKTsgLy8gQnV0dG9ucyBkb24ndCBldmVyIGNvbnN0cmFpbiB3
aWR0aCwgc28gdGhlIHpvb21lZCB3aWR0aCBjYW4ganVzdCBiZSBob25vcmVkLgorICAgICAgICAg
ICAgICAgIHpvb21lZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCBi
dXR0b25NYXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9p
ZCBUaGVtZUNocm9taXVtTWFjOjpwYWludChDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVz
IHN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiB6b29tZWRS
ZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KiBzY3JvbGxWaWV3KSBjb25zdAorewor
ICAgIHN3aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAg
ICAgIHBhaW50Q2hlY2tib3goc3RhdGVzLCBjb250ZXh0LCB6b29tZWRSZWN0LCB6b29tRmFjdG9y
LCBzY3JvbGxWaWV3KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJhZGlvUGFy
dDoKKyAgICAgICAgICAgIHBhaW50UmFkaW8oc3RhdGVzLCBjb250ZXh0LCB6b29tZWRSZWN0LCB6
b29tRmFjdG9yLCBzY3JvbGxWaWV3KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFB1c2hCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25QYXJ0OgorICAgICAg
ICBjYXNlIEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICAg
ICAgICAgIHBhaW50QnV0dG9uKHBhcnQsIHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9v
bUZhY3Rvciwgc2Nyb2xsVmlldyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLm1tCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFBvaW50LmgJKHJldmlzaW9uIDQ4MzkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAKIHR5
cGVkZWYgc3RydWN0IENHUG9pbnQgQ0dQb2ludDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFD
KQorI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBQTEFURk9STShE
QVJXSU4pKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVT
CiB0eXBlZGVmIHN0cnVjdCBDR1BvaW50IE5TUG9pbnQ7CiAjZWxzZQpAQCAtODQsNyArODQsOCBA
QCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dQb2ludCgpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01F
VFJZX1RZUEVTKQorI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQ
RVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgfHwgKFBMQVRGT1JNKENIUk9N
SVVNKSAmJiBQTEFURk9STShEQVJXSU4pKQogICAgIEZsb2F0UG9pbnQoY29uc3QgTlNQb2ludCYp
OwogICAgIG9wZXJhdG9yIE5TUG9pbnQoKSBjb25zdDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCShyZXZpc2lvbiA0ODM5MikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcg
QEAKIHR5cGVkZWYgc3RydWN0IENHUmVjdCBDR1JlY3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KE1BQykKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgUExBVEZP
Uk0oREFSV0lOKSkKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9U
WVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IE5TUmVjdDsKICNlbHNlCkBAIC0xMjcsNyArMTI3
LDggQEAgcHVibGljOgogICAgIG9wZXJhdG9yIENHUmVjdCgpIGNvbnN0OwogI2VuZGlmCiAKLSNp
ZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dF
T01FVFJZX1RZUEVTKQorI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllf
VFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgfHwgKFBMQVRGT1JNKENI
Uk9NSVVNKSAmJiBQTEFURk9STShEQVJXSU4pKQogICAgIEZsb2F0UmVjdChjb25zdCBOU1JlY3Qm
KTsKICAgICBvcGVyYXRvciBOU1JlY3QoKSBjb25zdDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCShyZXZpc2lvbiA0ODM5MikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBDR1NpemU7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KE1BQykKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgUExBVEZP
Uk0oREFSV0lOKSkKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9U
WVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dTaXplIE5TU2l6ZTsKICNlbHNlCkBAIC03OSw3ICs3OSw4
IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1NpemUoKSBjb25zdDsKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9N
RVRSWV9UWVBFUykKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZ
UEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpIFwKKyAgICAgIHx8IChQTEFURk9STShDSFJP
TUlVTSkgJiYgUExBVEZPUk0oREFSV0lOKSkKICAgICBleHBsaWNpdCBGbG9hdFNpemUoY29uc3Qg
TlNTaXplICYpOyAvLyBkb24ndCBkbyB0aGlzIGltcGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQog
ICAgIG9wZXJhdG9yIE5TU2l6ZSgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ludFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuaAkocmV2aXNpb24gNDgzOTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ludFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogdHlwZWRl
ZiBzdHJ1Y3QgQ0dSZWN0IENHUmVjdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFDKQorI2lm
IFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBQTEFURk9STShEQVJXSU4p
KQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTCiB0eXBl
ZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0OwogI2Vsc2UKQEAgLTE2MSw3ICsxNjEsOCBAQCBwdWJs
aWM6CiAgICAgb3BlcmF0b3IgU2tJUmVjdCgpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZ
UEVTKQorI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FN
RV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAm
JiBQTEFURk9STShEQVJXSU4pKQogICAgIG9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0OwogI2VuZGlm
CiAKQEAgLTE5OCw3ICsxOTksOCBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludFJl
Y3QmIGEsCiBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgQ0dSZWN0Jik7CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FT
X0NHR0VPTUVUUllfVFlQRVMpCisjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9N
RVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCisgICAgICB8fCAoUExBVEZP
Uk0oQ0hST01JVU0pICYmIFBMQVRGT1JNKERBUldJTikpCiBJbnRSZWN0IGVuY2xvc2luZ0ludFJl
Y3QoY29uc3QgTlNSZWN0Jik7CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lQ2hyb21pdW1NYWMuaAkocmV2aXNpb24gNDgzOTIpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNyArMyw2
IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjYs
NyArMjUsNiBAQAogI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVtTWFjX2gKIAogI2ltcG9ydCAi
UmVuZGVyVGhlbWUuaCIKLSNpbXBvcnQgPEFwcEtpdC9BcHBLaXQuaD4KICNpbXBvcnQgPHd0Zi9I
YXNoTWFwLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTM2LDE4NiArMzQsMTY5
IEBACiBjbGFzcyBXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcjsKICNlbmRp
ZgogCi1uYW1lc3BhY2UgV2ViQ29yZSB7CisvLyBUaGlzIGZpbGUgKGFuZCBpdHMgYXNzb2NpYXRl
ZCAubW0gZmlsZSkgaXMgYSBjbG9uZSBvZiBSZW5kZXJUaGVtZU1hYy5oLiBTZWUKKy8vIHRoZSAu
bW0gZmlsZSBmb3IgZGV0YWlscy4KIAotICAgIGNsYXNzIFJlbmRlclN0eWxlOworbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0gICAgY2xhc3MgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYyA6IHB1YmxpYyBS
ZW5kZXJUaGVtZSB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5k
ZXJUaGVtZT4gY3JlYXRlKCk7CitjbGFzcyBSZW5kZXJTdHlsZTsKIAotICAgICAgICAvLyBBIG1l
dGhvZCB0byBvYnRhaW4gdGhlIGJhc2VsaW5lIHBvc2l0aW9uIGZvciBhICJsZWFmIiBjb250cm9s
LiAgVGhpcyB3aWxsIG9ubHkgYmUgdXNlZCBpZiBhIGJhc2VsaW5lCi0gICAgICAgIC8vIHBvc2l0
aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVj
a2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgotICAgICAgICAvLyBjb250
cm9scyB0aGF0IG5lZWQgdG8gZG8gdGhpcy4KLSAgICAgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQ
b3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKK2NsYXNzIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWMgOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKIAotICAgICAgICAvLyBBIG1ldGhvZCBhc2tp
bmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZv
Y3VzIG9yIG5vdC4KLSAgICAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNv
bnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUg
Y29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90
LgorICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmpl
Y3QqKSBjb25zdDsKIAotICAgICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkg
Y29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCi0gICAgICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAvLyBB
IGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRl
ZCBhdCBhbGwuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVj
dChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVz
dFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKTsKIAotICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9y
ZGVyRGF0YSYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmls
bExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRh
dGEmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmlsbExheWVyJiwg
Y29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29s
b3IoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRm
b3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlTGlzdEJveFNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZv
cm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCkg
Y29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCkg
Y29uc3Q7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Db2xvcnNEaWRD
aGFuZ2UoKTsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJhckNvbnRy
b2xTaXplRm9yUGFydChDb250cm9sUGFydCkgeyByZXR1cm4gU21hbGxTY3JvbGxiYXI7IH0KKyAg
ICAKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKIAotICAgICAg
ICAvLyBTeXN0ZW0gZm9udHMuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBj
c3NWYWx1ZUlkLCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICAvLyBTeXN0ZW0gZm9udHMu
CisgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQoaW50IGNzc1ZhbHVlSWQsIEZvbnREZXNjcmlw
dGlvbiYpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUo
UmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXpl
KFJlbmRlclN0eWxlKikgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRl
clRodW1iU2l6ZShSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIHZpcnR1
YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSopIGNvbnN0OwotICAg
ICAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikg
Y29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRl
clN0eWxlKikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5n
Qm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIFNj
cm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJhckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFy
dCkgeyByZXR1cm4gU21hbGxTY3JvbGxiYXI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgIAotICAgICAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGludCBwb3B1
cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmly
dHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNv
bnN0OworICAgIAorICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwogCi0gICAgICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNv
bnN0OworICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0
OwogCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3JzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3JzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgICAgICAvLyBNZXRob2RzIGZvciBlYWNoIGFwcGVh
cmFuY2UgdmFsdWUuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7
Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLQotICAgICAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgV2ViQ29yZTo6RWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRC
dXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0
eWxlKikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4
dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OwotCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICAgICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRl
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtCYWNrQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYygpOwotICAgICAg
ICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUNocm9taXVtTWFjKCk7Ci0KLSAgICAgICAgSW50UmVjdCBp
bmZsYXRlUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IGludCogbWFy
Z2lucywgZmxvYXQgem9vbUxldmVsID0gMS4wZikgY29uc3Q7Ci0KLSAgICAgICAgLy8gR2V0IHRo
ZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiAgVXNlZCBieSBzb21lIG9mIHRoZSBj
b250cm9scyAobGlrZSBidXR0b25zKS4KLSAgICAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6
ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICAgICAgTlNDb250cm9sU2l6ZSBjb250
cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICAgICAgdm9pZCBz
ZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJbnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6
ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZik7Ci0gICAgICAgIHZvaWQgc2V0U2l6
ZUZyb21Gb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAg
ICAgICBJbnRTaXplIHNpemVGb3JGb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6
ZXMpIGNvbnN0OwotICAgICAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxl
KiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwotICAgICAgICB2b2lkIHNldEZvbnRGcm9t
Q29udHJvbFNpemUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6
ZSkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCB1cGRhdGVBY3RpdmVTdGF0ZShOU0NlbGwqLCBjb25z
dCBSZW5kZXJPYmplY3QqKTsKLSAgICAgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxs
KiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0gICAgICAgIHZvaWQgdXBkYXRlRW5hYmxlZFN0YXRl
KE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVjdCopOwotICAgICAgICB2b2lkIHVwZGF0ZUZvY3Vz
ZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICAgICAgdm9pZCB1cGRh
dGVQcmVzc2VkU3RhdGUoTlNDZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0KLSAgICAgICAg
Ly8gSGVscGVycyBmb3IgYWRqdXN0aW5nIGFwcGVhcmFuY2UgYW5kIGZvciBwYWludGluZwotICAg
ICAgICBjb25zdCBJbnRTaXplKiBjaGVja2JveFNpemVzKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0
IGludCogY2hlY2tib3hNYXJnaW5zKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0Q2hlY2tib3hD
ZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgICAg
IGNvbnN0IEludFNpemUqIHJhZGlvU2l6ZXMoKSBjb25zdDsKLSAgICAgICAgY29uc3QgaW50KiBy
YWRpb01hcmdpbnMoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRSYWRpb0NlbGxTdGF0ZShjb25z
dCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAgICAgdm9pZCBzZXRCdXR0
b25QYWRkaW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6ZSkgY29u
c3Q7Ci0gICAgICAgIGNvbnN0IEludFNpemUqIGJ1dHRvblNpemVzKCkgY29uc3Q7Ci0gICAgICAg
IGNvbnN0IGludCogYnV0dG9uTWFyZ2lucygpIGNvbnN0OwotICAgICAgICB2b2lkIHNldEJ1dHRv
bkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICAg
ICAgdm9pZCBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3QqLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgICAgIGNvbnN0IEludFNpemUqIHBvcHVwQnV0dG9uU2l6ZXMoKSBj
b25zdDsKLSAgICAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvbk1hcmdpbnMoKSBjb25zdDsKLSAg
ICAgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSkgY29uc3Q7
Ci0gICAgICAgIHZvaWQgcGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICAg
ICAgY29uc3QgSW50U2l6ZSogbWVudUxpc3RTaXplcygpIGNvbnN0OwotCi0gICAgICAgIGNvbnN0
IEludFNpemUqIHNlYXJjaEZpZWxkU2l6ZXMoKSBjb25zdDsKLSAgICAgICAgY29uc3QgSW50U2l6
ZSogY2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdDsKLSAgICAgICAgY29uc3QgSW50U2l6ZSogcmVz
dWx0c0J1dHRvblNpemVzKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0U2VhcmNoQ2VsbFN0YXRl
KFJlbmRlck9iamVjdCosIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdm9pZCBzZXRTZWFyY2hG
aWVsZFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICAgICAgCi0gICAgICAgIE5TQnV0dG9u
Q2VsbCogY2hlY2tib3goKSBjb25zdDsKLSAgICAgICAgTlNCdXR0b25DZWxsKiByYWRpbygpIGNv
bnN0OwotICAgICAgICBOU0J1dHRvbkNlbGwqIGJ1dHRvbigpIGNvbnN0OwotICAgICAgICBOU1Bv
cFVwQnV0dG9uQ2VsbCogcG9wdXBCdXR0b24oKSBjb25zdDsKLSAgICAgICAgTlNTZWFyY2hGaWVs
ZENlbGwqIHNlYXJjaCgpIGNvbnN0OwotICAgICAgICBOU01lbnUqIHNlYXJjaE1lbnVUZW1wbGF0
ZSgpIGNvbnN0OwotICAgICAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRodW1iSG9yaXpvbnRhbCgp
IGNvbnN0OwotICAgICAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRodW1iVmVydGljYWwoKSBjb25z
dDsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmV0YWluUHRyPE5TQnV0dG9uQ2Vs
bD4gbV9jaGVja2JveDsKLSAgICAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNCdXR0b25DZWxsPiBt
X3JhZGlvOwotICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxOU0J1dHRvbkNlbGw+IG1fYnV0dG9u
OwotICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxOU1BvcFVwQnV0dG9uQ2VsbD4gbV9wb3B1cEJ1
dHRvbjsKLSAgICAgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNTZWFyY2hGaWVsZENlbGw+IG1fc2Vh
cmNoOwotICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxOU01lbnU+IG1fc2VhcmNoTWVudVRlbXBs
YXRlOwotICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxOU1NsaWRlckNlbGw+IG1fc2xpZGVyVGh1
bWJIb3Jpem9udGFsOwotICAgICAgICBtdXRhYmxlIFJldGFpblB0cjxOU1NsaWRlckNlbGw+IG1f
c2xpZGVyVGh1bWJWZXJ0aWNhbDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotICAgICAgICBib29sIG1faXNT
bGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkOwotICAgICAgICBib29sIG1faXNTbGlkZXJUaHVt
YlZlcnRpY2FsUHJlc3NlZDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICAgICAgbXV0YWJsZSBIYXNoTWFw
PGludCwgUkdCQTMyPiBtX3N5c3RlbUNvbG9yQ2FjaGU7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0gICAgICAg
IFJldGFpblB0cjxXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcj4gbV9ub3Rp
ZmljYXRpb25PYnNlcnZlcjsKLSAgICB9OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9v
bCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJU
aHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25z
dDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRp
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBi
b29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisjaWYgRU5BQkxFKFZJ
REVPKQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJP
YmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFT
ZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRl
clRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFUaW1lUmVtYWluaW5nKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogCisgICAgLy8gTWVkaWEgY29udHJvbHMK
KyAgICB2aXJ0dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7CiAjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBSZW5kZXJUaGVtZUNocm9taXVtTWFjKCk7CisgICAgdmlydHVh
bCB+UmVuZGVyVGhlbWVDaHJvbWl1bU1hYygpOworCisgICAgSW50UmVjdCBpbmZsYXRlUmVjdChj
b25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IGludCogbWFyZ2lucywgZmxvYXQg
em9vbUxldmVsID0gMS4wZikgY29uc3Q7CisKKyAgICBGbG9hdFJlY3QgY29udmVydFRvUGFpbnRp
bmdSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBwYXJ0UmVuZGVyZXIsIGNvbnN0IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRS
ZWN0JiByKSBjb25zdDsKKyAgICAKKyAgICAvLyBHZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBv
ZmYgdGhlIGZvbnQuICBVc2VkIGJ5IHNvbWUgb2YgdGhlIGNvbnRyb2xzIChsaWtlIGJ1dHRvbnMp
LgorICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlKikgY29u
c3Q7CisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5
bGUqKSBjb25zdDsKKyAgICB2b2lkIHNldENvbnRyb2xTaXplKE5TQ2VsbCosIGNvbnN0IEludFNp
emUqIHNpemVzLCBjb25zdCBJbnRTaXplJiBtaW5TaXplLCBmbG9hdCB6b29tTGV2ZWwgPSAxLjBm
KTsKKyAgICB2b2lkIHNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUq
IHNpemVzKSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JGb250KFJlbmRlclN0eWxlKiwgY29u
c3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIEludFNpemUgc2l6ZUZvclN5c3RlbUZvbnQo
UmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CisgICAgdm9pZCBzZXRG
b250RnJvbUNvbnRyb2xTaXplKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIE5TQ29u
dHJvbFNpemUpIGNvbnN0OworCisgICAgdm9pZCB1cGRhdGVBY3RpdmVTdGF0ZShOU0NlbGwqLCBj
b25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwq
LCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0Nl
bGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUZvY3VzZWRTdGF0ZShO
U0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZVByZXNzZWRTdGF0
ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKworICAgIC8vIEhlbHBlcnMgZm9yIGFk
anVzdGluZyBhcHBlYXJhbmNlIGFuZCBmb3IgcGFpbnRpbmcKKworICAgIHZvaWQgc2V0UG9wdXBC
dXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpOworICAg
IGNvbnN0IEludFNpemUqIHBvcHVwQnV0dG9uU2l6ZXMoKSBjb25zdDsKKyAgICBjb25zdCBpbnQq
IHBvcHVwQnV0dG9uTWFyZ2lucygpIGNvbnN0OworICAgIGNvbnN0IGludCogcG9wdXBCdXR0b25Q
YWRkaW5nKE5TQ29udHJvbFNpemUpIGNvbnN0OworICAgIHZvaWQgcGFpbnRNZW51TGlzdEJ1dHRv
bkdyYWRpZW50cyhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICBjb25zdCBJbnRTaXplKiBtZW51TGlzdFNpemVzKCkgY29u
c3Q7CisKKyAgICBjb25zdCBJbnRTaXplKiBzZWFyY2hGaWVsZFNpemVzKCkgY29uc3Q7CisgICAg
Y29uc3QgSW50U2l6ZSogY2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdDsKKyAgICBjb25zdCBJbnRT
aXplKiByZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25zdDsKKyAgICB2b2lkIHNldFNlYXJjaENlbGxT
dGF0ZShSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBzZXRTZWFyY2hG
aWVsZFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICAKKyAgICBOU1BvcFVwQnV0dG9uQ2Vs
bCogcG9wdXBCdXR0b24oKSBjb25zdDsKKyAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoKCkg
Y29uc3Q7CisgICAgTlNNZW51KiBzZWFyY2hNZW51VGVtcGxhdGUoKSBjb25zdDsKKyAgICBOU1Ns
aWRlckNlbGwqIHNsaWRlclRodW1iSG9yaXpvbnRhbCgpIGNvbnN0OworICAgIE5TU2xpZGVyQ2Vs
bCogc2xpZGVyVGh1bWJWZXJ0aWNhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIG11dGFibGUg
UmV0YWluUHRyPE5TUG9wVXBCdXR0b25DZWxsPiBtX3BvcHVwQnV0dG9uOworICAgIG11dGFibGUg
UmV0YWluUHRyPE5TU2VhcmNoRmllbGRDZWxsPiBtX3NlYXJjaDsKKyAgICBtdXRhYmxlIFJldGFp
blB0cjxOU01lbnU+IG1fc2VhcmNoTWVudVRlbXBsYXRlOworICAgIG11dGFibGUgUmV0YWluUHRy
PE5TU2xpZGVyQ2VsbD4gbV9zbGlkZXJUaHVtYkhvcml6b250YWw7CisgICAgbXV0YWJsZSBSZXRh
aW5QdHI8TlNTbGlkZXJDZWxsPiBtX3NsaWRlclRodW1iVmVydGljYWw7CisKKyAgICBib29sIG1f
aXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkOworICAgIGJvb2wgbV9pc1NsaWRlclRodW1i
VmVydGljYWxQcmVzc2VkOworCisgICAgbXV0YWJsZSBIYXNoTWFwPGludCwgUkdCQTMyPiBtX3N5
c3RlbUNvbG9yQ2FjaGU7CisKKyAgICBSZXRhaW5QdHI8V2ViQ29yZVJlbmRlclRoZW1lTm90aWZp
Y2F0aW9uT2JzZXJ2ZXI+IG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZUNocm9taXVtTWFjX2gKSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQkocmV2aXNpb24g
NDgzOTIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2dsZSwgSW5jLgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTE5LDI1ICsxOCwxNiBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCiAgKi8KIAotLy8gRklYTUU6IHdlIHN0aWxsIG5lZWQgdG8gZmlndXJlIG91dCBpZiBw
YXNzaW5nIGEgbnVsbCB2aWV3IHRvIHRoZSBjZWxsCi0vLyBkcmF3aW5nIHJvdXRpbmVzIHdpbGwg
d29yay4gSSBleHBlY3Qgbm90LCBhbmQgaWYgdGhhdCdzIHRoZSBjYXNlIHdlJ2xsIGhhdmUKLS8v
IHRvIGZpZ3VyZSBvdXQgc29tZXRoaW5nIGVsc2UuIEZvciBub3csIGF0IGxlYXN0IGxlYXZlIHRo
ZSBsaW5lcyBjb21tZW50ZWQKLS8vIGluLCBidXQgdGhlIHByb2N1cmVtZW50IG9mIHRoZSB2aWV3
IGlmIDAnZC4KLQogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJSZW5kZXJUaGVtZUNocm9t
aXVtTWFjLmgiCiAKLSNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KLSNpbXBvcnQgPENvY29hL0Nv
Y29hLmg+Ci0jaW1wb3J0IDxtYXRoLmg+Ci0KICNpbXBvcnQgIkJpdG1hcEltYWdlLmgiCiAjaW1w
b3J0ICJDaHJvbWl1bUJyaWRnZS5oIgogI2ltcG9ydCAiQ29sb3JNYWMuaCIKICNpbXBvcnQgIkNT
U1N0eWxlU2VsZWN0b3IuaCIKICNpbXBvcnQgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbXBvcnQg
IkRvY3VtZW50LmgiCiAjaW1wb3J0ICJFbGVtZW50LmgiCi0jaW1wb3J0ICJGb3VuZGF0aW9uRXh0
cmFzLmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2ltcG9ydCAiSFRNTElucHV0RWxlbWVudC5oIgpAQCAtNTAsOSArNDAsMTMgQEAKICNpbXBv
cnQgIlJlbmRlclNsaWRlci5oIgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiU2hh
cmVkQnVmZmVyLmgiCi0jaW1wb3J0ICJUaW1lUmFuZ2VzLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lz
dGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0ICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgorI2ltcG9y
dCA8Q2FyYm9uL0NhcmJvbi5oPgorI2ltcG9ydCA8Q29jb2EvQ29jb2EuaD4KICNpbXBvcnQgPHd0
Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPG1h
dGguaD4KIAogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiB0eXBlZGVmIGludCBOU0ludGVnZXI7
CkBAIC02MSw2ICs1NSwyMyBAQCB0eXBlZGVmIHVuc2lnbmVkIE5TVUludGVnZXI7CiAKIHVzaW5n
IHN0ZDo6bWluOwogCisvLyBUaGlzIGZpbGUgKGFuZCBpdHMgYXNzb2NpYXRlZCAuaCBmaWxlKSBp
cyBhIGNsb25lIG9mIFJlbmRlclRoZW1lTWFjLm1tLgorLy8gQmVjYXVzZSB0aGUgb3JpZ2luYWwg
ZmlsZSBpcyBkZXNpZ25lZCB0byBydW4gaW4tcHJvY2VzcyBpbnNpZGUgYSBDb2NvYSB2aWV3LAor
Ly8gd2UgbXVzdCBtYWludGFpbiBhIGZvcmsuIFBsZWFzZSBtYWludGFpbiB0aGlzIGZpbGUgYnkg
cGVyZm9ybWluZyBwYXJhbGxlbAorLy8gY2hhbmdlcyB0byBpdC4KKy8vCisvLyBUaGUgb25seSBj
aGFuZ2VzIGZyb20gUmVuZGVyVGhlbWVNYWMgc2hvdWxkIGJlOgorLy8gLSBUaGUgY2xhc3NuYW1l
IGNoYW5nZSBmcm9tIFJlbmRlclRoZW1lTWFjIHRvIFJlbmRlclRoZW1lQ2hyb21pdW1NYWMuCisv
LyAtIFRoZSBpbnRyb2R1Y3Rpb24gb2YgUlRDTUZsaXBwZWRWaWV3IGFuZCBGbGlwcGVkVmlldygp
IGFuZCBpdHMgdXNlIGFzIHRoZQorLy8gICBwYXJlbnQgdmlldyBmb3IgY2VsbCByZW5kZXJpbmcu
CisvLyAtIEluIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSwgdGhlIHVzZSBvZiBDaHJvbWl1bUJy
aWRnZSB0byBkZXRlcm1pbmUgaWYKKy8vICAgd2UncmUgaW4gbGF5b3V0IHRlc3QgbW9kZS4KKy8v
IC0gdXBkYXRlQWN0aXZlU3RhdGUoKSBhbmQgaXRzIHVzZSB0byB1cGRhdGUgdGhlIGNlbGxzJyB2
aXN1YWwgYXBwZWFyYW5jZS4KKy8vCisvLyBGb3IgYWxsIG90aGVyIGRpZmZlcmVuY2VzLCBpZiBp
dCB3YXMgaW50cm9kdWNlZCBpbiB0aGlzIGZpbGUsIHRoZW4gdGhlCisvLyBtYWludGFpbmVyIGZv
cmdvdCB0byBpbmNsdWRlIGl0IGluIHRoZSBsaXN0OyBvdGhlcndpc2UgaXQgaXMgYW4gdXBkYXRl
IHRoYXQKKy8vIHNob3VsZCBoYXZlIGJlZW4gYXBwbGllZCB0byB0aGlzIGZpbGUgYnV0IHdhcyBu
b3QuCisKIC8vIFRoZSBtZXRob2RzIGluIHRoaXMgZmlsZSBhcmUgc3BlY2lmaWMgdG8gdGhlIE1h
YyBPUyBYIHBsYXRmb3JtLgogCiAvLyBGSVhNRTogVGhlIHBsYXRmb3JtLWluZGVwZW5kZW50IGNv
ZGUgaW4gdGhpcyBjbGFzcyBzaG91bGQgYmUgZmFjdG9yZWQgb3V0IGFuZCBtZXJnZWQgd2l0aCBS
ZW5kZXJUaGVtZVNhZmFyaS4gCkBAIC04NSw0OCArOTYsNjYgQEAgdXNpbmcgc3RkOjptaW47CiAg
ICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpc3lzdGVtQ29sb3JzRGlkQ2hhbmdlOihOU05v
dGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbgorLSAodm9pZClzeXN0ZW1Db2xvcnNEaWRDaGFuZ2U6
KE5TTm90aWZpY2F0aW9uICopdW51c2VkTm90aWZpY2F0aW9uCiB7Ci0gICAgQVNTRVJUKFtbbm90
aWZpY2F0aW9uIG5hbWVdIGlzRXF1YWxUb1N0cmluZzpOU1N5c3RlbUNvbG9yc0RpZENoYW5nZU5v
dGlmaWNhdGlvbl0pOworICAgIEFTU0VSVF9VTlVTRUQodW51c2VkTm90aWZpY2F0aW9uLCBbW3Vu
dXNlZE5vdGlmaWNhdGlvbiBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6TlNTeXN0ZW1Db2xvcnNEaWRD
aGFuZ2VOb3RpZmljYXRpb25dKTsKICAgICBfdGhlbWUtPnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdl
KCk7CiB9CiAKIEBlbmQKIAorQGludGVyZmFjZSBSVENNRmxpcHBlZFZpZXcgOiBOU1ZpZXcKK3t9
CisKKy0gKEJPT0wpaXNGbGlwcGVkOworLSAoTlNUZXh0ICopY3VycmVudEVkaXRvcjsKKworQGVu
ZAorCitAaW1wbGVtZW50YXRpb24gUlRDTUZsaXBwZWRWaWV3CisKKy0gKEJPT0wpaXNGbGlwcGVk
IHsKKyAgICByZXR1cm4gW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNGbGlw
cGVkXTsKK30KKworLSAoTlNUZXh0ICopY3VycmVudEVkaXRvciB7CisgICAgcmV0dXJuIG5pbDsK
K30KKworQGVuZAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKIGVudW0gewotICAgIFRvcE1hcmdpbiwKLSAgICBSaWdodE1hcmdpbiwKLSAgICBC
b3R0b21NYXJnaW4sCi0gICAgTGVmdE1hcmdpbgorICAgIHRvcE1hcmdpbiwKKyAgICByaWdodE1h
cmdpbiwKKyAgICBib3R0b21NYXJnaW4sCisgICAgbGVmdE1hcmdpbgogfTsKIAogZW51bSB7Ci0g
ICAgVG9wUGFkZGluZywKLSAgICBSaWdodFBhZGRpbmcsCi0gICAgQm90dG9tUGFkZGluZywKLSAg
ICBMZWZ0UGFkZGluZworICAgIHRvcFBhZGRpbmcsCisgICAgcmlnaHRQYWRkaW5nLAorICAgIGJv
dHRvbVBhZGRpbmcsCisgICAgbGVmdFBhZGRpbmcKIH07CiAKLS8vIEluIG91ciBNYWMgcG9ydCwg
d2UgZG9uJ3QgZGVmaW5lIFBMQVRGT1JNKE1BQykgYW5kIHRodXMgZG9uJ3QgcGljayB1cCB0aGUK
LS8vIHxvcGVyYXRvciBOU1JlY3QoKXwgb24gV2ViQ29yZTo6SW50UmVjdCBhbmQgRmxvYXRSZWN0
LiBUaGlzIHN1YnN0aXR1ZXMgZm9yCi0vLyB0aGF0IG1pc3NpbmcgY29udmVyc2lvbiBvcGVyYXRv
ci4KLU5TUmVjdCBJbnRSZWN0VG9OU1JlY3QoY29uc3QgSW50UmVjdCAmIHJlY3QpCi17Ci0gICAg
cmV0dXJuIE5TTWFrZVJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOwotfQotCi1OU1JlY3QgRmxvYXRSZWN0VG9OU1JlY3QoY29uc3QgRmxvYXRSZWN0
ICYgcmVjdCkKKy8vIEluIFNub3cgTGVvcGFyZCwgbWFueSBjZWxscyBvbmx5IGNoZWNrIHRvIHNl
ZSBpZiB0aGUgdmlldyB0aGV5J3JlIHBhc3NlZCBpcworLy8gZmxpcHBlZCwgYW5kIGlmIGEgbmls
IHZpZXcgaXMgcGFzc2VkLCBuZWdsZWN0IHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50CisvLyBncmFw
aGljcyBjb250ZXh0IGlzIGZsaXBwZWQuIFRodXMgd2UgcGFzcyBhIHNoYW0gdmlldyB0byB0aGVt
LCBvbmUgd2hvc2UKKy8vIGZsaXBwZWQgc3RhdGUganVzdCByZWZsZWN0cyB0aGUgc3RhdGUgb2Yg
dGhlIGNvbnRleHQuCitOU1ZpZXcqIEZsaXBwZWRWaWV3KCkKIHsKLSAgICByZXR1cm4gTlNNYWtl
UmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Cisg
ICAgc3RhdGljIE5TVmlldyogdmlldyA9IFtbUlRDTUZsaXBwZWRWaWV3IGFsbG9jXSBpbml0XTsK
KyAgICByZXR1cm4gdmlldzsKIH0KIAotSW50UmVjdCBOU1JlY3RUb0ludFJlY3QoY29uc3QgTlNS
ZWN0ICYgcmVjdCkKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZv
clBhZ2UoUGFnZSopCiB7Ci0gICAgcmV0dXJuIEludFJlY3QocmVjdC5vcmlnaW4ueCwgcmVjdC5v
cmlnaW4ueSwgcmVjdC5zaXplLndpZHRoLCByZWN0LnNpemUuaGVpZ2h0KTsKKyAgICBzdGF0aWMg
UmVuZGVyVGhlbWUqIHJ0ID0gUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y3JlYXRlKCkucmVsZWFz
ZVJlZigpOworICAgIHJldHVybiBydDsKIH0KIAogUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y3JlYXRlKCkKQEAgLTEzNCwxMiArMTYzLDYgQEAgUGFzc1Jl
ZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVDaHJvbQogICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYyk7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+
IFJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSogcGFnZSkKLXsKLSAgICBzdGF0aWMgUmVu
ZGVyVGhlbWUqIHJ0ID0gUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y3JlYXRlKCkucmVsZWFzZVJl
ZigpOwotICAgIHJldHVybiBydDsKLX0KLQogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6UmVuZGVy
VGhlbWVDaHJvbWl1bU1hYygpCiAgICAgOiBtX2lzU2xpZGVyVGh1bWJIb3Jpem9udGFsUHJlc3Nl
ZChmYWxzZSkKICAgICAsIG1faXNTbGlkZXJUaHVtYlZlcnRpY2FsUHJlc3NlZChmYWxzZSkKQEAg
LTE3NCw2ICsxOTcsMTYgQEAgQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1B
YwogICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIHJlZENv
bXBvbmVudF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIGdyZWVuQ29tcG9uZW50
XSksIHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3IgYmx1ZUNvbXBvbmVudF0pKTsKIH0K
IAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3I6OndoaXRl
OworfQorCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUluYWN0aXZlTGlz
dEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9y
OjpibGFjazsKK30KKwogQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1Gb2N1
c1JpbmdDb2xvcigpIGNvbnN0CiB7CiAgICAgaWYgKENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0
TW9kZSgpKQpAQCAtMTgyLDYgKzIxNSwxMSBAQCBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwbGF0Zm9ybUZvCiAgICAgcmV0dXJuIHN5c3RlbUNvbG9yKENTU1ZhbHVlV2Via2l0Rm9jdXNS
aW5nQ29sb3IpOwogfQogCitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUlu
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKK30KKwogc3Rh
dGljIEZvbnRXZWlnaHQgdG9Gb250V2VpZ2h0KE5TSW50ZWdlciBhcHBLaXRGb250V2VpZ2h0KQog
ewogICAgIEFTU0VSVChhcHBLaXRGb250V2VpZ2h0ID4gMCAmJiBhcHBLaXRGb250V2VpZ2h0IDwg
MTUpOwpAQCAtMjExLDUxICsyNDksNTEgQEAgc3RhdGljIEZvbnRXZWlnaHQgdG9Gb250V2VpZ2h0
KE5TSW50ZWdlcgogCiB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnN5c3RlbUZvbnQoaW50
IGNzc1ZhbHVlSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewot
ICAgIHN0YXRpYyBGb250RGVzY3JpcHRpb24gc3lzdGVtRm9udDsKLSAgICBzdGF0aWMgRm9udERl
c2NyaXB0aW9uIHNtYWxsU3lzdGVtRm9udDsKLSAgICBzdGF0aWMgRm9udERlc2NyaXB0aW9uIG1l
bnVGb250OwotICAgIHN0YXRpYyBGb250RGVzY3JpcHRpb24gbGFiZWxGb250OwotICAgIHN0YXRp
YyBGb250RGVzY3JpcHRpb24gbWluaUNvbnRyb2xGb250OwotICAgIHN0YXRpYyBGb250RGVzY3Jp
cHRpb24gc21hbGxDb250cm9sRm9udDsKLSAgICBzdGF0aWMgRm9udERlc2NyaXB0aW9uIGNvbnRy
b2xGb250OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9uLCBzeXN0ZW1G
b250LCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRpb24sIHNtYWxs
U3lzdGVtRm9udCwgKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9u
LCBtZW51Rm9udCwgKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9u
LCBsYWJlbEZvbnQsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlv
biwgbWluaUNvbnRyb2xGb250LCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVz
Y3JpcHRpb24sIHNtYWxsQ29udHJvbEZvbnQsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEZvbnREZXNjcmlwdGlvbiwgY29udHJvbEZvbnQsICgpKTsKIAogICAgIEZvbnREZXNjcmlwdGlv
biogY2FjaGVkRGVzYzsKICAgICBOU0ZvbnQqIGZvbnQgPSBuaWw7CiAgICAgc3dpdGNoIChjc3NW
YWx1ZUlkKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwdGlvbjoKLSAgICAgICAgY2FjaGVk
RGVzYyA9ICZzbWFsbFN5c3RlbUZvbnQ7Ci0gICAgICAgIGlmICghc21hbGxTeXN0ZW1Gb250Lmlz
QWJzb2x1dGVTaXplKCkpCi0gICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZT
aXplOltOU0ZvbnQgc21hbGxTeXN0ZW1Gb250U2l6ZV1dOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIENTU1ZhbHVlTWVudToKLSAgICAgICAgY2FjaGVkRGVzYyA9ICZtZW51Rm9udDsKLSAgICAg
ICAgaWYgKCFtZW51Rm9udC5pc0Fic29sdXRlU2l6ZSgpKQotICAgICAgICAgICAgZm9udCA9IFtO
U0ZvbnQgbWVudUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZV1dOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1ZhbHVlU3RhdHVzQmFyOgotICAgICAgICBjYWNoZWREZXNjID0g
JmxhYmVsRm9udDsKLSAgICAgICAgaWYgKCFsYWJlbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKLSAg
ICAgICAgICAgIGZvbnQgPSBbTlNGb250IGxhYmVsRm9udE9mU2l6ZTpbTlNGb250IGxhYmVsRm9u
dFNpemVdXTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdE1pbmlDb250
cm9sOgotICAgICAgICBjYWNoZWREZXNjID0gJm1pbmlDb250cm9sRm9udDsKLSAgICAgICAgaWYg
KCFtaW5pQ29udHJvbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKLSAgICAgICAgICAgIGZvbnQgPSBb
TlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xT
aXplOk5TTWluaUNvbnRyb2xTaXplXV07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFs
dWVXZWJraXRTbWFsbENvbnRyb2w6Ci0gICAgICAgIGNhY2hlZERlc2MgPSAmc21hbGxDb250cm9s
Rm9udDsKLSAgICAgICAgaWYgKCFzbWFsbENvbnRyb2xGb250LmlzQWJzb2x1dGVTaXplKCkpCi0g
ICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVt
Rm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1NtYWxsQ29udHJvbFNpemVdXTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENvbnRyb2w6Ci0gICAgICAgIGNhY2hlZERlc2Mg
PSAmY29udHJvbEZvbnQ7Ci0gICAgICAgIGlmICghY29udHJvbEZvbnQuaXNBYnNvbHV0ZVNpemUo
KSkKLSAgICAgICAgICAgIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBz
eXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOk5TUmVndWxhckNvbnRyb2xTaXplXV07Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNhY2hlZERlc2MgPSAmc3lzdGVtRm9u
dDsKLSAgICAgICAgaWYgKCFzeXN0ZW1Gb250LmlzQWJzb2x1dGVTaXplKCkpCi0gICAgICAgICAg
ICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVtRm9udFNpemVd
XTsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwdGlvbjoKKyAgICAgICAgICAgIGNhY2hl
ZERlc2MgPSAmc21hbGxTeXN0ZW1Gb250OworICAgICAgICAgICAgaWYgKCFzbWFsbFN5c3RlbUZv
bnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0
ZW1Gb250T2ZTaXplOltOU0ZvbnQgc21hbGxTeXN0ZW1Gb250U2l6ZV1dOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVNZW51OgorICAgICAgICAgICAgY2FjaGVkRGVz
YyA9ICZtZW51Rm9udDsKKyAgICAgICAgICAgIGlmICghbWVudUZvbnQuaXNBYnNvbHV0ZVNpemUo
KSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBtZW51Rm9udE9mU2l6ZTpbTlNGb250
IHN5c3RlbUZvbnRTaXplXV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZVN0YXR1c0JhcjoKKyAgICAgICAgICAgIGNhY2hlZERlc2MgPSAmbGFiZWxGb250OworICAg
ICAgICAgICAgaWYgKCFsYWJlbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgICAg
ICBmb250ID0gW05TRm9udCBsYWJlbEZvbnRPZlNpemU6W05TRm9udCBsYWJlbEZvbnRTaXplXV07
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdE1pbmlDb250
cm9sOgorICAgICAgICAgICAgY2FjaGVkRGVzYyA9ICZtaW5pQ29udHJvbEZvbnQ7CisgICAgICAg
ICAgICBpZiAoIW1pbmlDb250cm9sRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAg
ICAgIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6
ZUZvckNvbnRyb2xTaXplOk5TTWluaUNvbnRyb2xTaXplXV07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbDoKKyAgICAgICAgICAgIGNh
Y2hlZERlc2MgPSAmc21hbGxDb250cm9sRm9udDsKKyAgICAgICAgICAgIGlmICghc21hbGxDb250
cm9sRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgICAgIGZvbnQgPSBbTlNGb250
IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOk5T
U21hbGxDb250cm9sU2l6ZV1dOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRDb250cm9sOgorICAgICAgICAgICAgY2FjaGVkRGVzYyA9ICZjb250cm9sRm9u
dDsKKyAgICAgICAgICAgIGlmICghY29udHJvbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAg
ICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc3lzdGVt
Rm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1JlZ3VsYXJDb250cm9sU2l6ZV1dOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjYWNoZWREZXNjID0gJnN5
c3RlbUZvbnQ7CisgICAgICAgICAgICBpZiAoIXN5c3RlbUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkK
KyAgICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQg
c3lzdGVtRm9udFNpemVdXTsKICAgICB9CiAKICAgICBpZiAoZm9udCkgewpAQCAtMjcyLDcgKzMx
MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3lzdGVtRm9udCgKIAogc3RhdGlj
IFJHQkEzMiBjb252ZXJ0TlNDb2xvclRvQ29sb3IoTlNDb2xvciAqY29sb3IpCiB7Ci0gICAgTlND
b2xvciAqY29sb3JJbkNvbG9yU3BhY2UgPSBbY29sb3IgY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1l
Ok5TQ2FsaWJyYXRlZFJHQkNvbG9yU3BhY2VdOworICAgIE5TQ29sb3IgKmNvbG9ySW5Db2xvclNw
YWNlID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3Bh
Y2VdOwogICAgIGlmIChjb2xvckluQ29sb3JTcGFjZSkgewogICAgICAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1Ni4wLCAwLjApOwogICAgICAgICByZXR1
cm4gbWFrZVJHQihzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRmFjdG9yICogW2NvbG9ySW5Db2xvclNw
YWNlIHJlZENvbXBvbmVudF0pLApAQCAtMjkyLDcgKzMzMCw3IEBAIHN0YXRpYyBSR0JBMzIgY29u
dmVydE5TQ29sb3JUb0NvbG9yKE5TQ28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXNQZXJQaXhlbDo0
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGFzQWxwaGE6WUVTCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXNQbGFuYXI6Tk8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlTmFtZTpOU0NhbGlicmF0
ZWRSR0JDb2xvclNwYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZU5hbWU6TlNEZXZpY2VS
R0JDb2xvclNwYWNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNQZXJSb3c6NAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYml0c1BlclBpeGVsOjMyXTsKIApAQCAtMzE5LDcgKzM1Nyw3IEBAIHN0YXRpYyBS
R0JBMzIgbWVudUJhY2tncm91bmRDb2xvcigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVzUGVyUGl4
ZWw6NAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0FscGhhOllFUwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlzUGxhbmFyOk5PCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZU5hbWU6TlNDYWxp
YnJhdGVkUkdCQ29sb3JTcGFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2VOYW1lOk5TRGV2
aWNlUkdCQ29sb3JTcGFjZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUGVyUm93OjQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpdHNQZXJQaXhlbDozMl07CiAKQEAgLTM1MSwxMDEgKzM4OSwxMDEgQEAg
Q29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3lzdGVtQ29sbwogICAgIAogICAgIENvbG9y
IGNvbG9yOwogICAgIHN3aXRjaCAoY3NzVmFsdWVJZCkgewotICAgIGNhc2UgQ1NTVmFsdWVBY3Rp
dmVib3JkZXI6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9y
IGtleWJvYXJkRm9jdXNJbmRpY2F0b3JDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENTU1ZhbHVlQWN0aXZlY2FwdGlvbjoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRv
Q29sb3IoW05TQ29sb3Igd2luZG93RnJhbWVUZXh0Q29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NWYWx1ZUFwcHdvcmtzcGFjZToKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlND
b2xvclRvQ29sb3IoW05TQ29sb3IgaGVhZGVyQ29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NWYWx1ZUJhY2tncm91bmQ6Ci0gICAgICAgIC8vIFVzZSB0aGVtZSBpbmRlcGVuZGVu
dCBkZWZhdWx0Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVCdXR0b25mYWNlOgot
ICAgICAgICAvLyBXZSB1c2UgdGhpcyB2YWx1ZSBpbnN0ZWFkIG9mIE5TQ29sb3IncyBjb250cm9s
Q29sb3IgdG8gYXZvaWQgd2Vic2l0ZSBpbmNvbXBhdGliaWxpdGllcy4KLSAgICAgICAgLy8gV2Ug
bWF5IHdhbnQgdG8gY2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBOU0NvbG9yIGluIGZ1dHVyZS4KLSAg
ICAgICAgY29sb3IgPSAweEZGQzBDMEMwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1Zh
bHVlQnV0dG9uaGlnaGxpZ2h0OgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xv
cihbTlNDb2xvciBjb250cm9sSGlnaGxpZ2h0Q29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NWYWx1ZUJ1dHRvbnNoYWRvdzoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xv
clRvQ29sb3IoW05TQ29sb3IgY29udHJvbFNoYWRvd0NvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTVmFsdWVCdXR0b250ZXh0OgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0Nv
bG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sVGV4dENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTVmFsdWVDYXB0aW9udGV4dDoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlND
b2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTVmFsdWVHcmF5dGV4dDoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29s
b3IoW05TQ29sb3IgZGlzYWJsZWRDb250cm9sVGV4dENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTVmFsdWVIaWdobGlnaHQ6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29s
b3JUb0NvbG9yKFtOU0NvbG9yIHNlbGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcl0pOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlSGlnaGxpZ2h0dGV4dDoKLSAgICAgICAgY29sb3Ig
PSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2VsZWN0ZWRUZXh0Q29sb3JdKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUluYWN0aXZlYm9yZGVyOgotICAgICAgICBj
b2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sQmFja2dyb3VuZENv
bG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWNhcHRpb246
Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xC
YWNrZ3JvdW5kQ29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUluYWN0
aXZlY2FwdGlvbnRleHQ6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtO
U0NvbG9yIHRleHRDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlSW5m
b2JhY2tncm91bmQ6Ci0gICAgICAgIC8vIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgTlNDb2xv
ciBmb3IgdGhpcyBzbyB3ZSB1c2UgYSBoYXJkIGNvZGVkIHZhbHVlLgotICAgICAgICBjb2xvciA9
IDB4RkZGQkZDQzU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVJbmZvdGV4dDoK
LSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENvbG9y
XSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVNZW51OgotICAgICAgICBjb2xv
ciA9IG1lbnVCYWNrZ3JvdW5kQ29sb3IoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NW
YWx1ZU1lbnV0ZXh0OgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlND
b2xvciBzZWxlY3RlZE1lbnVJdGVtVGV4dENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTVmFsdWVTY3JvbGxiYXI6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0Nv
bG9yKFtOU0NvbG9yIHNjcm9sbEJhckNvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTVmFsdWVUZXh0OgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlND
b2xvciB0ZXh0Q29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVRocmVl
ZGRhcmtzaGFkb3c6Ci0gICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0Nv
bG9yIGNvbnRyb2xEYXJrU2hhZG93Q29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NWYWx1ZVRocmVlZHNoYWRvdzoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29s
b3IoW05TQ29sb3Igc2hhZG93Q29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NW
YWx1ZVRocmVlZGZhY2U6Ci0gICAgICAgIC8vIFdlIHVzZSB0aGlzIHZhbHVlIGluc3RlYWQgb2Yg
TlNDb2xvcidzIGNvbnRyb2xDb2xvciB0byBhdm9pZCB3ZWJzaXRlIGluY29tcGF0aWJpbGl0aWVz
LgotICAgICAgICAvLyBXZSBtYXkgd2FudCB0byBjaGFuZ2UgdGhpcyB0byB1c2UgdGhlIE5TQ29s
b3IgaW4gZnV0dXJlLgotICAgICAgICBjb2xvciA9IDB4RkZDMEMwQzA7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRoaWdobGlnaHQ6Ci0gICAgICAgIGNvbG9yID0gY29u
dmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGhpZ2hsaWdodENvbG9yXSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRsaWdodHNoYWRvdzoKLSAgICAgICAgY29sb3Ig
PSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbExpZ2h0SGlnaGxpZ2h0Q29s
b3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0Nv
bG9yOgotICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBrZXli
b2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NW
YWx1ZVdpbmRvdzoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29s
b3Igd2luZG93QmFja2dyb3VuZENvbG9yXSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NT
VmFsdWVXaW5kb3dmcmFtZToKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3Io
W05TQ29sb3Igd2luZG93RnJhbWVDb2xvcl0pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENT
U1ZhbHVlV2luZG93dGV4dDoKLSAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3Io
W05TQ29sb3Igd2luZG93RnJhbWVUZXh0Q29sb3JdKTsKLSAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTVmFsdWVBY3RpdmVib3JkZXI6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnRO
U0NvbG9yVG9Db2xvcihbTlNDb2xvciBrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlQWN0aXZlY2FwdGlvbjoKKyAg
ICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHdpbmRvd0Zy
YW1lVGV4dENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1
ZUFwcHdvcmtzcGFjZToKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9y
KFtOU0NvbG9yIGhlYWRlckNvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUJhY2tncm91bmQ6CisgICAgICAgICAgICAvLyBVc2UgdGhlbWUgaW5kZXBlbmRl
bnQgZGVmYXVsdAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVCdXR0
b25mYWNlOgorICAgICAgICAgICAgLy8gV2UgdXNlIHRoaXMgdmFsdWUgaW5zdGVhZCBvZiBOU0Nv
bG9yJ3MgY29udHJvbENvbG9yIHRvIGF2b2lkIHdlYnNpdGUgaW5jb21wYXRpYmlsaXRpZXMuCisg
ICAgICAgICAgICAvLyBXZSBtYXkgd2FudCB0byBjaGFuZ2UgdGhpcyB0byB1c2UgdGhlIE5TQ29s
b3IgaW4gZnV0dXJlLgorICAgICAgICAgICAgY29sb3IgPSAweEZGQzBDMEMwOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVCdXR0b25oaWdobGlnaHQ6CisgICAgICAg
ICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sSGlnaGxp
Z2h0Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlQnV0
dG9uc2hhZG93OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05T
Q29sb3IgY29udHJvbFNoYWRvd0NvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0Nv
bG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sVGV4dENvbG9yXSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgorICAgICAgICAgICAgY29sb3Ig
PSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENvbG9yXSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUdyYXl0ZXh0OgorICAgICAgICAgICAgY29s
b3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgZGlzYWJsZWRDb250cm9sVGV4dENv
bG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUhpZ2hsaWdo
dDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHNl
bGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTVmFsdWVIaWdobGlnaHR0ZXh0OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0
TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2VsZWN0ZWRUZXh0Q29sb3JdKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlSW5hY3RpdmVib3JkZXI6CisgICAgICAgICAg
ICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sQmFja2dyb3Vu
ZENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUluYWN0
aXZlY2FwdGlvbjoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtO
U0NvbG9yIGNvbnRyb2xCYWNrZ3JvdW5kQ29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1ZhbHVlSW5hY3RpdmVjYXB0aW9udGV4dDoKKyAgICAgICAgICAgIGNvbG9y
ID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHRleHRDb2xvcl0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVJbmZvYmFja2dyb3VuZDoKKyAgICAgICAg
ICAgIC8vIFRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgTlNDb2xvciBmb3IgdGhpcyBzbyB3ZSB1
c2UgYSBoYXJkIGNvZGVkIHZhbHVlLgorICAgICAgICAgICAgY29sb3IgPSAweEZGRkJGQ0M1Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVJbmZvdGV4dDoKKyAgICAg
ICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHRleHRDb2xvcl0p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVNZW51OgorICAgICAg
ICAgICAgY29sb3IgPSBtZW51QmFja2dyb3VuZENvbG9yKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZU1lbnV0ZXh0OgorICAgICAgICAgICAgY29sb3IgPSBjb252
ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2VsZWN0ZWRNZW51SXRlbVRleHRDb2xvcl0pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVTY3JvbGxiYXI6CisgICAg
ICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBzY3JvbGxCYXJD
b2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUZXh0Ogor
ICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENv
bG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRocmVlZGRh
cmtzaGFkb3c6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlND
b2xvciBjb250cm9sRGFya1NoYWRvd0NvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NWYWx1ZVRocmVlZHNoYWRvdzoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVy
dE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHNoYWRvd0NvbG9yXSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRocmVlZGZhY2U6CisgICAgICAgICAgICAvLyBXZSB1
c2UgdGhpcyB2YWx1ZSBpbnN0ZWFkIG9mIE5TQ29sb3IncyBjb250cm9sQ29sb3IgdG8gYXZvaWQg
d2Vic2l0ZSBpbmNvbXBhdGliaWxpdGllcy4KKyAgICAgICAgICAgIC8vIFdlIG1heSB3YW50IHRv
IGNoYW5nZSB0aGlzIHRvIHVzZSB0aGUgTlNDb2xvciBpbiBmdXR1cmUuCisgICAgICAgICAgICBj
b2xvciA9IDB4RkZDMEMwQzA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZVRocmVlZGhpZ2hsaWdodDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JU
b0NvbG9yKFtOU0NvbG9yIGhpZ2hsaWdodENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBDU1NWYWx1ZVRocmVlZGxpZ2h0c2hhZG93OgorICAgICAgICAgICAgY29sb3Ig
PSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbExpZ2h0SGlnaGxpZ2h0Q29s
b3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Rm9j
dXNSaW5nQ29sb3I6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihb
TlNDb2xvciBrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENTU1ZhbHVlV2luZG93OgorICAgICAgICAgICAgY29sb3IgPSBjb252
ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igd2luZG93QmFja2dyb3VuZENvbG9yXSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdpbmRvd2ZyYW1lOgorICAgICAg
ICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igd2luZG93RnJhbWVD
b2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVXaW5kb3d0
ZXh0OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Ig
d2luZG93RnJhbWVUZXh0Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGlmICghY29sb3IuaXNWYWxpZCgpKQpAQCAtNDU4LDcgKzQ5Niw3IEBAIENvbG9yIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnN5c3RlbUNvbG8KIH0KIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3Jk
ZXJEYXRhJiBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGaWxsTGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5k
Q29sb3IpIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
RmlsbExheWVyJiBiYWNrZ3JvdW5kLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25z
dAogewogICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFRleHRGaWVsZFBhcnQgfHwgc3R5
bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0QXJlYVBhcnQgfHwgc3R5bGUtPmFwcGVhcmFuY2UoKSA9
PSBMaXN0Ym94UGFydCkKICAgICAgICAgcmV0dXJuIHN0eWxlLT5ib3JkZXIoKSAhPSBib3JkZXI7
CkBAIC00NzMsNjIgKzUxMSwzMiBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmlzQ29u
dHJvbFN0CiAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJv
cmRlciwgYmFja2dyb3VuZCwgYmFja2dyb3VuZENvbG9yKTsKIH0KIAotLy8gRklYTUU6IFVzZSB0
aGUgY29kZSBmcm9tIHRoZSBvbGQgdXBzdHJlYW0gdmVyc2lvbiwgYmVmb3JlIGl0IHdhcyBjb252
ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkgaW4gcjM3NzMxLgogdm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJl
Y3QmIHIpCiB7CisgICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2Uo
KTsKKyAgICAKKyNpZiBVU0UoTkVXX1RIRU1FKQorICAgIHN3aXRjaCAocGFydCkgeworICAgICAg
ICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgICAgIGNh
c2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICAg
ICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgorICAg
ICAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjphZGp1c3RSZXBhaW50UmVjdChvLCByKTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCiAgICAg
ZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwogCi0gICAgc3dp
dGNoIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIENoZWNrYm94UGFydDog
ewotICAgICAgICAvLyBTaW5jZSB3ZSBxdWVyeSB0aGUgcHJvdG90eXBlIGNlbGwsIHdlIG5lZWQg
dG8gdXBkYXRlIGl0cyBzdGF0ZSB0byBtYXRjaC4KLSAgICAgICAgc2V0Q2hlY2tib3hDZWxsU3Rh
dGUobywgcik7Ci0KLSAgICAgICAgLy8gV2UgaW5mbGF0ZSB0aGUgcmVjdCBhcyBuZWVkZWQgdG8g
YWNjb3VudCBmb3IgcGFkZGluZyBpbmNsdWRlZCBpbiB0aGUgY2VsbCB0byBhY2NvbW1vZGF0ZSB0
aGUgY2hlY2tib3gKLSAgICAgICAgLy8gc2hhZG93IiBhbmQgdGhlIGNoZWNrLiAgV2UgZG9uJ3Qg
Y29uc2lkZXIgdGhpcyBwYXJ0IG9mIHRoZSBib3VuZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0
LgotICAgICAgICBJbnRTaXplIHNpemUgPSBjaGVja2JveFNpemVzKClbW2NoZWNrYm94KCkgY29u
dHJvbFNpemVdXTsKLSAgICAgICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21M
ZXZlbCk7Ci0gICAgICAgIHNpemUuc2V0V2lkdGgoc2l6ZS53aWR0aCgpICogem9vbUxldmVsKTsK
LSAgICAgICAgciA9IGluZmxhdGVSZWN0KHIsIHNpemUsIGNoZWNrYm94TWFyZ2lucygpLCB6b29t
TGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBSYWRpb1BhcnQ6IHsKLSAg
ICAgICAgLy8gU2luY2Ugd2UgcXVlcnkgdGhlIHByb3RvdHlwZSBjZWxsLCB3ZSBuZWVkIHRvIHVw
ZGF0ZSBpdHMgc3RhdGUgdG8gbWF0Y2guCi0gICAgICAgIHNldFJhZGlvQ2VsbFN0YXRlKG8sIHIp
OwotCi0gICAgICAgIC8vIFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQg
Zm9yIHBhZGRpbmcgaW5jbHVkZWQgaW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGNoZWNr
Ym94Ci0gICAgICAgIC8vIHNoYWRvdyIgYW5kIHRoZSBjaGVjay4gIFdlIGRvbid0IGNvbnNpZGVy
IHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGluIFdlYktpdC4KLSAgICAg
ICAgSW50U2l6ZSBzaXplID0gcmFkaW9TaXplcygpW1tyYWRpbygpIGNvbnRyb2xTaXplXV07Ci0g
ICAgICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgICAg
ICBzaXplLnNldFdpZHRoKHNpemUud2lkdGgoKSAqIHpvb21MZXZlbCk7Ci0gICAgICAgIHIgPSBp
bmZsYXRlUmVjdChyLCBzaXplLCByYWRpb01hcmdpbnMoKSwgem9vbUxldmVsKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBEZWZhdWx0
QnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6IHsKLSAgICAgICAgLy8gU2luY2Ugd2Ug
cXVlcnkgdGhlIHByb3RvdHlwZSBjZWxsLCB3ZSBuZWVkIHRvIHVwZGF0ZSBpdHMgc3RhdGUgdG8g
bWF0Y2guCi0gICAgICAgIHNldEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKLQotICAgICAgICAvLyBX
ZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1
ZGVkIGluIHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBjaGVja2JveAotICAgICAgICAvLyBz
aGFkb3ciIGFuZCB0aGUgY2hlY2suICBXZSBkb24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhl
IGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBXZWJLaXQuCi0gICAgICAgIGlmIChbYnV0dG9uKCkg
YmV6ZWxTdHlsZV0gPT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkgewotICAgICAgICAgICAgSW50U2l6
ZSBzaXplID0gYnV0dG9uU2l6ZXMoKVtbYnV0dG9uKCkgY29udHJvbFNpemVdXTsKLSAgICAgICAg
ICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgICAgICAg
ICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwotICAgICAgICAgICAgciA9IGluZmxhdGVSZWN0
KHIsIHNpemUsIGJ1dHRvbk1hcmdpbnMoKSwgem9vbUxldmVsKTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBNZW51bGlzdFBhcnQ6IHsKKyAgICBpZiAocGFydCA9
PSBNZW51bGlzdFBhcnQpIHsKICAgICAgICAgc2V0UG9wdXBCdXR0b25DZWxsU3RhdGUobywgcik7
CiAgICAgICAgIEludFNpemUgc2l6ZSA9IHBvcHVwQnV0dG9uU2l6ZXMoKVtbcG9wdXBCdXR0b24o
KSBjb250cm9sU2l6ZV1dOwogICAgICAgICBzaXplLnNldEhlaWdodChzaXplLmhlaWdodCgpICog
em9vbUxldmVsKTsKICAgICAgICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwogICAgICAgICBy
ID0gaW5mbGF0ZVJlY3Qociwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCksIHpvb21MZXZlbCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKICAg
ICB9CiB9CiAKQEAgLTUzNiwyMCArNTQ0LDQyIEBAIEludFJlY3QgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6aW5mbGF0ZVIKIHsKICAgICAvLyBPbmx5IGRvIHRoZSBpbmZsYXRpb24gaWYgdGhlIGF2
YWlsYWJsZSB3aWR0aC9oZWlnaHQgYXJlIHRvbyBzbWFsbC4gIE90aGVyd2lzZSB0cnkgdG8KICAg
ICAvLyBmaXQgdGhlIGdsb3cvY2hlY2sgc3BhY2UgaW50byB0aGUgYXZhaWxhYmxlIGJveCdzIHdp
ZHRoL2hlaWdodC4KLSAgICBpbnQgd2lkdGhEZWx0YSA9IHIud2lkdGgoKSAtIChzaXplLndpZHRo
KCkgKyBtYXJnaW5zW0xlZnRNYXJnaW5dICogem9vbUxldmVsICsgbWFyZ2luc1tSaWdodE1hcmdp
bl0gKiB6b29tTGV2ZWwpOwotICAgIGludCBoZWlnaHREZWx0YSA9IHIuaGVpZ2h0KCkgLSAoc2l6
ZS5oZWlnaHQoKSArIG1hcmdpbnNbVG9wTWFyZ2luXSAqIHpvb21MZXZlbCArIG1hcmdpbnNbQm90
dG9tTWFyZ2luXSAqIHpvb21MZXZlbCk7CisgICAgaW50IHdpZHRoRGVsdGEgPSByLndpZHRoKCkg
LSAoc2l6ZS53aWR0aCgpICsgbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCArIG1hcmdp
bnNbcmlnaHRNYXJnaW5dICogem9vbUxldmVsKTsKKyAgICBpbnQgaGVpZ2h0RGVsdGEgPSByLmhl
aWdodCgpIC0gKHNpemUuaGVpZ2h0KCkgKyBtYXJnaW5zW3RvcE1hcmdpbl0gKiB6b29tTGV2ZWwg
KyBtYXJnaW5zW2JvdHRvbU1hcmdpbl0gKiB6b29tTGV2ZWwpOwogICAgIEludFJlY3QgcmVzdWx0
KHIpOwogICAgIGlmICh3aWR0aERlbHRhIDwgMCkgewotICAgICAgICByZXN1bHQuc2V0WChyZXN1
bHQueCgpIC0gbWFyZ2luc1tMZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCk7CisgICAgICAgIHJlc3Vs
dC5zZXRYKHJlc3VsdC54KCkgLSBtYXJnaW5zW2xlZnRNYXJnaW5dICogem9vbUxldmVsKTsKICAg
ICAgICAgcmVzdWx0LnNldFdpZHRoKHJlc3VsdC53aWR0aCgpIC0gd2lkdGhEZWx0YSk7CiAgICAg
fQogICAgIGlmIChoZWlnaHREZWx0YSA8IDApIHsKLSAgICAgICAgcmVzdWx0LnNldFkocmVzdWx0
LnkoKSAtIG1hcmdpbnNbVG9wTWFyZ2luXSAqIHpvb21MZXZlbCk7CisgICAgICAgIHJlc3VsdC5z
ZXRZKHJlc3VsdC55KCkgLSBtYXJnaW5zW3RvcE1hcmdpbl0gKiB6b29tTGV2ZWwpOwogICAgICAg
ICByZXN1bHQuc2V0SGVpZ2h0KHJlc3VsdC5oZWlnaHQoKSAtIGhlaWdodERlbHRhKTsKICAgICB9
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRmxvYXRSZWN0IFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVy
ZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlu
cHV0UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgcGFydFJl
Y3QoaW5wdXRSZWN0KTsKKyAgICAKKyAgICAvLyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVuIHRo
ZSBwYXJ0IHJlbmRlcmVyIGFuZCB0aGUgaW5wdXQgcmVuZGVyZXIKKyAgICBGbG9hdFNpemUgb2Zm
c2V0RnJvbUlucHV0UmVuZGVyZXI7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9
IHBhcnRSZW5kZXJlcjsKKyAgICB3aGlsZSAocmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0gaW5wdXRS
ZW5kZXJlcikgeworICAgICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5pbmdSZW5kZXJlciA9IHJl
bmRlcmVyLT5jb250YWluZXIoKTsKKyAgICAgICAgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIgLT0g
cmVuZGVyZXItPm9mZnNldEZyb21Db250YWluZXIoY29udGFpbmluZ1JlbmRlcmVyKTsKKyAgICAg
ICAgcmVuZGVyZXIgPSBjb250YWluaW5nUmVuZGVyZXI7CisgICAgfQorICAgIC8vIElmIHRoZSBp
bnB1dCByZW5kZXJlciB3YXMgbm90IGEgY29udGFpbmVyLCBzb21ldGhpbmcgd2VudCB3cm9uZwor
ICAgIEFTU0VSVChyZW5kZXJlciA9PSBpbnB1dFJlbmRlcmVyKTsKKyAgICAvLyBNb3ZlIHRoZSBy
ZWN0IGludG8gcGFydFJlbmRlcmVyJ3MgY29vcmRzCisgICAgcGFydFJlY3QubW92ZShvZmZzZXRG
cm9tSW5wdXRSZW5kZXJlcik7CisgICAgLy8gQWNjb3VudCBmb3IgdGhlIGxvY2FsIGRyYXdpbmcg
b2Zmc2V0ICh0eCwgdHkpCisgICAgcGFydFJlY3QubW92ZShyLngoKSwgci55KCkpOworCisgICAg
cmV0dXJuIHBhcnRSZWN0OworfQorCiAvLyBVcGRhdGVzIHRoZSBjb250cm9sIHRpbnQgKGEuay5h
LiBhY3RpdmUgc3RhdGUpIG9mIHxjZWxsfCAoZnJvbSB8b3wpLgogLy8gSW4gdGhlIENocm9taXVt
IHBvcnQsIHRoZSByZW5kZXJlciBydW5zIGFzIGEgYmFja2dyb3VuZCBwcm9jZXNzIGFuZCBjb250
cm9scycKIC8vIE5TQ2VsbChzKSBsYWNrIGEgcGFyZW50IE5TVmlldy4gVGhlcmVmb3JlIGNvbnRy
b2xzIGRvbid0IGhhdmUgdGhlaXIgdGludApAQCAtNjA5LDE5ICs2MzksNiBAQCB2b2lkIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnVwZGF0ZVByZXNzCiAgICAgICAgIFtjZWxsIHNldEhpZ2hsaWdo
dGVkOnByZXNzZWRdOwogfQogCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1cHN0
cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBBUEkg
aW4gcjM3NzMxLgotaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmJhc2VsaW5lUG9zaXRpb24o
Y29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIGlmICghby0+aXNCb3goKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IENo
ZWNrYm94UGFydCB8fCBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KSB7Ci0g
ICAgICAgIGNvbnN0IFJlbmRlckJveCogYm94ID0gdG9SZW5kZXJCb3gobyk7Ci0gICAgICAgIHJl
dHVybiBib3gtPm1hcmdpblRvcCgpICsgYm94LT5oZWlnaHQoKSAtIDIgKiBvLT5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCk7IC8vIFRoZSBiYXNlbGluZSBpcyAycHggdXAgZnJvbSB0aGUgYm90dG9t
IG9mIHRoZSBjaGVja2JveC9yYWRpbyBpbiBBcHBLaXQuCi0gICAgfQotICAgIHJldHVybiBSZW5k
ZXJUaGVtZTo6YmFzZWxpbmVQb3NpdGlvbihvKTsKLX0KLQogYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0
CiB7CiAgICAgLy8gQW4gYWx0ZXJuYXRlIHdheSB0byBpbXBsZW1lbnQgdGhpcyB3b3VsZCBiZSB0
byBnZXQgdGhlIGFwcHJvcHJpYXRlIGNlbGwgb2JqZWN0CkBAIC02OTMsNyArNzEwLDcgQEAgdm9p
ZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRTaXplRnJvbQogICAgICAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2V0Rm9udEZyb21Db250cm9sU2l6
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplKSBjb25zdAogewogICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb247
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwpAQCAtNzIxLDM1
MiArNzM4LDEwIEBAIE5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y28KICAg
ICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7CiB9CiAKLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8g
YmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUg
bmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1ib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBh
aW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIExvY2FsQ3VycmVudEdyYXBo
aWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotCi0gICAgLy8gRGV0
ZXJtaW5lIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG5lZWRlZCBmb3IgdGhlIGNvbnRyb2wgYW5kIHBy
ZXBhcmUgdGhlIGNlbGwgZm9yIHBhaW50aW5nLgotICAgIHNldENoZWNrYm94Q2VsbFN0YXRlKG8s
IHIpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLQotICAgIGZsb2F0IHpvb21M
ZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKLQotICAgIC8vIFdlIGluZmxhdGUg
dGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVkZWQgaW4gdGhl
IGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGNoZWNrYm94Ci0gICAgLy8gc2hhZG93IiBhbmQgdGhl
IGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9mIHRoZSBib3VuZHMgb2YgdGhl
IGNvbnRyb2wgaW4gV2ViS2l0LgotICAgIE5TQnV0dG9uQ2VsbCogY2hlY2tib3ggPSB0aGlzLT5j
aGVja2JveCgpOwotICAgIEludFNpemUgc2l6ZSA9IGNoZWNrYm94U2l6ZXMoKVtbY2hlY2tib3gg
Y29udHJvbFNpemVdXTsKLSAgICBzaXplLnNldFdpZHRoKHNpemUud2lkdGgoKSAqIHpvb21MZXZl
bCk7Ci0gICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZlbCk7Ci0gICAg
SW50UmVjdCBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChyLCBzaXplLCBjaGVja2JveE1hcmdp
bnMoKSwgem9vbUxldmVsKTsKLSAgICAKLSAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKLSAg
ICAgICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGluZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUxl
dmVsKTsKLSAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0
KCkgLyB6b29tTGV2ZWwpOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKGlu
ZmxhdGVkUmVjdC54KCksIGluZmxhdGVkUmVjdC55KCkpOwotICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7Ci0gICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJl
Y3QueSgpKTsKLSAgICB9Ci0gICAgCi0gICAgW2NoZWNrYm94IGRyYXdXaXRoRnJhbWU6TlNSZWN0
KEludFJlY3RUb05TUmVjdChpbmZsYXRlZFJlY3QpKSBpblZpZXc6bmlsXTsKLSAgICBbY2hlY2ti
b3ggc2V0Q29udHJvbFZpZXc6bmlsXTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3Jl
KCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUg
aW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3
IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1jb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjpjaGVja2JveFNpemVzKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBz
aXplc1szXSA9IHsgSW50U2l6ZSgxNCwgMTQpLCBJbnRTaXplKDEyLCAxMiksIEludFNpemUoMTAs
IDEwKSB9OwotICAgIHJldHVybiBzaXplczsKLX0KLQotLy8gRklYTUU6IFRoaXMgdXNlZCB0byBi
ZSBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB1bnRpbCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBu
ZXcgdGhlbWUgQVBJIGluIHIzNzczMS4KLWNvbnN0IGludCogUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6Y2hlY2tib3hNYXJnaW5zKCkgY29uc3QKLXsKLSAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdp
bnNbM11bNF0gPQotICAgIHsKLSAgICAgICAgeyAzLCA0LCA0LCAyIH0sCi0gICAgICAgIHsgNCwg
MywgMywgMyB9LAotICAgICAgICB7IDQsIDMsIDMsIDMgfSwKLSAgICB9OwotICAgIHJldHVybiBt
YXJnaW5zW1tjaGVja2JveCgpIGNvbnRyb2xTaXplXV07Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVz
ZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0
byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnNldENoZWNrYm94Q2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCogbywgY29uc3QgSW50
UmVjdCYgcikKLXsKLSAgICBOU0J1dHRvbkNlbGwqIGNoZWNrYm94ID0gdGhpcy0+Y2hlY2tib3go
KTsKLQotICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgcmVjdGFuZ2xl
IHdlJ3JlIHBhaW50aW5nIGludG8uCi0gICAgc2V0Q29udHJvbFNpemUoY2hlY2tib3gsIGNoZWNr
Ym94U2l6ZXMoKSwgci5zaXplKCksIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7Ci0KLSAg
ICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCi0gICAgdXBkYXRl
QWN0aXZlU3RhdGUoY2hlY2tib3gsIG8pOwotICAgIHVwZGF0ZUNoZWNrZWRTdGF0ZShjaGVja2Jv
eCwgbyk7Ci0gICAgdXBkYXRlRW5hYmxlZFN0YXRlKGNoZWNrYm94LCBvKTsKLSAgICB1cGRhdGVQ
cmVzc2VkU3RhdGUoY2hlY2tib3gsIG8pOwotICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShjaGVja2Jv
eCwgbyk7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZl
cnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3
MzEuCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldENoZWNrYm94U2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJl
IGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0
eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1
dG8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0
ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCi0gICAgc2V0U2l6ZUZy
b21Gb250KHN0eWxlLCBjaGVja2JveFNpemVzKCkpOwotfQotCi0vLyBGSVhNRTogVGhpcyB1c2Vk
IHRvIGJlIGluIHRoZSB1cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8g
dGhlIG5ldyB0aGVtZSBBUEkgaW4gcjM3NzMxLgotYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBMb2NhbEN1cnJlbnRHcmFw
aGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLQotICAgIC8vIERl
dGVybWluZSB0aGUgd2lkdGggYW5kIGhlaWdodCBuZWVkZWQgZm9yIHRoZSBjb250cm9sIGFuZCBw
cmVwYXJlIHRoZSBjZWxsIGZvciBwYWludGluZy4KLSAgICBzZXRSYWRpb0NlbGxTdGF0ZShvLCBy
KTsKLQotICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Ci0KLSAgICBmbG9hdCB6b29tTGV2
ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0KLSAgICAvLyBXZSBpbmZsYXRlIHRo
ZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVkIGluIHRoZSBj
ZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBjaGVja2JveAotICAgIC8vIHNoYWRvdyIgYW5kIHRoZSBj
aGVjay4gIFdlIGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBj
b250cm9sIGluIFdlYktpdC4KLSAgICBOU0J1dHRvbkNlbGwqIHJhZGlvID0gdGhpcy0+cmFkaW8o
KTsKLSAgICBJbnRTaXplIHNpemUgPSByYWRpb1NpemVzKClbW3JhZGlvIGNvbnRyb2xTaXplXV07
Ci0gICAgc2l6ZS5zZXRXaWR0aChzaXplLndpZHRoKCkgKiB6b29tTGV2ZWwpOwotICAgIHNpemUu
c2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgIEludFJlY3QgaW5mbGF0
ZWRSZWN0ID0gaW5mbGF0ZVJlY3Qociwgc2l6ZSwgcmFkaW9NYXJnaW5zKCksIHpvb21MZXZlbCk7
Ci0gICAgCi0gICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7Ci0gICAgICAgIGluZmxhdGVkUmVj
dC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7Ci0gICAgICAgIGlu
ZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsK
LSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgpLCBp
bmZsYXRlZFJlY3QueSgpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0
U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+
dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgfQot
Ci0gICAgW3JhZGlvIGRyYXdXaXRoRnJhbWU6TlNSZWN0KEludFJlY3RUb05TUmVjdChpbmZsYXRl
ZFJlY3QpKSBpblZpZXc6bmlsXTsKLSAgICBbcmFkaW8gc2V0Q29udHJvbFZpZXc6bmlsXTsKLQot
ICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50
aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1jb25z
dCBJbnRTaXplKiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpyYWRpb1NpemVzKCkgY29uc3QKLXsK
LSAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgxNCwgMTUpLCBJ
bnRTaXplKDEyLCAxMyksIEludFNpemUoMTAsIDEwKSB9OwotICAgIHJldHVybiBzaXplczsKLX0K
LQotLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB1bnRp
bCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUgQVBJIGluIHIzNzczMS4KLWNvbnN0
IGludCogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cmFkaW9NYXJnaW5zKCkgY29uc3QKLXsKLSAg
ICBzdGF0aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0gPQotICAgIHsKLSAgICAgICAgeyAyLCAy
LCA0LCAyIH0sCi0gICAgICAgIHsgMywgMiwgMywgMiB9LAotICAgICAgICB7IDEsIDAsIDIsIDAg
fSwKLSAgICB9OwotICAgIHJldHVybiBtYXJnaW5zW1tyYWRpbygpIGNvbnRyb2xTaXplXV07Ci19
Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50
aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi12b2lk
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldFJhZGlvQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9i
amVjdCogbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBOU0J1dHRvbkNlbGwqIHJhZGlvID0g
dGhpcy0+cmFkaW8oKTsKLQotICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0
aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8uCi0gICAgc2V0Q29udHJvbFNpemUocmFk
aW8sIHJhZGlvU2l6ZXMoKSwgci5zaXplKCksIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSk7
Ci0KLSAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCi0gICAg
dXBkYXRlQWN0aXZlU3RhdGUocmFkaW8sIG8pOwotICAgIHVwZGF0ZUNoZWNrZWRTdGF0ZShyYWRp
bywgbyk7Ci0gICAgdXBkYXRlRW5hYmxlZFN0YXRlKHJhZGlvLCBvKTsKLSAgICB1cGRhdGVQcmVz
c2VkU3RhdGUocmFkaW8sIG8pOwotICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShyYWRpbywgbyk7Ci19
Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50
aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi12b2lk
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUp
IGNvbnN0Ci17Ci0gICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lm
aWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgp
LmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBp
bnRyaW5zaWMgd2lkdGggb2YgdGhlIGNvbnRyb2wuCi0gICAgc2V0U2l6ZUZyb21Gb250KHN0eWxl
LCByYWRpb1NpemVzKCkpOwotfQotCi0vLyBGSVhNRTogVGhpcyB1c2VkIHRvIGJlIGluIHRoZSB1
cHN0cmVhbSB2ZXJzaW9uIHVudGlsIGl0IHdhcyBjb252ZXJ0ZWQgdG8gdGhlIG5ldyB0aGVtZSBB
UEkgaW4gcjM3NzMxLgotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRCdXR0b25QYWRk
aW5nRnJvbUNvbnRyb2xTaXplKFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250cm9sU2l6ZSBzaXpl
KSBjb25zdAotewotICAgIC8vIEp1c3QgdXNlIDhweC4gIEFwcEtpdCB3YW50cyB0byB1c2UgMTFw
eCBmb3IgbWluaSBidXR0b25zLCBidXQgdGhhdCBwYWRkaW5nIGlzIGp1c3QgdG9vIGxhcmdlCi0g
ICAgLy8gZm9yIHJlYWwtd29ybGQgV2ViIHNpdGVzIChjcmVhdGluZyBhIGh1Z2UgbmVjZXNzYXJ5
IG1pbmltdW0gd2lkdGggZm9yIGJ1dHRvbnMgd2hvc2Ugc3BhY2UgaXMKLSAgICAvLyBieSBkZWZp
bml0aW9uIGNvbnN0cmFpbmVkLCBzaW5jZSB3ZSBzZWxlY3QgbWluaSBvbmx5IGZvciBzbWFsbCBj
cmFtcGVkIGVudmlyb25tZW50cy4KLSAgICAvLyBUaGlzIGFsc28gZ3VhcmFudGVlcyB0aGUgSFRN
TDQgPGJ1dHRvbj4gd2lsbCBtYXRjaCBvdXIgcmVuZGVyaW5nIGJ5IGRlZmF1bHQsIHNpbmNlIHdl
J3JlIHVzaW5nIGEgY29uc2lzdGVudAotICAgIC8vIHBhZGRpbmcuCi0gICAgY29uc3QgaW50IHBh
ZGRpbmcgPSA4ICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdo
dChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5n
dGgoMCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgoMCwgRml4
ZWQpKTsKLX0KLQotLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUgdXBzdHJlYW0gdmVy
c2lvbiB1bnRpbCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUgQVBJIGluIHIzNzcz
MS4KLXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29u
c3QKLXsKLSAgICAvLyBUaGVyZSBhcmUgdGhyZWUgYXBwZWFyYW5jZSBjb25zdGFudHMgZm9yIGJ1
dHRvbnMuCi0gICAgLy8gKDEpIFB1c2gtYnV0dG9uIGlzIHRoZSBjb25zdGFudCBmb3IgdGhlIGRl
ZmF1bHQgQXF1YSBzeXN0ZW0gYnV0dG9uLiAgUHVzaCBidXR0b25zIHdpbGwgbm90IHNjYWxlIHZl
cnRpY2FsbHkgYW5kIHdpbGwgbm90IGFsbG93Ci0gICAgLy8gY3VzdG9tIGZvbnRzIG9yIGNvbG9y
cy4gIDxpbnB1dD5zIHVzZSB0aGlzIGNvbnN0YW50LiAgVGhpcyBidXR0b24gd2lsbCBhbGxvdyBj
dXN0b20gY29sb3JzIGFuZCBmb250IHdlaWdodHMvdmFyaWFudHMgYnV0IHdvbid0Ci0gICAgLy8g
c2NhbGUgdmVydGljYWxseS4KLSAgICAvLyAoMikgc3F1YXJlLWJ1dHRvbiBpcyB0aGUgY29uc3Rh
bnQgZm9yIHRoZSBzcXVhcmUgYnV0dG9uLiAgVGhpcyBidXR0b24gd2lsbCBhbGxvdyBjdXN0b20g
Zm9udHMgYW5kIGNvbG9ycyBhbmQgd2lsbCBzY2FsZSB2ZXJ0aWNhbGx5LgotICAgIC8vICgzKSBC
dXR0b24gaXMgdGhlIGNvbnN0YW50IHRoYXQgbWVhbnMgInBpY2sgdGhlIGJlc3QgYnV0dG9uIGFz
IGFwcHJvcHJpYXRlLiIgIDxidXR0b24+cyB1c2UgdGhpcyBjb25zdGFudC4gIFRoaXMgYnV0dG9u
IHdpbGwKLSAgICAvLyBhbHNvIHNjYWxlIHZlcnRpY2FsbHkgYW5kIGFsbG93IGN1c3RvbSBmb250
cyBhbmQgY29sb3JzLiAgSXQgd2lsbCBhdHRlbXB0IHRvIHVzZSBBcXVhIGlmIHBvc3NpYmxlIGFu
ZCB3aWxsIG1ha2UgdGhpcyBkZXRlcm1pbmF0aW9uCi0gICAgLy8gc29sZWx5IG9uIHRoZSByZWN0
YW5nbGUgb2YgdGhlIGNvbnRyb2wuCi0KLSAgICAvLyBEZXRlcm1pbmUgb3VyIGNvbnRyb2wgc2l6
ZSBiYXNlZCBvZmYgb3VyIGZvbnQuCi0gICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IGNv
bnRyb2xTaXplRm9yRm9udChzdHlsZSk7Ci0KLSAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9
PSBQdXNoQnV0dG9uUGFydCkgewotICAgICAgICAvLyBEaXRjaCB0aGUgYm9yZGVyLgotICAgICAg
ICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLQotICAgICAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRv
IGF1dG8uCi0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKLQotICAgICAg
ICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCi0gICAgICAgIHN0eWxlLT5zZXRXaGl0
ZVNwYWNlKFBSRSk7Ci0KLSAgICAgICAgLy8gU2V0IHRoZSBidXR0b24ncyB2ZXJ0aWNhbCBzaXpl
LgotICAgICAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKLQotICAgICAgICAvLyBBZGQgaW4gdGhl
IHBhZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNlLgotICAgICAgICBzZXRCdXR0b25QYWRkaW5n
RnJvbUNvbnRyb2xTaXplKHN0eWxlLCBjb250cm9sU2l6ZSk7Ci0KLSAgICAgICAgLy8gT3VyIGZv
bnQgaXMgbG9ja2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBzeXN0ZW0gZm9udCBzaXplIGZvciB0aGUg
Y29udHJvbC4gIFRvIGNsYXJpZnksIHdlIGZpcnN0IHVzZSB0aGUgQ1NTLXNwZWNpZmllZCBmb250
IHRvIGZpZ3VyZSBvdXQKLSAgICAgICAgLy8gYSByZWFzb25hYmxlIGNvbnRyb2wgc2l6ZSwgYnV0
IG9uY2UgdGhhdCBjb250cm9sIHNpemUgaXMgZGV0ZXJtaW5lZCwgd2UgdGhyb3cgdGhhdCBmb250
IGF3YXkgYW5kIHVzZSB0aGUgYXBwcm9wcmlhdGUKLSAgICAgICAgLy8gc3lzdGVtIGZvbnQgZm9y
IHRoZSBjb250cm9sIHNpemUgaW5zdGVhZC4KLSAgICAgICAgc2V0Rm9udEZyb21Db250cm9sU2l6
ZShzZWxlY3Rvciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKLSAgICB9IGVsc2UgewotICAgICAgICAv
LyBTZXQgYSBtaW4taGVpZ2h0IHNvIHRoYXQgd2UgY2FuJ3QgZ2V0IHNtYWxsZXIgdGhhbiB0aGUg
bWluaSBidXR0b24uCi0gICAgICAgIHN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKHN0YXRpY19j
YXN0PGludD4oMTUgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKSwgRml4ZWQpKTsKLQotICAgICAg
ICAvLyBSZXNldCB0aGUgdG9wIGFuZCBib3R0b20gYm9yZGVycy4KLSAgICAgICAgc3R5bGUtPnJl
c2V0Qm9yZGVyVG9wKCk7Ci0gICAgICAgIHN0eWxlLT5yZXNldEJvcmRlckJvdHRvbSgpOwotICAg
IH0KLQotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVz
ZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0
byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1jb25zdCBJbnRTaXplKiBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpidXR0b25TaXplcygpIGNvbnN0Ci17Ci0gICAgc3RhdGljIGNvbnN0IElu
dFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMCwgMjEpLCBJbnRTaXplKDAsIDE4KSwgSW50U2l6
ZSgwLCAxNSkgfTsKLSAgICByZXR1cm4gc2l6ZXM7Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQg
dG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0
aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1jb25zdCBpbnQqIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OmJ1dHRvbk1hcmdpbnMoKSBjb25zdAotewotICAgIHN0YXRpYyBjb25zdCBpbnQgbWFy
Z2luc1szXVs0XSA9Ci0gICAgewotICAgICAgICB7IDQsIDYsIDcsIDYgfSwKLSAgICAgICAgeyA0
LCA1LCA2LCA1IH0sCi0gICAgICAgIHsgMCwgMSwgMSwgMSB9LAotICAgIH07Ci0gICAgcmV0dXJu
IG1hcmdpbnNbW2J1dHRvbigpIGNvbnRyb2xTaXplXV07Ci19Ci0KLS8vIEZJWE1FOiBUaGlzIHVz
ZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0
byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIC8vIElm
IHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5v
dGhpbmcgdG8gZG8uCi0gICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
ICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRo
ZSBjb250cm9sLgotICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgYnV0dG9uU2l6ZXMoKSk7Ci19
Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50
aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi12b2lk
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgTlNCdXR0b25DZWxsKiBidXR0b24g
PSB0aGlzLT5idXR0b24oKTsKLQotICAgIC8vIFNldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9m
ZiB0aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8uCi0gICAgaWYgKG8tPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKSA9PSBTcXVhcmVCdXR0b25QYXJ0IHx8Ci0gICAgICAgIHIuaGVpZ2h0KCkg
PiBidXR0b25TaXplcygpW05TUmVndWxhckNvbnRyb2xTaXplXS5oZWlnaHQoKSAqIG8tPnN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKSkgewotICAgICAgICAvLyBVc2UgdGhlIHNxdWFyZSBidXR0b24K
LSAgICAgICAgaWYgKFtidXR0b24gYmV6ZWxTdHlsZV0gIT0gTlNTaGFkb3dsZXNzU3F1YXJlQmV6
ZWxTdHlsZSkKLSAgICAgICAgICAgIFtidXR0b24gc2V0QmV6ZWxTdHlsZTpOU1NoYWRvd2xlc3NT
cXVhcmVCZXplbFN0eWxlXTsKLSAgICB9IGVsc2UgaWYgKFtidXR0b24gYmV6ZWxTdHlsZV0gIT0g
TlNSb3VuZGVkQmV6ZWxTdHlsZSkKLSAgICAgICAgW2J1dHRvbiBzZXRCZXplbFN0eWxlOk5TUm91
bmRlZEJlemVsU3R5bGVdOwotCi0gICAgc2V0Q29udHJvbFNpemUoYnV0dG9uLCBidXR0b25TaXpl
cygpLCByLnNpemUoKSwgby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKLQotICAgIE5TV2lu
ZG93ICp3aW5kb3cgPSBbbmlsIHdpbmRvd107Ci0gICAgQk9PTCBpc0RlZmF1bHRCdXR0b24gPSAo
aXNEZWZhdWx0KG8pICYmIFt3aW5kb3cgaXNLZXlXaW5kb3ddKTsKLSAgICBbYnV0dG9uIHNldEtl
eUVxdWl2YWxlbnQ6KGlzRGVmYXVsdEJ1dHRvbiA/IEAiXHIiIDogQCIiKV07Ci0KLSAgICAvLyBV
cGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCi0gICAgdXBkYXRlQWN0aXZl
U3RhdGUoYnV0dG9uLCBvKTsKLSAgICB1cGRhdGVDaGVja2VkU3RhdGUoYnV0dG9uLCBvKTsKLSAg
ICB1cGRhdGVFbmFibGVkU3RhdGUoYnV0dG9uLCBvKTsKLSAgICB1cGRhdGVQcmVzc2VkU3RhdGUo
YnV0dG9uLCBvKTsKLSAgICB1cGRhdGVGb2N1c2VkU3RhdGUoYnV0dG9uLCBvKTsKLX0KLQotLy8g
RklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUgdXBzdHJlYW0gdmVyc2lvbiB1bnRpbCBpdCB3
YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUgQVBJIGluIHIzNzczMS4KLWJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQotewotICAg
IE5TQnV0dG9uQ2VsbCogYnV0dG9uID0gdGhpcy0+YnV0dG9uKCk7Ci0gICAgTG9jYWxDdXJyZW50
R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0KLSAgICAv
LyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUgY29udHJvbCBh
bmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCi0gICAgc2V0QnV0dG9uQ2VsbFN0YXRl
KG8sIHIpOwotCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKLQotICAgIC8vIFdlIGlu
ZmxhdGUgdGhlIHJlY3QgYXMgbmVlZGVkIHRvIGFjY291bnQgZm9yIHBhZGRpbmcgaW5jbHVkZWQg
aW4gdGhlIGNlbGwgdG8gYWNjb21tb2RhdGUgdGhlIGJ1dHRvbgotICAgIC8vIHNoYWRvdy4gIFdl
IGRvbid0IGNvbnNpZGVyIHRoaXMgcGFydCBvZiB0aGUgYm91bmRzIG9mIHRoZSBjb250cm9sIGlu
IFdlYktpdC4KLSAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCk7Ci0gICAgSW50U2l6ZSBzaXplID0gYnV0dG9uU2l6ZXMoKVtbYnV0dG9uIGNvbnRyb2xTaXpl
XV07Ci0gICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOwotICAgIHNpemUuc2V0SGVpZ2h0KHNp
emUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOwotICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gcjsK
LSAgICBpZiAoW2J1dHRvbiBiZXplbFN0eWxlXSA9PSBOU1JvdW5kZWRCZXplbFN0eWxlKSB7Ci0g
ICAgICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHdpdGhpbiB0aGUgYXZhaWxhYmxlIHNwYWNlLgot
ICAgICAgICBpZiAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpID4gc2l6ZS5oZWlnaHQoKSkgewotICAg
ICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFkoaW5mbGF0ZWRSZWN0LnkoKSArIChpbmZsYXRlZFJl
Y3QuaGVpZ2h0KCkgLSBzaXplLmhlaWdodCgpKSAvIDIpOwotICAgICAgICAgICAgaW5mbGF0ZWRS
ZWN0LnNldEhlaWdodChzaXplLmhlaWdodCgpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5v
dyBpbmZsYXRlIGl0IHRvIGFjY291bnQgZm9yIHRoZSBzaGFkb3cuCi0gICAgICAgIGluZmxhdGVk
UmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVkUmVjdCwgc2l6ZSwgYnV0dG9uTWFyZ2lucygpLCB6
b29tTGV2ZWwpOwotCi0gICAgICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZikgewotICAgICAgICAg
ICAgaW5mbGF0ZWRSZWN0LnNldFdpZHRoKGluZmxhdGVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVs
KTsKLSAgICAgICAgICAgIGluZmxhdGVkUmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdo
dCgpIC8gem9vbUxldmVsKTsKLSAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xh
dGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7Ci0g
ICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgp
LCAtaW5mbGF0ZWRSZWN0LnkoKSk7Ci0gICAgICAgIH0KLSAgICB9IAotCi0gICAgTlNWaWV3ICp2
aWV3ID0gbmlsOwotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbdmlldyB3aW5kb3ddOwotICAgIE5T
QnV0dG9uQ2VsbCAqcHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCA9IFt3aW5kb3cgZGVmYXVsdEJ1
dHRvbkNlbGxdOwotCi0gICAgaWYgKGlzRGVmYXVsdChvKSAmJiBbd2luZG93IGlzS2V5V2luZG93
XSkgewotICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOmJ1dHRvbl07Ci0gICAg
ICAgIHdrQWR2YW5jZURlZmF1bHRCdXR0b25QdWxzZUFuaW1hdGlvbihidXR0b24pOwotICAgIH0g
ZWxzZSBpZiAoW3ByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgaXNFcXVhbDpidXR0b25dKQotICAg
ICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOm5pbF07Ci0KLSAgICBbYnV0dG9uIGRy
YXdXaXRoRnJhbWU6TlNSZWN0KEludFJlY3RUb05TUmVjdChpbmZsYXRlZFJlY3QpKSBpblZpZXc6
dmlld107Ci0gICAgW2J1dHRvbiBzZXRDb250cm9sVmlldzpuaWxdOwotCi0gICAgaWYgKCFbcHJl
dmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCBpc0VxdWFsOmJ1dHRvbl0pCi0gICAgICAgIFt3aW5kb3cg
c2V0RGVmYXVsdEJ1dHRvbkNlbGw6cHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbF07Ci0KLSAgICBw
YWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiBi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKIHsKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBh
aW50SW5mby5jb250ZXh0KTsKLSAgICB3a0RyYXdCZXplbGVkVGV4dEZpZWxkQ2VsbChJbnRSZWN0
VG9OU1JlY3QociksIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRyb2wobykpOworICAg
IHdrRHJhd0JlemVsZWRUZXh0RmllbGRDZWxsKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25s
eUNvbnRyb2wobykpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTA3NCw3ICs3NDksNyBA
QCB2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFRleHRGCiB7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50Q2Fwc0xvY2tJbmRp
Y2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDg4LDcgKzc2Myw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRDYXBzTG8KIGJvb2wgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAg
ICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29u
dGV4dCk7Ci0gICAgd2tEcmF3QmV6ZWxlZFRleHRBcmVhKEludFJlY3RUb05TUmVjdChyKSwgaXNF
bmFibGVkKG8pICYmICFpc1JlYWRPbmx5Q29udHJvbChvKSk7CisgICAgd2tEcmF3QmV6ZWxlZFRl
eHRBcmVhKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRyb2wobykpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIApAQCAtMTEyNiw4ICs4MDEsNiBAQCBjb25zdCBpbnQqIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnBvcHVwCiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFp
bnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhp
Y3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0KICAgICBzZXRQb3B1
cEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKIAogICAgIE5TUG9wVXBCdXR0b25DZWxsKiBwb3B1cEJ1
dHRvbiA9IHRoaXMtPnBvcHVwQnV0dG9uKCk7CkBAIC0xMTU3LDcgKzgzMCw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGkKICAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOwogICAg
IH0KIAotICAgIFtwb3B1cEJ1dHRvbiBkcmF3V2l0aEZyYW1lOkludFJlY3RUb05TUmVjdChpbmZs
YXRlZFJlY3QpIGluVmlldzpuaWxdOworICAgIFtwb3B1cEJ1dHRvbiBkcmF3V2l0aEZyYW1lOmlu
ZmxhdGVkUmVjdCBpblZpZXc6RmxpcHBlZFZpZXcoKV07CiAgICAgW3BvcHVwQnV0dG9uIHNldENv
bnRyb2xWaWV3Om5pbF07CiAKICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwpAQCAt
MTE2NSwxOSArODM4LDE5IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51
TGkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBjb25zdCBmbG9hdCBiYXNlRm9udFNp
emUgPSAxMS4wZjsKLXN0YXRpYyBjb25zdCBmbG9hdCBiYXNlQXJyb3dIZWlnaHQgPSA0LjBmOwot
c3RhdGljIGNvbnN0IGZsb2F0IGJhc2VBcnJvd1dpZHRoID0gNS4wZjsKLXN0YXRpYyBjb25zdCBm
bG9hdCBiYXNlU3BhY2VCZXR3ZWVuQXJyb3dzID0gMi4wZjsKLXN0YXRpYyBjb25zdCBpbnQgYXJy
b3dQYWRkaW5nTGVmdCA9IDY7Ci1zdGF0aWMgY29uc3QgaW50IGFycm93UGFkZGluZ1JpZ2h0ID0g
NjsKLXN0YXRpYyBjb25zdCBpbnQgcGFkZGluZ0JlZm9yZVNlcGFyYXRvciA9IDQ7Ci1zdGF0aWMg
Y29uc3QgaW50IGJhc2VCb3JkZXJSYWRpdXMgPSA1Owotc3RhdGljIGNvbnN0IGludCBzdHlsZWRQ
b3B1cFBhZGRpbmdMZWZ0ID0gODsKLXN0YXRpYyBjb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5n
VG9wID0gMTsKLXN0YXRpYyBjb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5nQm90dG9tID0gMjsK
K2NvbnN0IGZsb2F0IGJhc2VGb250U2l6ZSA9IDExLjBmOworY29uc3QgZmxvYXQgYmFzZUFycm93
SGVpZ2h0ID0gNC4wZjsKK2NvbnN0IGZsb2F0IGJhc2VBcnJvd1dpZHRoID0gNS4wZjsKK2NvbnN0
IGZsb2F0IGJhc2VTcGFjZUJldHdlZW5BcnJvd3MgPSAyLjBmOworY29uc3QgaW50IGFycm93UGFk
ZGluZ0xlZnQgPSA2OworY29uc3QgaW50IGFycm93UGFkZGluZ1JpZ2h0ID0gNjsKK2NvbnN0IGlu
dCBwYWRkaW5nQmVmb3JlU2VwYXJhdG9yID0gNDsKK2NvbnN0IGludCBiYXNlQm9yZGVyUmFkaXVz
ID0gNTsKK2NvbnN0IGludCBzdHlsZWRQb3B1cFBhZGRpbmdMZWZ0ID0gODsKK2NvbnN0IGludCBz
dHlsZWRQb3B1cFBhZGRpbmdUb3AgPSAxOworY29uc3QgaW50IHN0eWxlZFBvcHVwUGFkZGluZ0Jv
dHRvbSA9IDI7CiAKLXN0YXRpYyB2b2lkIFRvcEdyYWRpZW50SW50ZXJwb2xhdGUodm9pZCogaW5m
bywgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQorc3RhdGljIHZvaWQg
VG9wR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zs
b2F0KiBvdXREYXRhKQogewogICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAxLjBmLCAxLjBm
LCAxLjBmLCAwLjRmIH07CiAgICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAxLjBmLCAxLjBm
LCAxLjBmLCAwLjE1ZiB9OwpAQCAtMTE4Nyw3ICs4NjAsNyBAQCBzdGF0aWMgdm9pZCBUb3BHcmFk
aWVudEludGVycG9sYXRlKHZvaWQqCiAgICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAtIGEpICog
ZGFya1tpXSArIGEgKiBsaWdodFtpXTsKIH0KIAotc3RhdGljIHZvaWQgQm90dG9tR3JhZGllbnRJ
bnRlcnBvbGF0ZSh2b2lkKiBpbmZvLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91
dERhdGEpCitzdGF0aWMgdm9pZCBCb3R0b21HcmFkaWVudEludGVycG9sYXRlKHZvaWQqLCBjb25z
dCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCiB7CiAgICAgc3RhdGljIGZsb2F0
IGRhcmtbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDAuMGYgfTsKICAgICBzdGF0aWMgZmxvYXQg
bGlnaHRbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDAuM2YgfTsKQEAgLTExOTcsNyArODcwLDcg
QEAgc3RhdGljIHZvaWQgQm90dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSh2bwogICAgICAgICBvdXRE
YXRhW2ldID0gKDEuMGYgLSBhKSAqIGRhcmtbaV0gKyBhICogbGlnaHRbaV07CiB9CiAKLXN0YXRp
YyB2b2lkIE1haW5HcmFkaWVudEludGVycG9sYXRlKHZvaWQqIGluZm8sIGNvbnN0IENHRmxvYXQq
IGluRGF0YSwgQ0dGbG9hdCogb3V0RGF0YSkKK3N0YXRpYyB2b2lkIE1haW5HcmFkaWVudEludGVy
cG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCiB7
CiAgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDAuMTVmIH07
CiAgICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAwLjBmIH07
CkBAIC0xMjA3LDcgKzg4MCw3IEBAIHN0YXRpYyB2b2lkIE1haW5HcmFkaWVudEludGVycG9sYXRl
KHZvaWQKICAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAqIGxp
Z2h0W2ldOwogfQogCi1zdGF0aWMgdm9pZCBUcmFja0dyYWRpZW50SW50ZXJwb2xhdGUodm9pZCog
aW5mbywgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRhKQorc3RhdGljIHZv
aWQgVHJhY2tHcmFkaWVudEludGVycG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEs
IENHRmxvYXQqIG91dERhdGEpCiB7CiAgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDAuMGYs
IDAuMGYsIDAuMGYsIDAuNjc4ZiB9OwogICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsgMC4w
ZiwgMC4wZiwgMC4wZiwgMC4xM2YgfTsKQEAgLTEyMTksMTEgKzg5MiwyMSBAQCBzdGF0aWMgdm9p
ZCBUcmFja0dyYWRpZW50SW50ZXJwb2xhdGUodm9pCiAKIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7
CisgICAgaWYgKHIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKICAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAg
IHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAKLSAgICBpbnQgcmFkaXVzID0gby0+c3R5bGUo
KS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLndpZHRoKCk7CisgICAgSW50U2l6ZSB0b3BMZWZ0UmFk
aXVzOworICAgIEludFNpemUgdG9wUmlnaHRSYWRpdXM7CisgICAgSW50U2l6ZSBib3R0b21MZWZ0
UmFkaXVzOworICAgIEludFNpemUgYm90dG9tUmlnaHRSYWRpdXM7CisKKyAgICBvLT5zdHlsZSgp
LT5nZXRCb3JkZXJSYWRpaUZvclJlY3QociwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMs
IGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKKworICAgIGludCByYWRpdXMg
PSB0b3BMZWZ0UmFkaXVzLndpZHRoKCk7CiAKICAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVm
PiBjc3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOwogCkBAIC0x
MjQ2LDMzICs5MjksMjcgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVM
aQogICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhBZG9wdENGLCBDR1No
YWRpbmdDcmVhdGVBeGlhbChjc3BhY2UuZ2V0KCksIENHUG9pbnRNYWtlKHIucmlnaHQoKSwgIHIu
eSgpKSwgQ0dQb2ludE1ha2Uoci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlv
bi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsK
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIHIpOwotICAgIHBhaW50SW5mby5jb250
ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAociwKLSAgICAgICAgby0+c3R5bGUoKS0+Ym9yZGVyVG9w
TGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpLAotICAgICAg
ICBvLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCksIG8tPnN0eWxlKCktPmJvcmRl
ckJvdHRvbVJpZ2h0UmFkaXVzKCkpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVk
UmVjdENsaXAociwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRp
dXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsKICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0
LCBtYWluU2hhZGluZy5nZXQoKSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsK
IAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CiAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LCB0b3BHcmFkaWVudCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5k
ZWRSZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwKLSAgICAgICAgby0+c3R5
bGUoKS0+Ym9yZGVyVG9wTGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3JkZXJUb3BSaWdodFJh
ZGl1cygpLAotICAgICAgICBJbnRTaXplKCksIEludFNpemUoKSk7CisgICAgcGFpbnRJbmZvLmNv
bnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwg
dG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIEludFNpemUoKSwgSW50U2l6ZSgpKTsKICAg
ICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCB0b3BTaGFkaW5nLmdldCgpKTsKICAgICBw
YWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogCi0gICAgcGFpbnRJbmZvLmNvbnRleHQtPnNh
dmUoKTsKLSAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQsIGJvdHRvbUdyYWRpZW50KTsK
LSAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGVuY2xvc2luZ0ludFJl
Y3QoYm90dG9tR3JhZGllbnQpLAotICAgICAgICBJbnRTaXplKCksIEludFNpemUoKSwKLSAgICAg
ICAgby0+c3R5bGUoKS0+Ym9yZGVyQm90dG9tTGVmdFJhZGl1cygpLCBvLT5zdHlsZSgpLT5ib3Jk
ZXJCb3R0b21SaWdodFJhZGl1cygpKTsKLSAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0
LCBib3R0b21TaGFkaW5nLmdldCgpKTsKLSAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgp
OworICAgIGlmICghYm90dG9tR3JhZGllbnQuaXNFbXB0eSgpKSB7CisgICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5zYXZlKCk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwg
Ym90dG9tR3JhZGllbnQpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJl
Y3RDbGlwKGVuY2xvc2luZ0ludFJlY3QoYm90dG9tR3JhZGllbnQpLCBJbnRTaXplKCksIEludFNp
emUoKSwgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOworICAgICAgICBDR0Nv
bnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBib3R0b21TaGFkaW5nLmdldCgpKTsKKyAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9CiAKICAgICBwYWludEluZm8uY29u
dGV4dC0+c2F2ZSgpOwogICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgcik7Ci0gICAg
cGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChyLAotICAgICAgICBvLT5zdHls
ZSgpLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCksIG8tPnN0eWxlKCktPmJvcmRlclRvcFJpZ2h0UmFk
aXVzKCksCi0gICAgICAgIG8tPnN0eWxlKCktPmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKSwgby0+
c3R5bGUoKS0+Ym9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKSk7CisgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChyLCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywg
Ym90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOwogICAgIENHQ29udGV4dERyYXdT
aGFkaW5nKGNvbnRleHQsIGxlZnRTaGFkaW5nLmdldCgpKTsKICAgICBDR0NvbnRleHREcmF3U2hh
ZGluZyhjb250ZXh0LCByaWdodFNoYWRpbmcuZ2V0KCkpOwogICAgIHBhaW50SW5mby5jb250ZXh0
LT5yZXN0b3JlKCk7CkBAIC0xMjgyLDggKzk1OSw2IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRNZW51TGkKIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1l
bnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBwYWludEluZm8uY29udGV4
dC0+c2F2ZSgpOwotCiAgICAgSW50UmVjdCBib3VuZHMgPSBJbnRSZWN0KHIueCgpICsgby0+c3R5
bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIu
eSgpICsgby0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgci53aWR0aCgpIC0gby0+c3R5bGUoKS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBvLT5z
dHlsZSgpLT5ib3JkZXJSaWdodFdpZHRoKCksCkBAIC0xMzAyLDYgKzk3Nyw4IEBAIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGkKICAgICBpZiAoYm91bmRzLndpZHRoKCkg
PCBhcnJvd1dpZHRoICsgYXJyb3dQYWRkaW5nTGVmdCAqIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIHBhaW50SW5mby5jb250ZXh0
LT5zYXZlKCk7CisKICAgICBwYWludEluZm8uY29udGV4dC0+c2V0RmlsbENvbG9yKG8tPnN0eWxl
KCktPmNvbG9yKCkpOwogICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0
cm9rZSk7CiAKQEAgLTEzODAsNyArMTA1Nyw3IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6YWRqdXN0TWVudUwKIGludCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1cEludGVybmFs
UGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIGlmIChzdHlsZS0+
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKLSAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9u
UGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVtMZWZ0UGFkZGluZ10gKiBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRy
b2xTaXplRm9yRm9udChzdHlsZSkpW2xlZnRQYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29t
KCk7CiAgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQog
ICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAqIHN0eWxlLT5lZmZlY3RpdmVa
b29tKCk7CiAgICAgcmV0dXJuIDA7CkBAIC0xMzg5LDcgKzEwNjYsNyBAQCBpbnQgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hCiBpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAg
ICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQotICAgICAgICByZXR1
cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW1JpZ2h0UGFk
ZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICByZXR1cm4gcG9wdXBCdXR0
b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3JpZ2h0UGFkZGluZ10gKiBzdHls
ZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVs
aXN0QnV0dG9uUGFydCkgewogICAgICAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNp
emUoKSAvIGJhc2VGb250U2l6ZTsKICAgICAgICAgZmxvYXQgYXJyb3dXaWR0aCA9IGJhc2VBcnJv
d1dpZHRoICogZm9udFNjYWxlOwpAQCAtMTQwMSw3ICsxMDc4LDcgQEAgaW50IFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYQogaW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBp
ZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCi0gICAgICAgIHJldHVybiBw
b3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbVG9wUGFkZGluZ10g
KiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRk
aW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3RvcFBhZGRpbmddICogc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRv
blBhcnQpCiAgICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdUb3AgKiBzdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpOwogICAgIHJldHVybiAwOwpAQCAtMTQxMCwxMyArMTA4NywxMyBAQCBpbnQg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hCiBpbnQgUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAogewogICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKLSAg
ICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUp
KVtCb3R0b21QYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgIHJldHVy
biBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbYm90dG9tUGFk
ZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwogICAgIGlmIChzdHlsZS0+YXBwZWFyYW5j
ZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKICAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFk
ZGluZ0JvdHRvbSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CiAgICAgcmV0dXJuIDA7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBl
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RNZW51TGlzdEJ1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAogewogICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gYmFzZUZv
bnRTaXplOwogCkBAIC0xNDU1LDEwICsxMTMyLDEwIEBAIGludCBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjptaW5pbXVtTWVudUwKICAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIG1l
bnVMaXN0U2l6ZXMoKSkud2lkdGgoKTsKIH0KIAotc3RhdGljIGNvbnN0IGludCB0cmFja1dpZHRo
ID0gNTsKLXN0YXRpYyBjb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAyOworY29uc3QgaW50IHRyYWNr
V2lkdGggPSA1OworY29uc3QgaW50IHRyYWNrUmFkaXVzID0gMjsKIAotdm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgc3R5bGUtPnNl
dEJveFNoYWRvdygwKTsKIH0KQEAgLTE1MDIsMTIgKzExNzksMTIgQEAgYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpwYWludFNsaWRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAg
c3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KIAotc3RhdGljIGNvbnN0IGZsb2F0IHZlcnRpY2Fs
U2xpZGVySGVpZ2h0UGFkZGluZyA9IDAuMWY7Citjb25zdCBmbG9hdCB2ZXJ0aWNhbFNsaWRlckhl
aWdodFBhZGRpbmcgPSAwLjFmOwogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50
U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewpAQCAtMTU2Miw3ICsxMjM5LDcgQEAg
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNsaWRlcgogICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpvb21lZFJlY3QueCgpLCAtdW56b29tZWRSZWN0Lnko
KSk7CiAgICAgfQogCi0gICAgW3NsaWRlclRodW1iQ2VsbCBkcmF3V2l0aEZyYW1lOkZsb2F0UmVj
dFRvTlNSZWN0KHVuem9vbWVkUmVjdCkgaW5WaWV3Om5pbF07CisgICAgW3NsaWRlclRodW1iQ2Vs
bCBkcmF3V2l0aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6RmxpcHBlZFZpZXcoKV07CiAgICAg
W3NsaWRlclRodW1iQ2VsbCBzZXRDb250cm9sVmlldzpuaWxdOwogCiAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnJlc3RvcmUoKTsKQEAgLTE1NzAsMjMgKzEyNDcsNiBAQCBib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50U2xpZGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1jb25zdCBp
bnQgc2xpZGVyVGh1bWJXaWR0aCA9IDE1OwotY29uc3QgaW50IHNsaWRlclRodW1iSGVpZ2h0ID0g
MTU7Ci1jb25zdCBpbnQgbWVkaWFTbGlkZXJUaHVtYldpZHRoID0gMTM7Ci1jb25zdCBpbnQgbWVk
aWFTbGlkZXJUaHVtYkhlaWdodCA9IDE0OwotCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0Ci17Ci0gICAgZmxv
YXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgIGlmIChvLT5z
dHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBvLT5z
dHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKLSAgICAg
ICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1
bWJXaWR0aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7Ci0gICAgICAgIG8tPnN0eWxlKCktPnNldEhl
aWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihzbGlkZXJUaHVtYkhlaWdodCAqIHpvb21MZXZl
bCksIEZpeGVkKSk7Ci0gICAgfSBlbHNlIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0g
TWVkaWFTbGlkZXJUaHVtYlBhcnQpIHsKLSAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVu
Z3RoKG1lZGlhU2xpZGVyVGh1bWJXaWR0aCwgRml4ZWQpKTsKLSAgICAgICAgby0+c3R5bGUoKS0+
c2V0SGVpZ2h0KExlbmd0aChtZWRpYVNsaWRlclRodW1iSGVpZ2h0LCBGaXhlZCkpOwotICAgIH0K
LX0KLQogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKIHsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+
c2VhcmNoKCk7CkBAIC0xNjExLDcgKzEyNzEsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50U2VhcmNoCiAgICAgLy8gU2V0IHRoZSBzZWFyY2ggYnV0dG9uIHRvIG5pbCBiZWZv
cmUgZHJhd2luZy4gIFRoZW4gcmVzZXQgaXQgc28gd2UgY2FuIGRyYXcgaXQgbGF0ZXIuCiAgICAg
W3NlYXJjaCBzZXRTZWFyY2hCdXR0b25DZWxsOm5pbF07CiAKLSAgICBbc2VhcmNoIGRyYXdXaXRo
RnJhbWU6TlNSZWN0KEludFJlY3RUb05TUmVjdCh1bnpvb21lZFJlY3QpKSBpblZpZXc6bmlsXTsK
KyAgICBbc2VhcmNoIGRyYXdXaXRoRnJhbWU6TlNSZWN0KHVuem9vbWVkUmVjdCkgaW5WaWV3OkZs
aXBwZWRWaWV3KCldOwogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgaWYgKFtzZWFyY2gg
c2hvd3NGaXJzdFJlc3BvbmRlcl0pCiAgICAgICAgIHdrRHJhd1RleHRGaWVsZENlbGxGb2N1c1Jp
bmcoc2VhcmNoLCBOU1JlY3QodW56b29tZWRSZWN0KSk7CkBAIC0xNjI1LDcgKzEyODUsNyBAQCBi
b29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2VhcmNoCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldFNlYXJjaENlbGxTdGF0ZShS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3QmIHIpCit2b2lkIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnNldFNlYXJjaENlbGxTdGF0ZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3Qm
KQogewogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIApA
QCAtMTY1Myw3ICsxMzEzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRTZWFy
Y2hGaQogICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgc2VhcmNoRmllbGRTaXplcygpKTsKIH0K
IAotdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkU3R5
bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgYm9yZGVyLgogICAgIHN0eWxlLT5yZXNldEJv
cmRlcigpOwpAQCAtMTY4Niw5ICsxMzQ2LDEwIEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6YWRqdXN0U2VhcmMKIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBMb2NhbEN1cnJl
bnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLQogICAg
IE5vZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAo
IWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICBzZXRTZWFyY2hDZWxsU3RhdGUoaW5wdXQtPnJlbmRlcmVyKCksIHIpOwogCiAgICAgTlNTZWFy
Y2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOwpAQCAtMTcwMCw5ICsxMzYxLDEw
IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2gKIAogICAgIGZsb2F0
IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKIAotICAgIE5TUmVjdCBi
b3VuZHMgPSBbc2VhcmNoIGNhbmNlbEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KEludFJlY3RU
b05TUmVjdChpbnB1dC0+cmVuZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpXTsK
LSAgICAKLSAgICBJbnRSZWN0IHVuem9vbWVkUmVjdChOU1JlY3RUb0ludFJlY3QoYm91bmRzKSk7
CisgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBjYW5jZWxCdXR0b25SZWN0Rm9y
Qm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOworICAg
IGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBv
LCBsb2NhbEJvdW5kcywgcik7CisKKyAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0KGxvY2FsQm91
bmRzKTsKICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKICAgICAgICAgdW56b29tZWRSZWN0
LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKICAgICAgICAgdW56
b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwpOwpA
QCAtMTcxMSw3ICsxMzczLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNl
YXJjaAogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpvb21lZFJlY3Qu
eCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CiAgICAgfQogCi0gICAgW1tzZWFyY2ggY2FuY2VsQnV0
dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTpJbnRSZWN0VG9OU1JlY3QodW56b29tZWRSZWN0KSBpblZp
ZXc6bmlsXTsKKyAgICBbW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOnVu
em9vbWVkUmVjdCBpblZpZXc6RmxpcHBlZFZpZXcoKV07CiAgICAgW1tzZWFyY2ggY2FuY2VsQnV0
dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5y
ZXN0b3JlKCk7CkBAIC0xNzI0LDcgKzEzODYsNyBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpjCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi12b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgY2Fu
Y2VsQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRo
KCksIEZpeGVkKSk7CkBAIC0xNzM4LDggKzE0MDAsOCBAQCBjb25zdCBJbnRTaXplKiBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpyCiAgICAgcmV0dXJuIHNpemVzOwogfQogCi1zdGF0aWMgY29uc3Qg
aW50IGVtcHR5UmVzdWx0c09mZnNldCA9IDk7Ci12b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUpIGNvbnN0Citjb25zdCBpbnQgZW1w
dHlSZXN1bHRzT2Zmc2V0ID0gOTsKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0
U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5
c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lk
dGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwgRml4ZWQpKTsKQEAg
LTE3NDcsMTIgKzE0MDksMTIgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RT
ZWFyYwogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QK
K3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxl
LCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXpl
LndpZHRoKCksIEZpeGVkKSk7CkBAIC0xNzYyLDkgKzE0MjQsMTAgQEAgdm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjphZGp1c3RTZWFyYwogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7
Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8u
Y29udGV4dCk7Ci0KICAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JO
b2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCiAgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJlcigpLCBy
KTsKIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKQEAg
LTE3NzQsMTQgKzE0MzcsMTYgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNl
YXJjaAogICAgIGlmIChbc2VhcmNoIHNlYXJjaE1lbnVUZW1wbGF0ZV0gIT0gbmlsKQogICAgICAg
ICBbc2VhcmNoIHNldFNlYXJjaE1lbnVUZW1wbGF0ZTpuaWxdOwogCi0gICAgTlNSZWN0IGJvdW5k
cyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZvckJvdW5kczpOU1JlY3QoSW50UmVjdFRvTlNS
ZWN0KGlucHV0LT5yZW5kZXJlcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSldOwotICAg
IFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6Ym91bmRzIGluVmlldzpu
aWxdOworICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVj
dEZvckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsK
KyAgICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIo
KSwgbywgbG9jYWxCb3VuZHMsIHIpOworCisgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0g
ZHJhd1dpdGhGcmFtZTpsb2NhbEJvdW5kcyBpblZpZXc6RmxpcHBlZFZpZXcoKV07CiAgICAgW1tz
ZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXN0YXRpYyBjb25zdCBpbnQgcmVzdWx0c0Fycm93V2lkdGggPSA1Owotdm9p
ZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlKSBjb25zdAorY29uc3QgaW50IHJlc3VsdHNBcnJvd1dpZHRoID0gNTsKK3ZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7
CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0
b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSArIHJl
c3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOwpAQCAtMTc5MSw5ICsxNDU2LDEwIEBAIHZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmMKIAogYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
CiB7Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludElu
Zm8uY29udGV4dCk7Ci0KICAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0
b3JOb2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJlcigp
LCByKTsKIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsK
QEAgLTE4MDcsOSArMTQ3MywxMCBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50
U2VhcmNoCiAKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29t
KCk7CiAKLSAgICBOU1JlY3QgYm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91
bmRzOk5TUmVjdChJbnRSZWN0VG9OU1JlY3QoaW5wdXQtPnJlbmRlcmVyKCktPmFic29sdXRlQm91
bmRpbmdCb3hSZWN0KCkpKV07CisgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBz
ZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRl
ckJveFJlY3QoKSldOworICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlu
cHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CiAgICAgCi0gICAgSW50UmVjdCB1
bnpvb21lZFJlY3QoTlNSZWN0VG9JbnRSZWN0KGJvdW5kcykpOworICAgIEludFJlY3QgdW56b29t
ZWRSZWN0KGxvY2FsQm91bmRzKTsKICAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKICAgICAg
ICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVs
KTsKICAgICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkg
LyB6b29tTGV2ZWwpOwpAQCAtMTgxOCw3ICsxNDg1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpwYWludFNlYXJjaAogICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRl
KC11bnpvb21lZFJlY3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CiAgICAgfQogCi0gICAgW1tz
ZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTpJbnRSZWN0VG9OU1JlY3QodW56
b29tZWRSZWN0KSBpblZpZXc6bmlsXTsKKyAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBk
cmF3V2l0aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6RmxpcHBlZFZpZXcoKV07CiAgICAgW1tz
ZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKICAgICAKICAgICBw
YWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwpAQCAtMTgyNywxMDIgKzE0OTQsMTc5IEBAIGJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2gKIH0KIAogI2lmIEVOQUJMRShW
SURFTykKLS8vIEZJWE1FOiBUaGlzIGVudW0gaXMgbGlmdGVkIGZyb20gUmVuZGVyVGhlbWVNYWMu
bW0gIFdlIG5lZWQgdG8gZGVjaWRlIHdoaWNoIHRoZW1lIHRvIHVzZSBmb3IgdGhlIGRlZmF1bHQg
Y29udHJvbHMsIG9yIGRlY2lkZSB0byBhdm9pZCB3a0RyYXdNZWRpYVVJUGFydCBhbmQgcmVuZGVy
IG91ciBvd24uCiB0eXBlZGVmIGVudW0gewogICAgIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3Np
YyAgID0gMSwKICAgICBNZWRpYUNvbnRyb2xsZXJUaGVtZVFUICAgICAgICA9IDIKIH0gTWVkaWFD
b250cm9sbGVyVGhlbWVTdHlsZTsKIAotZW51bSBXS01lZGlhQ29udHJvbGxlclRoZW1lU3RhdGUg
eworc3RhdGljIGludCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpCit7CisgICAgc3RhdGljIGNvbnN0
IGxvbmcgbWluaW11bVF1aWNrVGltZVZlcnNpb24gPSAweDA3NjMwMDAwOyAvLyA3LjYuMworICAg
IHN0YXRpYyBTSW50MzIgcXVpY2tUaW1lVmVyc2lvbiA9IDA7CisgICAgc3RhdGljIGludCBjb250
cm9sbGVyVGhlbWUgPSAtMTsKKyAgICAKKyAgICBpZiAoY29udHJvbGxlclRoZW1lICE9IC0xKQor
ICAgICAgICByZXR1cm4gY29udHJvbGxlclRoZW1lOworCisgICAgY29udHJvbGxlclRoZW1lID0g
TWVkaWFDb250cm9sbGVyVGhlbWVDbGFzc2ljOworCisgICAgaWYgKCFxdWlja1RpbWVWZXJzaW9u
KSB7CisgICAgICAgIE9TRXJyIGVycjsKKyAgICAgICAgZXJyID0gR2VzdGFsdChnZXN0YWx0UXVp
Y2tUaW1lLCAmcXVpY2tUaW1lVmVyc2lvbik7CisgICAgICAgIGlmIChlcnIgIT0gbm9FcnIpCisg
ICAgICAgICAgICByZXR1cm4gY29udHJvbGxlclRoZW1lOworICAgIH0KKyAgICBpZiAocXVpY2tU
aW1lVmVyc2lvbiA8IG1pbmltdW1RdWlja1RpbWVWZXJzaW9uKQorICAgICAgICByZXR1cm4gY29u
dHJvbGxlclRoZW1lOworCisgICAgQm9vbGVhbiB2YWxpZEtleTsKKyAgICBCb29sZWFuIHVzZVFU
TWVkaWFVSSA9IENGUHJlZmVyZW5jZXNHZXRBcHBCb29sZWFuVmFsdWUoQ0ZTVFIoIlVzZVF1aWNr
VGltZU1lZGlhVUkiKSwgQ0ZTVFIoImNvbS5hcHBsZS5XZWJDb3JlIiksICZ2YWxpZEtleSk7CisK
KyNpZiAhZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
TEVPUEFSRCkKKyAgICBpZiAodmFsaWRLZXkgJiYgIXVzZVFUTWVkaWFVSSkKKyAgICAgICAgcmV0
dXJuIGNvbnRyb2xsZXJUaGVtZTsKKyNlbHNlCisgICAgaWYgKCF2YWxpZEtleSB8fCAhdXNlUVRN
ZWRpYVVJKQorICAgICAgICByZXR1cm4gY29udHJvbGxlclRoZW1lOworI2VuZGlmCisKKyAgICBj
b250cm9sbGVyVGhlbWUgPSBNZWRpYUNvbnRyb2xsZXJUaGVtZVFUOworICAgIHJldHVybiBjb250
cm9sbGVyVGhlbWU7Cit9CisjZW5kaWYKKworY29uc3QgaW50IHNsaWRlclRodW1iV2lkdGggPSAx
NTsKK2NvbnN0IGludCBzbGlkZXJUaHVtYkhlaWdodCA9IDE1OworY29uc3QgaW50IG1lZGlhU2xp
ZGVyVGh1bWJXaWR0aCA9IDEzOworY29uc3QgaW50IG1lZGlhU2xpZGVyVGh1bWJIZWlnaHQgPSAx
NDsKKwordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlNpemUo
UmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxl
KCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09
IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAgICAgIG8tPnN0eWxlKCktPnNldFdpZHRo
KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRodW1iV2lkdGggKiB6b29tTGV2ZWwpLCBG
aXhlZCkpOworICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0
PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgIH0gCisK
KyNpZiBFTkFCTEUoVklERU8pCisgICAgZWxzZSBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
ID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KSB7CisgICAgICAgIGludCB3aWR0aCA9IG1lZGlhU2xp
ZGVyVGh1bWJXaWR0aDsKKyAgICAgICAgaW50IGhlaWdodCA9IG1lZGlhU2xpZGVyVGh1bWJIZWln
aHQ7CisgICAgICAgIAorICAgICAgICBpZiAobWVkaWFDb250cm9sbGVyVGhlbWUoKSA9PSBNZWRp
YUNvbnRyb2xsZXJUaGVtZVFUKSB7CisgICAgICAgICAgICBDR1NpemUgIHNpemU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHdrTWVhc3VyZU1lZGlhVUlQYXJ0KE1lZGlhU2xpZGVyVGh1bWIs
IE1lZGlhQ29udHJvbGxlclRoZW1lUVQsIE5VTEwsICZzaXplKTsKKyAgICAgICAgICAgIHdpZHRo
ID0gc2l6ZS53aWR0aDsKKyAgICAgICAgICAgIGhlaWdodCA9IHNpemUuaGVpZ2h0OworICAgICAg
ICB9CisKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGlu
dD4od2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgICAgICBvLT5zdHlsZSgpLT5zZXRI
ZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oaGVpZ2h0ICogem9vbUxldmVsKSwgRml4ZWQp
KTsKKyAgICB9CisjZW5kaWYKK30KKworCisjaWYgRU5BQkxFKFZJREVPKQorCitlbnVtIFdLTWVk
aWFDb250cm9sbGVyVGhlbWVTdGF0ZSB7IAogICAgIE1lZGlhVUlQYXJ0RGlzYWJsZWRGbGFnID0g
MSA8PCAwLAogICAgIE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgPSAxIDw8IDEsCiAgICAgTWVkaWFV
SVBhcnREcmF3RW5kQ2Fwc0ZsYWcgPSAxIDw8IDMsCiB9OwotI2VuZGlmCisKK3N0YXRpYyB1bnNp
Z25lZCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3MoTm9kZSogbm9kZSkKK3sKKyAgICB1bnNpZ25l
ZCBmbGFncyA9IDA7CisKKyAgICBpZiAobm9kZS0+ZGlzYWJsZWQoKSkKKyAgICAgICAgZmxhZ3Mg
fD0gTWVkaWFVSVBhcnREaXNhYmxlZEZsYWc7CisgICAgZWxzZSBpZiAobm9kZS0+YWN0aXZlKCkp
CisgICAgICAgIGZsYWdzIHw9IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWc7CisgICAgcmV0dXJuIGZs
YWdzOworfQorCisvLyBVdGlsaXR5IHRvIHNjYWxlIHdoZW4gdGhlIFVJIHBhcnQgYXJlIG5vdCBz
Y2FsZWQgYnkgd2tEcmF3TWVkaWFVSVBhcnQKK3N0YXRpYyBGbG9hdFJlY3QgZ2V0VW56b29tZWRS
ZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZvcmlnaW5hbFJlY3Qp
Cit7CisgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwor
ICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3Qob3JpZ2luYWxSZWN0KTsKKyAgICBpZiAoem9vbUxl
dmVsICE9IDEuMGYgJiYgbWVkaWFDb250cm9sbGVyVGhlbWUoKSA9PSBNZWRpYUNvbnRyb2xsZXJU
aGVtZVFUKSB7CisgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lk
dGgoKSAvIHpvb21MZXZlbCk7CisgICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29t
ZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKKyAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkp
OworICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpvb21lZFJlY3QueCgp
LCAtdW56b29tZWRSZWN0LnkoKSk7CisgICAgfQorICAgIHJldHVybiB1bnpvb21lZFJlY3Q7Cit9
CisKIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0jaWYgRU5BQkxFKFZJREVPKQogICAgIE5vZGUq
IG5vZGUgPSBvLT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5m
by5jb250ZXh0KTsKLSAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYUZ1bGxzY3JlZW5CdXR0b24s
IE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYywgIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKSwgciwgCi0gICAgICAgIG5vZGUtPmFjdGl2ZSgpID8gTWVkaWFVSVBhcnRQcmVz
c2VkRmxhZyA6IDApOwotI2VuZGlmCisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFGdWxsc2Ny
ZWVuQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVk
aWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSNpZiBFTkFCTEUoVklERU8pCiAg
ICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKICAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8g
bm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwogICAgIGlmICghbWVkaWFOb2RlIHx8ICgh
bWVkaWFOb2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1l
KGF1ZGlvVGFnKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5v
ZGUpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8u
Y29udGV4dCk7Ci0gICAgd2tEcmF3TWVkaWFVSVBhcnQobWVkaWFFbGVtZW50LT5tdXRlZCgpID8g
TWVkaWFVbk11dGVCdXR0b24gOiBNZWRpYU11dGVCdXR0b24sIE1lZGlhQ29udHJvbGxlclRoZW1l
Q2xhc3NpYywgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLAotICAgICAg
ICBub2RlLT5hY3RpdmUoKSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgor
ICAgIGlmIChNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8
TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQqPihub2RlKSkgeworICAgICAgICBMb2NhbEN1
cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKyAg
ICAgICAgd2tEcmF3TWVkaWFVSVBhcnQoYnRuLT5kaXNwbGF5VHlwZSgpLCBtZWRpYUNvbnRyb2xs
ZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1l
ZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisKKyAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCiBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKIHsKLSNpZiBFTkFCTEUoVklERU8pCiAgICAgTm9kZSogbm9kZSA9
IG8tPm5vZGUoKTsKICAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8gbm9kZS0+c2hhZG93QW5j
ZXN0b3JOb2RlKCkgOiAwOwogICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVkaWFOb2RlLT5oYXNU
YWdOYW1lKHZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKGF1ZGlvVGFnKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxNZWRpYUVsZW1lbnQqPihtZWRpYU5vZGUpOwotICAgIGlmICgh
bWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKLSAgICB3a0Ry
YXdNZWRpYVVJUGFydChtZWRpYUVsZW1lbnQtPmNhblBsYXkoKSA/IE1lZGlhUGxheUJ1dHRvbiA6
IE1lZGlhUGF1c2VCdXR0b24sIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYywgcGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLAotICAgICAgICBub2RlLT5hY3RpdmUoKSA/
IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgorICAgIGlmIChNZWRpYUNvbnRy
b2xQbGF5QnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sUGxheUJ1
dHRvbkVsZW1lbnQqPihub2RlKSkgeworICAgICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKyAgICAgICAgd2tEcmF3TWVkaWFV
SVBhcnQoYnRuLT5kaXNwbGF5VHlwZSgpLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFn
cyhub2RlKSk7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQogewotI2lmIEVOQUJMRShWSURFTykKICAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTG9jYWxDdXJyZW50R3Jh
cGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0gICAgd2tEcmF3
TWVkaWFVSVBhcnQoTWVkaWFTZWVrQmFja0J1dHRvbiwgTWVkaWFDb250cm9sbGVyVGhlbWVDbGFz
c2ljLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsCi0gICAgICAgIG5v
ZGUtPmFjdGl2ZSgpID8gTWVkaWFVSVBhcnRQcmVzc2VkRmxhZyA6IDApOwotI2VuZGlmCisgICAg
d2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrQmFja0J1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhl
bWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJ
UGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQogewotI2lmIEVOQUJMRShWSURFTykKICAgICBOb2RlKiBub2RlID0gby0+bm9k
ZSgpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTG9jYWxD
dXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Ci0g
ICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrRm9yd2FyZEJ1dHRvbiwgTWVkaWFDb250cm9s
bGVyVGhlbWVDbGFzc2ljLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIs
Ci0gICAgICAgIG5vZGUtPmFjdGl2ZSgpID8gTWVkaWFVSVBhcnRQcmVzc2VkRmxhZyA6IDApOwot
I2VuZGlmCisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrRm9yd2FyZEJ1dHRvbiwgbWVk
aWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2so
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQogewotI2lmIEVOQUJMRShWSURFTykKICAgICBOb2RlKiBub2Rl
ID0gby0+bm9kZSgpOwogICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dB
bmNlc3Rvck5vZGUoKSA6IDA7CiAgICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFtZWRpYU5vZGUtPmhh
c1RhZ05hbWUodmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoYXVkaW9UYWcpKSkK
QEAgLTE5MzIsNzMgKzE2NzYsMTAxIEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFp
bnRNZWRpYVMKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZl
cmVkKCk7Ci0gICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uOwotICAgIGZsb2F0IHRp
bWVMb2FkZWQgPSB0aW1lUmFuZ2VzLT5sZW5ndGgoKSA/IHRpbWVSYW5nZXMtPmVuZCgwLCBpZ25v
cmVkRXhjZXB0aW9uKSA6IDA7Ci0gICAgZmxvYXQgY3VycmVudFRpbWUgPSBtZWRpYUVsZW1lbnQt
PmN1cnJlbnRUaW1lKCk7Ci0gICAgZmxvYXQgZHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0
aW9uKCk7Ci0gICAgaWYgKGlzbmFuKGR1cmF0aW9uKSkKLSAgICAgICAgZHVyYXRpb24gPSAwOwot
Ci0gICAgYm9vbCBzaG91bGREcmF3RW5kQ2FwcyA9ICF0b1JlbmRlck1lZGlhKG1lZGlhRWxlbWVu
dC0+cmVuZGVyZXIoKSktPnNob3VsZFNob3dUaW1lRGlzcGxheUNvbnRyb2xzKCk7Ci0gICAgd2tE
cmF3TWVkaWFTbGlkZXJUcmFjayhNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNzaWMsIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgdGltZUxvYWRlZCwgY3VycmVudFRpbWUs
IGR1cmF0aW9uLCBzaG91bGREcmF3RW5kQ2FwcyA/IE1lZGlhVUlQYXJ0RHJhd0VuZENhcHNGbGFn
IDogMCk7Ci0jZW5kaWYKKyAgICBmbG9hdCB0aW1lTG9hZGVkID0gMDsKKyAgICBmbG9hdCBjdXJy
ZW50VGltZSA9IDA7CisgICAgZmxvYXQgZHVyYXRpb24gPSAwOworICAgIGlmIChNZWRpYVBsYXll
ciogcGxheWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkgeworICAgICAgICBkdXJhdGlvbiA9
IHBsYXllci0+ZHVyYXRpb24oKTsKKyAgICAgICAgdGltZUxvYWRlZCA9IHBsYXllci0+bWF4VGlt
ZUJ1ZmZlcmVkKCk7CisgICAgICAgIGN1cnJlbnRUaW1lID0gcGxheWVyLT5jdXJyZW50VGltZSgp
OworICAgIH0KKyAKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEZsb2F0UmVj
dCB1bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChv
LCBwYWludEluZm8sIHIpOworICAgIHdrRHJhd01lZGlhU2xpZGVyVHJhY2sobWVkaWFDb250cm9s
bGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCB1bnpvb21l
ZFJlY3QsIAorICAgICAgICB0aW1lTG9hZGVkLCBjdXJyZW50VGltZSwgZHVyYXRpb24sIGdldE1l
ZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgCisgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnJlc3RvcmUoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSNp
ZiBFTkFCTEUoVklERU8pCiAgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29u
dGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwotICAgIHdrRHJhd01lZGlhVUlQ
YXJ0KE1lZGlhU2xpZGVyVGh1bWIsIE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYywgcGFpbnRJ
bmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLAotICAgICAgICBub2RlLT5hY3RpdmUo
KSA/IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWcgOiAwKTsKLSNlbmRpZgorICAgIHdrRHJhd01lZGlh
VUlQYXJ0KE1lZGlhU2xpZGVyVGh1bWIsIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdz
KG5vZGUpKTsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0KLS8vIEZJWE1FOiBUaGlzIHVzZWQgdG8g
YmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRlZCB0byB0aGUg
bmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1OU0J1dHRvbkNlbGwqIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OmNoZWNrYm94KCkgY29uc3QKKyAgICAKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYVJld2luZEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgaWYg
KCFtX2NoZWNrYm94KSB7Ci0gICAgICAgIG1fY2hlY2tib3guYWRvcHROUyhbW05TQnV0dG9uQ2Vs
bCBhbGxvY10gaW5pdF0pOwotICAgICAgICBbbV9jaGVja2JveC5nZXQoKSBzZXRCdXR0b25UeXBl
Ok5TU3dpdGNoQnV0dG9uXTsKLSAgICAgICAgW21fY2hlY2tib3guZ2V0KCkgc2V0VGl0bGU6bmls
XTsKLSAgICAgICAgW21fY2hlY2tib3guZ2V0KCkgc2V0QWxsb3dzTWl4ZWRTdGF0ZTpZRVNdOwot
ICAgICAgICBbbV9jaGVja2JveC5nZXQoKSBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlw
ZUV4dGVyaW9yXTsKLSAgICB9CisgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBpZiAo
IW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICByZXR1cm4gbV9jaGVja2Jv
eC5nZXQoKTsKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBh
aW50SW5mby5jb250ZXh0KTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVJld2luZEJ1dHRv
biwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHJldHVybiBm
YWxzZTsKIH0KIAotLy8gRklYTUU6IFRoaXMgdXNlZCB0byBiZSBpbiB0aGUgdXBzdHJlYW0gdmVy
c2lvbiB1bnRpbCBpdCB3YXMgY29udmVydGVkIHRvIHRoZSBuZXcgdGhlbWUgQVBJIGluIHIzNzcz
MS4KLU5TQnV0dG9uQ2VsbCogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cmFkaW8oKSBjb25zdAor
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgaWYgKCFtX3JhZGlvKSB7Ci0gICAgICAg
IG1fcmFkaW8uYWRvcHROUyhbW05TQnV0dG9uQ2VsbCBhbGxvY10gaW5pdF0pOwotICAgICAgICBb
bV9yYWRpby5nZXQoKSBzZXRCdXR0b25UeXBlOk5TUmFkaW9CdXR0b25dOwotICAgICAgICBbbV9y
YWRpby5nZXQoKSBzZXRUaXRsZTpuaWxdOwotICAgICAgICBbbV9yYWRpby5nZXQoKSBzZXRGb2N1
c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZUV4dGVyaW9yXTsKLSAgICB9CisgICAgTm9kZSogbm9k
ZSA9IG8tPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICByZXR1cm4gbV9yYWRpby5nZXQoKTsKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0Nv
bnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKyAgICB3a0RyYXdNZWRpYVVJ
UGFydChNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCks
IHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRT
dGF0ZUZsYWdzKG5vZGUpKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vIEZJWE1FOiBUaGlz
IHVzZWQgdG8gYmUgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gdW50aWwgaXQgd2FzIGNvbnZlcnRl
ZCB0byB0aGUgbmV3IHRoZW1lIEFQSSBpbiByMzc3MzEuCi1OU0J1dHRvbkNlbGwqIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OmJ1dHRvbigpIGNvbnN0CisKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7
Ci0gICAgaWYgKCFtX2J1dHRvbikgewotICAgICAgICBtX2J1dHRvbi5hZG9wdE5TKFtbTlNCdXR0
b25DZWxsIGFsbG9jXSBpbml0XSk7Ci0gICAgICAgIFttX2J1dHRvbi5nZXQoKSBzZXRUaXRsZTpu
aWxdOwotICAgICAgICBbbV9idXR0b24uZ2V0KCkgc2V0QnV0dG9uVHlwZTpOU01vbWVudGFyeVB1
c2hJbkJ1dHRvbl07Ci0gICAgfQotICAgIAotICAgIHJldHVybiBtX2J1dHRvbi5nZXQoKTsKKyAg
ICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChw
YWludEluZm8uY29udGV4dCk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lbGluZUNv
bnRhaW5lciwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHJl
dHVybiBmYWxzZTsKIH0KIAorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlh
Q3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIE5vZGUqIG5vZGUgPSBvLT5u
b2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwYWlu
dEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3QgPSBnZXRV
bnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBwYWludEluZm8sIHIpOworICAg
IHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhQ3VycmVudFRpbWVEaXNwbGF5LCBtZWRpYUNvbnRyb2xs
ZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVk
UmVjdCwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICBwYWludEluZm8uY29u
dGV4dC0+cmVzdG9yZSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpwYWludE1lZGlhVGltZVJlbWFpbmluZyhSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgRmxv
YXRSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250
ZXh0KG8sIHBhaW50SW5mbywgcik7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lUmVt
YWluaW5nRGlzcGxheSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFn
cyhub2RlKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpleHRyYU1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0KCkKK3sKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisjZW5kaWYKKwog
TlNQb3BVcEJ1dHRvbkNlbGwqIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwQnV0dG9uKCkg
Y29uc3QKIHsKICAgICBpZiAoIW1fcG9wdXBCdXR0b24pIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39603</attachid>
            <date>2009-09-15 09:03:48 -0700</date>
            <delta_ts>2009-09-15 09:45:58 -0700</delta_ts>
            <desc>Patch with svn cp used to mark origins of files</desc>
            <filename>rendertheme.patch</filename>
            <type>text/plain</type>
            <size>167569</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODM5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI0IEBACisyMDA5LTA5LTExICBBdmkgRHJpc3NtYW4gIDxhdmlAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgdGhlIENocm9taXVtIE1hYyB0aGVtaW5nIGZpbGVzIChSZW5kZXJUaGVtZSBhbmQgVGhlbWUp
IHRvIGJlCisgICAgICAgIHVwLXRvLWRhdGUuCisgICAgICAgIAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkyNDMKKyAgICAgICAgaHR0cDovL2NyYnVn
LmNvbS8xOTYwNAorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGhlbWVDaHJv
bWl1bU1hYy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OlRo
ZW1lQ2hyb21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVDaHJvbWl1bU1hYzo6flRo
ZW1lQ2hyb21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVDaHJvbWl1bU1hYzo6Y29u
dHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
VGhlbWVDaHJvbWl1bU1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAg
ICAoV2ViQ29yZTo6cGxhdGZvcm1UaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250cm9sU2l6
ZUZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2l6ZUZyb21Gb250KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVN0YXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjppbmZsYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjaGVj
a2JveFNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrYm94TWFyZ2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpjaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tib3gpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFpbnRDaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpyYWRp
b1NpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OnJhZGlvTWFyZ2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpyYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6cmFkaW8pOgorICAgICAgICAoV2Vi
Q29yZTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpidXR0b25TaXplcyk6CisgICAg
ICAgIChXZWJDb3JlOjpidXR0b25NYXJnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpUaGVt
ZUNocm9taXVtTWFjOjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZUNocm9taXVtTWFjOjpjb250cm9sRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpU
aGVtZUNocm9taXVtTWFjOjpjb250cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNo
cm9taXVtTWFjOjptaW5pbXVtQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVD
aHJvbWl1bU1hYzo6Y29udHJvbEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNocm9t
aXVtTWFjOjpjb250cm9sUGFkZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNocm9taXVt
TWFjOjppbmZsYXRlQ29udHJvbFBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNo
cm9taXVtTWFjOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3VwcG9ydHND
b250cm9sVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
c2Nyb2xsYmFyQ29udHJvbFNpemVGb3JQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW06CisgICAgICAgICgtW1dl
YkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlvbk9ic2VydmVyIHN5c3RlbUNvbG9yc0RpZENoYW5n
ZTpdKToKKyAgICAgICAgKC1bUlRDTUZsaXBwZWRWaWV3IGlzRmxpcHBlZF0pOgorICAgICAgICAo
LVtSVENNRmxpcHBlZFZpZXcgY3VycmVudEVkaXRvcl0pOgorICAgICAgICAoV2ViQ29yZTo6KToK
KyAgICAgICAgKFdlYkNvcmU6OkZsaXBwZWRWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtSW5hY3Rp
dmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydE5TQ29sb3JUb0NvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6Om1lbnVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3lzdGVtQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6aXNDb250cm9sU3R5bGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmluZmxhdGVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmNvbnZlcnRUb1BhaW50aW5nUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRGb250RnJv
bUNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRvcEdy
YWRpZW50SW50ZXJwb2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Qm90dG9tR3JhZGllbnRJbnRl
cnBvbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFja0dyYWRpZW50SW50ZXJwb2xhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVM
aXN0QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
Qm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRTZWFyY2hDZWxsU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmll
bGREZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjptZWRpYUNvbnRyb2xsZXJUaGVtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVt
YlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFGdWxs
c2NyZWVuQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwYWludE1lZGlhUmV3aW5kQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFDb250
cm9sc0JhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50TWVkaWFUaW1lUmVtYWluaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgor
CiAyMDA5LTA5LTE1ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ4
MzkyKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE3NzEsNiAr
MTc3MSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRp
b25DaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1N5c3RlbVRp
bWVDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hy
b21pdW1NYWMuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vVGhlbWVDaHJvbWl1
bU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2lkZ2V0Q2hyb21pdW0u
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVyc2lvbi5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpbmRvd3NWZXJzaW9uLmgnLApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgJKHJldmlz
aW9uIDQ4MzkyKQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oOjQ4MzkyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFRoZW1lTWFjX2gKKyNkZWZpbmUgVGhlbWVNYWNfaAorCisj
aW5jbHVkZSAiVGhlbWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaGVtZU1h
YyA6IHB1YmxpYyBUaGVtZSB7CitwdWJsaWM6CisgICAgVGhlbWVNYWMoKSB7IH0KKyAgICB2aXJ0
dWFsIH5UaGVtZU1hYygpIHsgfQorICAgIAorICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRp
b25BZGp1c3RtZW50KENvbnRyb2xQYXJ0KSBjb25zdDsKKworICAgIHZpcnR1YWwgRm9udERlc2Ny
aXB0aW9uIGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENv
bnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0IHpvb21GYWN0
b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKworICAgIHZp
cnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Jiwg
Y29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAg
IHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQm
LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZShDb250cm9sUGFy
dCBwYXJ0KSBjb25zdCB7IHJldHVybiBwYXJ0ID09IFB1c2hCdXR0b25QYXJ0OyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMsIEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEludFJlY3QmLCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGluZmxhdGVDb250cm9sUGFpbnRSZWN0KENvbnRyb2xQYXJ0
LCBDb250cm9sU3RhdGVzLCBJbnRSZWN0JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUaGVtZU1hY19oCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMuaAkocmV2aXNpb24g
NDgzOTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTIzLDE3ICsyNCwyMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRl
ZiBUaGVtZU1hY19oCi0jZGVmaW5lIFRoZW1lTWFjX2gKKyNpZm5kZWYgVGhlbWVDaHJvbWl1bU1h
Y19oCisjZGVmaW5lIFRoZW1lQ2hyb21pdW1NYWNfaAogCiAjaW5jbHVkZSAiVGhlbWUuaCIKIAor
Ly8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLm1tIGZpbGUpIGlzIGEgY2xvbmUgb2Yg
VGhlbWVNYWMuaC4gU2VlCisvLyB0aGUgLm1tIGZpbGUgZm9yIGRldGFpbHMuCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgVGhlbWVNYWMgOiBwdWJsaWMgVGhlbWUgeworY2xhc3MgVGhl
bWVDaHJvbWl1bU1hYyA6IHB1YmxpYyBUaGVtZSB7CiBwdWJsaWM6Ci0gICAgVGhlbWVNYWMoKSB7
IH0KLSAgICB2aXJ0dWFsIH5UaGVtZU1hYygpIHsgfQorICAgIFRoZW1lQ2hyb21pdW1NYWMoKSB7
IH0KKyAgICB2aXJ0dWFsIH5UaGVtZUNocm9taXVtTWFjKCkgeyB9CiAgICAgCiAgICAgdmlydHVh
bCBpbnQgYmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoQ29udHJvbFBhcnQpIGNvbnN0OwogCkBA
IC01Myw0ICs1Nyw0IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gVGhlbWVNYWNfaAorI2VuZGlmIC8vIFRoZW1lQ2hyb21pdW1NYWNfaApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVGhlbWVDaHJvbWl1bU1hYy5tbQkocmV2aXNpb24g
NDgzOTIpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOjQ4MzkyKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGhlbWVNYWMuaCIKKwor
I2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbXBvcnQgIkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiU2Nyb2xs
Vmlldy5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworLy8gRklYTUU6IERl
ZmF1bHQgYnV0dG9ucyByZWFsbHkgc2hvdWxkIGJlIG1vcmUgbGlrZSBwdXNoIGJ1dHRvbnMgYW5k
IG5vdCBsaWtlIGJ1dHRvbnMuCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSB7CisgICAg
dG9wTWFyZ2luLAorICAgIHJpZ2h0TWFyZ2luLAorICAgIGJvdHRvbU1hcmdpbiwKKyAgICBsZWZ0
TWFyZ2luCit9OworCitUaGVtZSogcGxhdGZvcm1UaGVtZSgpCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChUaGVtZU1hYywgdGhlbWVNYWMsICgpKTsKKyAgICByZXR1cm4gJnRoZW1lTWFjOwor
fQorCisvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgYSBidW5jaCBvZiBkaWZmZXJlbnQgY29u
dHJvbCBwYXJ0cy4KKworc3RhdGljIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KGNv
bnN0IEZvbnQmIGZvbnQpCit7CisgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsK
KyAgICBpZiAoZm9udFNpemUgPj0gMTYpCisgICAgICAgIHJldHVybiBOU1JlZ3VsYXJDb250cm9s
U2l6ZTsKKyAgICBpZiAoZm9udFNpemUgPj0gMTEpCisgICAgICAgIHJldHVybiBOU1NtYWxsQ29u
dHJvbFNpemU7CisgICAgcmV0dXJuIE5TTWluaUNvbnRyb2xTaXplOworfQorCitzdGF0aWMgTGVu
Z3RoU2l6ZSBzaXplRnJvbUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYg
em9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvciwgY29uc3QgSW50U2l6ZSogc2l6ZXMpCit7Cisg
ICAgSW50U2l6ZSBjb250cm9sU2l6ZSA9IHNpemVzW2NvbnRyb2xTaXplRm9yRm9udChmb250KV07
CisgICAgaWYgKHpvb21GYWN0b3IgIT0gMS4wZikKKyAgICAgICAgY29udHJvbFNpemUgPSBJbnRT
aXplKGNvbnRyb2xTaXplLndpZHRoKCkgKiB6b29tRmFjdG9yLCBjb250cm9sU2l6ZS5oZWlnaHQo
KSAqIHpvb21GYWN0b3IpOworICAgIExlbmd0aFNpemUgcmVzdWx0ID0gem9vbWVkU2l6ZTsKKyAg
ICBpZiAoem9vbWVkU2l6ZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgY29udHJvbFNp
emUud2lkdGgoKSA+IDApCisgICAgICAgIHJlc3VsdC5zZXRXaWR0aChMZW5ndGgoY29udHJvbFNp
emUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBpZiAoem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJp
bnNpY09yQXV0bygpICYmIGNvbnRyb2xTaXplLmhlaWdodCgpID4gMCkKKyAgICAgICAgcmVzdWx0
LnNldEhlaWdodChMZW5ndGgoY29udHJvbFNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgc2V0Q29udHJvbFNpemUoTlNDZWxsKiBjZWxs
LCBjb25zdCBJbnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluWm9vbWVkU2l6ZSwgZmxv
YXQgem9vbUZhY3RvcikKK3sKKyAgICBOU0NvbnRyb2xTaXplIHNpemU7CisgICAgaWYgKG1pblpv
b21lZFNpemUud2lkdGgoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TUmVndWxhckNvbnRy
b2xTaXplXS53aWR0aCgpICogem9vbUZhY3RvcikgJiYKKyAgICAgICAgbWluWm9vbWVkU2l6ZS5o
ZWlnaHQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TUmVndWxhckNvbnRyb2xTaXplXS5o
ZWlnaHQoKSAqIHpvb21GYWN0b3IpKQorICAgICAgICBzaXplID0gTlNSZWd1bGFyQ29udHJvbFNp
emU7CisgICAgZWxzZSBpZiAobWluWm9vbWVkU2l6ZS53aWR0aCgpID49IHN0YXRpY19jYXN0PGlu
dD4oc2l6ZXNbTlNTbWFsbENvbnRyb2xTaXplXS53aWR0aCgpICogem9vbUZhY3RvcikgJiYKKyAg
ICAgICAgICAgICBtaW5ab29tZWRTaXplLmhlaWdodCgpID49IHN0YXRpY19jYXN0PGludD4oc2l6
ZXNbTlNTbWFsbENvbnRyb2xTaXplXS5oZWlnaHQoKSAqIHpvb21GYWN0b3IpKQorICAgICAgICBz
aXplID0gTlNTbWFsbENvbnRyb2xTaXplOworICAgIGVsc2UKKyAgICAgICAgc2l6ZSA9IE5TTWlu
aUNvbnRyb2xTaXplOworICAgIGlmIChzaXplICE9IFtjZWxsIGNvbnRyb2xTaXplXSkgLy8gT25s
eSB1cGRhdGUgaWYgd2UgaGF2ZSB0bywgc2luY2UgQXBwS2l0IGRvZXMgd29yayBldmVuIGlmIHRo
ZSBzaXplIGlzIHRoZSBzYW1lLgorICAgICAgICBbY2VsbCBzZXRDb250cm9sU2l6ZTpzaXplXTsK
K30KKworc3RhdGljIHZvaWQgdXBkYXRlU3RhdGVzKE5TQ2VsbCogY2VsbCwgQ29udHJvbFN0YXRl
cyBzdGF0ZXMpCit7CisgICAgLy8gSG92ZXIgc3RhdGUgaXMgbm90IHN1cHBvcnRlZCBieSBBcXVh
LgorICAgIAorICAgIC8vIFByZXNzZWQgc3RhdGUKKyAgICBib29sIG9sZFByZXNzZWQgPSBbY2Vs
bCBpc0hpZ2hsaWdodGVkXTsKKyAgICBib29sIHByZXNzZWQgPSBzdGF0ZXMgJiBQcmVzc2VkU3Rh
dGU7CisgICAgaWYgKHByZXNzZWQgIT0gb2xkUHJlc3NlZCkKKyAgICAgICAgW2NlbGwgc2V0SGln
aGxpZ2h0ZWQ6cHJlc3NlZF07CisgICAgCisgICAgLy8gRW5hYmxlZCBzdGF0ZQorICAgIGJvb2wg
b2xkRW5hYmxlZCA9IFtjZWxsIGlzRW5hYmxlZF07CisgICAgYm9vbCBlbmFibGVkID0gc3RhdGVz
ICYgRW5hYmxlZFN0YXRlOworICAgIGlmIChlbmFibGVkICE9IG9sZEVuYWJsZWQpCisgICAgICAg
IFtjZWxsIHNldEVuYWJsZWQ6ZW5hYmxlZF07CisgICAgCisgICAgLy8gRm9jdXNlZCBzdGF0ZQor
ICAgIGJvb2wgb2xkRm9jdXNlZCA9IFtjZWxsIHNob3dzRmlyc3RSZXNwb25kZXJdOworICAgIGJv
b2wgZm9jdXNlZCA9IHN0YXRlcyAmIEZvY3VzU3RhdGU7CisgICAgaWYgKGZvY3VzZWQgIT0gb2xk
Rm9jdXNlZCkKKyAgICAgICAgW2NlbGwgc2V0U2hvd3NGaXJzdFJlc3BvbmRlcjpmb2N1c2VkXTsK
KworICAgIC8vIENoZWNrZWQgYW5kIEluZGV0ZXJtaW5hdGUKKyAgICBib29sIG9sZEluZGV0ZXJt
aW5hdGUgPSBbY2VsbCBzdGF0ZV0gPT0gTlNNaXhlZFN0YXRlOworICAgIGJvb2wgaW5kZXRlcm1p
bmF0ZSA9IChzdGF0ZXMgJiBJbmRldGVybWluYXRlU3RhdGUpOworICAgIGJvb2wgY2hlY2tlZCA9
IHN0YXRlcyAmIENoZWNrZWRTdGF0ZTsKKyAgICBib29sIG9sZENoZWNrZWQgPSBbY2VsbCBzdGF0
ZV0gPT0gTlNPblN0YXRlOworICAgIGlmIChvbGRJbmRldGVybWluYXRlICE9IGluZGV0ZXJtaW5h
dGUgfHwgY2hlY2tlZCAhPSBvbGRDaGVja2VkKQorICAgICAgICBbY2VsbCBzZXRTdGF0ZTppbmRl
dGVybWluYXRlID8gTlNNaXhlZFN0YXRlIDogKGNoZWNrZWQgPyBOU09uU3RhdGUgOiBOU09mZlN0
YXRlKV07CisgICAgICAgIAorICAgIC8vIFdpbmRvdyBpbmFjdGl2ZSBzdGF0ZSBkb2VzIG5vdCBu
ZWVkIHRvIGJlIGNoZWNrZWQgZXhwbGljaXRseSwgc2luY2Ugd2UgcGFpbnQgcGFyZW50ZWQgdG8g
CisgICAgLy8gYSB2aWV3IGluIGEgd2luZG93IHdob3NlIGtleSBzdGF0ZSBjYW4gYmUgZGV0ZWN0
ZWQuCit9CisKK3N0YXRpYyBJbnRSZWN0IGluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmIHpvb21l
ZFJlY3QsIGNvbnN0IEludFNpemUmIHpvb21lZFNpemUsIGNvbnN0IGludCogbWFyZ2lucywgZmxv
YXQgem9vbUZhY3RvcikKK3sKKyAgICAvLyBPbmx5IGRvIHRoZSBpbmZsYXRpb24gaWYgdGhlIGF2
YWlsYWJsZSB3aWR0aC9oZWlnaHQgYXJlIHRvbyBzbWFsbC4gIE90aGVyd2lzZSB0cnkgdG8KKyAg
ICAvLyBmaXQgdGhlIGdsb3cvY2hlY2sgc3BhY2UgaW50byB0aGUgYXZhaWxhYmxlIGJveCdzIHdp
ZHRoL2hlaWdodC4KKyAgICBpbnQgd2lkdGhEZWx0YSA9IHpvb21lZFJlY3Qud2lkdGgoKSAtICh6
b29tZWRTaXplLndpZHRoKCkgKyBtYXJnaW5zW2xlZnRNYXJnaW5dICogem9vbUZhY3RvciArIG1h
cmdpbnNbcmlnaHRNYXJnaW5dICogem9vbUZhY3Rvcik7CisgICAgaW50IGhlaWdodERlbHRhID0g
em9vbWVkUmVjdC5oZWlnaHQoKSAtICh6b29tZWRTaXplLmhlaWdodCgpICsgbWFyZ2luc1t0b3BN
YXJnaW5dICogem9vbUZhY3RvciArIG1hcmdpbnNbYm90dG9tTWFyZ2luXSAqIHpvb21GYWN0b3Ip
OworICAgIEludFJlY3QgcmVzdWx0KHpvb21lZFJlY3QpOworICAgIGlmICh3aWR0aERlbHRhIDwg
MCkgeworICAgICAgICByZXN1bHQuc2V0WChyZXN1bHQueCgpIC0gbWFyZ2luc1tsZWZ0TWFyZ2lu
XSAqIHpvb21GYWN0b3IpOworICAgICAgICByZXN1bHQuc2V0V2lkdGgocmVzdWx0LndpZHRoKCkg
LSB3aWR0aERlbHRhKTsKKyAgICB9CisgICAgaWYgKGhlaWdodERlbHRhIDwgMCkgeworICAgICAg
ICByZXN1bHQuc2V0WShyZXN1bHQueSgpIC0gbWFyZ2luc1t0b3BNYXJnaW5dICogem9vbUZhY3Rv
cik7CisgICAgICAgIHJlc3VsdC5zZXRIZWlnaHQocmVzdWx0LmhlaWdodCgpIC0gaGVpZ2h0RGVs
dGEpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBDaGVja2JveGVzCisKK3N0
YXRpYyBjb25zdCBJbnRTaXplKiBjaGVja2JveFNpemVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
SW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgxNCwgMTQpLCBJbnRTaXplKDEyLCAxMiksIElu
dFNpemUoMTAsIDEwKSB9OworICAgIHJldHVybiBzaXplczsKK30KKworc3RhdGljIGNvbnN0IGlu
dCogY2hlY2tib3hNYXJnaW5zKE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpCit7CisgICAgc3Rh
dGljIGNvbnN0IGludCBtYXJnaW5zWzNdWzRdID0KKyAgICB7CisgICAgICAgIHsgMywgNCwgNCwg
MiB9LAorICAgICAgICB7IDQsIDMsIDMsIDMgfSwKKyAgICAgICAgeyA0LCAzLCAzLCAzIH0sCisg
ICAgfTsKKyAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07Cit9CisKK3N0YXRpYyBMZW5n
dGhTaXplIGNoZWNrYm94U2l6ZShjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6
b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQoreworICAgIC8vIElmIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisg
ICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVk
U2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICByZXR1cm4gem9vbWVk
U2l6ZTsKKworICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmlu
c2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgorICAgIHJldHVybiBzaXplRnJvbUZvbnQoZm9udCwg
em9vbWVkU2l6ZSwgem9vbUZhY3RvciwgY2hlY2tib3hTaXplcygpKTsKK30KKworc3RhdGljIE5T
QnV0dG9uQ2VsbCogY2hlY2tib3goQ29udHJvbFN0YXRlcyBzdGF0ZXMsIGNvbnN0IEludFJlY3Qm
IHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpCit7CisgICAgc3RhdGljIE5TQnV0dG9uQ2Vs
bCogY2hlY2tib3hDZWxsOworICAgIGlmICghY2hlY2tib3hDZWxsKSB7CisgICAgICAgIGNoZWNr
Ym94Q2VsbCA9IFtbTlNCdXR0b25DZWxsIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2NoZWNrYm94
Q2VsbCBzZXRCdXR0b25UeXBlOk5TU3dpdGNoQnV0dG9uXTsKKyAgICAgICAgW2NoZWNrYm94Q2Vs
bCBzZXRUaXRsZTpuaWxdOworICAgICAgICBbY2hlY2tib3hDZWxsIHNldEFsbG93c01peGVkU3Rh
dGU6WUVTXTsKKyAgICAgICAgW2NoZWNrYm94Q2VsbCBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNS
aW5nVHlwZUV4dGVyaW9yXTsKKyAgICB9CisgICAgCisgICAgLy8gU2V0IHRoZSBjb250cm9sIHNp
emUgYmFzZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUgcGFpbnRpbmcgaW50by4KKyAgICBzZXRD
b250cm9sU2l6ZShjaGVja2JveENlbGwsIGNoZWNrYm94U2l6ZXMoKSwgem9vbWVkUmVjdC5zaXpl
KCksIHpvb21GYWN0b3IpOworCisgICAgLy8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSBy
ZXNwb25kIHRvLgorICAgIHVwZGF0ZVN0YXRlcyhjaGVja2JveENlbGwsIHN0YXRlcyk7CisgICAg
CisgICAgcmV0dXJuIGNoZWNrYm94Q2VsbDsKK30KKworLy8gRklYTUU6IFNoYXJlIG1vcmUgY29k
ZSB3aXRoIHJhZGlvIGJ1dHRvbnMuCitzdGF0aWMgdm9pZCBwYWludENoZWNrYm94KENvbnRyb2xT
dGF0ZXMgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHpv
b21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcpCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHdp
ZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUgY29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2Vs
bCBmb3IgcGFpbnRpbmcuCisgICAgTlNCdXR0b25DZWxsKiBjaGVja2JveENlbGwgPSBjaGVja2Jv
eChzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOworCisgICAgY29udGV4dC0+c2F2ZSgp
OworCisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IFtjaGVja2JveENlbGwgY29udHJv
bFNpemVdOworICAgIEludFNpemUgem9vbWVkU2l6ZSA9IGNoZWNrYm94U2l6ZXMoKVtjb250cm9s
U2l6ZV07CisgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6b29tZWRTaXplLndpZHRoKCkgKiB6b29t
RmFjdG9yKTsKKyAgICB6b29tZWRTaXplLnNldEhlaWdodCh6b29tZWRTaXplLmhlaWdodCgpICog
em9vbUZhY3Rvcik7CisgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29t
ZWRSZWN0LCB6b29tZWRTaXplLCBjaGVja2JveE1hcmdpbnMoY29udHJvbFNpemUpLCB6b29tRmFj
dG9yKTsKKyAgICAKKyAgICBpZiAoem9vbUZhY3RvciAhPSAxLjBmKSB7CisgICAgICAgIGluZmxh
dGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOworICAg
ICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21G
YWN0b3IpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5m
bGF0ZWRSZWN0LnkoKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFj
dG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRS
ZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOworICAgIH0KKyAgICAKKyAgICBbY2hlY2tib3hD
ZWxsIGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3OnNjcm9sbFZpZXct
PmRvY3VtZW50VmlldygpXTsKKyAgICBbY2hlY2tib3hDZWxsIHNldENvbnRyb2xWaWV3Om5pbF07
CisKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworfQorCisvLyBSYWRpbyBCdXR0b25zCisKK3N0YXRpYyBjb25zdCBJbnRTaXplKiBy
YWRpb1NpemVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50
U2l6ZSgxNCwgMTUpLCBJbnRTaXplKDEyLCAxMyksIEludFNpemUoMTAsIDEwKSB9OworICAgIHJl
dHVybiBzaXplczsKK30KKworc3RhdGljIGNvbnN0IGludCogcmFkaW9NYXJnaW5zKE5TQ29udHJv
bFNpemUgY29udHJvbFNpemUpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXJnaW5zWzNdWzRd
ID0KKyAgICB7CisgICAgICAgIHsgMiwgMiwgNCwgMiB9LAorICAgICAgICB7IDMsIDIsIDMsIDIg
fSwKKyAgICAgICAgeyAxLCAwLCAyLCAwIH0sCisgICAgfTsKKyAgICByZXR1cm4gbWFyZ2luc1tj
b250cm9sU2l6ZV07Cit9CisKK3N0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6ZShjb25zdCBGb250
JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQor
eworICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhl
biB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0
bygpKQorICAgICAgICByZXR1cm4gem9vbWVkU2l6ZTsKKworICAgIC8vIFVzZSB0aGUgZm9udCBz
aXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgorICAg
IHJldHVybiBzaXplRnJvbUZvbnQoZm9udCwgem9vbWVkU2l6ZSwgem9vbUZhY3RvciwgcmFkaW9T
aXplcygpKTsKK30KKworc3RhdGljIE5TQnV0dG9uQ2VsbCogcmFkaW8oQ29udHJvbFN0YXRlcyBz
dGF0ZXMsIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpCit7Cisg
ICAgc3RhdGljIE5TQnV0dG9uQ2VsbCogcmFkaW9DZWxsOworICAgIGlmICghcmFkaW9DZWxsKSB7
CisgICAgICAgIHJhZGlvQ2VsbCA9IFtbTlNCdXR0b25DZWxsIGFsbG9jXSBpbml0XTsKKyAgICAg
ICAgW3JhZGlvQ2VsbCBzZXRCdXR0b25UeXBlOk5TUmFkaW9CdXR0b25dOworICAgICAgICBbcmFk
aW9DZWxsIHNldFRpdGxlOm5pbF07CisgICAgICAgIFtyYWRpb0NlbGwgc2V0Rm9jdXNSaW5nVHlw
ZTpOU0ZvY3VzUmluZ1R5cGVFeHRlcmlvcl07CisgICAgfQorICAgIAorICAgIC8vIFNldCB0aGUg
Y29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8u
CisgICAgc2V0Q29udHJvbFNpemUocmFkaW9DZWxsLCByYWRpb1NpemVzKCksIHpvb21lZFJlY3Qu
c2l6ZSgpLCB6b29tRmFjdG9yKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMg
d2UgcmVzcG9uZCB0by4KKyAgICB1cGRhdGVTdGF0ZXMocmFkaW9DZWxsLCBzdGF0ZXMpOworICAg
IAorICAgIHJldHVybiByYWRpb0NlbGw7Cit9CisKK3N0YXRpYyB2b2lkIHBhaW50UmFkaW8oQ29u
dHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykK
K3sKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUg
Y29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCisgICAgTlNCdXR0b25D
ZWxsKiByYWRpb0NlbGwgPSByYWRpbyhzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOwor
CisgICAgY29udGV4dC0+c2F2ZSgpOworCisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9
IFtyYWRpb0NlbGwgY29udHJvbFNpemVdOworICAgIEludFNpemUgem9vbWVkU2l6ZSA9IHJhZGlv
U2l6ZXMoKVtjb250cm9sU2l6ZV07CisgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6b29tZWRTaXpl
LndpZHRoKCkgKiB6b29tRmFjdG9yKTsKKyAgICB6b29tZWRTaXplLnNldEhlaWdodCh6b29tZWRT
aXplLmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBp
bmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCByYWRpb01hcmdpbnMoY29udHJvbFNp
emUpLCB6b29tRmFjdG9yKTsKKyAgICAKKyAgICBpZiAoem9vbUZhY3RvciAhPSAxLjBmKSB7Cisg
ICAgICAgIGluZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21G
YWN0b3IpOworICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWln
aHQoKSAvIHpvb21GYWN0b3IpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRS
ZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0
U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0
ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOworICAgIH0KKyAgICAKKyAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbcmFkaW9DZWxsIGRyYXdXaXRoRnJh
bWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3OnNjcm9sbFZpZXctPmRvY3VtZW50Vmlldygp
XTsKKyAgICBbcmFkaW9DZWxsIHNldENvbnRyb2xWaWV3Om5pbF07CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUworCisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCisvLyBCdXR0b25z
CisKKy8vIEJ1dHRvbnMgcmVhbGx5IG9ubHkgY29uc3RyYWluIGhlaWdodC4gVGhleSByZXNwZWN0
IHdpZHRoLgorc3RhdGljIGNvbnN0IEludFNpemUqIGJ1dHRvblNpemVzKCkKK3sKKyAgICBzdGF0
aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgwLCAyMSksIEludFNpemUoMCwg
MTgpLCBJbnRTaXplKDAsIDE1KSB9OworICAgIHJldHVybiBzaXplczsKK30KKworc3RhdGljIGNv
bnN0IGludCogYnV0dG9uTWFyZ2lucyhOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplKQoreworICAg
IHN0YXRpYyBjb25zdCBpbnQgbWFyZ2luc1szXVs0XSA9CisgICAgeworICAgICAgICB7IDQsIDYs
IDcsIDYgfSwKKyAgICAgICAgeyA0LCA1LCA2LCA1IH0sCisgICAgICAgIHsgMCwgMSwgMSwgMSB9
LAorICAgIH07CisgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOworfQorCitzdGF0aWMg
TlNCdXR0b25DZWxsKiBidXR0b24oQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0
ZXMsIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpCit7CisgICAg
c3RhdGljIE5TQnV0dG9uQ2VsbCAqYnV0dG9uQ2VsbDsKKyAgICBzdGF0aWMgYm9vbCBkZWZhdWx0
QnV0dG9uOworICAgIGlmICghYnV0dG9uQ2VsbCkgeworICAgICAgICBidXR0b25DZWxsID0gW1tO
U0J1dHRvbkNlbGwgYWxsb2NdIGluaXRdOworICAgICAgICBbYnV0dG9uQ2VsbCBzZXRUaXRsZTpu
aWxdOworICAgICAgICBbYnV0dG9uQ2VsbCBzZXRCdXR0b25UeXBlOk5TTW9tZW50YXJ5UHVzaElu
QnV0dG9uXTsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYg
dGhlIHJlY3RhbmdsZSB3ZSdyZSBwYWludGluZyBpbnRvLgorICAgIGlmIChwYXJ0ID09IFNxdWFy
ZUJ1dHRvblBhcnQgfHwgem9vbWVkUmVjdC5oZWlnaHQoKSA+IGJ1dHRvblNpemVzKClbTlNSZWd1
bGFyQ29udHJvbFNpemVdLmhlaWdodCgpICogem9vbUZhY3RvcikgeworICAgICAgICAvLyBVc2Ug
dGhlIHNxdWFyZSBidXR0b24KKyAgICAgICAgaWYgKFtidXR0b25DZWxsIGJlemVsU3R5bGVdICE9
IE5TU2hhZG93bGVzc1NxdWFyZUJlemVsU3R5bGUpCisgICAgICAgICAgICBbYnV0dG9uQ2VsbCBz
ZXRCZXplbFN0eWxlOk5TU2hhZG93bGVzc1NxdWFyZUJlemVsU3R5bGVdOworICAgIH0gZWxzZSBp
ZiAoW2J1dHRvbkNlbGwgYmV6ZWxTdHlsZV0gIT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkKKyAgICAg
ICAgW2J1dHRvbkNlbGwgc2V0QmV6ZWxTdHlsZTpOU1JvdW5kZWRCZXplbFN0eWxlXTsKKworICAg
IHNldENvbnRyb2xTaXplKGJ1dHRvbkNlbGwsIGJ1dHRvblNpemVzKCksIHpvb21lZFJlY3Quc2l6
ZSgpLCB6b29tRmFjdG9yKTsKKworICAgIGlmIChkZWZhdWx0QnV0dG9uICE9IChzdGF0ZXMgJiBE
ZWZhdWx0U3RhdGUpKSB7CisgICAgICAgIGRlZmF1bHRCdXR0b24gPSAhZGVmYXVsdEJ1dHRvbjsK
KyAgICAgICAgW2J1dHRvbkNlbGwgc2V0S2V5RXF1aXZhbGVudDooZGVmYXVsdEJ1dHRvbiA/IEAi
XHIiIDogQCIiKV07CisgICAgfQorCisgICAgLy8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3
ZSByZXNwb25kIHRvLgorICAgIHVwZGF0ZVN0YXRlcyhidXR0b25DZWxsLCBzdGF0ZXMpOworICAg
IAorICAgIHJldHVybiBidXR0b25DZWxsOworfQorCitzdGF0aWMgdm9pZCBwYWludEJ1dHRvbihD
b250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3Jv
bGxWaWV3KiBzY3JvbGxWaWV3KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwor
ICAgIAorICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5kIGhlaWdodCBuZWVkZWQgZm9yIHRo
ZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBwYWludGluZy4KKyAgICBOU0J1dHRv
bkNlbGwgKmJ1dHRvbkNlbGwgPSBidXR0b24ocGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29t
RmFjdG9yKTsKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KGNv
bnRleHQpOworCisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IFtidXR0b25DZWxsIGNv
bnRyb2xTaXplXTsKKyAgICBJbnRTaXplIHpvb21lZFNpemUgPSBidXR0b25TaXplcygpW2NvbnRy
b2xTaXplXTsKKyAgICB6b29tZWRTaXplLnNldFdpZHRoKHpvb21lZFJlY3Qud2lkdGgoKSk7IC8v
IEJ1dHRvbnMgZG9uJ3QgZXZlciBjb25zdHJhaW4gd2lkdGgsIHNvIHRoZSB6b29tZWQgd2lkdGgg
Y2FuIGp1c3QgYmUgaG9ub3JlZC4KKyAgICB6b29tZWRTaXplLnNldEhlaWdodCh6b29tZWRTaXpl
LmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSB6b29t
ZWRSZWN0OworICAgIGlmIChbYnV0dG9uQ2VsbCBiZXplbFN0eWxlXSA9PSBOU1JvdW5kZWRCZXpl
bFN0eWxlKSB7CisgICAgICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHdpdGhpbiB0aGUgYXZhaWxh
YmxlIHNwYWNlLgorICAgICAgICBpZiAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpID4gem9vbWVkU2l6
ZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFkoaW5mbGF0ZWRSZWN0
LnkoKSArIChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLSB6b29tZWRTaXplLmhlaWdodCgpKSAvIDIp
OworICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodCh6b29tZWRTaXplLmhlaWdodCgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291bnQgZm9y
IHRoZSBzaGFkb3cuCisgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVk
UmVjdCwgem9vbWVkU2l6ZSwgYnV0dG9uTWFyZ2lucyhjb250cm9sU2l6ZSksIHpvb21GYWN0b3Ip
OworCisgICAgICAgIGlmICh6b29tRmFjdG9yICE9IDEuMGYpIHsKKyAgICAgICAgICAgIGluZmxh
dGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOworICAg
ICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLyB6
b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3Qu
eCgpLCBpbmZsYXRlZFJlY3QueSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0
U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgICAgICBjb250ZXh0LT50cmFu
c2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKKyAgICAgICAgfQor
ICAgIH0gCisKKyAgICBOU1ZpZXcgKnZpZXcgPSBzY3JvbGxWaWV3LT5kb2N1bWVudFZpZXcoKTsK
KyAgICBOU1dpbmRvdyAqd2luZG93ID0gW3ZpZXcgd2luZG93XTsKKyAgICBOU0J1dHRvbkNlbGwg
KnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgPSBbd2luZG93IGRlZmF1bHRCdXR0b25DZWxsXTsK
KworICAgIGlmICgoc3RhdGVzICYgRGVmYXVsdFN0YXRlKSAmJiBbd2luZG93IGlzS2V5V2luZG93
XSkgeworICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOmJ1dHRvbkNlbGxdOwor
ICAgICAgICB3a0FkdmFuY2VEZWZhdWx0QnV0dG9uUHVsc2VBbmltYXRpb24oYnV0dG9uQ2VsbCk7
CisgICAgfSBlbHNlIGlmIChbcHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCBpc0VxdWFsOmJ1dHRv
bkNlbGxdKQorICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOm5pbF07CisKKyAg
ICBbYnV0dG9uQ2VsbCBkcmF3V2l0aEZyYW1lOk5TUmVjdChpbmZsYXRlZFJlY3QpIGluVmlldzp2
aWV3XTsKKyAgICBbYnV0dG9uQ2VsbCBzZXRDb250cm9sVmlldzpuaWxdOworCisgICAgaWYgKCFb
cHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCBpc0VxdWFsOmJ1dHRvbkNlbGxdKQorICAgICAgICBb
d2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGxdOwor
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCisvLyBUaGVtZSBvdmVycmlkZXMK
KworaW50IFRoZW1lTWFjOjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChDb250cm9sUGFydCBw
YXJ0KSBjb25zdAoreworICAgIGlmIChwYXJ0ID09IENoZWNrYm94UGFydCB8fCBwYXJ0ID09IFJh
ZGlvUGFydCkKKyAgICAgICAgcmV0dXJuIC0yOworICAgIHJldHVybiBUaGVtZTo6YmFzZWxpbmVQ
b3NpdGlvbkFkanVzdG1lbnQocGFydCk7Cit9CisKK0ZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAgY2FzZSBQdXNo
QnV0dG9uUGFydDogeworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
bjsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsK
KyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlw
dGlvbjo6U2VyaWZGYW1pbHkpOworCisgICAgICAgICAgICBOU0ZvbnQqIG5zRm9udCA9IFtOU0Zv
bnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6
Y29udHJvbFNpemVGb3JGb250KGZvbnQpXV07CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoW25zRm9udCBmYW1pbHlOYW1lXSk7CisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFtuc0ZvbnQgcG9pbnRTaXplXSAqIHpv
b21GYWN0b3IpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUo
W25zRm9udCBwb2ludFNpemVdICogem9vbUZhY3Rvcik7CisgICAgICAgICAgICByZXR1cm4gZm9u
dERlc2NyaXB0aW9uOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gVGhlbWU6OmNvbnRyb2xGb250KHBhcnQsIGZvbnQsIHpvb21GYWN0b3IpOworICAgIH0K
K30KKworTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29udHJvbFNpemUoQ29udHJvbFBhcnQgcGFydCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAgY2FzZSBDaGVj
a2JveFBhcnQ6CisgICAgICAgICAgICByZXR1cm4gY2hlY2tib3hTaXplKGZvbnQsIHpvb21lZFNp
emUsIHpvb21GYWN0b3IpOworICAgICAgICBjYXNlIFJhZGlvUGFydDoKKyAgICAgICAgICAgIHJl
dHVybiByYWRpb1NpemUoZm9udCwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvcik7CisgICAgICAgIGNh
c2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgICAgICAvLyBIZWlnaHQgaXMgcmVzZXQgdG8gYXV0
byBzbyB0aGF0IHNwZWNpZmllZCBoZWlnaHRzIGNhbiBiZSBpZ25vcmVkLgorICAgICAgICAgICAg
cmV0dXJuIHNpemVGcm9tRm9udChmb250LCBMZW5ndGhTaXplKHpvb21lZFNpemUud2lkdGgoKSwg
TGVuZ3RoKCkpLCB6b29tRmFjdG9yLCBidXR0b25TaXplcygpKTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiB6b29tZWRTaXplOworICAgIH0KK30KKworTGVuZ3RoU2l6ZSBU
aGVtZU1hYzo6bWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQm
IGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7Cisg
ICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9u
UGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgICAgICAgICAgcmV0dXJuIExlbmd0
aFNpemUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oMTUgKiB6b29t
RmFjdG9yKSwgRml4ZWQpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBU
aGVtZTo6bWluaW11bUNvbnRyb2xTaXplKHBhcnQsIGZvbnQsIHpvb21GYWN0b3IpOworICAgIH0K
K30KKworTGVuZ3RoQm94IFRoZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29t
RmFjdG9yKSBjb25zdAoreworICAgIHN3aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIFNxdWFy
ZUJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CisgICAgICAgIGNh
c2UgQnV0dG9uUGFydDoKKyAgICAgICAgICAgIHJldHVybiBMZW5ndGhCb3goMCwgem9vbWVkQm94
LnJpZ2h0KCkudmFsdWUoKSwgMCwgem9vbWVkQm94LmxlZnQoKS52YWx1ZSgpKTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUaGVtZTo6Y29udHJvbEJvcmRlcihwYXJ0LCBm
b250LCB6b29tZWRCb3gsIHpvb21GYWN0b3IpOworICAgIH0KK30KKworTGVuZ3RoQm94IFRoZW1l
TWFjOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBj
b25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDogeworICAgICAg
ICAgICAgLy8gSnVzdCB1c2UgOHB4LiAgQXBwS2l0IHdhbnRzIHRvIHVzZSAxMXB4IGZvciBtaW5p
IGJ1dHRvbnMsIGJ1dCB0aGF0IHBhZGRpbmcgaXMganVzdCB0b28gbGFyZ2UKKyAgICAgICAgICAg
IC8vIGZvciByZWFsLXdvcmxkIFdlYiBzaXRlcyAoY3JlYXRpbmcgYSBodWdlIG5lY2Vzc2FyeSBt
aW5pbXVtIHdpZHRoIGZvciBidXR0b25zIHdob3NlIHNwYWNlIGlzCisgICAgICAgICAgICAvLyBi
eSBkZWZpbml0aW9uIGNvbnN0cmFpbmVkLCBzaW5jZSB3ZSBzZWxlY3QgbWluaSBvbmx5IGZvciBz
bWFsbCBjcmFtcGVkIGVudmlyb25tZW50cy4KKyAgICAgICAgICAgIC8vIFRoaXMgYWxzbyBndWFy
YW50ZWVzIHRoZSBIVE1MIDxidXR0b24+IHdpbGwgbWF0Y2ggb3VyIHJlbmRlcmluZyBieSBkZWZh
dWx0LCBzaW5jZSB3ZSdyZSB1c2luZyBhIGNvbnNpc3RlbnQKKyAgICAgICAgICAgIC8vIHBhZGRp
bmcuCisgICAgICAgICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDggKiB6b29tRmFjdG9yOworICAg
ICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgwLCBwYWRkaW5nLCAwLCBwYWRkaW5nKTsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFRoZW1lOjpjb250cm9s
UGFkZGluZyhwYXJ0LCBmb250LCB6b29tZWRCb3gsIHpvb21GYWN0b3IpOworICAgIH0KK30KKwor
dm9pZCBUaGVtZU1hYzo6aW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBhcnQgcGFydCwg
Q29udHJvbFN0YXRlcyBzdGF0ZXMsIEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0
b3IpIGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgc3dpdGNo
IChwYXJ0KSB7CisgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OiB7CisgICAgICAgICAgICAvLyBX
ZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1
ZGVkIGluIHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBjaGVja2JveAorICAgICAgICAgICAg
Ly8gc2hhZG93IiBhbmQgdGhlIGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9m
IHRoZSBib3VuZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0LgorICAgICAgICAgICAgTlNDZWxs
ICpjZWxsID0gY2hlY2tib3goc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKKyAgICAg
ICAgICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbY2VsbCBjb250cm9sU2l6ZV07Cisg
ICAgICAgICAgICBJbnRTaXplIHpvb21lZFNpemUgPSBjaGVja2JveFNpemVzKClbY29udHJvbFNp
emVdOworICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9vbWVkU2l6ZS5oZWlnaHQo
KSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6b29tZWRT
aXplLndpZHRoKCkgKiB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHpvb21lZFJlY3QgPSBpbmZs
YXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCBjaGVja2JveE1hcmdpbnMoY29udHJvbFNp
emUpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgUmFkaW9QYXJ0OiB7CisgICAgICAgICAgICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0IGFz
IG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVkIGluIHRoZSBjZWxsIHRvIGFj
Y29tbW9kYXRlIHRoZSByYWRpbyBidXR0b24KKyAgICAgICAgICAgIC8vIHNoYWRvdyIuICBXZSBk
b24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBX
ZWJLaXQuCisgICAgICAgICAgICBOU0NlbGwgKmNlbGwgPSByYWRpbyhzdGF0ZXMsIHpvb21lZFJl
Y3QsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9
IFtjZWxsIGNvbnRyb2xTaXplXTsKKyAgICAgICAgICAgIEludFNpemUgem9vbWVkU2l6ZSA9IHJh
ZGlvU2l6ZXMoKVtjb250cm9sU2l6ZV07CisgICAgICAgICAgICB6b29tZWRTaXplLnNldEhlaWdo
dCh6b29tZWRTaXplLmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAgICAgICAgICB6b29tZWRT
aXplLnNldFdpZHRoKHpvb21lZFNpemUud2lkdGgoKSAqIHpvb21GYWN0b3IpOworICAgICAgICAg
ICAgem9vbWVkUmVjdCA9IGluZmxhdGVSZWN0KHpvb21lZFJlY3QsIHpvb21lZFNpemUsIHJhZGlv
TWFyZ2lucyhjb250cm9sU2l6ZSksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZh
dWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OiB7CisgICAgICAgICAgICBO
U0J1dHRvbkNlbGwgKmNlbGwgPSBidXR0b24ocGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbY2VsbCBj
b250cm9sU2l6ZV07CisKKyAgICAgICAgICAgIC8vIFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVl
ZGVkIHRvIGFjY291bnQgZm9yIHRoZSBBcXVhIGJ1dHRvbidzIHNoYWRvdy4KKyAgICAgICAgICAg
IGlmIChbY2VsbCBiZXplbFN0eWxlXSA9PSBOU1JvdW5kZWRCZXplbFN0eWxlKSB7CisgICAgICAg
ICAgICAgICAgSW50U2l6ZSB6b29tZWRTaXplID0gYnV0dG9uU2l6ZXMoKVtjb250cm9sU2l6ZV07
CisgICAgICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9vbWVkU2l6ZS5oZWlnaHQo
KSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIHpvb21lZFNpemUuc2V0V2lkdGgoem9v
bWVkUmVjdC53aWR0aCgpKTsgLy8gQnV0dG9ucyBkb24ndCBldmVyIGNvbnN0cmFpbiB3aWR0aCwg
c28gdGhlIHpvb21lZCB3aWR0aCBjYW4ganVzdCBiZSBob25vcmVkLgorICAgICAgICAgICAgICAg
IHpvb21lZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCBidXR0b25N
YXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBUaGVt
ZU1hYzo6cGFpbnQoQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9v
bUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHBh
cnQpIHsKKyAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgICAgICAgICBwYWludENoZWNr
Ym94KHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgICAgICAg
ICBwYWludFJhZGlvKHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Ny
b2xsVmlldyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFy
dDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25Q
YXJ0OgorICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CisgICAgICAgICAgICBwYWludEJ1
dHRvbihwYXJ0LCBzdGF0ZXMsIGNvbnRleHQsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9s
bFZpZXcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
VGhlbWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1RoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDQ4MzkyKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsNyArMjUsNyBA
QAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGhlbWVNYWMuaCIKKyNpbXBv
cnQgIlRoZW1lQ2hyb21pdW1NYWMuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAj
aW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTM1LDEwICszNiwyOSBAQAogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCisvLyBUaGlzIGZpbGUgKGFuZCBpdHMgYXNzb2NpYXRlZCAuaCBmaWxl
KSBpcyBhIGNsb25lIG9mIFRoZW1lTWFjLm1tLgorLy8gQmVjYXVzZSB0aGUgb3JpZ2luYWwgZmls
ZSBpcyBkZXNpZ25lZCB0byBydW4gaW4tcHJvY2VzcyBpbnNpZGUgYSBDb2NvYSB2aWV3LAorLy8g
d2UgbXVzdCBtYWludGFpbiBhIGZvcmsuIFBsZWFzZSBtYWludGFpbiB0aGlzIGZpbGUgYnkgcGVy
Zm9ybWluZyBwYXJhbGxlbAorLy8gY2hhbmdlcyB0byBpdC4KKy8vCisvLyBUaGUgb25seSBjaGFu
Z2VzIGZyb20gVGhlbWVNYWMgc2hvdWxkIGJlOgorLy8gLSBUaGUgY2xhc3NuYW1lIGNoYW5nZSBm
cm9tIFRoZW1lTWFjIHRvIFRoZW1lQ2hyb21pdW1NYWMuCisvLyAtIFRoZSBpbXBvcnQgb2YgRmxp
cHBlZFZpZXcoKSBhbmQgaXRzIHVzZSBhcyB0aGUgcGFyZW50IHZpZXcgZm9yIGNlbGwKKy8vICAg
cmVuZGVyaW5nLgorLy8gLSBJbiB1cGRhdGVTdGF0ZXMoKSB0aGUgY29kZSB0byB1cGRhdGUgdGhl
IGNlbGxzJyBpbmFjdGl2ZSBzdGF0ZS4KKy8vIC0gSW4gcGFpbnRCdXR0b24oKSB0aGUgY29kZSB0
byBzYXZlL3Jlc3RvcmUgdGhlIHdpbmRvdydzIGRlZmF1bHQgYnV0dG9uIGNlbGwuCisvLworLy8g
Rm9yIGFsbCBvdGhlciBkaWZmZXJlbmNlcywgaWYgaXQgd2FzIGludHJvZHVjZWQgaW4gdGhpcyBm
aWxlLCB0aGVuIHRoZQorLy8gbWFpbnRhaW5lciBmb3Jnb3QgdG8gaW5jbHVkZSBpdCBpbiB0aGUg
bGlzdDsgb3RoZXJ3aXNlIGl0IGlzIGFuIHVwZGF0ZSB0aGF0CisvLyBzaG91bGQgaGF2ZSBiZWVu
IGFwcGxpZWQgdG8gdGhpcyBmaWxlIGJ1dCB3YXMgbm90LgorCiAvLyBGSVhNRTogRGVmYXVsdCBi
dXR0b25zIHJlYWxseSBzaG91bGQgYmUgbW9yZSBsaWtlIHB1c2ggYnV0dG9ucyBhbmQgbm90IGxp
a2UgYnV0dG9ucy4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBQaWNrIHVwIHV0aWxpdHkg
ZnVuY3Rpb24gZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtTWFjLgorZXh0ZXJuIE5TVmlldyogRmxp
cHBlZFZpZXcoKTsKKwogZW51bSB7CiAgICAgdG9wTWFyZ2luLAogICAgIHJpZ2h0TWFyZ2luLApA
QCAtNDgsNyArNjgsNyBAQCBlbnVtIHsKIAogVGhlbWUqIHBsYXRmb3JtVGhlbWUoKQogewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoVGhlbWVNYWMsIHRoZW1lTWFjLCAoKSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChUaGVtZUNocm9taXVtTWFjLCB0aGVtZU1hYywgKCkpOwogICAgIHJldHVy
biAmdGhlbWVNYWM7CiB9CiAKQEAgLTEyMiw4ICsxNDIsMTIgQEAgc3RhdGljIHZvaWQgdXBkYXRl
U3RhdGVzKE5TQ2VsbCogY2VsbCwgQwogICAgIGlmIChvbGRJbmRldGVybWluYXRlICE9IGluZGV0
ZXJtaW5hdGUgfHwgY2hlY2tlZCAhPSBvbGRDaGVja2VkKQogICAgICAgICBbY2VsbCBzZXRTdGF0
ZTppbmRldGVybWluYXRlID8gTlNNaXhlZFN0YXRlIDogKGNoZWNrZWQgPyBOU09uU3RhdGUgOiBO
U09mZlN0YXRlKV07CiAgICAgICAgIAotICAgIC8vIFdpbmRvdyBpbmFjdGl2ZSBzdGF0ZSBkb2Vz
IG5vdCBuZWVkIHRvIGJlIGNoZWNrZWQgZXhwbGljaXRseSwgc2luY2Ugd2UgcGFpbnQgcGFyZW50
ZWQgdG8gCi0gICAgLy8gYSB2aWV3IGluIGEgd2luZG93IHdob3NlIGtleSBzdGF0ZSBjYW4gYmUg
ZGV0ZWN0ZWQuCisgICAgLy8gV2luZG93IEluYWN0aXZlIHN0YXRlCisgICAgTlNDb250cm9sVGlu
dCBvbGRUaW50ID0gW2NlbGwgY29udHJvbFRpbnRdOworICAgIGJvb2wgd2luZG93SW5hY3RpdmUg
PSAoc3RhdGVzICYgV2luZG93SW5hY3RpdmVTdGF0ZSk7CisgICAgTlNDb250cm9sVGludCB0aW50
ID0gd2luZG93SW5hY3RpdmUgPyBOU0NsZWFyQ29udHJvbFRpbnQgOiBbTlNDb2xvciBjdXJyZW50
Q29udHJvbFRpbnRdOworICAgIGlmICh0aW50ICE9IG9sZFRpbnQpCisgICAgICAgIFtjZWxsIHNl
dENvbnRyb2xUaW50OnRpbnRdOwogfQogCiBzdGF0aWMgSW50UmVjdCBpbmZsYXRlUmVjdChjb25z
dCBJbnRSZWN0JiB6b29tZWRSZWN0LCBjb25zdCBJbnRTaXplJiB6b29tZWRTaXplLCBjb25zdCBp
bnQqIG1hcmdpbnMsIGZsb2F0IHpvb21GYWN0b3IpCkBAIC0yMTcsNyArMjQxLDcgQEAgc3RhdGlj
IHZvaWQgcGFpbnRDaGVja2JveChDb250cm9sU3RhdGVzIAogICAgICAgICBjb250ZXh0LT50cmFu
c2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKICAgICB9CiAgICAg
Ci0gICAgW2NoZWNrYm94Q2VsbCBkcmF3V2l0aEZyYW1lOk5TUmVjdChpbmZsYXRlZFJlY3QpIGlu
VmlldzpzY3JvbGxWaWV3LT5kb2N1bWVudFZpZXcoKV07CisgICAgW2NoZWNrYm94Q2VsbCBkcmF3
V2l0aEZyYW1lOk5TUmVjdChpbmZsYXRlZFJlY3QpIGluVmlldzpGbGlwcGVkVmlldygpXTsKICAg
ICBbY2hlY2tib3hDZWxsIHNldENvbnRyb2xWaWV3Om5pbF07CiAKICAgICBjb250ZXh0LT5yZXN0
b3JlKCk7CkBAIC0yOTUsNyArMzE5LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRSYWRpbyhDb250cm9s
U3RhdGVzIHN0YQogICAgIH0KICAgICAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LSAgICBbcmFkaW9DZWxsIGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3
OnNjcm9sbFZpZXctPmRvY3VtZW50VmlldygpXTsKKyAgICBbcmFkaW9DZWxsIGRyYXdXaXRoRnJh
bWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwogICAgIFtyYWRp
b0NlbGwgc2V0Q29udHJvbFZpZXc6bmlsXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
CiAKQEAgLTM4NSwzNSArNDA5LDIyIEBAIHN0YXRpYyB2b2lkIHBhaW50QnV0dG9uKENvbnRyb2xQ
YXJ0IHBhcnQKICAgICAgICAgfQogICAgIH0gCiAKLSAgICBOU1ZpZXcgKnZpZXcgPSBzY3JvbGxW
aWV3LT5kb2N1bWVudFZpZXcoKTsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW3ZpZXcgd2luZG93
XTsKLSAgICBOU0J1dHRvbkNlbGwgKnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgPSBbd2luZG93
IGRlZmF1bHRCdXR0b25DZWxsXTsKLQotICAgIGlmICgoc3RhdGVzICYgRGVmYXVsdFN0YXRlKSAm
JiBbd2luZG93IGlzS2V5V2luZG93XSkgewotICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0
b25DZWxsOmJ1dHRvbkNlbGxdOwotICAgICAgICB3a0FkdmFuY2VEZWZhdWx0QnV0dG9uUHVsc2VB
bmltYXRpb24oYnV0dG9uQ2VsbCk7Ci0gICAgfSBlbHNlIGlmIChbcHJldmlvdXNEZWZhdWx0QnV0
dG9uQ2VsbCBpc0VxdWFsOmJ1dHRvbkNlbGxdKQotICAgICAgICBbd2luZG93IHNldERlZmF1bHRC
dXR0b25DZWxsOm5pbF07Ci0KLSAgICBbYnV0dG9uQ2VsbCBkcmF3V2l0aEZyYW1lOk5TUmVjdChp
bmZsYXRlZFJlY3QpIGluVmlldzp2aWV3XTsKKyAgICBbYnV0dG9uQ2VsbCBkcmF3V2l0aEZyYW1l
Ok5TUmVjdChpbmZsYXRlZFJlY3QpIGluVmlldzpGbGlwcGVkVmlldygpXTsKICAgICBbYnV0dG9u
Q2VsbCBzZXRDb250cm9sVmlldzpuaWxdOwogCi0gICAgaWYgKCFbcHJldmlvdXNEZWZhdWx0QnV0
dG9uQ2VsbCBpc0VxdWFsOmJ1dHRvbkNlbGxdKQotICAgICAgICBbd2luZG93IHNldERlZmF1bHRC
dXR0b25DZWxsOnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGxdOwotCiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogfQogCiAvLyBUaGVtZSBvdmVycmlkZXMKIAotaW50IFRoZW1lTWFjOjpi
YXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChDb250cm9sUGFydCBwYXJ0KSBjb25zdAoraW50IFRo
ZW1lQ2hyb21pdW1NYWM6OmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50KENvbnRyb2xQYXJ0IHBh
cnQpIGNvbnN0CiB7CiAgICAgaWYgKHBhcnQgPT0gQ2hlY2tib3hQYXJ0IHx8IHBhcnQgPT0gUmFk
aW9QYXJ0KQogICAgICAgICByZXR1cm4gLTI7CiAgICAgcmV0dXJuIFRoZW1lOjpiYXNlbGluZVBv
c2l0aW9uQWRqdXN0bWVudChwYXJ0KTsKIH0KIAotRm9udERlc2NyaXB0aW9uIFRoZW1lTWFjOjpj
b250cm9sRm9udChDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBmbG9hdCB6b29t
RmFjdG9yKSBjb25zdAorRm9udERlc2NyaXB0aW9uIFRoZW1lQ2hyb21pdW1NYWM6OmNvbnRyb2xG
b250KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3Ip
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6IHsKQEAgLTQzMiw3ICs0NDMsNyBAQCBGb250RGVzY3JpcHRpb24gVGhlbWVNYWM6OmNvbnRy
b2xGb250KENvCiAgICAgfQogfQogCi1MZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShD
b250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29t
ZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZUNocm9taXVt
TWFjOjpjb250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25z
dCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAg
IHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKQEAgLTQ0Nyw3ICs0
NTgsNyBAQCBMZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShDb250cm9sCiAgICAgfQog
fQogCi1MZW5ndGhTaXplIFRoZW1lTWFjOjptaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQg
cGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xlbmd0aFNp
emUgVGhlbWVDaHJvbWl1bU1hYzo6bWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQs
IGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChwYXJ0KSB7CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKQEAgLTQ1OSw3ICs0NzAs
NyBAQCBMZW5ndGhTaXplIFRoZW1lTWFjOjptaW5pbXVtQ29udHJvbFNpemUoCiAgICAgfQogfQog
Ci1MZW5ndGhCb3ggVGhlbWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFydCwgY29u
c3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0
b3IpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWVDaHJvbWl1bU1hYzo6Y29udHJvbEJvcmRlcihDb250
cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJv
eCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAg
ICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgpAQCAtNDcxLDcgKzQ4Miw3IEBAIExlbmd0aEJveCBU
aGVtZU1hYzo6Y29udHJvbEJvcmRlcihDb250cm8KICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVt
ZU1hYzo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5n
dGhCb3ggVGhlbWVDaHJvbWl1bU1hYzo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1
dHRvblBhcnQ6IHsKQEAgLTQ4OCw3ICs0OTksNyBAQCBMZW5ndGhCb3ggVGhlbWVNYWM6OmNvbnRy
b2xQYWRkaW5nKENvbnRyCiAgICAgfQogfQogCi12b2lkIFRoZW1lTWFjOjppbmZsYXRlQ29udHJv
bFBhaW50UmVjdChDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzIHN0YXRlcywgSW50UmVj
dCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK3ZvaWQgVGhlbWVDaHJvbWl1
bU1hYzo6aW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0
YXRlcyBzdGF0ZXMsIEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgc3dpdGNoIChwYXJ0KSB7
CkBAIC01MzUsNyArNTQ2LDcgQEAgdm9pZCBUaGVtZU1hYzo6aW5mbGF0ZUNvbnRyb2xQYWludFJl
Y3QoQwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBUaGVtZU1hYzo6
cGFpbnQoQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rv
ciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykgY29uc3QKK3ZvaWQgVGhlbWVDaHJvbWl1bU1hYzo6
cGFpbnQoQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rv
ciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsK
ICAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaAkocmV2aXNpb24gNDgzOTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogdHlwZWRl
ZiBzdHJ1Y3QgQ0dQb2ludCBDR1BvaW50OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisj
aWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIFBMQVRGT1JNKERBUldJ
TikpCiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5
cGVkZWYgc3RydWN0IENHUG9pbnQgTlNQb2ludDsKICNlbHNlCkBAIC04NCw3ICs4NCw4IEBAIHB1
YmxpYzoKICAgICBvcGVyYXRvciBDR1BvaW50KCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllf
VFlQRVMpCisjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19T
QU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCisgICAgICB8fCAoUExBVEZPUk0oQ0hST01JVU0p
ICYmIFBMQVRGT1JNKERBUldJTikpCiAgICAgRmxvYXRQb2ludChjb25zdCBOU1BvaW50Jik7CiAg
ICAgb3BlcmF0b3IgTlNQb2ludCgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRSZWN0LmgJKHJldmlzaW9uIDQ4MzkyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAog
dHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IENHUmVjdDsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFD
KQorI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBQTEFURk9STShE
QVJXSU4pKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVT
CiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgTlNSZWN0OwogI2Vsc2UKQEAgLTEyNyw3ICsxMjcsOCBA
QCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgQ0dSZWN0KCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBM
QVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVU
UllfVFlQRVMpCisjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBF
U19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCisgICAgICB8fCAoUExBVEZPUk0oQ0hST01J
VU0pICYmIFBMQVRGT1JNKERBUldJTikpCiAgICAgRmxvYXRSZWN0KGNvbnN0IE5TUmVjdCYpOwog
ICAgIG9wZXJhdG9yIE5TUmVjdCgpIGNvbnN0OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDQ4MzkyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAog
dHlwZWRlZiBzdHJ1Y3QgQ0dTaXplIENHU2l6ZTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oTUFD
KQorI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBQTEFURk9STShE
QVJXSU4pKQogI2lmZGVmIE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVT
CiB0eXBlZGVmIHN0cnVjdCBDR1NpemUgTlNTaXplOwogI2Vsc2UKQEAgLTc5LDcgKzc5LDggQEAg
cHVibGljOgogICAgIG9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0OwogI2VuZGlmCiAKLSNpZiBQTEFU
Rk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZ
X1RZUEVTKQorI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNf
U0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgfHwgKFBMQVRGT1JNKENIUk9NSVVN
KSAmJiBQTEFURk9STShEQVJXSU4pKQogICAgIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25zdCBOU1Np
emUgJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5CiAgICAg
b3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oCShyZXZpc2lvbiA0ODM5MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiB0eXBlZGVmIHN0
cnVjdCBDR1JlY3QgQ0dSZWN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisjaWYgUExB
VEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIFBMQVRGT1JNKERBUldJTikpCiAj
aWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5cGVkZWYg
c3RydWN0IENHUmVjdCBOU1JlY3Q7CiAjZWxzZQpAQCAtMTYxLDcgKzE2MSw4IEBAIHB1YmxpYzoK
ICAgICBvcGVyYXRvciBTa0lSZWN0KCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKE1B
QykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMp
CisjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FT
X0NHR0VPTUVUUllfVFlQRVMpKSBcCisgICAgICB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIFBM
QVRGT1JNKERBUldJTikpCiAgICAgb3BlcmF0b3IgTlNSZWN0KCkgY29uc3Q7CiAjZW5kaWYKIApA
QCAtMTk4LDcgKzE5OSw4IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSW50UmVjdCYg
YSwKIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChjb25zdCBDR1JlY3QmKTsKICNlbmRpZgogCi0j
aWYgUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dH
RU9NRVRSWV9UWVBFUykKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZ
X1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpIFwKKyAgICAgIHx8IChQTEFURk9STShD
SFJPTUlVTSkgJiYgUExBVEZPUk0oREFSV0lOKSkKIEludFJlY3QgZW5jbG9zaW5nSW50UmVjdChj
b25zdCBOU1JlY3QmKTsKICNlbmRpZgogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYy5oCShyZXZpc2lvbiA0ODM5MikJKGZyb20gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVNYWMuaDo0ODM5MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1NYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlvbiBmb3IgZm9ybSBj
b250cm9scyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21w
dXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBSZW5kZXJUaGVtZU1hY19oCisjZGVmaW5lIFJlbmRlclRo
ZW1lTWFjX2gKKworI2ltcG9ydCAiUmVuZGVyVGhlbWUuaCIKKyNpbXBvcnQgPHd0Zi9IYXNoTWFw
Lmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisKKyNpZmRlZiBfX09CSkNfXworQGNsYXNz
IFdlYkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlvbk9ic2VydmVyOworI2Vsc2UKK2NsYXNzIFdl
YkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlvbk9ic2VydmVyOworI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyU3R5bGU7CisKK2NsYXNzIFJlbmRlclRoZW1lTWFj
IDogcHVibGljIFJlbmRlclRoZW1lIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxS
ZW5kZXJUaGVtZT4gY3JlYXRlKCk7CisKKyAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNv
bnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4K
KyAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0
KikgY29uc3Q7CisKKyAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJv
bCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
Q29udHJvbFRpbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lk
IGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKTsKKworICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBC
b3JkZXJEYXRhJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGxM
YXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OworCisgICAgdmlydHVh
bCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Owor
ICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1Gb2N1
c1JpbmdDb2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCBTY3JvbGxiYXJDb250cm9sU2l6ZSBz
Y3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQoQ29udHJvbFBhcnQpIHsgcmV0dXJuIFNtYWxsU2Ny
b2xsYmFyOyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdl
KCk7CisKKyAgICAvLyBTeXN0ZW0gZm9udHMuCisgICAgdmlydHVhbCB2b2lkIHN5c3RlbUZvbnQo
aW50IGNzc1ZhbHVlSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworCisgICAgdmlydHVhbCBp
bnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqKSBjb25zdDsKKyAgICAK
KyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0
eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0Jv
dHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgYm9vbCBwYWludENh
cHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihp
bnQgY3NzVmFsdWVJZCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3JzKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmly
dHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29s
IHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRo
dW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworCisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZp
ZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNl
ZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVy
VHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVJld2luZEJ1dHRvbihSZW5kZXJPYmplY3Qq
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVRpbWVSZW1haW5pbmcoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICAvLyBNZWRpYSBjb250cm9scwor
ICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIFJlbmRlclRoZW1lTWFjKCk7CisgICAgdmlydHVhbCB+UmVuZGVy
VGhlbWVNYWMoKTsKKworICAgIEludFJlY3QgaW5mbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFNpemUmLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZsb2F0IHpvb21MZXZlbCA9IDEuMGYp
IGNvbnN0OworCisgICAgRmxvYXRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5k
ZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVy
LCBjb25zdCBGbG9hdFJlY3QmIGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3Q7Cisg
ICAgCisgICAgLy8gR2V0IHRoZSBjb250cm9sIHNpemUgYmFzZWQgb2ZmIHRoZSBmb250LiAgVXNl
ZCBieSBzb21lIG9mIHRoZSBjb250cm9scyAobGlrZSBidXR0b25zKS4KKyAgICBOU0NvbnRyb2xT
aXplIGNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIE5TQ29udHJv
bFNpemUgY29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAg
dm9pZCBzZXRDb250cm9sU2l6ZShOU0NlbGwqLCBjb25zdCBJbnRTaXplKiBzaXplcywgY29uc3Qg
SW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsID0gMS4wZik7CisgICAgdm9pZCBzZXRT
aXplRnJvbUZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7Cisg
ICAgSW50U2l6ZSBzaXplRm9yRm9udChSZW5kZXJTdHlsZSosIGNvbnN0IEludFNpemUqIHNpemVz
KSBjb25zdDsKKyAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiwgY29u
c3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OworICAgIHZvaWQgc2V0Rm9udEZyb21Db250cm9sU2l6
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBOU0NvbnRyb2xTaXplKSBjb25zdDsK
KworICAgIHZvaWQgdXBkYXRlQ2hlY2tlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9iamVj
dCopOworICAgIHZvaWQgdXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRlck9i
amVjdCopOworICAgIHZvaWQgdXBkYXRlRm9jdXNlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJlbmRl
ck9iamVjdCopOworICAgIHZvaWQgdXBkYXRlUHJlc3NlZFN0YXRlKE5TQ2VsbCosIGNvbnN0IFJl
bmRlck9iamVjdCopOworCisgICAgLy8gSGVscGVycyBmb3IgYWRqdXN0aW5nIGFwcGVhcmFuY2Ug
YW5kIGZvciBwYWludGluZworCisgICAgdm9pZCBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25z
dCBSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgY29uc3QgSW50U2l6ZSogcG9w
dXBCdXR0b25TaXplcygpIGNvbnN0OworICAgIGNvbnN0IGludCogcG9wdXBCdXR0b25NYXJnaW5z
KCkgY29uc3Q7CisgICAgY29uc3QgaW50KiBwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6
ZSkgY29uc3Q7CisgICAgdm9pZCBwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIGNvbnN0IEludFNpemUqIG1lbnVMaXN0U2l6ZXMoKSBjb25zdDsKKworICAgIGNvbnN0IElu
dFNpemUqIHNlYXJjaEZpZWxkU2l6ZXMoKSBjb25zdDsKKyAgICBjb25zdCBJbnRTaXplKiBjYW5j
ZWxCdXR0b25TaXplcygpIGNvbnN0OworICAgIGNvbnN0IEludFNpemUqIHJlc3VsdHNCdXR0b25T
aXplcygpIGNvbnN0OworICAgIHZvaWQgc2V0U2VhcmNoQ2VsbFN0YXRlKFJlbmRlck9iamVjdCos
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0OworICAgIAorICAgIE5TUG9wVXBCdXR0b25DZWxsKiBwb3B1cEJ1dHRvbigpIGNv
bnN0OworICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2goKSBjb25zdDsKKyAgICBOU01lbnUq
IHNlYXJjaE1lbnVUZW1wbGF0ZSgpIGNvbnN0OworICAgIE5TU2xpZGVyQ2VsbCogc2xpZGVyVGh1
bWJIb3Jpem9udGFsKCkgY29uc3Q7CisgICAgTlNTbGlkZXJDZWxsKiBzbGlkZXJUaHVtYlZlcnRp
Y2FsKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNQb3BVcEJ1
dHRvbkNlbGw+IG1fcG9wdXBCdXR0b247CisgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNTZWFyY2hG
aWVsZENlbGw+IG1fc2VhcmNoOworICAgIG11dGFibGUgUmV0YWluUHRyPE5TTWVudT4gbV9zZWFy
Y2hNZW51VGVtcGxhdGU7CisgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNTbGlkZXJDZWxsPiBtX3Ns
aWRlclRodW1iSG9yaXpvbnRhbDsKKyAgICBtdXRhYmxlIFJldGFpblB0cjxOU1NsaWRlckNlbGw+
IG1fc2xpZGVyVGh1bWJWZXJ0aWNhbDsKKworICAgIGJvb2wgbV9pc1NsaWRlclRodW1iSG9yaXpv
bnRhbFByZXNzZWQ7CisgICAgYm9vbCBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNhbFByZXNzZWQ7CisK
KyAgICBtdXRhYmxlIEhhc2hNYXA8aW50LCBSR0JBMzI+IG1fc3lzdGVtQ29sb3JDYWNoZTsKKwor
ICAgIFJldGFpblB0cjxXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcj4gbV9u
b3RpZmljYXRpb25PYnNlcnZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFJlbmRlclRoZW1lTWFjX2gKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1NYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtTWFjLmgJKHJldmlzaW9uIDQ4MzkyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAog
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3Jt
IGNvbnRyb2xzIGluIFdlYkNvcmUuCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlLCBJbmMuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDggKzIxLDggQEAKICAqCiAgKi8KIAotI2lmbmRlZiBS
ZW5kZXJUaGVtZU1hY19oCi0jZGVmaW5lIFJlbmRlclRoZW1lTWFjX2gKKyNpZm5kZWYgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hY19oCisjZGVmaW5lIFJlbmRlclRoZW1lQ2hyb21pdW1NYWNfaAogCiAj
aW1wb3J0ICJSZW5kZXJUaGVtZS5oIgogI2ltcG9ydCA8d3RmL0hhc2hNYXAuaD4KQEAgLTMzLDEx
ICszNCwxNCBAQAogY2xhc3MgV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXI7
CiAjZW5kaWYKIAorLy8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLm1tIGZpbGUpIGlz
IGEgY2xvbmUgb2YgUmVuZGVyVGhlbWVNYWMuaC4gU2VlCisvLyB0aGUgLm1tIGZpbGUgZm9yIGRl
dGFpbHMuCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyU3R5bGU7CiAKLWNs
YXNzIFJlbmRlclRoZW1lTWFjIDogcHVibGljIFJlbmRlclRoZW1lIHsKK2NsYXNzIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWMgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoKTsKIApAQCAtMTM1LDggKzEzOSw4IEBA
IHByb3RlY3RlZDoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIFJlbmRlclRoZW1lTWFjKCk7Ci0g
ICAgdmlydHVhbCB+UmVuZGVyVGhlbWVNYWMoKTsKKyAgICBSZW5kZXJUaGVtZUNocm9taXVtTWFj
KCk7CisgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVDaHJvbWl1bU1hYygpOwogCiAgICAgSW50UmVj
dCBpbmZsYXRlUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IGludCog
bWFyZ2lucywgZmxvYXQgem9vbUxldmVsID0gMS4wZikgY29uc3Q7CiAKQEAgLTE1MSw2ICsxNTUs
NyBAQCBwcml2YXRlOgogICAgIEludFNpemUgc2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUq
LCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3Q7CiAgICAgdm9pZCBzZXRGb250RnJvbUNvbnRy
b2xTaXplKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIE5TQ29udHJvbFNpemUpIGNv
bnN0OwogCisgICAgdm9pZCB1cGRhdGVBY3RpdmVTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5kZXJP
YmplY3QqKTsKICAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBSZW5k
ZXJPYmplY3QqKTsKICAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBS
ZW5kZXJPYmplY3QqKTsKICAgICB2b2lkIHVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqLCBjb25z
dCBSZW5kZXJPYmplY3QqKTsKQEAgLTE5NCw0ICsxOTksNCBAQCBwcml2YXRlOgogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBSZW5kZXJUaGVtZU1hY19oCisjZW5kaWYgLy8g
UmVuZGVyVGhlbWVDaHJvbWl1bU1hY19oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDQ4MzkyKQkoZnJvbSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbTo0ODM5MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lQ2hyb21pdW1NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzU5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2ltcG9ydCAiY29uZmlnLmgiCisjaW1wb3J0ICJSZW5k
ZXJUaGVtZU1hYy5oIgorCisjaW1wb3J0ICJCaXRtYXBJbWFnZS5oIgorI2ltcG9ydCAiQ29sb3JN
YWMuaCIKKyNpbXBvcnQgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbXBvcnQgIkNTU1ZhbHVlS2V5
d29yZHMuaCIKKyNpbXBvcnQgIkRvY3VtZW50LmgiCisjaW1wb3J0ICJFbGVtZW50LmgiCisjaW1w
b3J0ICJGcmFtZVZpZXcuaCIKKyNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAi
SFRNTElucHV0RWxlbWVudC5oIgorI2ltcG9ydCAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2ltcG9y
dCAiSFRNTE5hbWVzLmgiCisjaW1wb3J0ICJJbWFnZS5oIgorI2ltcG9ydCAiTG9jYWxDdXJyZW50
R3JhcGhpY3NDb250ZXh0LmgiCisjaW1wb3J0ICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2lt
cG9ydCAiUmVuZGVyTWVkaWEuaCIKKyNpbXBvcnQgIlJlbmRlclNsaWRlci5oIgorI2ltcG9ydCAi
UmVuZGVyVmlldy5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCisjaW1wb3J0ICJUaW1lUmFu
Z2VzLmgiCisjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCisjaW1wb3J0ICJVc2Vy
QWdlbnRTdHlsZVNoZWV0cy5oIgorI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5oPgorI2ltcG9ydCA8
Q29jb2EvQ29jb2EuaD4KKyNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKyNpbXBvcnQgPG1hdGguaD4KKworI2lmZGVmIEJVSUxESU5HX09OX1RJ
R0VSCit0eXBlZGVmIGludCBOU0ludGVnZXI7Cit0eXBlZGVmIHVuc2lnbmVkIE5TVUludGVnZXI7
CisjZW5kaWYKKwordXNpbmcgc3RkOjptaW47CisKKy8vIFRoZSBtZXRob2RzIGluIHRoaXMgZmls
ZSBhcmUgc3BlY2lmaWMgdG8gdGhlIE1hYyBPUyBYIHBsYXRmb3JtLgorCisvLyBGSVhNRTogVGhl
IHBsYXRmb3JtLWluZGVwZW5kZW50IGNvZGUgaW4gdGhpcyBjbGFzcyBzaG91bGQgYmUgZmFjdG9y
ZWQgb3V0IGFuZCBtZXJnZWQgd2l0aCBSZW5kZXJUaGVtZVNhZmFyaS4gCisKK0BpbnRlcmZhY2Ug
V2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXIgOiBOU09iamVjdAoreworICAg
IFdlYkNvcmU6OlJlbmRlclRoZW1lICpfdGhlbWU7Cit9CisKKy0gKGlkKWluaXRXaXRoVGhlbWU6
KFdlYkNvcmU6OlJlbmRlclRoZW1lICopdGhlbWU7CistICh2b2lkKXN5c3RlbUNvbG9yc0RpZENo
YW5nZTooTlNOb3RpZmljYXRpb24gKilub3RpZmljYXRpb247CisKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFdlYkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlvbk9ic2VydmVyCisKKy0gKGlkKWlu
aXRXaXRoVGhlbWU6KFdlYkNvcmU6OlJlbmRlclRoZW1lICopdGhlbWUKK3sKKyAgICBbc3VwZXIg
aW5pdF07CisgICAgX3RoZW1lID0gdGhlbWU7CisgICAgCisgICAgcmV0dXJuIHNlbGY7Cit9CisK
Ky0gKHZvaWQpc3lzdGVtQ29sb3JzRGlkQ2hhbmdlOihOU05vdGlmaWNhdGlvbiAqKXVudXNlZE5v
dGlmaWNhdGlvbgoreworICAgIEFTU0VSVF9VTlVTRUQodW51c2VkTm90aWZpY2F0aW9uLCBbW3Vu
dXNlZE5vdGlmaWNhdGlvbiBuYW1lXSBpc0VxdWFsVG9TdHJpbmc6TlNTeXN0ZW1Db2xvcnNEaWRD
aGFuZ2VOb3RpZmljYXRpb25dKTsKKyAgICBfdGhlbWUtPnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdl
KCk7Cit9CisKK0BlbmQKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOworCitlbnVtIHsKKyAgICB0b3BNYXJnaW4sCisgICAgcmlnaHRNYXJnaW4sCisg
ICAgYm90dG9tTWFyZ2luLAorICAgIGxlZnRNYXJnaW4KK307CisKK2VudW0geworICAgIHRvcFBh
ZGRpbmcsCisgICAgcmlnaHRQYWRkaW5nLAorICAgIGJvdHRvbVBhZGRpbmcsCisgICAgbGVmdFBh
ZGRpbmcKK307CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lOjp0aGVtZUZv
clBhZ2UoUGFnZSopCit7CisgICAgc3RhdGljIFJlbmRlclRoZW1lKiBydCA9IFJlbmRlclRoZW1l
TWFjOjpjcmVhdGUoKS5yZWxlYXNlUmVmKCk7CisgICAgcmV0dXJuIHJ0OworfQorCitQYXNzUmVm
UHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFJlbmRlclRoZW1lTWFjKTsKK30KKworUmVuZGVyVGhlbWVNYWM6OlJlbmRl
clRoZW1lTWFjKCkKKyAgICA6IG1faXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkKGZhbHNl
KQorICAgICwgbV9pc1NsaWRlclRodW1iVmVydGljYWxQcmVzc2VkKGZhbHNlKQorICAgICwgbV9u
b3RpZmljYXRpb25PYnNlcnZlcihBZG9wdE5TLCBbW1dlYkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNh
dGlvbk9ic2VydmVyIGFsbG9jXSBpbml0V2l0aFRoZW1lOnRoaXNdKQoreworICAgIFtbTlNOb3Rp
ZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9ub3RpZmljYXRpb25P
YnNlcnZlci5nZXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxlY3RvcjpAc2VsZWN0b3Ioc3lzdGVtQ29sb3JzRGlkQ2hhbmdlOikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5hbWU6TlNTeXN0ZW1Db2xvcnNEaWRDaGFuZ2VOb3RpZmljYXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6bmls
XTsKK30KKworUmVuZGVyVGhlbWVNYWM6On5SZW5kZXJUaGVtZU1hYygpCit7CisgICAgW1tOU05v
dGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX25vdGlmaWNh
dGlvbk9ic2VydmVyLmdldCgpXTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBOU0NvbG9yKiBj
b2xvciA9IFtbTlNDb2xvciBzZWxlY3RlZFRleHRCYWNrZ3JvdW5kQ29sb3JdIGNvbG9yVXNpbmdD
b2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOworICAgIHJldHVybiBDb2xvcihz
dGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIHJlZENvbXBvbmVudF0pLCBzdGF0aWNfY2Fz
dDxpbnQ+KDI1NS4wICogW2NvbG9yIGdyZWVuQ29tcG9uZW50XSksIHN0YXRpY19jYXN0PGludD4o
MjU1LjAgKiBbY29sb3IgYmx1ZUNvbXBvbmVudF0pKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVN
YWM6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIE5TQ29sb3IqIGNvbG9yID0gW1tOU0NvbG9yIHNlY29uZGFyeVNlbGVjdGVkQ29udHJvbENv
bG9yXSBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKKyAg
ICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciByZWRDb21wb25l
bnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciBncmVlbkNvbXBvbmVudF0pLCBz
dGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIGJsdWVDb21wb25lbnRdKSk7Cit9CisKK0Nv
bG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdAoreworICAgIE5TQ29sb3IqIGNvbG9yID0gW1tOU0NvbG9yIGFsdGVy
bmF0ZVNlbGVjdGVkQ29udHJvbENvbG9yXSBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZp
Y2VSR0JDb2xvclNwYWNlXTsKKyAgICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PigyNTUu
MCAqIFtjb2xvciByZWRDb21wb25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xv
ciBncmVlbkNvbXBvbmVudF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIGJsdWVD
b21wb25lbnRdKSk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBDb2xv
cjo6d2hpdGU7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUluYWN0aXZlTGlz
dEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9y
OjpibGFjazsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtRm9jdXNSaW5nQ29s
b3IoKSBjb25zdAoreworICAgIGlmICh1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigpKQorICAg
ICAgICByZXR1cm4gb2xkQXF1YUZvY3VzUmluZ0NvbG9yKCk7CisKKyAgICByZXR1cm4gc3lzdGVt
Q29sb3IoQ1NTVmFsdWVXZWJraXRGb2N1c1JpbmdDb2xvcik7Cit9CisKK0NvbG9yIFJlbmRlclRo
ZW1lTWFjOjpwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKTsKK30KKworc3RhdGljIEZvbnRXZWlnaHQgdG9Gb250V2VpZ2h0KE5TSW50ZWdlciBh
cHBLaXRGb250V2VpZ2h0KQoreworICAgIEFTU0VSVChhcHBLaXRGb250V2VpZ2h0ID4gMCAmJiBh
cHBLaXRGb250V2VpZ2h0IDwgMTUpOworICAgIGlmIChhcHBLaXRGb250V2VpZ2h0ID4gMTQpCisg
ICAgICAgIGFwcEtpdEZvbnRXZWlnaHQgPSAxNDsKKyAgICBlbHNlIGlmIChhcHBLaXRGb250V2Vp
Z2h0IDwgMSkKKyAgICAgICAgYXBwS2l0Rm9udFdlaWdodCA9IDE7CisKKyAgICBzdGF0aWMgRm9u
dFdlaWdodCBmb250V2VpZ2h0c1tdID0geworICAgICAgICBGb250V2VpZ2h0MTAwLAorICAgICAg
ICBGb250V2VpZ2h0MTAwLAorICAgICAgICBGb250V2VpZ2h0MjAwLAorICAgICAgICBGb250V2Vp
Z2h0MzAwLAorICAgICAgICBGb250V2VpZ2h0NDAwLAorICAgICAgICBGb250V2VpZ2h0NTAwLAor
ICAgICAgICBGb250V2VpZ2h0NjAwLAorICAgICAgICBGb250V2VpZ2h0NjAwLAorICAgICAgICBG
b250V2VpZ2h0NzAwLAorICAgICAgICBGb250V2VpZ2h0ODAwLAorICAgICAgICBGb250V2VpZ2h0
ODAwLAorICAgICAgICBGb250V2VpZ2h0OTAwLAorICAgICAgICBGb250V2VpZ2h0OTAwLAorICAg
ICAgICBGb250V2VpZ2h0OTAwCisgICAgfTsKKyAgICByZXR1cm4gZm9udFdlaWdodHNbYXBwS2l0
Rm9udFdlaWdodCAtIDFdOworfQorCit2b2lkIFJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Gb250KGlu
dCBjc3NWYWx1ZUlkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgc3lzdGVtRm9udCwgKCkp
OworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9uLCBzbWFsbFN5c3RlbUZv
bnQsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgbWVudUZv
bnQsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgbGFiZWxG
b250LCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRpb24sIG1pbmlD
b250cm9sRm9udCwgKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9u
LCBzbWFsbENvbnRyb2xGb250LCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVz
Y3JpcHRpb24sIGNvbnRyb2xGb250LCAoKSk7CisKKyAgICBGb250RGVzY3JpcHRpb24qIGNhY2hl
ZERlc2M7CisgICAgTlNGb250KiBmb250ID0gbmlsOworICAgIHN3aXRjaCAoY3NzVmFsdWVJZCkg
eworICAgICAgICBjYXNlIENTU1ZhbHVlU21hbGxDYXB0aW9uOgorICAgICAgICAgICAgY2FjaGVk
RGVzYyA9ICZzbWFsbFN5c3RlbUZvbnQ7CisgICAgICAgICAgICBpZiAoIXNtYWxsU3lzdGVtRm9u
dC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgICAgIGZvbnQgPSBbTlNGb250IHN5c3Rl
bUZvbnRPZlNpemU6W05TRm9udCBzbWFsbFN5c3RlbUZvbnRTaXplXV07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU1lbnU6CisgICAgICAgICAgICBjYWNoZWREZXNj
ID0gJm1lbnVGb250OworICAgICAgICAgICAgaWYgKCFtZW51Rm9udC5pc0Fic29sdXRlU2l6ZSgp
KQorICAgICAgICAgICAgICAgIGZvbnQgPSBbTlNGb250IG1lbnVGb250T2ZTaXplOltOU0ZvbnQg
c3lzdGVtRm9udFNpemVdXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Zh
bHVlU3RhdHVzQmFyOgorICAgICAgICAgICAgY2FjaGVkRGVzYyA9ICZsYWJlbEZvbnQ7CisgICAg
ICAgICAgICBpZiAoIWxhYmVsRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgICAg
IGZvbnQgPSBbTlNGb250IGxhYmVsRm9udE9mU2l6ZTpbTlNGb250IGxhYmVsRm9udFNpemVdXTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0TWluaUNvbnRy
b2w6CisgICAgICAgICAgICBjYWNoZWREZXNjID0gJm1pbmlDb250cm9sRm9udDsKKyAgICAgICAg
ICAgIGlmICghbWluaUNvbnRyb2xGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICAg
ICAgZm9udCA9IFtOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXpl
Rm9yQ29udHJvbFNpemU6TlNNaW5pQ29udHJvbFNpemVdXTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0U21hbGxDb250cm9sOgorICAgICAgICAgICAgY2Fj
aGVkRGVzYyA9ICZzbWFsbENvbnRyb2xGb250OworICAgICAgICAgICAgaWYgKCFzbWFsbENvbnRy
b2xGb250LmlzQWJzb2x1dGVTaXplKCkpCisgICAgICAgICAgICAgICAgZm9udCA9IFtOU0ZvbnQg
c3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6TlNT
bWFsbENvbnRyb2xTaXplXV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NW
YWx1ZVdlYmtpdENvbnRyb2w6CisgICAgICAgICAgICBjYWNoZWREZXNjID0gJmNvbnRyb2xGb250
OworICAgICAgICAgICAgaWYgKCFjb250cm9sRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAg
ICAgICAgICAgIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1G
b250U2l6ZUZvckNvbnRyb2xTaXplOk5TUmVndWxhckNvbnRyb2xTaXplXV07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNhY2hlZERlc2MgPSAmc3lz
dGVtRm9udDsKKyAgICAgICAgICAgIGlmICghc3lzdGVtRm9udC5pc0Fic29sdXRlU2l6ZSgpKQor
ICAgICAgICAgICAgICAgIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBz
eXN0ZW1Gb250U2l6ZV1dOworICAgIH0KKworICAgIGlmIChmb250KSB7CisgICAgICAgIE5TRm9u
dE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
OworICAgICAgICBjYWNoZWREZXNjLT5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKKyAgICAgICAg
Y2FjaGVkRGVzYy0+c2V0R2VuZXJpY0ZhbWlseShGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5KTsK
KyAgICAgICAgY2FjaGVkRGVzYy0+Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoW2ZvbnQgZmFtaWx5
TmFtZV0pOworICAgICAgICBjYWNoZWREZXNjLT5zZXRTcGVjaWZpZWRTaXplKFtmb250IHBvaW50
U2l6ZV0pOworICAgICAgICBjYWNoZWREZXNjLT5zZXRXZWlnaHQodG9Gb250V2VpZ2h0KFtmb250
TWFuYWdlciB3ZWlnaHRPZkZvbnQ6Zm9udF0pKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXRh
bGljKFtmb250TWFuYWdlciB0cmFpdHNPZkZvbnQ6Zm9udF0gJiBOU0l0YWxpY0ZvbnRNYXNrKTsK
KyAgICB9CisgICAgZm9udERlc2NyaXB0aW9uID0gKmNhY2hlZERlc2M7Cit9CisKK3N0YXRpYyBS
R0JBMzIgY29udmVydE5TQ29sb3JUb0NvbG9yKE5TQ29sb3IgKmNvbG9yKQoreworICAgIE5TQ29s
b3IgKmNvbG9ySW5Db2xvclNwYWNlID0gW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpO
U0RldmljZVJHQkNvbG9yU3BhY2VdOworICAgIGlmIChjb2xvckluQ29sb3JTcGFjZSkgeworICAg
ICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyKDI1Ni4wLCAw
LjApOworICAgICAgICByZXR1cm4gbWFrZVJHQihzdGF0aWNfY2FzdDxpbnQ+KHNjYWxlRmFjdG9y
ICogW2NvbG9ySW5Db2xvclNwYWNlIHJlZENvbXBvbmVudF0pLAorICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihzY2FsZUZhY3RvciAqIFtjb2xvckluQ29sb3JTcGFjZSBncmVlbkNvbXBvbmVu
dF0pLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihzY2FsZUZhY3RvciAqIFtjb2xvcklu
Q29sb3JTcGFjZSBibHVlQ29tcG9uZW50XSkpOworICAgIH0KKworICAgIC8vIFRoaXMgY29udmVy
c2lvbiBhYm92ZSBjYW4gZmFpbCBpZiB0aGUgTlNDb2xvciBpbiBxdWVzdGlvbiBpcyBhbiBOU1Bh
dHRlcm5Db2xvciAKKyAgICAvLyAoYXMgbWFueSBzeXN0ZW0gY29sb3JzIGFyZSkuIFRoZXNlIGNv
bG9ycyBhcmUgYWN0dWFsbHkgYSByZXBlYXRpbmcgcGF0dGVybgorICAgIC8vIG5vdCBqdXN0IGEg
c29saWQgY29sb3IuIFRvIHdvcmsgYXJvdW5kIHRoaXMgd2Ugc2ltcGx5IGRyYXcgYSAxeDEgaW1h
Z2Ugb2YKKyAgICAvLyB0aGUgY29sb3IgYW5kIHVzZSB0aGF0IHBpeGVsJ3MgY29sb3IuIEl0IG1p
Z2h0IGJlIGJldHRlciB0byB1c2UgYW4gYXZlcmFnZSBvZgorICAgIC8vIHRoZSBjb2xvcnMgaW4g
dGhlIHBhdHRlcm4gaW5zdGVhZC4KKyAgICBOU0JpdG1hcEltYWdlUmVwICpvZmZzY3JlZW5SZXAg
PSBbW05TQml0bWFwSW1hZ2VSZXAgYWxsb2NdIGluaXRXaXRoQml0bWFwRGF0YVBsYW5lczpuaWwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzV2lkZToxCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBp
eGVsc0hpZ2g6MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzUGVyU2FtcGxlOjgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNhbXBsZXNQZXJQaXhlbDo0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQWxwaGE6WUVT
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXNQbGFuYXI6Tk8KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xv
clNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRl
c1BlclJvdzo0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzUGVyUGl4ZWw6MzJdOworCisgICAgW05T
R3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKKyAgICBbTlNHcmFwaGljc0NvbnRl
eHQgc2V0Q3VycmVudENvbnRleHQ6W05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdp
dGhCaXRtYXBJbWFnZVJlcDpvZmZzY3JlZW5SZXBdXTsKKyAgICBOU0VyYXNlUmVjdChOU01ha2VS
ZWN0KDAsIDAsIDEsIDEpKTsKKyAgICBbY29sb3IgZHJhd1N3YXRjaEluUmVjdDpOU01ha2VSZWN0
KDAsIDAsIDEsIDEpXTsKKyAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3Rh
dGVdOworCisgICAgTlNVSW50ZWdlciBwaXhlbFs0XTsKKyAgICBbb2Zmc2NyZWVuUmVwIGdldFBp
eGVsOnBpeGVsIGF0WDowIHk6MF07CisKKyAgICBbb2Zmc2NyZWVuUmVwIHJlbGVhc2VdOworCisg
ICAgcmV0dXJuIG1ha2VSR0IocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSk7Cit9CisKK3N0
YXRpYyBSR0JBMzIgbWVudUJhY2tncm91bmRDb2xvcigpCit7CisgICAgTlNCaXRtYXBJbWFnZVJl
cCAqb2Zmc2NyZWVuUmVwID0gW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aEJpdG1h
cERhdGFQbGFuZXM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1dpZGU6MQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwaXhlbHNIaWdoOjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c1BlclNhbXBs
ZTo4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzYW1wbGVzUGVyUGl4ZWw6NAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhhc0FscGhhOllFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGxhbmFyOk5PCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnl0ZXNQZXJSb3c6NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c1BlclBpeGVs
OjMyXTsKKworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q0dDb250ZXh0
UmVmPihbW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhCaXRtYXBJbWFnZVJl
cDpvZmZzY3JlZW5SZXBdIGdyYXBoaWNzUG9ydF0pOworICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0
TWFrZSgwLCAwLCAxLCAxKTsKKyAgICBISVRoZW1lTWVudURyYXdJbmZvIGRyYXdJbmZvOworICAg
IGRyYXdJbmZvLnZlcnNpb24gPSAgMDsKKyAgICBkcmF3SW5mby5tZW51VHlwZSA9IGtUaGVtZU1l
bnVUeXBlUG9wVXA7CisgICAgSElUaGVtZURyYXdNZW51QmFja2dyb3VuZCgmcmVjdCwgJmRyYXdJ
bmZvLCBjb250ZXh0LCBrSElUaGVtZU9yaWVudGF0aW9uSW52ZXJ0ZWQpOworCisgICAgTlNVSW50
ZWdlciBwaXhlbFs0XTsKKyAgICBbb2Zmc2NyZWVuUmVwIGdldFBpeGVsOnBpeGVsIGF0WDowIHk6
MF07CisKKyAgICBbb2Zmc2NyZWVuUmVwIHJlbGVhc2VdOworCisgICAgcmV0dXJuIG1ha2VSR0Io
cGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6
OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCkKK3sKKyAgICBtX3N5c3RlbUNvbG9yQ2FjaGUuY2xl
YXIoKTsKKyAgICBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKK30KKwor
Q29sb3IgUmVuZGVyVGhlbWVNYWM6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAor
eworICAgIGlmIChtX3N5c3RlbUNvbG9yQ2FjaGUuY29udGFpbnMoY3NzVmFsdWVJZCkpCisgICAg
ICAgIHJldHVybiBtX3N5c3RlbUNvbG9yQ2FjaGUuZ2V0KGNzc1ZhbHVlSWQpOworICAgIAorICAg
IENvbG9yIGNvbG9yOworICAgIHN3aXRjaCAoY3NzVmFsdWVJZCkgeworICAgICAgICBjYXNlIENT
U1ZhbHVlQWN0aXZlYm9yZGVyOgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRv
Q29sb3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUFjdGl2ZWNhcHRpb246CisgICAgICAgICAg
ICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB3aW5kb3dGcmFtZVRleHRD
b2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVBcHB3b3Jr
c3BhY2U6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xv
ciBoZWFkZXJDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFs
dWVCYWNrZ3JvdW5kOgorICAgICAgICAgICAgLy8gVXNlIHRoZW1lIGluZGVwZW5kZW50IGRlZmF1
bHQKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlQnV0dG9uZmFjZToK
KyAgICAgICAgICAgIC8vIFdlIHVzZSB0aGlzIHZhbHVlIGluc3RlYWQgb2YgTlNDb2xvcidzIGNv
bnRyb2xDb2xvciB0byBhdm9pZCB3ZWJzaXRlIGluY29tcGF0aWJpbGl0aWVzLgorICAgICAgICAg
ICAgLy8gV2UgbWF5IHdhbnQgdG8gY2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBOU0NvbG9yIGluIGZ1
dHVyZS4KKyAgICAgICAgICAgIGNvbG9yID0gMHhGRkMwQzBDMDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENTU1ZhbHVlQnV0dG9uaGlnaGxpZ2h0OgorICAgICAgICAgICAgY29s
b3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbEhpZ2hsaWdodENvbG9y
XSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnNoYWRv
dzoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGNv
bnRyb2xTaGFkb3dDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NT
VmFsdWVCdXR0b250ZXh0OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29s
b3IoW05TQ29sb3IgY29udHJvbFRleHRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ1NTVmFsdWVDYXB0aW9udGV4dDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVy
dE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHRleHRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTVmFsdWVHcmF5dGV4dDoKKyAgICAgICAgICAgIGNvbG9yID0gY29u
dmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGRpc2FibGVkQ29udHJvbFRleHRDb2xvcl0pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVIaWdobGlnaHQ6CisgICAg
ICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBzZWxlY3RlZFRl
eHRCYWNrZ3JvdW5kQ29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1ZhbHVlSGlnaGxpZ2h0dGV4dDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JU
b0NvbG9yKFtOU0NvbG9yIHNlbGVjdGVkVGV4dENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBDU1NWYWx1ZUluYWN0aXZlYm9yZGVyOgorICAgICAgICAgICAgY29sb3Ig
PSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29udHJvbEJhY2tncm91bmRDb2xvcl0p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWNhcHRp
b246CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBj
b250cm9sQmFja2dyb3VuZENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUluYWN0aXZlY2FwdGlvbnRleHQ6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZl
cnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB0ZXh0Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENTU1ZhbHVlSW5mb2JhY2tncm91bmQ6CisgICAgICAgICAgICAvLyBU
aGVyZSBpcyBubyBjb3JyZXNwb25kaW5nIE5TQ29sb3IgZm9yIHRoaXMgc28gd2UgdXNlIGEgaGFy
ZCBjb2RlZCB2YWx1ZS4KKyAgICAgICAgICAgIGNvbG9yID0gMHhGRkZCRkNDNTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlSW5mb3RleHQ6CisgICAgICAgICAgICBj
b2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB0ZXh0Q29sb3JdKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlTWVudToKKyAgICAgICAgICAgIGNv
bG9yID0gbWVudUJhY2tncm91bmRDb2xvcigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTVmFsdWVNZW51dGV4dDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29s
b3JUb0NvbG9yKFtOU0NvbG9yIHNlbGVjdGVkTWVudUl0ZW1UZXh0Q29sb3JdKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlU2Nyb2xsYmFyOgorICAgICAgICAgICAg
Y29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2Nyb2xsQmFyQ29sb3JdKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlVGV4dDoKKyAgICAgICAg
ICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHRleHRDb2xvcl0pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRkYXJrc2hhZG93
OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgY29u
dHJvbERhcmtTaGFkb3dDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Q1NTVmFsdWVUaHJlZWRzaGFkb3c6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9y
VG9Db2xvcihbTlNDb2xvciBzaGFkb3dDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ1NTVmFsdWVUaHJlZWRmYWNlOgorICAgICAgICAgICAgLy8gV2UgdXNlIHRoaXMg
dmFsdWUgaW5zdGVhZCBvZiBOU0NvbG9yJ3MgY29udHJvbENvbG9yIHRvIGF2b2lkIHdlYnNpdGUg
aW5jb21wYXRpYmlsaXRpZXMuCisgICAgICAgICAgICAvLyBXZSBtYXkgd2FudCB0byBjaGFuZ2Ug
dGhpcyB0byB1c2UgdGhlIE5TQ29sb3IgaW4gZnV0dXJlLgorICAgICAgICAgICAgY29sb3IgPSAw
eEZGQzBDMEMwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVUaHJl
ZWRoaWdobGlnaHQ6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihb
TlNDb2xvciBoaWdobGlnaHRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ1NTVmFsdWVUaHJlZWRsaWdodHNoYWRvdzoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVy
dE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xMaWdodEhpZ2hsaWdodENvbG9yXSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEZvY3VzUmluZ0Nv
bG9yOgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Ig
a2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NWYWx1ZVdpbmRvdzoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29s
b3JUb0NvbG9yKFtOU0NvbG9yIHdpbmRvd0JhY2tncm91bmRDb2xvcl0pOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVXaW5kb3dmcmFtZToKKyAgICAgICAgICAgIGNv
bG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHdpbmRvd0ZyYW1lQ29sb3JdKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlV2luZG93dGV4dDoKKyAg
ICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHdpbmRvd0Zy
YW1lVGV4dENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIWNv
bG9yLmlzVmFsaWQoKSkKKyAgICAgICAgY29sb3IgPSBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3Io
Y3NzVmFsdWVJZCk7CisKKyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKQorICAgICAgICBtX3N5c3Rl
bUNvbG9yQ2FjaGUuc2V0KGNzc1ZhbHVlSWQsIGNvbG9yLnJnYigpKTsKKworICAgIHJldHVybiBj
b2xvcjsKK30KKworYm9vbCBSZW5kZXJUaGVtZU1hYzo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciYgYmFja2dyb3VuZCwgY29u
c3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKK3sKKyAgICBpZiAoc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEFy
ZWFQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJl
dHVybiBzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyOworICAgICAgICAKKyAgICAvLyBGSVhNRTog
VGhpcyBpcyBob3JyaWJsZSwgYnV0IHRoZXJlIGlzIG5vdCBtdWNoIGVsc2UgdGhhdCBjYW4gYmUg
ZG9uZS4gIE1lbnUgbGlzdHMgY2Fubm90IGRyYXcgcHJvcGVybHkgd2hlbgorICAgIC8vIHNjYWxl
ZC4gIFRoZXkgY2FuJ3QgcmVhbGx5IGRyYXcgcHJvcGVybHkgd2hlbiB0cmFuc2Zvcm1lZCBlaXRo
ZXIuICBXZSBjYW4ndCBkZXRlY3QgdGhlIHRyYW5zZm9ybSBjYXNlIGF0IHN0eWxlCisgICAgLy8g
YWRqdXN0bWVudCB0aW1lIHNvIHRoYXQgd2lsbCBqdXN0IGhhdmUgdG8gc3RheSBicm9rZW4uICBX
ZSBjYW4gaG93ZXZlciBkZXRlY3QgdGhhdCB3ZSdyZSB6b29taW5nLiAgSWYgem9vbWluZworICAg
IC8vIGlzIGluIGVmZmVjdCB3ZSB0cmVhdCBpdCBsaWtlIHRoZSBjb250cm9sIGlzIHN0eWxlZC4K
KyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQgJiYgc3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKSAhPSAxLjBmKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVy
biBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGJhY2tncm91bmQs
IGJhY2tncm91bmRDb2xvcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFJlcGFp
bnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKK3sKKyAgICBDb250cm9s
UGFydCBwYXJ0ID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIAorI2lmIFVTRShORVdf
VEhFTUUpCisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0Ogor
ICAgICAgICBjYXNlIFJhZGlvUGFydDoKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAg
ICAgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgorICAgICAgICBjYXNlIERlZmF1bHRCdXR0b25Q
YXJ0OgorICAgICAgICBjYXNlIEJ1dHRvblBhcnQ6CisgICAgICAgICAgICByZXR1cm4gUmVuZGVy
VGhlbWU6OmFkanVzdFJlcGFpbnRSZWN0KG8sIHIpOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCisKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisKKyAgICBpZiAocGFydCA9PSBNZW51bGlzdFBhcnQp
IHsKKyAgICAgICAgc2V0UG9wdXBCdXR0b25DZWxsU3RhdGUobywgcik7CisgICAgICAgIEludFNp
emUgc2l6ZSA9IHBvcHVwQnV0dG9uU2l6ZXMoKVtbcG9wdXBCdXR0b24oKSBjb250cm9sU2l6ZV1d
OworICAgICAgICBzaXplLnNldEhlaWdodChzaXplLmhlaWdodCgpICogem9vbUxldmVsKTsKKyAg
ICAgICAgc2l6ZS5zZXRXaWR0aChyLndpZHRoKCkpOworICAgICAgICByID0gaW5mbGF0ZVJlY3Qo
ciwgc2l6ZSwgcG9wdXBCdXR0b25NYXJnaW5zKCksIHpvb21MZXZlbCk7CisgICAgfQorfQorCitJ
bnRSZWN0IFJlbmRlclRoZW1lTWFjOjppbmZsYXRlUmVjdChjb25zdCBJbnRSZWN0JiByLCBjb25z
dCBJbnRTaXplJiBzaXplLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZsb2F0IHpvb21MZXZlbCkgY29u
c3QKK3sKKyAgICAvLyBPbmx5IGRvIHRoZSBpbmZsYXRpb24gaWYgdGhlIGF2YWlsYWJsZSB3aWR0
aC9oZWlnaHQgYXJlIHRvbyBzbWFsbC4gIE90aGVyd2lzZSB0cnkgdG8KKyAgICAvLyBmaXQgdGhl
IGdsb3cvY2hlY2sgc3BhY2UgaW50byB0aGUgYXZhaWxhYmxlIGJveCdzIHdpZHRoL2hlaWdodC4K
KyAgICBpbnQgd2lkdGhEZWx0YSA9IHIud2lkdGgoKSAtIChzaXplLndpZHRoKCkgKyBtYXJnaW5z
W2xlZnRNYXJnaW5dICogem9vbUxldmVsICsgbWFyZ2luc1tyaWdodE1hcmdpbl0gKiB6b29tTGV2
ZWwpOworICAgIGludCBoZWlnaHREZWx0YSA9IHIuaGVpZ2h0KCkgLSAoc2l6ZS5oZWlnaHQoKSAr
IG1hcmdpbnNbdG9wTWFyZ2luXSAqIHpvb21MZXZlbCArIG1hcmdpbnNbYm90dG9tTWFyZ2luXSAq
IHpvb21MZXZlbCk7CisgICAgSW50UmVjdCByZXN1bHQocik7CisgICAgaWYgKHdpZHRoRGVsdGEg
PCAwKSB7CisgICAgICAgIHJlc3VsdC5zZXRYKHJlc3VsdC54KCkgLSBtYXJnaW5zW2xlZnRNYXJn
aW5dICogem9vbUxldmVsKTsKKyAgICAgICAgcmVzdWx0LnNldFdpZHRoKHJlc3VsdC53aWR0aCgp
IC0gd2lkdGhEZWx0YSk7CisgICAgfQorICAgIGlmIChoZWlnaHREZWx0YSA8IDApIHsKKyAgICAg
ICAgcmVzdWx0LnNldFkocmVzdWx0LnkoKSAtIG1hcmdpbnNbdG9wTWFyZ2luXSAqIHpvb21MZXZl
bCk7CisgICAgICAgIHJlc3VsdC5zZXRIZWlnaHQocmVzdWx0LmhlaWdodCgpIC0gaGVpZ2h0RGVs
dGEpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitGbG9hdFJlY3QgUmVuZGVyVGhl
bWVNYWM6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVu
ZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3Qm
IGlucHV0UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKK3sKKyAgICBGbG9hdFJlY3QgcGFy
dFJlY3QoaW5wdXRSZWN0KTsKKyAgICAKKyAgICAvLyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVu
IHRoZSBwYXJ0IHJlbmRlcmVyIGFuZCB0aGUgaW5wdXQgcmVuZGVyZXIKKyAgICBGbG9hdFNpemUg
b2Zmc2V0RnJvbUlucHV0UmVuZGVyZXI7CisgICAgY29uc3QgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IHBhcnRSZW5kZXJlcjsKKyAgICB3aGlsZSAocmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0gaW5w
dXRSZW5kZXJlcikgeworICAgICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5pbmdSZW5kZXJlciA9
IHJlbmRlcmVyLT5jb250YWluZXIoKTsKKyAgICAgICAgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIg
LT0gcmVuZGVyZXItPm9mZnNldEZyb21Db250YWluZXIoY29udGFpbmluZ1JlbmRlcmVyKTsKKyAg
ICAgICAgcmVuZGVyZXIgPSBjb250YWluaW5nUmVuZGVyZXI7CisgICAgfQorICAgIC8vIElmIHRo
ZSBpbnB1dCByZW5kZXJlciB3YXMgbm90IGEgY29udGFpbmVyLCBzb21ldGhpbmcgd2VudCB3cm9u
ZworICAgIEFTU0VSVChyZW5kZXJlciA9PSBpbnB1dFJlbmRlcmVyKTsKKyAgICAvLyBNb3ZlIHRo
ZSByZWN0IGludG8gcGFydFJlbmRlcmVyJ3MgY29vcmRzCisgICAgcGFydFJlY3QubW92ZShvZmZz
ZXRGcm9tSW5wdXRSZW5kZXJlcik7CisgICAgLy8gQWNjb3VudCBmb3IgdGhlIGxvY2FsIGRyYXdp
bmcgb2Zmc2V0ICh0eCwgdHkpCisgICAgcGFydFJlY3QubW92ZShyLngoKSwgci55KCkpOworCisg
ICAgcmV0dXJuIHBhcnRSZWN0OworfQorCit2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDaGVj
a2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCit7CisgICAgYm9v
bCBvbGRJbmRldGVybWluYXRlID0gW2NlbGwgc3RhdGVdID09IE5TTWl4ZWRTdGF0ZTsKKyAgICBi
b29sIGluZGV0ZXJtaW5hdGUgPSBpc0luZGV0ZXJtaW5hdGUobyk7CisgICAgYm9vbCBjaGVja2Vk
ID0gaXNDaGVja2VkKG8pOworCisgICAgaWYgKG9sZEluZGV0ZXJtaW5hdGUgIT0gaW5kZXRlcm1p
bmF0ZSkgeworICAgICAgICBbY2VsbCBzZXRTdGF0ZTppbmRldGVybWluYXRlID8gTlNNaXhlZFN0
YXRlIDogKGNoZWNrZWQgPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlKV07CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBib29sIG9sZENoZWNrZWQgPSBbY2VsbCBzdGF0ZV0gPT0gTlNPblN0
YXRlOworICAgIGlmIChjaGVja2VkICE9IG9sZENoZWNrZWQpCisgICAgICAgIFtjZWxsIHNldFN0
YXRlOmNoZWNrZWQgPyBOU09uU3RhdGUgOiBOU09mZlN0YXRlXTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvKQoreworICAgIGJvb2wgb2xkRW5hYmxlZCA9IFtjZWxsIGlzRW5hYmxlZF07CisgICAg
Ym9vbCBlbmFibGVkID0gaXNFbmFibGVkKG8pOworICAgIGlmIChlbmFibGVkICE9IG9sZEVuYWJs
ZWQpCisgICAgICAgIFtjZWxsIHNldEVuYWJsZWQ6ZW5hYmxlZF07Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVNYWM6OnVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9i
amVjdCogbykKK3sKKyAgICBib29sIG9sZEZvY3VzZWQgPSBbY2VsbCBzaG93c0ZpcnN0UmVzcG9u
ZGVyXTsKKyAgICBib29sIGZvY3VzZWQgPSBpc0ZvY3VzZWQobykgJiYgby0+c3R5bGUoKS0+b3V0
bGluZVN0eWxlSXNBdXRvKCk7CisgICAgaWYgKGZvY3VzZWQgIT0gb2xkRm9jdXNlZCkKKyAgICAg
ICAgW2NlbGwgc2V0U2hvd3NGaXJzdFJlc3BvbmRlcjpmb2N1c2VkXTsKK30KKwordm9pZCBSZW5k
ZXJUaGVtZU1hYzo6dXBkYXRlUHJlc3NlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVy
T2JqZWN0KiBvKQoreworICAgIGJvb2wgb2xkUHJlc3NlZCA9IFtjZWxsIGlzSGlnaGxpZ2h0ZWRd
OworICAgIGJvb2wgcHJlc3NlZCA9IChvLT5ub2RlKCkgJiYgby0+bm9kZSgpLT5hY3RpdmUoKSk7
CisgICAgaWYgKHByZXNzZWQgIT0gb2xkUHJlc3NlZCkKKyAgICAgICAgW2NlbGwgc2V0SGlnaGxp
Z2h0ZWQ6cHJlc3NlZF07Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTdXBwb3J0
c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICAvLyBBbiBhbHRlcm5h
dGUgd2F5IHRvIGltcGxlbWVudCB0aGlzIHdvdWxkIGJlIHRvIGdldCB0aGUgYXBwcm9wcmlhdGUg
Y2VsbCBvYmplY3QKKyAgICAvLyBhbmQgY2FsbCB0aGUgcHJpdmF0ZSBfbmVlZFJlZHJhd09uV2lu
ZG93Q2hhbmdlZEtleVN0YXRlIG1ldGhvZC4gQW4gYWR2YW50YWdlIG9mCisgICAgLy8gdGhhdCB3
b3VsZCBiZSB0aGF0IHdlIHdvdWxkIG1hdGNoIEFwcEtpdCBiZWhhdmlvciBtb3JlIGNsb3NlbHks
IGJ1dCBhIGRpc2FkdmFudGFnZQorICAgIC8vIHdvdWxkIGJlIHRoYXQgd2Ugd291bGQgcmVseSBv
biBhbiBBcHBLaXQgU1BJIG1ldGhvZC4KKworICAgIGlmICghaXNFbmFibGVkKG8pKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDaGVja2JveGVzIG9ubHkgaGF2ZSB0aW50IHdoZW4g
Y2hlY2tlZC4KKyAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFy
dCkKKyAgICAgICAgcmV0dXJuIGlzQ2hlY2tlZChvKTsKKworICAgIC8vIEZvciBub3cgYXNzdW1l
IG90aGVyIGNvbnRyb2xzIGhhdmUgdGludCBpZiBlbmFibGVkLgorICAgIHJldHVybiB0cnVlOwor
fQorCitOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvckZvbnQoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250
U2l6ZSgpOworICAgIGlmIChmb250U2l6ZSA+PSAxNikKKyAgICAgICAgcmV0dXJuIE5TUmVndWxh
ckNvbnRyb2xTaXplOworICAgIGlmIChmb250U2l6ZSA+PSAxMSkKKyAgICAgICAgcmV0dXJuIE5T
U21hbGxDb250cm9sU2l6ZTsKKyAgICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVNYWM6OnNldENvbnRyb2xTaXplKE5TQ2VsbCogY2VsbCwgY29uc3QgSW50
U2l6ZSogc2l6ZXMsIGNvbnN0IEludFNpemUmIG1pblNpemUsIGZsb2F0IHpvb21MZXZlbCkKK3sK
KyAgICBOU0NvbnRyb2xTaXplIHNpemU7CisgICAgaWYgKG1pblNpemUud2lkdGgoKSA+PSBzdGF0
aWNfY2FzdDxpbnQ+KHNpemVzW05TUmVndWxhckNvbnRyb2xTaXplXS53aWR0aCgpICogem9vbUxl
dmVsKSAmJgorICAgICAgICBtaW5TaXplLmhlaWdodCgpID49IHN0YXRpY19jYXN0PGludD4oc2l6
ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVdLmhlaWdodCgpICogem9vbUxldmVsKSkKKyAgICAgICAg
c2l6ZSA9IE5TUmVndWxhckNvbnRyb2xTaXplOworICAgIGVsc2UgaWYgKG1pblNpemUud2lkdGgo
KSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0ud2lkdGgoKSAq
IHpvb21MZXZlbCkgJiYKKyAgICAgICAgICAgICBtaW5TaXplLmhlaWdodCgpID49IHN0YXRpY19j
YXN0PGludD4oc2l6ZXNbTlNTbWFsbENvbnRyb2xTaXplXS5oZWlnaHQoKSAqIHpvb21MZXZlbCkp
CisgICAgICAgIHNpemUgPSBOU1NtYWxsQ29udHJvbFNpemU7CisgICAgZWxzZQorICAgICAgICBz
aXplID0gTlNNaW5pQ29udHJvbFNpemU7CisgICAgaWYgKHNpemUgIT0gW2NlbGwgY29udHJvbFNp
emVdKSAvLyBPbmx5IHVwZGF0ZSBpZiB3ZSBoYXZlIHRvLCBzaW5jZSBBcHBLaXQgZG9lcyB3b3Jr
IGV2ZW4gaWYgdGhlIHNpemUgaXMgdGhlIHNhbWUuCisgICAgICAgIFtjZWxsIHNldENvbnRyb2xT
aXplOnNpemVdOworfQorCitJbnRTaXplIFJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9udChSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAoreworICAgIGlmIChz
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKKyAgICAgICAgSW50U2l6ZSByZXN1bHQg
PSBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKKyAgICAgICAgcmV0dXJuIEludFNp
emUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpLCByZXN1bHQuaGVpZ2h0
KCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICB9CisgICAgcmV0dXJuIHNpemVzW2Nv
bnRyb2xTaXplRm9yRm9udChzdHlsZSldOworfQorCitJbnRTaXplIFJlbmRlclRoZW1lTWFjOjpz
aXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVz
KSBjb25zdAoreworICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKKyAg
ICAgICAgSW50U2l6ZSByZXN1bHQgPSBzaXplc1tjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoc3R5
bGUpXTsKKyAgICAgICAgcmV0dXJuIEludFNpemUocmVzdWx0LndpZHRoKCkgKiBzdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpLCByZXN1bHQuaGVpZ2h0KCkgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpKTsK
KyAgICB9CisgICAgcmV0dXJuIHNpemVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChzdHlsZSld
OworfQorCit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5bGUq
IHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQ2hl
Y2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBp
bnRvIGFjY291bnQuCisgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvckZvbnQoc3R5bGUsIHNpemVz
KTsKKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndp
ZHRoKCkgPiAwKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwg
Rml4ZWQpKTsKKyAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0
KCkgPiAwKQorICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBG
aXhlZCkpOworfQorCit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXpl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUgY29u
dHJvbFNpemUpIGNvbnN0Cit7CisgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbjsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseSk7
CisKKyAgICBOU0ZvbnQqIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBz
eXN0ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOmNvbnRyb2xTaXplXV07CisgICAgZm9udERlc2Ny
aXB0aW9uLmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KFtmb250IGZhbWlseU5hbWVdKTsKKyAgICBm
b250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFtmb250IHBvaW50U2l6ZV0gKiBzdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShb
Zm9udCBwb2ludFNpemVdICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CisKKyAgICAvLyBSZXNl
dCBsaW5lIGhlaWdodAorICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0
aWFsTGluZUhlaWdodCgpKTsKKworICAgIGlmIChzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbikpCisgICAgICAgIHN0eWxlLT5mb250KCkudXBkYXRlKDApOworfQorCitO
U0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVu
ZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5mb250
U2l6ZSgpOworICAgIGlmIChmb250U2l6ZSA+PSBbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29u
dHJvbFNpemU6TlNSZWd1bGFyQ29udHJvbFNpemVdKQorICAgICAgICByZXR1cm4gTlNSZWd1bGFy
Q29udHJvbFNpemU7CisgICAgaWYgKGZvbnRTaXplID49IFtOU0ZvbnQgc3lzdGVtRm9udFNpemVG
b3JDb250cm9sU2l6ZTpOU1NtYWxsQ29udHJvbFNpemVdKQorICAgICAgICByZXR1cm4gTlNTbWFs
bENvbnRyb2xTaXplOworICAgIHJldHVybiBOU01pbmlDb250cm9sU2l6ZTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAg
IExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRl
eHQpOworICAgIHdrRHJhd0JlemVsZWRUZXh0RmllbGRDZWxsKHIsIGlzRW5hYmxlZChvKSAmJiAh
aXNSZWFkT25seUNvbnRyb2wobykpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBpZiAocGFpbnRJ
bmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5j
b250ZXh0KTsKKyAgICB3a0RyYXdDYXBzTG9ja0luZGljYXRvcihwYWludEluZm8uY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCksIHIpOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7Cisg
ICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29u
dGV4dCk7CisgICAgd2tEcmF3QmV6ZWxlZFRleHRBcmVhKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNS
ZWFkT25seUNvbnRyb2wobykpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZU1hYzo6YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3QKK3sKK30KKworY29uc3QgaW50KiBSZW5kZXJUaGVtZU1hYzo6
cG9wdXBCdXR0b25NYXJnaW5zKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IG1hcmdp
bnNbM11bNF0gPQorICAgIHsKKyAgICAgICAgeyAwLCAzLCAxLCAzIH0sCisgICAgICAgIHsgMCwg
MywgMiwgMyB9LAorICAgICAgICB7IDAsIDEsIDAsIDEgfQorICAgIH07CisgICAgcmV0dXJuIG1h
cmdpbnNbW3BvcHVwQnV0dG9uKCkgY29udHJvbFNpemVdXTsKK30KKworY29uc3QgSW50U2l6ZSog
UmVuZGVyVGhlbWVNYWM6OnBvcHVwQnV0dG9uU2l6ZXMoKSBjb25zdAoreworICAgIHN0YXRpYyBj
b25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDAsIDIxKSwgSW50U2l6ZSgwLCAxOCks
IEludFNpemUoMCwgMTUpIH07CisgICAgcmV0dXJuIHNpemVzOworfQorCitjb25zdCBpbnQqIFJl
bmRlclRoZW1lTWFjOjpwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSBzaXplKSBjb25z
dAoreworICAgIHN0YXRpYyBjb25zdCBpbnQgcGFkZGluZ1szXVs0XSA9CisgICAgeworICAgICAg
ICB7IDIsIDI2LCAzLCA4IH0sCisgICAgICAgIHsgMiwgMjMsIDMsIDggfSwKKyAgICAgICAgeyAy
LCAyMiwgMywgMTAgfQorICAgIH07CisgICAgcmV0dXJuIHBhZGRpbmdbc2l6ZV07Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIpOworCisgICAgTlNQb3BVcEJ1dHRvbkNl
bGwqIHBvcHVwQnV0dG9uID0gdGhpcy0+cG9wdXBCdXR0b24oKTsKKworICAgIGZsb2F0IHpvb21M
ZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBJbnRTaXplIHNpemUgPSBw
b3B1cEJ1dHRvblNpemVzKClbW3BvcHVwQnV0dG9uIGNvbnRyb2xTaXplXV07CisgICAgc2l6ZS5z
ZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21MZXZlbCk7CisgICAgc2l6ZS5zZXRXaWR0aChy
LndpZHRoKCkpOworCisgICAgLy8gTm93IGluZmxhdGUgaXQgdG8gYWNjb3VudCBmb3IgdGhlIHNo
YWRvdy4KKyAgICBJbnRSZWN0IGluZmxhdGVkUmVjdCA9IHI7CisgICAgaWYgKHIud2lkdGgoKSA+
PSBtaW5pbXVtTWVudUxpc3RTaXplKG8tPnN0eWxlKCkpKQorICAgICAgICBpbmZsYXRlZFJlY3Qg
PSBpbmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucygpLCB6
b29tTGV2ZWwpOworCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICAKKyNpZm5k
ZWYgQlVJTERJTkdfT05fVElHRVIKKyAgICAvLyBPbiBMZW9wYXJkLCB0aGUgY2VsbCB3aWxsIGRy
YXcgb3V0c2lkZSBvZiB0aGUgZ2l2ZW4gcmVjdCwgc28gd2UgaGF2ZSB0byBjbGlwIHRvIHRoZSBy
ZWN0CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoaW5mbGF0ZWRSZWN0KTsKKyNlbmRpZgor
CisgICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7CisgICAgICAgIGluZmxhdGVkUmVjdC5zZXRX
aWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CisgICAgICAgIGluZmxhdGVk
UmVjdC5zZXRIZWlnaHQoaW5mbGF0ZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKKyAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3QueCgpLCBpbmZsYXRl
ZFJlY3QueSgpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6
b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNs
YXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAgfQorCisgICAg
W3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGluVmlldzpvLT52aWV3KCkt
PmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07CisgICAgW3BvcHVwQnV0dG9uIHNldENvbnRy
b2xWaWV3Om5pbF07CisKKyAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitjb25zdCBmbG9hdCBiYXNlRm9udFNpemUgPSAxMS4wZjsKK2Nv
bnN0IGZsb2F0IGJhc2VBcnJvd0hlaWdodCA9IDQuMGY7Citjb25zdCBmbG9hdCBiYXNlQXJyb3dX
aWR0aCA9IDUuMGY7Citjb25zdCBmbG9hdCBiYXNlU3BhY2VCZXR3ZWVuQXJyb3dzID0gMi4wZjsK
K2NvbnN0IGludCBhcnJvd1BhZGRpbmdMZWZ0ID0gNjsKK2NvbnN0IGludCBhcnJvd1BhZGRpbmdS
aWdodCA9IDY7Citjb25zdCBpbnQgcGFkZGluZ0JlZm9yZVNlcGFyYXRvciA9IDQ7Citjb25zdCBp
bnQgYmFzZUJvcmRlclJhZGl1cyA9IDU7Citjb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5nTGVm
dCA9IDg7Citjb25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5nVG9wID0gMTsKK2NvbnN0IGludCBz
dHlsZWRQb3B1cFBhZGRpbmdCb3R0b20gPSAyOworCitzdGF0aWMgdm9pZCBUb3BHcmFkaWVudElu
dGVycG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEp
Cit7CisgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDAuNGYg
fTsKKyAgICBzdGF0aWMgZmxvYXQgbGlnaHRbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDAuMTVm
IH07CisgICAgZmxvYXQgYSA9IGluRGF0YVswXTsKKyAgICBpbnQgaSA9IDA7CisgICAgZm9yIChp
ID0gMDsgaSA8IDQ7IGkrKykKKyAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJr
W2ldICsgYSAqIGxpZ2h0W2ldOworfQorCitzdGF0aWMgdm9pZCBCb3R0b21HcmFkaWVudEludGVy
cG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCit7
CisgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDAuMGYgfTsK
KyAgICBzdGF0aWMgZmxvYXQgbGlnaHRbNF0gPSB7IDEuMGYsIDEuMGYsIDEuMGYsIDAuM2YgfTsK
KyAgICBmbG9hdCBhID0gaW5EYXRhWzBdOworICAgIGludCBpID0gMDsKKyAgICBmb3IgKGkgPSAw
OyBpIDwgNDsgaSsrKQorICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBhKSAqIGRhcmtbaV0g
KyBhICogbGlnaHRbaV07Cit9CisKK3N0YXRpYyB2b2lkIE1haW5HcmFkaWVudEludGVycG9sYXRl
KHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCit7CisgICAg
c3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDAuMTVmIH07CisgICAg
c3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAwLjBmIH07CisgICAg
ZmxvYXQgYSA9IGluRGF0YVswXTsKKyAgICBpbnQgaSA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8
IDQ7IGkrKykKKyAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAq
IGxpZ2h0W2ldOworfQorCitzdGF0aWMgdm9pZCBUcmFja0dyYWRpZW50SW50ZXJwb2xhdGUodm9p
ZCosIGNvbnN0IENHRmxvYXQqIGluRGF0YSwgQ0dGbG9hdCogb3V0RGF0YSkKK3sKKyAgICBzdGF0
aWMgZmxvYXQgZGFya1s0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC42NzhmIH07CisgICAgc3Rh
dGljIGZsb2F0IGxpZ2h0WzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAwLjEzZiB9OworICAgIGZs
b2F0IGEgPSBpbkRhdGFbMF07CisgICAgaW50IGkgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCA0
OyBpKyspCisgICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAtIGEpICogZGFya1tpXSArIGEgKiBs
aWdodFtpXTsKK30KKwordm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdy
YWRpZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKHIuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7
CisKKyAgICBJbnRTaXplIHRvcExlZnRSYWRpdXM7CisgICAgSW50U2l6ZSB0b3BSaWdodFJhZGl1
czsKKyAgICBJbnRTaXplIGJvdHRvbUxlZnRSYWRpdXM7CisgICAgSW50U2l6ZSBib3R0b21SaWdo
dFJhZGl1czsKKworICAgIG8tPnN0eWxlKCktPmdldEJvcmRlclJhZGlpRm9yUmVjdChyLCB0b3BM
ZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRS
YWRpdXMpOworCisgICAgaW50IHJhZGl1cyA9IHRvcExlZnRSYWRpdXMud2lkdGgoKTsKKworICAg
IFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNzcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VD
cmVhdGVEZXZpY2VSR0IoKSk7CisKKyAgICBGbG9hdFJlY3QgdG9wR3JhZGllbnQoci54KCksIHIu
eSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkgLyAyLjBmKTsKKyAgICBzdHJ1Y3QgQ0dGdW5jdGlv
bkNhbGxiYWNrcyB0b3BDYWxsYmFja3MgPSB7IDAsIFRvcEdyYWRpZW50SW50ZXJwb2xhdGUsIE5V
TEwgfTsKKyAgICBSZXRhaW5QdHI8Q0dGdW5jdGlvblJlZj4gdG9wRnVuY3Rpb24oQWRvcHRDRiwg
Q0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmdG9wQ2FsbGJhY2tzKSk7
CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gdG9wU2hhZGluZyhBZG9wdENGLCBDR1NoYWRp
bmdDcmVhdGVBeGlhbChjc3BhY2UuZ2V0KCksIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwg
dG9wR3JhZGllbnQueSgpKSwgQ0dQb2ludE1ha2UodG9wR3JhZGllbnQueCgpLCB0b3BHcmFkaWVu
dC5ib3R0b20oKSksIHRvcEZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKworICAgIEZs
b2F0UmVjdCBib3R0b21HcmFkaWVudChyLngoKSArIHJhZGl1cywgci55KCkgKyByLmhlaWdodCgp
IC8gMi4wZiwgci53aWR0aCgpIC0gMi4wZiAqIHJhZGl1cywgci5oZWlnaHQoKSAvIDIuMGYpOwor
ICAgIHN0cnVjdCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIGJvdHRvbUNhbGxiYWNrcyA9IHsgMCwgQm90
dG9tR3JhZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OworICAgIFJldGFpblB0cjxDR0Z1bmN0aW9u
UmVmPiBib3R0b21GdW5jdGlvbihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5V
TEwsIDQsIE5VTEwsICZib3R0b21DYWxsYmFja3MpKTsKKyAgICBSZXRhaW5QdHI8Q0dTaGFkaW5n
UmVmPiBib3R0b21TaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZS5n
ZXQoKSwgQ0dQb2ludE1ha2UoYm90dG9tR3JhZGllbnQueCgpLCAgYm90dG9tR3JhZGllbnQueSgp
KSwgQ0dQb2ludE1ha2UoYm90dG9tR3JhZGllbnQueCgpLCBib3R0b21HcmFkaWVudC5ib3R0b20o
KSksIGJvdHRvbUZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKworICAgIHN0cnVjdCBD
R0Z1bmN0aW9uQ2FsbGJhY2tzIG1haW5DYWxsYmFja3MgPSB7IDAsIE1haW5HcmFkaWVudEludGVy
cG9sYXRlLCBOVUxMIH07CisgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlv
bihBZG9wdENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWlu
Q2FsbGJhY2tzKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmcoQWRv
cHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLmdldCgpLCBDR1BvaW50TWFrZShyLngo
KSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci54KCksIHIuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24u
Z2V0KCksIGZhbHNlLCBmYWxzZSkpOworCisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbGVm
dFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLmdldCgpLCBDR1Bv
aW50TWFrZShyLngoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uoci54KCkgKyByYWRpdXMsIHIueSgp
KSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKworICAgIFJldGFpblB0cjxD
R1NoYWRpbmdSZWY+IHJpZ2h0U2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlhbChj
c3BhY2UuZ2V0KCksIENHUG9pbnRNYWtlKHIucmlnaHQoKSwgIHIueSgpKSwgQ0dQb2ludE1ha2Uo
ci5yaWdodCgpIC0gcmFkaXVzLCByLnkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZh
bHNlKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICBDR0NvbnRleHRDbGlw
VG9SZWN0KGNvbnRleHQsIHIpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5hZGRSb3VuZGVkUmVj
dENsaXAociwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMs
IGJvdHRvbVJpZ2h0UmFkaXVzKTsKKyAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBt
YWluU2hhZGluZy5nZXQoKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKwor
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChj
b250ZXh0LCB0b3BHcmFkaWVudCk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRS
ZWN0Q2xpcChlbmNsb3NpbmdJbnRSZWN0KHRvcEdyYWRpZW50KSwgdG9wTGVmdFJhZGl1cywgdG9w
UmlnaHRSYWRpdXMsIEludFNpemUoKSwgSW50U2l6ZSgpKTsKKyAgICBDR0NvbnRleHREcmF3U2hh
ZGluZyhjb250ZXh0LCB0b3BTaGFkaW5nLmdldCgpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+
cmVzdG9yZSgpOworCisgICAgaWYgKCFib3R0b21HcmFkaWVudC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LCBib3R0b21HcmFkaWVudCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5h
ZGRSb3VuZGVkUmVjdENsaXAoZW5jbG9zaW5nSW50UmVjdChib3R0b21HcmFkaWVudCksIEludFNp
emUoKSwgSW50U2l6ZSgpLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7Cisg
ICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIGJvdHRvbVNoYWRpbmcuZ2V0KCkp
OworICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworICAgIH0KKworICAgIHBh
aW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0
LCByKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKHIsIHRvcExl
ZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJh
ZGl1cyk7CisgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbGVmdFNoYWRpbmcuZ2V0
KCkpOworICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIHJpZ2h0U2hhZGluZy5nZXQo
KSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIHBhaW50SW5mby5j
b250ZXh0LT5yZXN0b3JlKCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxp
c3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEludFJlY3QgYm91bmRzID0gSW50
UmVjdChyLngoKSArIG8tPnN0eWxlKCktPmJvcmRlckxlZnRXaWR0aCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByLnkoKSArIG8tPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIud2lkdGgoKSAtIG8tPnN0eWxlKCktPmJvcmRl
ckxlZnRXaWR0aCgpIC0gby0+c3R5bGUoKS0+Ym9yZGVyUmlnaHRXaWR0aCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByLmhlaWdodCgpIC0gby0+c3R5bGUoKS0+Ym9yZGVyVG9wV2lk
dGgoKSAtIG8tPnN0eWxlKCktPmJvcmRlckJvdHRvbVdpZHRoKCkpOworICAgIC8vIERyYXcgdGhl
IGdyYWRpZW50cyB0byBnaXZlIHRoZSBzdHlsZWQgcG9wdXAgbWVudSBhIGJ1dHRvbiBhcHBlYXJh
bmNlCisgICAgcGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50cyhvLCBwYWludEluZm8sIGJvdW5k
cyk7CisKKyAgICAvLyBTaW5jZSB3ZSBhY3R1YWxseSBrbm93IHRoZSBzaXplIG9mIHRoZSBjb250
cm9sIGhlcmUsIHdlIHJlc3RyaWN0IHRoZSBmb250IHNjYWxlIHRvIG1ha2Ugc3VyZSB0aGUgYXJy
b3dzIHdpbGwgZml0IHZlcnRpY2FsbHkgaW4gdGhlIGJvdW5kcworICAgIGZsb2F0IGZvbnRTY2Fs
ZSA9IG1pbihvLT5zdHlsZSgpLT5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplLCBib3VuZHMuaGVp
Z2h0KCkgLyAoYmFzZUFycm93SGVpZ2h0ICogMiArIGJhc2VTcGFjZUJldHdlZW5BcnJvd3MpKTsK
KyAgICBmbG9hdCBjZW50ZXJZID0gYm91bmRzLnkoKSArIGJvdW5kcy5oZWlnaHQoKSAvIDIuMGY7
CisgICAgZmxvYXQgYXJyb3dIZWlnaHQgPSBiYXNlQXJyb3dIZWlnaHQgKiBmb250U2NhbGU7Cisg
ICAgZmxvYXQgYXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOworICAgIGZs
b2F0IGxlZnRFZGdlID0gYm91bmRzLnJpZ2h0KCkgLSBhcnJvd1BhZGRpbmdSaWdodCAqIG8tPnN0
eWxlKCktPmVmZmVjdGl2ZVpvb20oKSAtIGFycm93V2lkdGg7CisgICAgZmxvYXQgc3BhY2VCZXR3
ZWVuQXJyb3dzID0gYmFzZVNwYWNlQmV0d2VlbkFycm93cyAqIGZvbnRTY2FsZTsKKworICAgIGlm
IChib3VuZHMud2lkdGgoKSA8IGFycm93V2lkdGggKyBhcnJvd1BhZGRpbmdMZWZ0ICogby0+c3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRG
aWxsQ29sb3Ioby0+c3R5bGUoKS0+Y29sb3IoKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNl
dFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKKworICAgIEZsb2F0UG9pbnQgYXJyb3cxWzNdOworICAg
IGFycm93MVswXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UsIGNlbnRlclkgLSBzcGFjZUJldHdlZW5B
cnJvd3MgLyAyLjBmKTsKKyAgICBhcnJvdzFbMV0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJy
b3dXaWR0aCwgY2VudGVyWSAtIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOworICAgIGFycm93
MVsyXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wZiwgY2VudGVyWSAt
IHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYgLSBhcnJvd0hlaWdodCk7CisKKyAgICAvLyBEcmF3
IHRoZSB0b3AgYXJyb3cKKyAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24o
MywgYXJyb3cxLCB0cnVlKTsKKworICAgIEZsb2F0UG9pbnQgYXJyb3cyWzNdOworICAgIGFycm93
MlswXSA9IEZsb2F0UG9pbnQobGVmdEVkZ2UsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3Mg
LyAyLjBmKTsKKyAgICBhcnJvdzJbMV0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0
aCwgY2VudGVyWSArIHNwYWNlQmV0d2VlbkFycm93cyAvIDIuMGYpOworICAgIGFycm93MlsyXSA9
IEZsb2F0UG9pbnQobGVmdEVkZ2UgKyBhcnJvd1dpZHRoIC8gMi4wZiwgY2VudGVyWSArIHNwYWNl
QmV0d2VlbkFycm93cyAvIDIuMGYgKyBhcnJvd0hlaWdodCk7CisKKyAgICAvLyBEcmF3IHRoZSBi
b3R0b20gYXJyb3cKKyAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0NvbnZleFBvbHlnb24oMywg
YXJyb3cyLCB0cnVlKTsKKworICAgIENvbG9yIGxlZnRTZXBhcmF0b3JDb2xvcigwLCAwLCAwLCA0
MCk7CisgICAgQ29sb3IgcmlnaHRTZXBhcmF0b3JDb2xvcigyNTUsIDI1NSwgMjU1LCA0MCk7CisK
KyAgICAvLyBGSVhNRTogU2hvdWxkIHRoZSBzZXBhcmF0b3IgdGhpY2tuZXNzIGFuZCBzcGFjZSBi
ZSBzY2FsZWQgdXAgYnkgZm9udFNjYWxlPworICAgIGludCBzZXBhcmF0b3JTcGFjZSA9IDI7IC8v
IERlbGliZXJhdGVseSBpZ25vcmVzIHpvb20gc2luY2UgaXQgbG9va3MgbmljZXIgaWYgaXQgc3Rh
eXMgdGhpbi4KKyAgICBpbnQgbGVmdEVkZ2VPZlNlcGFyYXRvciA9IHN0YXRpY19jYXN0PGludD4o
bGVmdEVkZ2UgLSBhcnJvd1BhZGRpbmdMZWZ0ICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgp
KTsgLy8gRklYTUU6IFJvdW5kPworCisgICAgLy8gRHJhdyB0aGUgc2VwYXJhdG9yIHRvIHRoZSBs
ZWZ0IG9mIHRoZSBhcnJvd3MKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tu
ZXNzKDEuMGYpOyAvLyBEZWxpYmVyYXRlbHkgaWdub3JlcyB6b29tIHNpbmNlIGl0IGxvb2tzIG5p
Y2VyIGlmIGl0IHN0YXlzIHRoaW4uCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0
eWxlKFNvbGlkU3Ryb2tlKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Io
bGVmdFNlcGFyYXRvckNvbG9yKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50
UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciwgYm91bmRzLnkoKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy5ib3R0
b20oKSkpOworCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHJpZ2h0U2Vw
YXJhdG9yQ29sb3IpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3TGluZShJbnRQb2ludChs
ZWZ0RWRnZU9mU2VwYXJhdG9yICsgc2VwYXJhdG9yU3BhY2UsIGJvdW5kcy55KCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yICsg
c2VwYXJhdG9yU3BhY2UsIGJvdW5kcy5ib3R0b20oKSkpOworCisgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBjb25zdCBJbnRT
aXplKiBtZW51TGlzdEJ1dHRvblNpemVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBz
aXplc1szXSA9IHsgSW50U2l6ZSgwLCAyMSksIEludFNpemUoMCwgMTgpLCBJbnRTaXplKDAsIDE1
KSB9OworICAgIHJldHVybiBzaXplczsKK30KKwordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlKSBjb25zdAoreworICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUg
PSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOworCisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7
CisgICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOworICAgIAorICAgIC8vIEhlaWdodCBpcyBsb2Nr
ZWQgdG8gYXV0by4KKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisKKyAgICAv
LyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCisgICAgc3R5bGUtPnNldFdoaXRlU3BhY2Uo
UFJFKTsKKworICAgIC8vIFNldCB0aGUgZm9yZWdyb3VuZCBjb2xvciB0byBibGFjayBvciBncmF5
IHdoZW4gd2UgaGF2ZSB0aGUgYXF1YSBsb29rLgorICAgIC8vIENhc3QgdG8gUkdCMzIgaXMgdG8g
d29yayBhcm91bmQgYSBjb21waWxlciBidWcuCisgICAgc3R5bGUtPnNldENvbG9yKGUgJiYgZS0+
aXNFbmFibGVkRm9ybUNvbnRyb2woKSA/IHN0YXRpY19jYXN0PFJHQkEzMj4oQ29sb3I6OmJsYWNr
KSA6IENvbG9yOjpkYXJrR3JheSk7CisKKyAgICAvLyBTZXQgdGhlIGJ1dHRvbidzIHZlcnRpY2Fs
IHNpemUuCisgICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBtZW51TGlzdEJ1dHRvblNpemVzKCkp
OworCisgICAgLy8gT3VyIGZvbnQgaXMgbG9ja2VkIHRvIHRoZSBhcHByb3ByaWF0ZSBzeXN0ZW0g
Zm9udCBzaXplIGZvciB0aGUgY29udHJvbC4gIFRvIGNsYXJpZnksIHdlIGZpcnN0IHVzZSB0aGUg
Q1NTLXNwZWNpZmllZCBmb250IHRvIGZpZ3VyZSBvdXQKKyAgICAvLyBhIHJlYXNvbmFibGUgY29u
dHJvbCBzaXplLCBidXQgb25jZSB0aGF0IGNvbnRyb2wgc2l6ZSBpcyBkZXRlcm1pbmVkLCB3ZSB0
aHJvdyB0aGF0IGZvbnQgYXdheSBhbmQgdXNlIHRoZSBhcHByb3ByaWF0ZQorICAgIC8vIHN5c3Rl
bSBmb250IGZvciB0aGUgY29udHJvbCBzaXplIGluc3RlYWQuCisgICAgc2V0Rm9udEZyb21Db250
cm9sU2l6ZShzZWxlY3Rvciwgc3R5bGUsIGNvbnRyb2xTaXplKTsKKworICAgIHN0eWxlLT5zZXRC
b3hTaGFkb3coMCk7Cit9CisKK2ludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRp
bmdMZWZ0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpZiAoc3R5bGUtPmFwcGVh
cmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRp
bmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbbGVmdFBhZGRpbmddICogc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdEJ1dHRv
blBhcnQpCisgICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBhZGRpbmdMZWZ0ICogc3R5bGUtPmVm
ZmVjdGl2ZVpvb20oKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IFJlbmRlclRoZW1lTWFjOjpw
b3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAg
ICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVy
biBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbcmlnaHRQYWRk
aW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KSB7CisgICAgICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0
eWxlLT5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOworICAgICAgICBmbG9hdCBhcnJvd1dpZHRo
ID0gYmFzZUFycm93V2lkdGggKiBmb250U2NhbGU7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KGNlaWxmKGFycm93V2lkdGggKyAoYXJyb3dQYWRkaW5nTGVmdCArIGFycm93UGFkZGlu
Z1JpZ2h0ICsgcGFkZGluZ0JlZm9yZVNlcGFyYXRvcikgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgp
KSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1
cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbdG9wUGFkZGluZ10gKiBz
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1l
bnVsaXN0QnV0dG9uUGFydCkKKyAgICAgICAgcmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ1RvcCAq
IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBSZW5kZXJU
aGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAoreworICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKKyAg
ICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUp
KVtib3R0b21QYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxl
LT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gc3R5
bGVkUG9wdXBQYWRkaW5nQm90dG9tICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
K3sKKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6
ZTsKKworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBzdHlsZS0+c2V0Qm9yZGVyUmFk
aXVzKEludFNpemUoaW50KGJhc2VCb3JkZXJSYWRpdXMgKyBmb250U2NhbGUgLSAxKSwgaW50KGJh
c2VCb3JkZXJSYWRpdXMgKyBmb250U2NhbGUgLSAxKSkpOyAvLyBGSVhNRTogUm91bmQgdXA/CisK
KyAgICBjb25zdCBpbnQgbWluSGVpZ2h0ID0gMTU7CisgICAgc3R5bGUtPnNldE1pbkhlaWdodChM
ZW5ndGgobWluSGVpZ2h0LCBGaXhlZCkpOworICAgIAorICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0
KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBJbnRSZWN0JiByKQoreworICAgIE5TUG9wVXBCdXR0b25DZWxsKiBwb3B1cEJ1dHRvbiA9IHRo
aXMtPnBvcHVwQnV0dG9uKCk7CisKKyAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBv
ZmYgdGhlIHJlY3RhbmdsZSB3ZSdyZSBwYWludGluZyBpbnRvLgorICAgIHNldENvbnRyb2xTaXpl
KHBvcHVwQnV0dG9uLCBwb3B1cEJ1dHRvblNpemVzKCksIHIuc2l6ZSgpLCBvLT5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkpOworCisgICAgLy8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSBy
ZXNwb25kIHRvLgorICAgIHVwZGF0ZUNoZWNrZWRTdGF0ZShwb3B1cEJ1dHRvbiwgbyk7CisgICAg
dXBkYXRlRW5hYmxlZFN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKKyAgICB1cGRhdGVQcmVzc2VkU3Rh
dGUocG9wdXBCdXR0b24sIG8pOworICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShwb3B1cEJ1dHRvbiwg
byk7Cit9CisKK2NvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjptZW51TGlzdFNpemVzKCkg
Y29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSg5
LCAwKSwgSW50U2l6ZSg1LCAwKSwgSW50U2l6ZSgwLCAwKSB9OworICAgIHJldHVybiBzaXplczsK
K30KKworaW50IFJlbmRlclRoZW1lTWFjOjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIG1l
bnVMaXN0U2l6ZXMoKSkud2lkdGgoKTsKK30KKworY29uc3QgaW50IHRyYWNrV2lkdGggPSA1Owor
Y29uc3QgaW50IHRyYWNrUmFkaXVzID0gMjsKKwordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOworfQorCitib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sK
KyAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CisgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUo
KS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGZsb2F0IHpvb21lZFRyYWNrV2lkdGggPSB0cmFja1dp
ZHRoICogem9vbUxldmVsOworCisgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSAg
U2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09ICBNZWRp
YVNsaWRlclBhcnQpIHsKKyAgICAgICAgYm91bmRzLnNldEhlaWdodCh6b29tZWRUcmFja1dpZHRo
KTsKKyAgICAgICAgYm91bmRzLnNldFkoci55KCkgKyByLmhlaWdodCgpIC8gMiAtIHpvb21lZFRy
YWNrV2lkdGggLyAyKTsKKyAgICB9IGVsc2UgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9
PSBTbGlkZXJWZXJ0aWNhbFBhcnQpIHsKKyAgICAgICAgYm91bmRzLnNldFdpZHRoKHpvb21lZFRy
YWNrV2lkdGgpOworICAgICAgICBib3VuZHMuc2V0WChyLngoKSArIHIud2lkdGgoKSAvIDIgLSB6
b29tZWRUcmFja1dpZHRoIC8gMik7CisgICAgfQorCisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3ND
b250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CisgICAgQ0dDb250ZXh0UmVm
IGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisgICAgUmV0
YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY3NwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0
ZURldmljZVJHQigpKTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgQ0dD
b250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBib3VuZHMpOworCisgICAgc3RydWN0IENHRnVuY3Rp
b25DYWxsYmFja3MgbWFpbkNhbGxiYWNrcyA9IHsgMCwgVHJhY2tHcmFkaWVudEludGVycG9sYXRl
LCBOVUxMIH07CisgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IG1haW5GdW5jdGlvbihBZG9w
dENGLCBDR0Z1bmN0aW9uQ3JlYXRlKE5VTEwsIDEsIE5VTEwsIDQsIE5VTEwsICZtYWluQ2FsbGJh
Y2tzKSk7CisgICAgUmV0YWluUHRyPENHU2hhZGluZ1JlZj4gbWFpblNoYWRpbmc7CisgICAgaWYg
KG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJWZXJ0aWNhbFBhcnQpCisgICAgICAg
IG1haW5TaGFkaW5nLmFkb3B0Q0YoQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLmdldCgpLCBD
R1BvaW50TWFrZShib3VuZHMueCgpLCAgYm91bmRzLmJvdHRvbSgpKSwgQ0dQb2ludE1ha2UoYm91
bmRzLnJpZ2h0KCksIGJvdW5kcy5ib3R0b20oKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2Us
IGZhbHNlKSk7CisgICAgZWxzZQorICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGlu
Z0NyZWF0ZUF4aWFsKGNzcGFjZS5nZXQoKSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5k
cy55KCkpLCBDR1BvaW50TWFrZShib3VuZHMueCgpLCBib3VuZHMuYm90dG9tKCkpLCBtYWluRnVu
Y3Rpb24uZ2V0KCksIGZhbHNlLCBmYWxzZSkpOworCisgICAgSW50U2l6ZSByYWRpdXModHJhY2tS
YWRpdXMsIHRyYWNrUmFkaXVzKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+YWRkUm91bmRlZFJl
Y3RDbGlwKGJvdW5kcywKKyAgICAgICAgcmFkaXVzLCByYWRpdXMsCisgICAgICAgIHJhZGl1cywg
cmFkaXVzKTsKKyAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtYWluU2hhZGluZy5n
ZXQoKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
Cit7CisgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKK30KKworY29uc3QgZmxvYXQgdmVydGlj
YWxTbGlkZXJIZWlnaHRQYWRkaW5nID0gMC4xZjsKKworYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgQVNTRVJUKG8tPnBhcmVu
dCgpLT5pc1NsaWRlcigpKTsKKworICAgIE5TU2xpZGVyQ2VsbCogc2xpZGVyVGh1bWJDZWxsID0g
by0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0CisgICAg
ICAgID8gc2xpZGVyVGh1bWJWZXJ0aWNhbCgpCisgICAgICAgIDogc2xpZGVyVGh1bWJIb3Jpem9u
dGFsKCk7CisKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBh
aW50SW5mby5jb250ZXh0KTsKKworICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2Ug
cmVzcG9uZCB0by4KKyAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2xpZGVyVGh1bWJDZWxsLCBvLT5w
YXJlbnQoKSk7CisgICAgdXBkYXRlRm9jdXNlZFN0YXRlKHNsaWRlclRodW1iQ2VsbCwgby0+cGFy
ZW50KCkpOworCisgICAgLy8gVXBkYXRlIHRoZSBwcmVzc2VkIHN0YXRlIHVzaW5nIHRoZSBOU0Nl
bGwgdHJhY2tpbmcgbWV0aG9kcywgc2luY2UgdGhhdCdzIGhvdyBOU1NsaWRlckNlbGwga2VlcHMg
dHJhY2sgb2YgaXQuCisgICAgYm9vbCBvbGRQcmVzc2VkOworICAgIGlmIChvLT5zdHlsZSgpLT5h
cHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCisgICAgICAgIG9sZFByZXNz
ZWQgPSBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNhbFByZXNzZWQ7CisgICAgZWxzZQorICAgICAgICBv
bGRQcmVzc2VkID0gbV9pc1NsaWRlclRodW1iSG9yaXpvbnRhbFByZXNzZWQ7CisKKyAgICBib29s
IHByZXNzZWQgPSB0b1JlbmRlclNsaWRlcihvLT5wYXJlbnQoKSktPmluRHJhZ01vZGUoKTsKKwor
ICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBh
cnQpCisgICAgICAgIG1faXNTbGlkZXJUaHVtYlZlcnRpY2FsUHJlc3NlZCA9IHByZXNzZWQ7Cisg
ICAgZWxzZQorICAgICAgICBtX2lzU2xpZGVyVGh1bWJIb3Jpem9udGFsUHJlc3NlZCA9IHByZXNz
ZWQ7CisKKyAgICBpZiAocHJlc3NlZCAhPSBvbGRQcmVzc2VkKSB7CisgICAgICAgIGlmIChwcmVz
c2VkKQorICAgICAgICAgICAgW3NsaWRlclRodW1iQ2VsbCBzdGFydFRyYWNraW5nQXQ6TlNQb2lu
dCgpIGluVmlldzpuaWxdOworICAgICAgICBlbHNlCisgICAgICAgICAgICBbc2xpZGVyVGh1bWJD
ZWxsIHN0b3BUcmFja2luZzpOU1BvaW50KCkgYXQ6TlNQb2ludCgpIGluVmlldzpuaWwgbW91c2VJ
c1VwOllFU107CisgICAgfQorCisgICAgRmxvYXRSZWN0IGJvdW5kcyA9IHI7CisgICAgLy8gTWFr
ZSB0aGUgaGVpZ2h0IG9mIHRoZSB2ZXJ0aWNhbCBzbGlkZXIgc2xpZ2h0bHkgbGFyZ2VyIHNvIE5T
U2xpZGVyQ2VsbCB3aWxsIGRyYXcgYSB2ZXJ0aWNhbCBzbGlkZXIuCisgICAgaWYgKG8tPnN0eWxl
KCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgYm91
bmRzLnNldEhlaWdodChib3VuZHMuaGVpZ2h0KCkgKyB2ZXJ0aWNhbFNsaWRlckhlaWdodFBhZGRp
bmcgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkpOworCisgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnNhdmUoKTsKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVa
b29tKCk7CisgICAgCisgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGJvdW5kczsKKyAgICBp
ZiAoem9vbUxldmVsICE9IDEuMGYpIHsKKyAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVu
em9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKKyAgICAgICAgdW56b29tZWRSZWN0LnNl
dEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwpOworICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHVuem9vbWVkUmVjdC54KCksIHVuem9vbWVkUmVjdC55
KCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZl
bCwgem9vbUxldmVsKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVu
em9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKKyAgICB9CisKKyAgICBbc2xpZGVy
VGh1bWJDZWxsIGRyYXdXaXRoRnJhbWU6dW56b29tZWRSZWN0IGluVmlldzpvLT52aWV3KCktPmZy
YW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07CisgICAgW3NsaWRlclRodW1iQ2VsbCBzZXRDb250
cm9sVmlldzpuaWxdOworCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVs
ZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9
IHRoaXMtPnNlYXJjaCgpOworICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENv
bnRleHQocGFpbnRJbmZvLmNvbnRleHQpOworCisgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKG8sIHIp
OworCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKworICAgIGZsb2F0IHpvb21MZXZl
bCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKworICAgIEludFJlY3QgdW56b29tZWRS
ZWN0ID0gcjsKKyAgICAKKyAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKKyAgICAgICAgdW56
b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKKyAg
ICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkgLyB6b29t
TGV2ZWwpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHVuem9vbWVkUmVj
dC54KCksIHVuem9vbWVkUmVjdC55KCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2Nh
bGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CisgICAgICAgIHBhaW50SW5mby5j
b250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsK
KyAgICB9CisKKyAgICAvLyBTZXQgdGhlIHNlYXJjaCBidXR0b24gdG8gbmlsIGJlZm9yZSBkcmF3
aW5nLiAgVGhlbiByZXNldCBpdCBzbyB3ZSBjYW4gZHJhdyBpdCBsYXRlci4KKyAgICBbc2VhcmNo
IHNldFNlYXJjaEJ1dHRvbkNlbGw6bmlsXTsKKworICAgIFtzZWFyY2ggZHJhd1dpdGhGcmFtZTpO
U1JlY3QodW56b29tZWRSZWN0KSBpblZpZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1l
bnRWaWV3KCldOworI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgaWYgKFtzZWFyY2ggc2hv
d3NGaXJzdFJlc3BvbmRlcl0pCisgICAgICAgIHdrRHJhd1RleHRGaWVsZENlbGxGb2N1c1Jpbmco
c2VhcmNoLCBOU1JlY3QodW56b29tZWRSZWN0KSk7CisjZW5kaWYKKworICAgIFtzZWFyY2ggc2V0
Q29udHJvbFZpZXc6bmlsXTsKKyAgICBbc2VhcmNoIHJlc2V0U2VhcmNoQnV0dG9uQ2VsbF07CisK
KyAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0g
dGhpcy0+c2VhcmNoKCk7CisKKyAgICBbc2VhcmNoIHNldENvbnRyb2xTaXplOmNvbnRyb2xTaXpl
Rm9yRm9udChvLT5zdHlsZSgpKV07CisKKyAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVz
IHdlIHJlc3BvbmQgdG8uCisgICAgdXBkYXRlRW5hYmxlZFN0YXRlKHNlYXJjaCwgbyk7CisgICAg
dXBkYXRlRm9jdXNlZFN0YXRlKHNlYXJjaCwgbyk7Cit9CisKK2NvbnN0IEludFNpemUqIFJlbmRl
clRoZW1lTWFjOjpzZWFyY2hGaWVsZFNpemVzKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3Qg
SW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgwLCAyMiksIEludFNpemUoMCwgMTkpLCBJbnRT
aXplKDAsIDE3KSB9OworICAgIHJldHVybiBzaXplczsKK30KKwordm9pZCBSZW5kZXJUaGVtZU1h
Yzo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICAv
LyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2
ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gVXNlIHRoZSBmb250IHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBpbnRyaW5zaWMgd2lk
dGggb2YgdGhlIGNvbnRyb2wuCisgICAgc2V0U2l6ZUZyb21Gb250KHN0eWxlLCBzZWFyY2hGaWVs
ZFNpemVzKCkpOworfQorCit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAoreworICAgIC8vIE92ZXJyaWRlIGJvcmRlci4KKyAgICBzdHlsZS0+cmVzZXRC
b3JkZXIoKTsKKyAgICBjb25zdCBzaG9ydCBib3JkZXJXaWR0aCA9IDIgKiBzdHlsZS0+ZWZmZWN0
aXZlWm9vbSgpOworICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0V2lkdGgoYm9yZGVyV2lkdGgpOwor
ICAgIHN0eWxlLT5zZXRCb3JkZXJMZWZ0U3R5bGUoSU5TRVQpOworICAgIHN0eWxlLT5zZXRCb3Jk
ZXJSaWdodFdpZHRoKGJvcmRlcldpZHRoKTsKKyAgICBzdHlsZS0+c2V0Qm9yZGVyUmlnaHRTdHls
ZShJTlNFVCk7CisgICAgc3R5bGUtPnNldEJvcmRlckJvdHRvbVdpZHRoKGJvcmRlcldpZHRoKTsK
KyAgICBzdHlsZS0+c2V0Qm9yZGVyQm90dG9tU3R5bGUoSU5TRVQpOworICAgIHN0eWxlLT5zZXRC
b3JkZXJUb3BXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUtPnNldEJvcmRlclRvcFN0eWxl
KElOU0VUKTsgICAgCisgICAgCisgICAgLy8gT3ZlcnJpZGUgaGVpZ2h0LgorICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKKyAgICBzZXRTZWFyY2hGaWVsZFNpemUoc3R5bGUpOwor
ICAgIAorICAgIC8vIE92ZXJyaWRlIHBhZGRpbmcgc2l6ZSB0byBtYXRjaCBBcHBLaXQgdGV4dCBw
b3NpdGlvbmluZy4KKyAgICBjb25zdCBpbnQgcGFkZGluZyA9IDEgKiBzdHlsZS0+ZWZmZWN0aXZl
Wm9vbSgpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwor
ICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIHN0
eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgIAorICAg
IE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpOwor
ICAgIHNldEZvbnRGcm9tQ29udHJvbFNpemUoc2VsZWN0b3IsIHN0eWxlLCBjb250cm9sU2l6ZSk7
CisKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOworfQorCitib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAg
ICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgaWYg
KCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJlcigpLCByKTsKKworICAgIE5TU2Vh
cmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKKworICAgIHVwZGF0ZVByZXNz
ZWRTdGF0ZShbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdLCBvKTsKKworICAgIHBhaW50SW5mby5j
b250ZXh0LT5zYXZlKCk7CisKKyAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZl
Y3RpdmVab29tKCk7CisKKyAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIGNhbmNl
bEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94
UmVjdCgpKV07CisgICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQt
PnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKKworICAgIEZsb2F0UmVjdCB1bnpvb21l
ZFJlY3QobG9jYWxCb3VuZHMpOworICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZikgeworICAgICAg
ICB1bnpvb21lZFJlY3Quc2V0V2lkdGgodW56b29tZWRSZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwp
OworICAgICAgICB1bnpvb21lZFJlY3Quc2V0SGVpZ2h0KHVuem9vbWVkUmVjdC5oZWlnaHQoKSAv
IHpvb21MZXZlbCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUodW56b29t
ZWRSZWN0LngoKSwgdW56b29tZWRSZWN0LnkoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5zY2FsZShGbG9hdFNpemUoem9vbUxldmVsLCB6b29tTGV2ZWwpKTsKKyAgICAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55
KCkpOworICAgIH0KKworICAgIFtbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJh
bWU6dW56b29tZWRSZWN0IGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZp
ZXcoKV07CisgICAgW1tzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmls
XTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6Y2FuY2VsQnV0dG9uU2l6ZXMo
KSBjb25zdAoreworICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXpl
KDE2LCAxMyksIEludFNpemUoMTMsIDExKSwgSW50U2l6ZSgxMywgOSkgfTsKKyAgICByZXR1cm4g
c2l6ZXM7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit7CisgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUs
IGNhbmNlbEJ1dHRvblNpemVzKCkpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53
aWR0aCgpLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0
KCksIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKK30KKworY29uc3QgSW50
U2l6ZSogUmVuZGVyVGhlbWVNYWM6OnJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0Cit7CisgICAg
c3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMTksIDEzKSwgSW50U2l6
ZSgxNywgMTEpLCBJbnRTaXplKDE3LCA5KSB9OworICAgIHJldHVybiBzaXplczsKK30KKworY29u
c3QgaW50IGVtcHR5UmVzdWx0c09mZnNldCA9IDk7Cit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBJbnRTaXplIHNpemUgPSBzaXplRm9y
U3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOworICAgIHN0eWxlLT5zZXRX
aWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpIC0gZW1wdHlSZXN1bHRzT2Zmc2V0LCBGaXhlZCkpOwor
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAg
c3R5bGUtPnNldEJveFNoYWRvdygwKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
ZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
K3sKKyAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1
dHRvblNpemVzKCkpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBG
aXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVk
KSk7CisgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZU1h
Yzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIE5v
ZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAgICBpZiAoIWlu
cHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
ZXRTZWFyY2hDZWxsU3RhdGUoaW5wdXQtPnJlbmRlcmVyKCksIHIpOworCisgICAgTlNTZWFyY2hG
aWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOworCisgICAgaWYgKFtzZWFyY2ggc2Vh
cmNoTWVudVRlbXBsYXRlXSAhPSBuaWwpCisgICAgICAgIFtzZWFyY2ggc2V0U2VhcmNoTWVudVRl
bXBsYXRlOm5pbF07CisKKyAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMgPSBbc2VhcmNoIHNlYXJj
aEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJCb3goKS0+Ym9yZGVyQm94
UmVjdCgpKV07CisgICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXQt
PnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKKworICAgIFtbc2VhcmNoIHNlYXJjaEJ1
dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6bG9jYWxCb3VuZHMgaW5WaWV3Om8tPnZpZXcoKS0+ZnJh
bWVWaWV3KCktPmRvY3VtZW50VmlldygpXTsKKyAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxs
XSBzZXRDb250cm9sVmlldzpuaWxdOworICAgIHJldHVybiBmYWxzZTsKK30KKworY29uc3QgaW50
IHJlc3VsdHNBcnJvd1dpZHRoID0gNTsKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSog
c3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0
ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CisgICAgc3R5bGUtPnNldFdpZHRo
KExlbmd0aChzaXplLndpZHRoKCkgKyByZXN1bHRzQXJyb3dXaWR0aCwgRml4ZWQpKTsKKyAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxl
LT5zZXRCb3hTaGFkb3coMCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBOb2RlKiBpbnB1
dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVu
ZGVyZXIoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2V0U2VhcmNo
Q2VsbFN0YXRlKGlucHV0LT5yZW5kZXJlcigpLCByKTsKKworICAgIE5TU2VhcmNoRmllbGRDZWxs
KiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKKworICAgIGlmICghW3NlYXJjaCBzZWFyY2hNZW51
VGVtcGxhdGVdKQorICAgICAgICBbc2VhcmNoIHNldFNlYXJjaE1lbnVUZW1wbGF0ZTpzZWFyY2hN
ZW51VGVtcGxhdGUoKV07CisKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworCisgICAg
ZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgRmxv
YXRSZWN0IGxvY2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5T
UmVjdChpbnB1dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOworICAgIGxvY2FsQm91
bmRzID0gY29udmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJv
dW5kcywgcik7CisgICAgCisgICAgSW50UmVjdCB1bnpvb21lZFJlY3QobG9jYWxCb3VuZHMpOwor
ICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZikgeworICAgICAgICB1bnpvb21lZFJlY3Quc2V0V2lk
dGgodW56b29tZWRSZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwpOworICAgICAgICB1bnpvb21lZFJl
Y3Quc2V0SGVpZ2h0KHVuem9vbWVkUmVjdC5oZWlnaHQoKSAvIHpvb21MZXZlbCk7CisgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUodW56b29tZWRSZWN0LngoKSwgdW56b29tZWRS
ZWN0LnkoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9v
bUxldmVsLCB6b29tTGV2ZWwpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0
ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOworICAgIH0KKworICAgIFtb
c2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6dW56b29tZWRSZWN0IGluVmll
dzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07CisgICAgW1tzZWFyY2gg
c2VhcmNoQnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKKyAgICAKKyAgICBwYWludElu
Zm8uY29udGV4dC0+cmVzdG9yZSgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgRU5B
QkxFKFZJREVPKQordHlwZWRlZiBlbnVtIHsKKyAgICBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNz
aWMgICA9IDEsCisgICAgTWVkaWFDb250cm9sbGVyVGhlbWVRVCAgICAgICAgPSAyCit9IE1lZGlh
Q29udHJvbGxlclRoZW1lU3R5bGU7CisKK3N0YXRpYyBpbnQgbWVkaWFDb250cm9sbGVyVGhlbWUo
KQoreworICAgIHN0YXRpYyBjb25zdCBsb25nIG1pbmltdW1RdWlja1RpbWVWZXJzaW9uID0gMHgw
NzYzMDAwMDsgLy8gNy42LjMKKyAgICBzdGF0aWMgU0ludDMyIHF1aWNrVGltZVZlcnNpb24gPSAw
OworICAgIHN0YXRpYyBpbnQgY29udHJvbGxlclRoZW1lID0gLTE7CisgICAgCisgICAgaWYgKGNv
bnRyb2xsZXJUaGVtZSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJUaGVtZTsKKwor
ICAgIGNvbnRyb2xsZXJUaGVtZSA9IE1lZGlhQ29udHJvbGxlclRoZW1lQ2xhc3NpYzsKKworICAg
IGlmICghcXVpY2tUaW1lVmVyc2lvbikgeworICAgICAgICBPU0VyciBlcnI7CisgICAgICAgIGVy
ciA9IEdlc3RhbHQoZ2VzdGFsdFF1aWNrVGltZSwgJnF1aWNrVGltZVZlcnNpb24pOworICAgICAg
ICBpZiAoZXJyICE9IG5vRXJyKQorICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJUaGVtZTsK
KyAgICB9CisgICAgaWYgKHF1aWNrVGltZVZlcnNpb24gPCBtaW5pbXVtUXVpY2tUaW1lVmVyc2lv
bikKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJUaGVtZTsKKworICAgIEJvb2xlYW4gdmFsaWRL
ZXk7CisgICAgQm9vbGVhbiB1c2VRVE1lZGlhVUkgPSBDRlByZWZlcmVuY2VzR2V0QXBwQm9vbGVh
blZhbHVlKENGU1RSKCJVc2VRdWlja1RpbWVNZWRpYVVJIiksIENGU1RSKCJjb20uYXBwbGUuV2Vi
Q29yZSIpLCAmdmFsaWRLZXkpOworCisjaWYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYm
ICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCisgICAgaWYgKHZhbGlkS2V5ICYmICF1c2VR
VE1lZGlhVUkpCisgICAgICAgIHJldHVybiBjb250cm9sbGVyVGhlbWU7CisjZWxzZQorICAgIGlm
ICghdmFsaWRLZXkgfHwgIXVzZVFUTWVkaWFVSSkKKyAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJU
aGVtZTsKKyNlbmRpZgorCisgICAgY29udHJvbGxlclRoZW1lID0gTWVkaWFDb250cm9sbGVyVGhl
bWVRVDsKKyAgICByZXR1cm4gY29udHJvbGxlclRoZW1lOworfQorI2VuZGlmCisKK2NvbnN0IGlu
dCBzbGlkZXJUaHVtYldpZHRoID0gMTU7Citjb25zdCBpbnQgc2xpZGVyVGh1bWJIZWlnaHQgPSAx
NTsKK2NvbnN0IGludCBtZWRpYVNsaWRlclRodW1iV2lkdGggPSAxMzsKK2NvbnN0IGludCBtZWRp
YVNsaWRlclRodW1iSGVpZ2h0ID0gMTQ7CisKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNs
aWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgZmxvYXQgem9vbUxl
dmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChvLT5zdHlsZSgpLT5h
cHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBvLT5zdHlsZSgpLT5h
cHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKKyAgICAgICAgby0+c3R5
bGUoKS0+c2V0V2lkdGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJXaWR0aCAq
IHpvb21MZXZlbCksIEZpeGVkKSk7CisgICAgICAgIG8tPnN0eWxlKCktPnNldEhlaWdodChMZW5n
dGgoc3RhdGljX2Nhc3Q8aW50PihzbGlkZXJUaHVtYkhlaWdodCAqIHpvb21MZXZlbCksIEZpeGVk
KSk7CisgICAgfSAKKworI2lmIEVOQUJMRShWSURFTykKKyAgICBlbHNlIGlmIChvLT5zdHlsZSgp
LT5hcHBlYXJhbmNlKCkgPT0gTWVkaWFTbGlkZXJUaHVtYlBhcnQpIHsKKyAgICAgICAgaW50IHdp
ZHRoID0gbWVkaWFTbGlkZXJUaHVtYldpZHRoOworICAgICAgICBpbnQgaGVpZ2h0ID0gbWVkaWFT
bGlkZXJUaHVtYkhlaWdodDsKKyAgICAgICAgCisgICAgICAgIGlmIChtZWRpYUNvbnRyb2xsZXJU
aGVtZSgpID09IE1lZGlhQ29udHJvbGxlclRoZW1lUVQpIHsKKyAgICAgICAgICAgIENHU2l6ZSAg
c2l6ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd2tNZWFzdXJlTWVkaWFVSVBhcnQoTWVk
aWFTbGlkZXJUaHVtYiwgTWVkaWFDb250cm9sbGVyVGhlbWVRVCwgTlVMTCwgJnNpemUpOworICAg
ICAgICAgICAgd2lkdGggPSBzaXplLndpZHRoOworICAgICAgICAgICAgaGVpZ2h0ID0gc2l6ZS5o
ZWlnaHQ7CisgICAgICAgIH0KKworICAgICAgICBvLT5zdHlsZSgpLT5zZXRXaWR0aChMZW5ndGgo
c3RhdGljX2Nhc3Q8aW50Pih3aWR0aCAqIHpvb21MZXZlbCksIEZpeGVkKSk7CisgICAgICAgIG8t
PnN0eWxlKCktPnNldEhlaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQgKiB6b29t
TGV2ZWwpLCBGaXhlZCkpOworICAgIH0KKyNlbmRpZgorfQorCisKKyNpZiBFTkFCTEUoVklERU8p
CisKK2VudW0gV0tNZWRpYUNvbnRyb2xsZXJUaGVtZVN0YXRlIHsgCisgICAgTWVkaWFVSVBhcnRE
aXNhYmxlZEZsYWcgPSAxIDw8IDAsCisgICAgTWVkaWFVSVBhcnRQcmVzc2VkRmxhZyA9IDEgPDwg
MSwKKyAgICBNZWRpYVVJUGFydERyYXdFbmRDYXBzRmxhZyA9IDEgPDwgMywKK307CisKK3N0YXRp
YyB1bnNpZ25lZCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3MoTm9kZSogbm9kZSkKK3sKKyAgICB1
bnNpZ25lZCBmbGFncyA9IDA7CisKKyAgICBpZiAobm9kZS0+ZGlzYWJsZWQoKSkKKyAgICAgICAg
ZmxhZ3MgfD0gTWVkaWFVSVBhcnREaXNhYmxlZEZsYWc7CisgICAgZWxzZSBpZiAobm9kZS0+YWN0
aXZlKCkpCisgICAgICAgIGZsYWdzIHw9IE1lZGlhVUlQYXJ0UHJlc3NlZEZsYWc7CisgICAgcmV0
dXJuIGZsYWdzOworfQorCisvLyBVdGlsaXR5IHRvIHNjYWxlIHdoZW4gdGhlIFVJIHBhcnQgYXJl
IG5vdCBzY2FsZWQgYnkgd2tEcmF3TWVkaWFVSVBhcnQKK3N0YXRpYyBGbG9hdFJlY3QgZ2V0VW56
b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZvcmlnaW5h
bFJlY3QpCit7CisgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpOworICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3Qob3JpZ2luYWxSZWN0KTsKKyAgICBpZiAo
em9vbUxldmVsICE9IDEuMGYgJiYgbWVkaWFDb250cm9sbGVyVGhlbWUoKSA9PSBNZWRpYUNvbnRy
b2xsZXJUaGVtZVFUKSB7CisgICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJl
Y3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CisgICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQo
dW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKKyAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKKyAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21M
ZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpvb21lZFJl
Y3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CisgICAgfQorICAgIHJldHVybiB1bnpvb21lZFJl
Y3Q7Cit9CisKKworYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7Cisg
ICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKyAgICB3a0Ry
YXdNZWRpYVVJUGFydChNZWRpYUZ1bGxzY3JlZW5CdXR0b24sIG1lZGlhQ29udHJvbGxlclRoZW1l
KCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBh
cnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVNYWM6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAg
ICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBu
b2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CisgICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFt
ZWRpYU5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUo
YXVkaW9UYWcpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKE1lZGlhQ29udHJv
bE11dGVCdXR0b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xNdXRlQnV0
dG9uRWxlbWVudCo+KG5vZGUpKSB7CisgICAgICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4
dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOworICAgICAgICB3a0RyYXdNZWRpYVVJ
UGFydChidG4tPmRpc3BsYXlUeXBlKCksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5m
by5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdz
KG5vZGUpKTsKKworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBO
b2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2Rl
LT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CisgICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFtZWRp
YU5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoYXVk
aW9UYWcpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKE1lZGlhQ29udHJvbFBs
YXlCdXR0b25FbGVtZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xQbGF5QnV0dG9u
RWxlbWVudCo+KG5vZGUpKSB7CisgICAgICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBs
b2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOworICAgICAgICB3a0RyYXdNZWRpYVVJUGFy
dChidG4tPmRpc3BsYXlUeXBlKCksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5j
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5v
ZGUpKTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lTWFj
OjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIE5v
ZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50
SW5mby5jb250ZXh0KTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVNlZWtCYWNrQnV0dG9u
LCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7Cisg
ICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKyAgICB3a0Ry
YXdNZWRpYVVJUGFydChNZWRpYVNlZWtGb3J3YXJkQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVt
ZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQ
YXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRl
clRoZW1lTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/
IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKKyAgICBpZiAoIW1lZGlhTm9kZSB8fCAo
IW1lZGlhTm9kZS0+aGFzVGFnTmFtZSh2aWRlb1RhZykgJiYgIW1lZGlhTm9kZS0+aGFzVGFnTmFt
ZShhdWRpb1RhZykpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBIVE1MTWVkaWFFbGVt
ZW50KiBtZWRpYUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTWVkaWFFbGVtZW50Kj4obWVkaWFO
b2RlKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVk
KCk7CisgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uOworICAgIGZsb2F0IHRpbWVM
b2FkZWQgPSB0aW1lUmFuZ2VzLT5sZW5ndGgoKSA/IHRpbWVSYW5nZXMtPmVuZCgwLCBpZ25vcmVk
RXhjZXB0aW9uKSA6IDA7CisgICAgZmxvYXQgY3VycmVudFRpbWUgPSBtZWRpYUVsZW1lbnQtPmN1
cnJlbnRUaW1lKCk7CisgICAgZmxvYXQgZHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0aW9u
KCk7CisgICAgaWYgKGlzbmFuKGR1cmF0aW9uKSkKKyAgICAgICAgZHVyYXRpb24gPSAwOworIAor
ICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVj
dCA9IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywg
cik7CisgICAgd2tEcmF3TWVkaWFTbGlkZXJUcmFjayhtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVkUmVjdCwgCisgICAg
ICAgIHRpbWVMb2FkZWQsIGN1cnJlbnRUaW1lLCBkdXJhdGlvbiwgZ2V0TWVkaWFVSVBhcnRTdGF0
ZUZsYWdzKG5vZGUpKTsKKyAgICAKKyAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNs
aWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBOb2RlKiBub2RlID0gby0+bm9k
ZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTG9jYWxD
dXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7Cisg
ICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTbGlkZXJUaHVtYiwgbWVkaWFDb250cm9sbGVyVGhl
bWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJ
UGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK2Jvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQoreworICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CisgICAgaWYgKCFub2RlKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxv
Y2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVk
aWFSZXdpbmRCdXR0b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFS
ZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0
OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBOb2RlKiBu
b2RlID0gby0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJ
bmZvLmNvbnRleHQpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhUmV0dXJuVG9SZWFsdGlt
ZUJ1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhQ29udHJv
bHNCYWNrZ3JvdW5kKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBOb2RlKiBub2RlID0gby0+
bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTG9j
YWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7
CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lbGluZUNvbnRhaW5lciwgbWVkaWFDb250
cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBn
ZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAg
ICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0Q3VycmVu
dENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYUN1
cnJlbnRUaW1lRGlzcGxheSwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLCB1bnpvb21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVG
bGFncyhub2RlKSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFUaW1lUmVtYWlu
aW5nKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwor
ICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNhdmUoKTsKKyAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRS
ZWN0QW5kQWRqdXN0Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKKyAgICB3a0RyYXdN
ZWRpYVVJUGFydChNZWRpYVRpbWVSZW1haW5pbmdEaXNwbGF5LCBtZWRpYUNvbnRyb2xsZXJUaGVt
ZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHVuem9vbWVkUmVjdCwg
Z2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+
cmVzdG9yZSgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIFJlbmRlclRoZW1lTWFj
OjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKK3sKKyAgICBpZiAobWVkaWFDb250cm9s
bGVyVGhlbWUoKSA9PSBNZWRpYUNvbnRyb2xsZXJUaGVtZVFUKSAKKyAgICAgICAgcmV0dXJuIFN0
cmluZyhtZWRpYUNvbnRyb2xzUVRVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250
cm9sc1FUVXNlckFnZW50U3R5bGVTaGVldCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworfQorI2VuZGlmCisKK05TUG9wVXBCdXR0b25DZWxsKiBSZW5kZXJUaGVtZU1hYzo6
cG9wdXBCdXR0b24oKSBjb25zdAoreworICAgIGlmICghbV9wb3B1cEJ1dHRvbikgeworICAgICAg
ICBtX3BvcHVwQnV0dG9uLmFkb3B0TlMoW1tOU1BvcFVwQnV0dG9uQ2VsbCBhbGxvY10gaW5pdFRl
eHRDZWxsOkAiIiBwdWxsc0Rvd246Tk9dKTsKKyAgICAgICAgW21fcG9wdXBCdXR0b24uZ2V0KCkg
c2V0VXNlc0l0ZW1Gcm9tTWVudTpOT107CisgICAgICAgIFttX3BvcHVwQnV0dG9uLmdldCgpIHNl
dEZvY3VzUmluZ1R5cGU6TlNGb2N1c1JpbmdUeXBlRXh0ZXJpb3JdOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gbV9wb3B1cEJ1dHRvbi5nZXQoKTsKK30KKworTlNTZWFyY2hGaWVsZENlbGwqIFJl
bmRlclRoZW1lTWFjOjpzZWFyY2goKSBjb25zdAoreworICAgIGlmICghbV9zZWFyY2gpIHsKKyAg
ICAgICAgbV9zZWFyY2guYWRvcHROUyhbW05TU2VhcmNoRmllbGRDZWxsIGFsbG9jXSBpbml0VGV4
dENlbGw6QCIiXSk7CisgICAgICAgIFttX3NlYXJjaC5nZXQoKSBzZXRCZXplbFN0eWxlOk5TVGV4
dEZpZWxkUm91bmRlZEJlemVsXTsKKyAgICAgICAgW21fc2VhcmNoLmdldCgpIHNldEJlemVsZWQ6
WUVTXTsKKyAgICAgICAgW21fc2VhcmNoLmdldCgpIHNldEVkaXRhYmxlOllFU107CisgICAgICAg
IFttX3NlYXJjaC5nZXQoKSBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZUV4dGVyaW9y
XTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9zZWFyY2guZ2V0KCk7Cit9CisKK05TTWVudSogUmVu
ZGVyVGhlbWVNYWM6OnNlYXJjaE1lbnVUZW1wbGF0ZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Nl
YXJjaE1lbnVUZW1wbGF0ZSkKKyAgICAgICAgbV9zZWFyY2hNZW51VGVtcGxhdGUuYWRvcHROUyhb
W05TTWVudSBhbGxvY10gaW5pdFdpdGhUaXRsZTpAIiJdKTsKKworICAgIHJldHVybiBtX3NlYXJj
aE1lbnVUZW1wbGF0ZS5nZXQoKTsKK30KKworTlNTbGlkZXJDZWxsKiBSZW5kZXJUaGVtZU1hYzo6
c2xpZGVyVGh1bWJIb3Jpem9udGFsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2xpZGVyVGh1bWJI
b3Jpem9udGFsKSB7CisgICAgICAgIG1fc2xpZGVyVGh1bWJIb3Jpem9udGFsLmFkb3B0TlMoW1tO
U1NsaWRlckNlbGwgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW21fc2xpZGVyVGh1bWJIb3Jpem9u
dGFsLmdldCgpIHNldFRpdGxlOm5pbF07CisgICAgICAgIFttX3NsaWRlclRodW1iSG9yaXpvbnRh
bC5nZXQoKSBzZXRTbGlkZXJUeXBlOk5TTGluZWFyU2xpZGVyXTsKKyAgICAgICAgW21fc2xpZGVy
VGh1bWJIb3Jpem9udGFsLmdldCgpIHNldENvbnRyb2xTaXplOk5TU21hbGxDb250cm9sU2l6ZV07
CisgICAgICAgIFttX3NsaWRlclRodW1iSG9yaXpvbnRhbC5nZXQoKSBzZXRGb2N1c1JpbmdUeXBl
Ok5TRm9jdXNSaW5nVHlwZUV4dGVyaW9yXTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1fc2xp
ZGVyVGh1bWJIb3Jpem9udGFsLmdldCgpOworfQorCitOU1NsaWRlckNlbGwqIFJlbmRlclRoZW1l
TWFjOjpzbGlkZXJUaHVtYlZlcnRpY2FsKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2xpZGVyVGh1
bWJWZXJ0aWNhbCkgeworICAgICAgICBtX3NsaWRlclRodW1iVmVydGljYWwuYWRvcHROUyhbW05T
U2xpZGVyQ2VsbCBhbGxvY10gaW5pdF0pOworICAgICAgICBbbV9zbGlkZXJUaHVtYlZlcnRpY2Fs
LmdldCgpIHNldFRpdGxlOm5pbF07CisgICAgICAgIFttX3NsaWRlclRodW1iVmVydGljYWwuZ2V0
KCkgc2V0U2xpZGVyVHlwZTpOU0xpbmVhclNsaWRlcl07CisgICAgICAgIFttX3NsaWRlclRodW1i
VmVydGljYWwuZ2V0KCkgc2V0Q29udHJvbFNpemU6TlNTbWFsbENvbnRyb2xTaXplXTsKKyAgICAg
ICAgW21fc2xpZGVyVGh1bWJWZXJ0aWNhbC5nZXQoKSBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNS
aW5nVHlwZUV4dGVyaW9yXTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1fc2xpZGVyVGh1bWJW
ZXJ0aWNhbC5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCShyZXZpc2lvbiA0ODM5MikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUsIEluYy4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
MTgsOSArMTksMTAgQEAKICAqLwogCiAjaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIlJlbmRl
clRoZW1lTWFjLmgiCisjaW1wb3J0ICJSZW5kZXJUaGVtZUNocm9taXVtTWFjLmgiCiAKICNpbXBv
cnQgIkJpdG1hcEltYWdlLmgiCisjaW1wb3J0ICJDaHJvbWl1bUJyaWRnZS5oIgogI2ltcG9ydCAi
Q29sb3JNYWMuaCIKICNpbXBvcnQgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbXBvcnQgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKQEAgLTM4LDcgKzQwLDYgQEAKICNpbXBvcnQgIlJlbmRlclNsaWRlci5o
IgogI2ltcG9ydCAiUmVuZGVyVmlldy5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCi0jaW1w
b3J0ICJUaW1lUmFuZ2VzLmgiCiAjaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCiAj
aW1wb3J0ICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgogI2ltcG9ydCA8Q2FyYm9uL0NhcmJvbi5o
PgpAQCAtNTQsNiArNTUsMjMgQEAgdHlwZWRlZiB1bnNpZ25lZCBOU1VJbnRlZ2VyOwogCiB1c2lu
ZyBzdGQ6Om1pbjsKIAorLy8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLmggZmlsZSkg
aXMgYSBjbG9uZSBvZiBSZW5kZXJUaGVtZU1hYy5tbS4KKy8vIEJlY2F1c2UgdGhlIG9yaWdpbmFs
IGZpbGUgaXMgZGVzaWduZWQgdG8gcnVuIGluLXByb2Nlc3MgaW5zaWRlIGEgQ29jb2EgdmlldywK
Ky8vIHdlIG11c3QgbWFpbnRhaW4gYSBmb3JrLiBQbGVhc2UgbWFpbnRhaW4gdGhpcyBmaWxlIGJ5
IHBlcmZvcm1pbmcgcGFyYWxsZWwKKy8vIGNoYW5nZXMgdG8gaXQuCisvLworLy8gVGhlIG9ubHkg
Y2hhbmdlcyBmcm9tIFJlbmRlclRoZW1lTWFjIHNob3VsZCBiZToKKy8vIC0gVGhlIGNsYXNzbmFt
ZSBjaGFuZ2UgZnJvbSBSZW5kZXJUaGVtZU1hYyB0byBSZW5kZXJUaGVtZUNocm9taXVtTWFjLgor
Ly8gLSBUaGUgaW50cm9kdWN0aW9uIG9mIFJUQ01GbGlwcGVkVmlldyBhbmQgRmxpcHBlZFZpZXco
KSBhbmQgaXRzIHVzZSBhcyB0aGUKKy8vICAgcGFyZW50IHZpZXcgZm9yIGNlbGwgcmVuZGVyaW5n
LgorLy8gLSBJbiBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCksIHRoZSB1c2Ugb2YgQ2hyb21pdW1C
cmlkZ2UgdG8gZGV0ZXJtaW5lIGlmCisvLyAgIHdlJ3JlIGluIGxheW91dCB0ZXN0IG1vZGUuCisv
LyAtIHVwZGF0ZUFjdGl2ZVN0YXRlKCkgYW5kIGl0cyB1c2UgdG8gdXBkYXRlIHRoZSBjZWxscycg
dmlzdWFsIGFwcGVhcmFuY2UuCisvLworLy8gRm9yIGFsbCBvdGhlciBkaWZmZXJlbmNlcywgaWYg
aXQgd2FzIGludHJvZHVjZWQgaW4gdGhpcyBmaWxlLCB0aGVuIHRoZQorLy8gbWFpbnRhaW5lciBm
b3Jnb3QgdG8gaW5jbHVkZSBpdCBpbiB0aGUgbGlzdDsgb3RoZXJ3aXNlIGl0IGlzIGFuIHVwZGF0
ZSB0aGF0CisvLyBzaG91bGQgaGF2ZSBiZWVuIGFwcGxpZWQgdG8gdGhpcyBmaWxlIGJ1dCB3YXMg
bm90LgorCiAvLyBUaGUgbWV0aG9kcyBpbiB0aGlzIGZpbGUgYXJlIHNwZWNpZmljIHRvIHRoZSBN
YWMgT1MgWCBwbGF0Zm9ybS4KIAogLy8gRklYTUU6IFRoZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBj
b2RlIGluIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIGZhY3RvcmVkIG91dCBhbmQgbWVyZ2VkIHdpdGgg
UmVuZGVyVGhlbWVTYWZhcmkuIApAQCAtODYsNiArMTA0LDI2IEBAIHVzaW5nIHN0ZDo6bWluOwog
CiBAZW5kCiAKK0BpbnRlcmZhY2UgUlRDTUZsaXBwZWRWaWV3IDogTlNWaWV3Cit7fQorCistIChC
T09MKWlzRmxpcHBlZDsKKy0gKE5TVGV4dCAqKWN1cnJlbnRFZGl0b3I7CisKK0BlbmQKKworQGlt
cGxlbWVudGF0aW9uIFJUQ01GbGlwcGVkVmlldworCistIChCT09MKWlzRmxpcHBlZCB7CisgICAg
cmV0dXJuIFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRmxpcHBlZF07Cit9
CisKKy0gKE5TVGV4dCAqKWN1cnJlbnRFZGl0b3IgeworICAgIHJldHVybiBuaWw7Cit9CisKK0Bl
bmQKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpA
QCAtMTA0LDE4ICsxNDIsMjggQEAgZW51bSB7CiAgICAgbGVmdFBhZGRpbmcKIH07CiAKKy8vIElu
IFNub3cgTGVvcGFyZCwgbWFueSBjZWxscyBvbmx5IGNoZWNrIHRvIHNlZSBpZiB0aGUgdmlldyB0
aGV5J3JlIHBhc3NlZCBpcworLy8gZmxpcHBlZCwgYW5kIGlmIGEgbmlsIHZpZXcgaXMgcGFzc2Vk
LCBuZWdsZWN0IHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50CisvLyBncmFwaGljcyBjb250ZXh0IGlz
IGZsaXBwZWQuIFRodXMgd2UgcGFzcyBhIHNoYW0gdmlldyB0byB0aGVtLCBvbmUgd2hvc2UKKy8v
IGZsaXBwZWQgc3RhdGUganVzdCByZWZsZWN0cyB0aGUgc3RhdGUgb2YgdGhlIGNvbnRleHQuCitO
U1ZpZXcqIEZsaXBwZWRWaWV3KCkKK3sKKyAgICBzdGF0aWMgTlNWaWV3KiB2aWV3ID0gW1tSVENN
RmxpcHBlZFZpZXcgYWxsb2NdIGluaXRdOworICAgIHJldHVybiB2aWV3OworfQorCiBQYXNzUmVm
UHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqKQogewotICAg
IHN0YXRpYyBSZW5kZXJUaGVtZSogcnQgPSBSZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkucmVsZWFz
ZVJlZigpOworICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogcnQgPSBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjpjcmVhdGUoKS5yZWxlYXNlUmVmKCk7CiAgICAgcmV0dXJuIHJ0OwogfQogCi1QYXNzUmVm
UHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkKK1Bhc3NSZWZQdHI8UmVu
ZGVyVGhlbWU+IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZU1hYyk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjKTsKIH0KIAotUmVuZGVyVGhlbWVNYWM6OlJlbmRlclRoZW1l
TWFjKCkKK1JlbmRlclRoZW1lQ2hyb21pdW1NYWM6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWMoKQog
ICAgIDogbV9pc1NsaWRlclRodW1iSG9yaXpvbnRhbFByZXNzZWQoZmFsc2UpCiAgICAgLCBtX2lz
U2xpZGVyVGh1bWJWZXJ0aWNhbFByZXNzZWQoZmFsc2UpCiAgICAgLCBtX25vdGlmaWNhdGlvbk9i
c2VydmVyKEFkb3B0TlMsIFtbV2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2JzZXJ2ZXIg
YWxsb2NdIGluaXRXaXRoVGhlbWU6dGhpc10pCkBAIC0xMjYsNDggKzE3NCw0OCBAQCBSZW5kZXJU
aGVtZU1hYzo6UmVuZGVyVGhlbWVNYWMoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdDpuaWxdOwogfQogCi1SZW5kZXJUaGVt
ZU1hYzo6flJlbmRlclRoZW1lTWFjKCkKK1JlbmRlclRoZW1lQ2hyb21pdW1NYWM6On5SZW5kZXJU
aGVtZUNocm9taXVtTWFjKCkKIHsKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRD
ZW50ZXJdIHJlbW92ZU9ic2VydmVyOm1fbm90aWZpY2F0aW9uT2JzZXJ2ZXIuZ2V0KCldOwogfQog
Ci1Db2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewogICAgIE5TQ29sb3IqIGNvbG9y
ID0gW1tOU0NvbG9yIHNlbGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcl0gY29sb3JVc2luZ0NvbG9y
U3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07CiAgICAgcmV0dXJuIENvbG9yKHN0YXRp
Y19jYXN0PGludD4oMjU1LjAgKiBbY29sb3IgcmVkQ29tcG9uZW50XSksIHN0YXRpY19jYXN0PGlu
dD4oMjU1LjAgKiBbY29sb3IgZ3JlZW5Db21wb25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUu
MCAqIFtjb2xvciBibHVlQ29tcG9uZW50XSkpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZU1hYzo6
cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CitDb2xvciBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3Vu
ZENvbG9yKCkgY29uc3QKIHsKICAgICBOU0NvbG9yKiBjb2xvciA9IFtbTlNDb2xvciBzZWNvbmRh
cnlTZWxlY3RlZENvbnRyb2xDb2xvcl0gY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNl
UkdCQ29sb3JTcGFjZV07CiAgICAgcmV0dXJuIENvbG9yKHN0YXRpY19jYXN0PGludD4oMjU1LjAg
KiBbY29sb3IgcmVkQ29tcG9uZW50XSksIHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3Ig
Z3JlZW5Db21wb25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciBibHVlQ29t
cG9uZW50XSkpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1BY3RpdmVMaXN0
Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigp
IGNvbnN0CiB7CiAgICAgTlNDb2xvciogY29sb3IgPSBbW05TQ29sb3IgYWx0ZXJuYXRlU2VsZWN0
ZWRDb250cm9sQ29sb3JdIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9y
U3BhY2VdOwogICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9y
IHJlZENvbXBvbmVudF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIGdyZWVuQ29t
cG9uZW50XSksIHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3IgYmx1ZUNvbXBvbmVudF0p
KTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAog
ewogICAgIHJldHVybiBDb2xvcjo6d2hpdGU7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lTWFjOjpw
bGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CitD
b2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIENvbG9yOjpibGFjazsK
IH0KIAotQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25z
dAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigp
IGNvbnN0CiB7Ci0gICAgaWYgKHVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCkpCisgICAgaWYg
KENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQogICAgICAgICByZXR1cm4gb2xkQXF1
YUZvY3VzUmluZ0NvbG9yKCk7CiAKICAgICByZXR1cm4gc3lzdGVtQ29sb3IoQ1NTVmFsdWVXZWJr
aXRGb2N1c1JpbmdDb2xvcik7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUlu
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CitDb2xvciBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKTsKIH0KQEAgLTE5OSw3ICsyNDcsNyBAQCBzdGF0aWMgRm9udFdl
aWdodCB0b0ZvbnRXZWlnaHQoTlNJbnRlZ2VyCiAgICAgcmV0dXJuIGZvbnRXZWlnaHRzW2FwcEtp
dEZvbnRXZWlnaHQgLSAxXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c3lzdGVtRm9udChp
bnQgY3NzVmFsdWVJZCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnN5c3RlbUZvbnQoaW50IGNzc1ZhbHVlSWQsIEZv
bnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIERFRklORV9TVEFU
SUNfTE9DQUwoRm9udERlc2NyaXB0aW9uLCBzeXN0ZW1Gb250LCAoKSk7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChGb250RGVzY3JpcHRpb24sIHNtYWxsU3lzdGVtRm9udCwgKCkpOwpAQCAtMzI4
LDEzICszNzYsMTMgQEAgc3RhdGljIFJHQkEzMiBtZW51QmFja2dyb3VuZENvbG9yKCkKICAgICBy
ZXR1cm4gbWFrZVJHQihwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdKTsKIH0KIAotdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKQordm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpCiB7CiAgICAgbV9zeXN0ZW1D
b2xvckNhY2hlLmNsZWFyKCk7CiAgICAgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQ29sb3JzRGlkQ2hh
bmdlKCk7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Db2xvcihpbnQgY3NzVmFs
dWVJZCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnN5c3RlbUNvbG9yKGlu
dCBjc3NWYWx1ZUlkKSBjb25zdAogewogICAgIGlmIChtX3N5c3RlbUNvbG9yQ2FjaGUuY29udGFp
bnMoY3NzVmFsdWVJZCkpCiAgICAgICAgIHJldHVybiBtX3N5c3RlbUNvbG9yQ2FjaGUuZ2V0KGNz
c1ZhbHVlSWQpOwpAQCAtNDQ3LDcgKzQ5NSw3IEBAIENvbG9yIFJlbmRlclRoZW1lTWFjOjpzeXN0
ZW1Db2xvcihpbnQgY3MKICAgICByZXR1cm4gY29sb3I7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVN
YWM6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRl
ckRhdGEmIGJvcmRlciwKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6aXNDb250cm9sU3R5
bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZpbGxMYXllciYgYmFj
a2dyb3VuZCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKICAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBUZXh0RmllbGRQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNl
KCkgPT0gVGV4dEFyZWFQYXJ0IHx8IHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTGlzdGJveFBhcnQp
CkBAIC00NjMsNyArNTExLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6aXNDb250cm9sU3R5bGVk
KGNvbgogICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3Jk
ZXIsIGJhY2tncm91bmQsIGJhY2tncm91bmRDb2xvcik7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikK
K3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVu
ZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByKQogewogICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBvLT5z
dHlsZSgpLT5hcHBlYXJhbmNlKCk7CiAgICAgCkBAIC00OTIsNyArNTQwLDcgQEAgdm9pZCBSZW5k
ZXJUaGVtZU1hYzo6YWRqdXN0UmVwYWludFJlY3QoYwogICAgIH0KIH0KIAotSW50UmVjdCBSZW5k
ZXJUaGVtZU1hYzo6aW5mbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgciwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2ZWwpIGNvbnN0CitJbnRSZWN0
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNv
bnN0IEludFNpemUmIHNpemUsIGNvbnN0IGludCogbWFyZ2lucywgZmxvYXQgem9vbUxldmVsKSBj
b25zdAogewogICAgIC8vIE9ubHkgZG8gdGhlIGluZmxhdGlvbiBpZiB0aGUgYXZhaWxhYmxlIHdp
ZHRoL2hlaWdodCBhcmUgdG9vIHNtYWxsLiAgT3RoZXJ3aXNlIHRyeSB0bwogICAgIC8vIGZpdCB0
aGUgZ2xvdy9jaGVjayBzcGFjZSBpbnRvIHRoZSBhdmFpbGFibGUgYm94J3Mgd2lkdGgvaGVpZ2h0
LgpAQCAtNTEwLDcgKzU1OCw3IEBAIEludFJlY3QgUmVuZGVyVGhlbWVNYWM6OmluZmxhdGVSZWN0
KGNvbnMKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1GbG9hdFJlY3QgUmVuZGVyVGhlbWVNYWM6
OmNvbnZlcnRUb1BhaW50aW5nUmVjdChjb25zdCBSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIs
IGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBjb25zdCBGbG9hdFJlY3QmIGlucHV0
UmVjdCwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKK0Zsb2F0UmVjdCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJl
bmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0
JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0CiB7CiAgICAgRmxvYXRSZWN0IHBh
cnRSZWN0KGlucHV0UmVjdCk7CiAgICAgCkBAIC01MzIsNyArNTgwLDI2IEBAIEZsb2F0UmVjdCBS
ZW5kZXJUaGVtZU1hYzo6Y29udmVydFRvUGFpbnQKICAgICByZXR1cm4gcGFydFJlY3Q7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNv
bnN0IFJlbmRlck9iamVjdCogbykKKy8vIFVwZGF0ZXMgdGhlIGNvbnRyb2wgdGludCAoYS5rLmEu
IGFjdGl2ZSBzdGF0ZSkgb2YgfGNlbGx8IChmcm9tIHxvfCkuCisvLyBJbiB0aGUgQ2hyb21pdW0g
cG9ydCwgdGhlIHJlbmRlcmVyIHJ1bnMgYXMgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgYW5kIGNvbnRy
b2xzJworLy8gTlNDZWxsKHMpIGxhY2sgYSBwYXJlbnQgTlNWaWV3LiBUaGVyZWZvcmUgY29udHJv
bHMgZG9uJ3QgaGF2ZSB0aGVpciB0aW50CisvLyBjb2xvciB1cGRhdGVkIGNvcnJlY3RseSB3aGVu
IHRoZSBhcHBsaWNhdGlvbiBpcyBhY3RpdmF0ZWQvZGVhY3RpdmF0ZWQuCisvLyBGb2N1c0NvbnRy
b2xsZXIncyBzZXRBY3RpdmUoKSBpcyBjYWxsZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMKKy8v
IGFjdGl2YXRlZC9kZWFjdGl2YXRlZCwgd2hpY2ggY2F1c2VzIGEgcmVwYWludCBhdCB3aGljaCB0
aW1lIHRoaXMgY29kZSBpcworLy8gY2FsbGVkLgorLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUg
Y2FsbGVkIGJlZm9yZSBkcmF3aW5nIGFueSBOU0NlbGwtZGVyaXZlZCBjb250cm9scywKKy8vIHVu
bGVzcyB5b3UncmUgc3VyZSBpdCBpc24ndCBuZWVkZWQuCit2b2lkIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnVwZGF0ZUFjdGl2ZVN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0
KiBvKQoreworICAgIE5TQ29udHJvbFRpbnQgb2xkVGludCA9IFtjZWxsIGNvbnRyb2xUaW50XTsK
KyAgICBOU0NvbnRyb2xUaW50IHRpbnQgPSBpc0FjdGl2ZShvKSA/IFtOU0NvbG9yIGN1cnJlbnRD
b250cm9sVGludF0gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlND
bGVhckNvbnRyb2xUaW50OworCisgICAgaWYgKHRpbnQgIT0gb2xkVGludCkKKyAgICAgICAgW2Nl
bGwgc2V0Q29udHJvbFRpbnQ6dGludF07Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6dXBkYXRlQ2hlY2tlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KiBv
KQogewogICAgIGJvb2wgb2xkSW5kZXRlcm1pbmF0ZSA9IFtjZWxsIHN0YXRlXSA9PSBOU01peGVk
U3RhdGU7CiAgICAgYm9vbCBpbmRldGVybWluYXRlID0gaXNJbmRldGVybWluYXRlKG8pOwpAQCAt
NTQ4LDcgKzYxNSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZSgK
ICAgICAgICAgW2NlbGwgc2V0U3RhdGU6Y2hlY2tlZCA/IE5TT25TdGF0ZSA6IE5TT2ZmU3RhdGVd
OwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiBj
ZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCogbykK
IHsKICAgICBib29sIG9sZEVuYWJsZWQgPSBbY2VsbCBpc0VuYWJsZWRdOwogICAgIGJvb2wgZW5h
YmxlZCA9IGlzRW5hYmxlZChvKTsKQEAgLTU1Niw3ICs2MjMsNyBAQCB2b2lkIFJlbmRlclRoZW1l
TWFjOjp1cGRhdGVFbmFibGVkU3RhdGUoCiAgICAgICAgIFtjZWxsIHNldEVuYWJsZWQ6ZW5hYmxl
ZF07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwq
IGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCogbykKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6dXBkYXRlRm9jdXNlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KiBv
KQogewogICAgIGJvb2wgb2xkRm9jdXNlZCA9IFtjZWxsIHNob3dzRmlyc3RSZXNwb25kZXJdOwog
ICAgIGJvb2wgZm9jdXNlZCA9IGlzRm9jdXNlZChvKSAmJiBvLT5zdHlsZSgpLT5vdXRsaW5lU3R5
bGVJc0F1dG8oKTsKQEAgLTU2NCw3ICs2MzEsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRh
dGVGb2N1c2VkU3RhdGUoCiAgICAgICAgIFtjZWxsIHNldFNob3dzRmlyc3RSZXNwb25kZXI6Zm9j
dXNlZF07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZShOU0Nl
bGwqIGNlbGwsIGNvbnN0IFJlbmRlck9iamVjdCogbykKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6dXBkYXRlUHJlc3NlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0
KiBvKQogewogICAgIGJvb2wgb2xkUHJlc3NlZCA9IFtjZWxsIGlzSGlnaGxpZ2h0ZWRdOwogICAg
IGJvb2wgcHJlc3NlZCA9IChvLT5ub2RlKCkgJiYgby0+bm9kZSgpLT5hY3RpdmUoKSk7CkBAIC01
NzIsNyArNjM5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlUHJlc3NlZFN0YXRlKAog
ICAgICAgICBbY2VsbCBzZXRIaWdobGlnaHRlZDpwcmVzc2VkXTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZU1hYzo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25z
dAorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpjb250cm9sU3VwcG9ydHNUaW50cyhjb25z
dCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0CiB7CiAgICAgLy8gQW4gYWx0ZXJuYXRlIHdheSB0byBp
bXBsZW1lbnQgdGhpcyB3b3VsZCBiZSB0byBnZXQgdGhlIGFwcHJvcHJpYXRlIGNlbGwgb2JqZWN0
CiAgICAgLy8gYW5kIGNhbGwgdGhlIHByaXZhdGUgX25lZWRSZWRyYXdPbldpbmRvd0NoYW5nZWRL
ZXlTdGF0ZSBtZXRob2QuIEFuIGFkdmFudGFnZSBvZgpAQCAtNTkwLDcgKzY1Nyw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnQKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JGb250KFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKK05TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6Y29udHJvbFNpemVGb3JGb250KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBp
bnQgZm9udFNpemUgPSBzdHlsZS0+Zm9udFNpemUoKTsKICAgICBpZiAoZm9udFNpemUgPj0gMTYp
CkBAIC02MDAsNyArNjY3LDcgQEAgTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJv
bFNpegogICAgIHJldHVybiBOU01pbmlDb250cm9sU2l6ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6c2V0Q29udHJvbFNpemUoTlNDZWxsKiBjZWxsLCBjb25zdCBJbnRTaXplKiBzaXplcywg
Y29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVsKQordm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpzZXRDb250cm9sU2l6ZShOU0NlbGwqIGNlbGwsIGNvbnN0IEludFNpemUq
IHNpemVzLCBjb25zdCBJbnRTaXplJiBtaW5TaXplLCBmbG9hdCB6b29tTGV2ZWwpCiB7CiAgICAg
TlNDb250cm9sU2l6ZSBzaXplOwogICAgIGlmIChtaW5TaXplLndpZHRoKCkgPj0gc3RhdGljX2Nh
c3Q8aW50PihzaXplc1tOU1JlZ3VsYXJDb250cm9sU2l6ZV0ud2lkdGgoKSAqIHpvb21MZXZlbCkg
JiYKQEAgLTYxNSw3ICs2ODIsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRDb250cm9sU2l6
ZShOU0NlCiAgICAgICAgIFtjZWxsIHNldENvbnRyb2xTaXplOnNpemVdOwogfQogCi1JbnRTaXpl
IFJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IElu
dFNpemUqIHNpemVzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzaXpl
Rm9yRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAog
ewogICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKICAgICAgICAgSW50
U2l6ZSByZXN1bHQgPSBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKQEAgLTYyNCw3
ICs2OTEsNyBAQCBJbnRTaXplIFJlbmRlclRoZW1lTWFjOjpzaXplRm9yRm9udChSZW5kCiAgICAg
cmV0dXJuIHNpemVzW2NvbnRyb2xTaXplRm9yRm9udChzdHlsZSldOwogfQogCi1JbnRTaXplIFJl
bmRlclRoZW1lTWFjOjpzaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0
IEludFNpemUqIHNpemVzKSBjb25zdAorSW50U2l6ZSBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpz
aXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEludFNpemUqIHNpemVz
KSBjb25zdAogewogICAgIGlmIChzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpICE9IDEuMGYpIHsKICAg
ICAgICAgSW50U2l6ZSByZXN1bHQgPSBzaXplc1tjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQoc3R5
bGUpXTsKQEAgLTYzMyw3ICs3MDAsNyBAQCBJbnRTaXplIFJlbmRlclRoZW1lTWFjOjpzaXplRm9y
U3lzdGVtRm9uCiAgICAgcmV0dXJuIHNpemVzW2NvbnRyb2xTaXplRm9yU3lzdGVtRm9udChzdHls
ZSldOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRTaXplRnJvbUZvbnQoUmVuZGVyU3R5
bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6c2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50
U2l6ZSogc2l6ZXMpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2lu
Y2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgogICAg
IEludFNpemUgc2l6ZSA9IHNpemVGb3JGb250KHN0eWxlLCBzaXplcyk7CkBAIC02NDMsNyArNzEw
LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZyb21Gb250KFJlbgogICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTaXplKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpIGNvbnN0Cit2
b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldEZvbnRGcm9tQ29udHJvbFNpemUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSkgY29uc3QKIHsKICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uOwogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKQEAgLTY2MSw3ICs3MjgsNyBA
QCB2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRGb250RnJvbUNvbnRyb2xTCiAgICAgICAgIHN0eWxl
LT5mb250KCkudXBkYXRlKDApOwogfQogCi1OU0NvbnRyb2xTaXplIFJlbmRlclRoZW1lTWFjOjpj
b250cm9sU2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorTlNDb250
cm9sU2l6ZSBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpjb250cm9sU2l6ZUZvclN5c3RlbUZvbnQo
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIGludCBmb250U2l6ZSA9IHN0eWxlLT5m
b250U2l6ZSgpOwogICAgIGlmIChmb250U2l6ZSA+PSBbTlNGb250IHN5c3RlbUZvbnRTaXplRm9y
Q29udHJvbFNpemU6TlNSZWd1bGFyQ29udHJvbFNpemVdKQpAQCAtNjcxLDE4ICs3MzgsMTggQEAg
TlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpegogICAgIHJldHVybiBOU01p
bmlDb250cm9sU2l6ZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0RmllbGQo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFRl
eHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3ND
b250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CiAgICAgd2tEcmF3QmV6ZWxl
ZFRleHRGaWVsZENlbGwociwgaXNFbmFibGVkKG8pICYmICFpc1JlYWRPbmx5Q29udHJvbChvKSk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0
RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0CiB7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRDYXBzTG9ja0luZGljYXRvcihS
ZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQogewogICAgIGlmIChwYWludEluZm8uY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY5MywxOCArNzYwLDE4IEBAIGJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2EKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFRleHRBcmVhKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcikKIHsKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250
ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKICAgICB3a0RyYXdCZXplbGVkVGV4dEFyZWEociwgaXNF
bmFibGVkKG8pICYmICFpc1JlYWRPbmx5Q29udHJvbChvKSk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjphZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdAogewogfQogCi1jb25zdCBpbnQqIFJlbmRlclRoZW1lTWFj
Ojpwb3B1cEJ1dHRvbk1hcmdpbnMoKSBjb25zdAorY29uc3QgaW50KiBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpwb3B1cEJ1dHRvbk1hcmdpbnMoKSBjb25zdAogewogICAgIHN0YXRpYyBjb25zdCBp
bnQgbWFyZ2luc1szXVs0XSA9CiAgICAgewpAQCAtNzE1LDEzICs3ODIsMTMgQEAgY29uc3QgaW50
KiBSZW5kZXJUaGVtZU1hYzo6cG9wdXBCdXR0b25NYQogICAgIHJldHVybiBtYXJnaW5zW1twb3B1
cEJ1dHRvbigpIGNvbnRyb2xTaXplXV07CiB9CiAKLWNvbnN0IEludFNpemUqIFJlbmRlclRoZW1l
TWFjOjpwb3B1cEJ1dHRvblNpemVzKCkgY29uc3QKK2NvbnN0IEludFNpemUqIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBvcHVwQnV0dG9uU2l6ZXMoKSBjb25zdAogewogICAgIHN0YXRpYyBjb25z
dCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDAsIDIxKSwgSW50U2l6ZSgwLCAxOCksIElu
dFNpemUoMCwgMTUpIH07CiAgICAgcmV0dXJuIHNpemVzOwogfQogCi1jb25zdCBpbnQqIFJlbmRl
clRoZW1lTWFjOjpwb3B1cEJ1dHRvblBhZGRpbmcoTlNDb250cm9sU2l6ZSBzaXplKSBjb25zdAor
Y29uc3QgaW50KiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1cEJ1dHRvblBhZGRpbmcoTlND
b250cm9sU2l6ZSBzaXplKSBjb25zdAogewogICAgIHN0YXRpYyBjb25zdCBpbnQgcGFkZGluZ1sz
XVs0XSA9CiAgICAgewpAQCAtNzMyLDcgKzc5OSw3IEBAIGNvbnN0IGludCogUmVuZGVyVGhlbWVN
YWM6OnBvcHVwQnV0dG9uUGEKICAgICByZXR1cm4gcGFkZGluZ1tzaXplXTsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQog
ewogICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIpOwogCkBAIC03NjMsNyArODMwLDcg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZW51TGlzdChSZW5kZQogICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC1pbmZsYXRlZFJlY3QueCgpLCAtaW5mbGF0ZWRSZWN0
LnkoKSk7CiAgICAgfQogCi0gICAgW3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRS
ZWN0IGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07CisgICAg
W3BvcHVwQnV0dG9uIGRyYXdXaXRoRnJhbWU6aW5mbGF0ZWRSZWN0IGluVmlldzpGbGlwcGVkVmll
dygpXTsKICAgICBbcG9wdXBCdXR0b24gc2V0Q29udHJvbFZpZXc6bmlsXTsKIAogICAgIHBhaW50
SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CkBAIC04MjMsNyArODkwLDcgQEAgc3RhdGljIHZvaWQg
VHJhY2tHcmFkaWVudEludGVycG9sYXRlKHZvaQogICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYg
LSBhKSAqIGRhcmtbaV0gKyBhICogbGlnaHRbaV07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6
OnBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQordm9pZCBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAoci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTg5MCw3ICs5NTcsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0
dG9uCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQogewogICAgIEludFJlY3QgYm91bmRzID0gSW50UmVjdChyLngoKSArIG8tPnN0eWxlKCkt
PmJvcmRlckxlZnRXaWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLnkoKSAr
IG8tPnN0eWxlKCktPmJvcmRlclRvcFdpZHRoKCksCkBAIC05NTksNyArMTAyNiw3IEBAIHN0YXRp
YyBjb25zdCBJbnRTaXplKiBtZW51TGlzdEJ1dHRvblNpemUKICAgICByZXR1cm4gc2l6ZXM7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3Zv
aWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlKSBjb25zdAog
ewogICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBjb250cm9sU2l6ZUZvckZvbnQoc3R5
bGUpOwogCkBAIC05ODcsNyArMTA1NCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1l
bnVMaXN0U3R5bGUKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwogfQogCi1pbnQgUmVuZGVy
VGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2Uo
KSA9PSBNZW51bGlzdFBhcnQpCiAgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29u
dHJvbFNpemVGb3JGb250KHN0eWxlKSlbbGVmdFBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKQEAgLTk5Niw3ICsxMDYzLDcgQEAgaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVy
bmFsUGFkZGluZwogICAgIHJldHVybiAwOwogfQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVw
SW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nUmlnaHQoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAogewogICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0
UGFydCkKICAgICAgICAgcmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZv
bnQoc3R5bGUpKVtyaWdodFBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKQEAgLTEw
MDgsNyArMTA3NSw3IEBAIGludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmcK
ICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFk
ZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAog
ewogICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0UGFydCkKICAgICAgICAg
cmV0dXJuIHBvcHVwQnV0dG9uUGFkZGluZyhjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpKVt0b3BQ
YWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CkBAIC0xMDE3LDcgKzEwODQsNyBAQCBp
bnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nCiAgICAgcmV0dXJuIDA7CiB9
CiAKLWludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAo
c3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQpCiAgICAgICAgIHJldHVybiBwb3B1
cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0eWxlKSlbYm90dG9tUGFkZGluZ10g
KiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwpAQCAtMTAyNiw3ICsxMDkzLDcgQEAgaW50IFJlbmRl
clRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZwogICAgIHJldHVybiAwOwogfQogCi12b2lk
IFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIGZsb2F0IGZvbnRT
Y2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gYmFzZUZvbnRTaXplOwogCkBAIC0xMDM5LDcgKzEx
MDYsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdEJ1dHRvCiAgICAgc3R5
bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3QmIHIpCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVjdCogbywgY29uc3Qg
SW50UmVjdCYgcikKIHsKICAgICBOU1BvcFVwQnV0dG9uQ2VsbCogcG9wdXBCdXR0b24gPSB0aGlz
LT5wb3B1cEJ1dHRvbigpOwogCkBAIC0xMDQ3LDE5ICsxMTE0LDIwIEBAIHZvaWQgUmVuZGVyVGhl
bWVNYWM6OnNldFBvcHVwQnV0dG9uQ2VsbFMKICAgICBzZXRDb250cm9sU2l6ZShwb3B1cEJ1dHRv
biwgcG9wdXBCdXR0b25TaXplcygpLCByLnNpemUoKSwgby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4K
KyAgICB1cGRhdGVBY3RpdmVTdGF0ZShwb3B1cEJ1dHRvbiwgbyk7CiAgICAgdXBkYXRlQ2hlY2tl
ZFN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKICAgICB1cGRhdGVFbmFibGVkU3RhdGUocG9wdXBCdXR0
b24sIG8pOwogICAgIHVwZGF0ZVByZXNzZWRTdGF0ZShwb3B1cEJ1dHRvbiwgbyk7CiAgICAgdXBk
YXRlRm9jdXNlZFN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKIH0KIAotY29uc3QgSW50U2l6ZSogUmVu
ZGVyVGhlbWVNYWM6Om1lbnVMaXN0U2l6ZXMoKSBjb25zdAorY29uc3QgSW50U2l6ZSogUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6bWVudUxpc3RTaXplcygpIGNvbnN0CiB7CiAgICAgc3RhdGljIGNv
bnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoOSwgMCksIEludFNpemUoNSwgMCksIElu
dFNpemUoMCwgMCkgfTsKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLWludCBSZW5kZXJUaGVtZU1h
Yzo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitpbnQgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBtZW51TGlz
dFNpemVzKCkpLndpZHRoKCk7CiB9CkBAIC0xMDY3LDEyICsxMTM1LDEyIEBAIGludCBSZW5kZXJU
aGVtZU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZSgKIGNvbnN0IGludCB0cmFja1dpZHRoID0gNTsK
IGNvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVz
dFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRl
clRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0CiB7CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KIAotYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQogewogICAgIEludFJlY3QgYm91bmRzID0gcjsKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5z
dHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CkBAIC0xMTExLDE0ICsxMTc5LDE0IEBAIGJvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soUmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgc3R5bGUtPnNldEJv
eFNoYWRvdygwKTsKIH0KIAogY29uc3QgZmxvYXQgdmVydGljYWxTbGlkZXJIZWlnaHRQYWRkaW5n
ID0gMC4xZjsKIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2xpZGVyVGh1
bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIEFTU0VSVChvLT5wYXJlbnQoKS0+aXNTbGlk
ZXIoKSk7CiAKQEAgLTExMjksNiArMTE5Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
U2xpZGVyVGh1bWIoUmUKICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250
ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0
ZXMgd2UgcmVzcG9uZCB0by4KKyAgICB1cGRhdGVBY3RpdmVTdGF0ZShzbGlkZXJUaHVtYkNlbGws
IG8pOwogICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzbGlkZXJUaHVtYkNlbGwsIG8tPnBhcmVudCgp
KTsKICAgICB1cGRhdGVGb2N1c2VkU3RhdGUoc2xpZGVyVGh1bWJDZWxsLCBvLT5wYXJlbnQoKSk7
CiAKQEAgLTExNzAsNyArMTIzOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVy
VGh1bWIoUmUKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRS
ZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KIAotICAgIFtzbGlkZXJUaHVtYkNl
bGwgZHJhd1dpdGhGcmFtZTp1bnpvb21lZFJlY3QgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3
KCktPmRvY3VtZW50VmlldygpXTsKKyAgICBbc2xpZGVyVGh1bWJDZWxsIGRyYXdXaXRoRnJhbWU6
dW56b29tZWRSZWN0IGluVmlldzpGbGlwcGVkVmlldygpXTsKICAgICBbc2xpZGVyVGh1bWJDZWxs
IHNldENvbnRyb2xWaWV3Om5pbF07CiAKICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgp
OwpAQCAtMTE3OCw3ICsxMjQ3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJU
aHVtYihSZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21p
dW1NYWM6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5TU2Vh
cmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKICAgICBMb2NhbEN1cnJlbnRH
cmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKQEAgLTEyMDIs
NyArMTI3MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQoUmUKICAg
ICAvLyBTZXQgdGhlIHNlYXJjaCBidXR0b24gdG8gbmlsIGJlZm9yZSBkcmF3aW5nLiAgVGhlbiBy
ZXNldCBpdCBzbyB3ZSBjYW4gZHJhdyBpdCBsYXRlci4KICAgICBbc2VhcmNoIHNldFNlYXJjaEJ1
dHRvbkNlbGw6bmlsXTsKIAotICAgIFtzZWFyY2ggZHJhd1dpdGhGcmFtZTpOU1JlY3QodW56b29t
ZWRSZWN0KSBpblZpZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCldOwor
ICAgIFtzZWFyY2ggZHJhd1dpdGhGcmFtZTpOU1JlY3QodW56b29tZWRSZWN0KSBpblZpZXc6Rmxp
cHBlZFZpZXcoKV07CiAjaWZkZWYgQlVJTERJTkdfT05fVElHRVIKICAgICBpZiAoW3NlYXJjaCBz
aG93c0ZpcnN0UmVzcG9uZGVyXSkKICAgICAgICAgd2tEcmF3VGV4dEZpZWxkQ2VsbEZvY3VzUmlu
ZyhzZWFyY2gsIE5TUmVjdCh1bnpvb21lZFJlY3QpKTsKQEAgLTEyMTYsMjQgKzEyODUsMjUgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZChSZQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoQ2VsbFN0YXRlKFJlbmRlck9i
amVjdCogbywgY29uc3QgSW50UmVjdCYpCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNl
dFNlYXJjaENlbGxTdGF0ZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3QmKQogewogICAg
IE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAogICAgIFtzZWFy
Y2ggc2V0Q29udHJvbFNpemU6Y29udHJvbFNpemVGb3JGb250KG8tPnN0eWxlKCkpXTsKIAogICAg
IC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMgd2UgcmVzcG9uZCB0by4KKyAgICB1cGRhdGVB
Y3RpdmVTdGF0ZShzZWFyY2gsIG8pOwogICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzZWFyY2gsIG8p
OwogICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShzZWFyY2gsIG8pOwogfQogCi1jb25zdCBJbnRTaXpl
KiBSZW5kZXJUaGVtZU1hYzo6c2VhcmNoRmllbGRTaXplcygpIGNvbnN0Citjb25zdCBJbnRTaXpl
KiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZWFyY2hGaWVsZFNpemVzKCkgY29uc3QKIHsKICAg
ICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgwLCAyMiksIEludFNp
emUoMCwgMTkpLCBJbnRTaXplKDAsIDE3KSB9OwogICAgIHJldHVybiBzaXplczsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoRmllbGRTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2V0U2VhcmNoRmllbGRTaXplKFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdo
dCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgogICAgIGlm
ICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhlaWdodCgp
LmlzQXV0bygpKQpAQCAtMTI0Myw3ICsxMzEzLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0
U2VhcmNoRmllbGRTaXplKAogICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgc2VhcmNoRmllbGRT
aXplcygpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKIHsKICAgICAvLyBPdmVycmlkZSBib3JkZXIuCiAgICAgc3R5bGUtPnJlc2V0
Qm9yZGVyKCk7CkBAIC0xMjc0LDcgKzEzNDQsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1
c3RTZWFyY2hGaWVsZFN0CiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2VhcmNoRmllbGRDYW5j
ZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIGlucHV0ID0gby0+bm9k
ZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKICAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5p
c0JveCgpKQpAQCAtMTI4NCw2ICsxMzU0LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRT
ZWFyY2hGaWVsZENhbgogCiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNl
YXJjaCgpOwogCisgICAgdXBkYXRlQWN0aXZlU3RhdGUoW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxs
XSwgbyk7CiAgICAgdXBkYXRlUHJlc3NlZFN0YXRlKFtzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0s
IG8pOwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKQEAgLTEzMDIsMjAgKzEzNzMs
MjAgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbgogICAgICAgICBw
YWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpvb21lZFJlY3QueCgpLCAtdW56b29tZWRS
ZWN0LnkoKSk7CiAgICAgfQogCi0gICAgW1tzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0gZHJhd1dp
dGhGcmFtZTp1bnpvb21lZFJlY3QgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3Vt
ZW50VmlldygpXTsKKyAgICBbW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1l
OnVuem9vbWVkUmVjdCBpblZpZXc6RmxpcHBlZFZpZXcoKV07CiAgICAgW1tzZWFyY2ggY2FuY2Vs
QnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0
LT5yZXN0b3JlKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1jb25zdCBJbnRTaXplKiBSZW5k
ZXJUaGVtZU1hYzo6Y2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdAorY29uc3QgSW50U2l6ZSogUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdAogewogICAgIHN0
YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDE2LCAxMyksIEludFNpemUo
MTMsIDExKSwgSW50U2l6ZSgxMywgOSkgfTsKICAgICByZXR1cm4gc2l6ZXM7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7
CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIGNhbmNlbEJ1dHRv
blNpemVzKCkpOwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOwpAQCAtMTMyMywxNCArMTM5NCwxNCBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RT
ZWFyY2hGaWVsZENhCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KIAotY29uc3QgSW50
U2l6ZSogUmVuZGVyVGhlbWVNYWM6OnJlc3VsdHNCdXR0b25TaXplcygpIGNvbnN0Citjb25zdCBJ
bnRTaXplKiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpyZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25z
dAogewogICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDE5LCAx
MyksIEludFNpemUoMTcsIDExKSwgSW50U2l6ZSgxNywgOSkgfTsKICAgICByZXR1cm4gc2l6ZXM7
CiB9CiAKIGNvbnN0IGludCBlbXB0eVJlc3VsdHNPZmZzZXQgPSA5Owotdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIEludFNpemUg
c2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9uU2l6ZXMoKSk7CiAg
ICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCkgLSBlbXB0eVJlc3VsdHNPZmZz
ZXQsIEZpeGVkKSk7CkBAIC0xMzM4LDEyICsxNDA5LDEyIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6
OmFkanVzdFNlYXJjaEZpZWxkRGUKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwogfQogCi1i
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKQorYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgSW50U2l6
ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsK
ICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKQEAgLTEz
NTEsNyArMTQyMiw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmUK
ICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCiB7CiAgICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2Vz
dG9yTm9kZSgpOwogICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCkBAIC0xMzYx
LDE5ICsxNDMyLDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXMK
IAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKIAorICAg
IHVwZGF0ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0sIG8pOworCiAgICAg
aWYgKFtzZWFyY2ggc2VhcmNoTWVudVRlbXBsYXRlXSAhPSBuaWwpCiAgICAgICAgIFtzZWFyY2gg
c2V0U2VhcmNoTWVudVRlbXBsYXRlOm5pbF07CiAKICAgICBGbG9hdFJlY3QgbG9jYWxCb3VuZHMg
PSBbc2VhcmNoIHNlYXJjaEJ1dHRvblJlY3RGb3JCb3VuZHM6TlNSZWN0KGlucHV0LT5yZW5kZXJC
b3goKS0+Ym9yZGVyQm94UmVjdCgpKV07CiAgICAgbG9jYWxCb3VuZHMgPSBjb252ZXJ0VG9QYWlu
dGluZ1JlY3QoaW5wdXQtPnJlbmRlcmVyKCksIG8sIGxvY2FsQm91bmRzLCByKTsKIAotICAgIFtb
c2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6bG9jYWxCb3VuZHMgaW5WaWV3
Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50VmlldygpXTsKKyAgICBbW3NlYXJjaCBz
ZWFyY2hCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOmxvY2FsQm91bmRzIGluVmlldzpGbGlwcGVk
VmlldygpXTsKICAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBzZXRDb250cm9sVmlldzpu
aWxdOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogY29uc3QgaW50IHJlc3VsdHNBcnJvd1dpZHRo
ID0gNTsKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKIHsKICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHls
ZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6
ZS53aWR0aCgpICsgcmVzdWx0c0Fycm93V2lkdGgsIEZpeGVkKSk7CkBAIC0xMzgxLDcgKzE0NTQs
NyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlCiAgICAgc3R5bGUt
PnNldEJveFNoYWRvdygwKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCiB7CiAgICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
OwogICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCkBAIC0xMzkxLDYgKzE0NjQs
OCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiAKICAgICBOU1Nl
YXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAKKyAgICB1cGRhdGVBY3Rp
dmVTdGF0ZShbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdLCBvKTsKKwogICAgIGlmICghW3NlYXJj
aCBzZWFyY2hNZW51VGVtcGxhdGVdKQogICAgICAgICBbc2VhcmNoIHNldFNlYXJjaE1lbnVUZW1w
bGF0ZTpzZWFyY2hNZW51VGVtcGxhdGUoKV07CiAKQEAgLTE0MTAsNyArMTQ4NSw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXMKICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOwog
ICAgIH0KIAotICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6dW56
b29tZWRSZWN0IGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07
CisgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTp1bnpvb21lZFJl
Y3QgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwogICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxd
IHNldENvbnRyb2xWaWV3Om5pbF07CiAgICAgCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3Rv
cmUoKTsKQEAgLTE0NjUsNyArMTU0MCw3IEBAIGNvbnN0IGludCBzbGlkZXJUaHVtYkhlaWdodCA9
IDE1OwogY29uc3QgaW50IG1lZGlhU2xpZGVyVGh1bWJXaWR0aCA9IDEzOwogY29uc3QgaW50IG1l
ZGlhU2xpZGVyVGh1bWJIZWlnaHQgPSAxNDsKIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0
U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlck9iamVjdCogbykgY29uc3QK
IHsKICAgICBmbG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CiAg
ICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQ
YXJ0IHx8IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFy
dCkgewpAQCAtMTUyOCw3ICsxNjAzLDcgQEAgc3RhdGljIEZsb2F0UmVjdCBnZXRVbnpvb21lZFJl
Y3RBbmRBZGp1cwogfQogCiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFGdWxsc2Ny
ZWVuQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAg
IE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTUzOSwxNCArMTYx
NCwxNCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhRnVsbHNjcmVlCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhTXV0ZUJ1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50
TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBOb2RlKiBub2RlID0g
by0+bm9kZSgpOwogICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dBbmNl
c3Rvck5vZGUoKSA6IDA7CiAgICAgaWYgKCFtZWRpYU5vZGUgfHwgKCFtZWRpYU5vZGUtPmhhc1Rh
Z05hbWUodmlkZW9UYWcpICYmICFtZWRpYU5vZGUtPmhhc1RhZ05hbWUoYXVkaW9UYWcpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKE1lZGlhQ29udHJvbE11dGVCdXR0b25FbGVt
ZW50KiBidG4gPSBzdGF0aWNfY2FzdDxNZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCo+KG5v
ZGUpKSB7CisgICAgaWYgKE1lZGlhQ29udHJvbFBsYXlCdXR0b25FbGVtZW50KiBidG4gPSBzdGF0
aWNfY2FzdDxNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCo+KG5vZGUpKSB7CiAgICAgICAg
IExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRl
eHQpOwogICAgICAgICB3a0RyYXdNZWRpYVVJUGFydChidG4tPmRpc3BsYXlUeXBlKCksIG1lZGlh
Q29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwg
ciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKIApAQCAtMTU1NCw3ICsxNjI5LDcg
QEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYU11dGVCdXR0bwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlh
UGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTm9kZSogbm9kZSA9IG8tPm5v
ZGUoKTsKICAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8gbm9kZS0+c2hhZG93QW5jZXN0b3JO
b2RlKCkgOiAwOwpAQCAtMTU2OCw3ICsxNjQzLDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRNZWRpYVBsYXlCdXR0bwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcikKIHsKICAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwogICAgIGlmICghbm9k
ZSkKQEAgLTE1NzksNyArMTY1NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFT
ZWVrQmFja0IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCiB7CiAgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKICAgICBpZiAoIW5vZGUp
CkBAIC0xNTkwLDcgKzE2NjUsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2Vl
a0ZvcndhCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewog
ICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CiAgICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/
IG5vZGUtPnNoYWRvd0FuY2VzdG9yTm9kZSgpIDogMDsKQEAgLTE2MDEsMTMgKzE2NzYsMTQgQEAg
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNsaWRlclRyYQogICAgIGlmICghbWVkaWFF
bGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8VGltZVJhbmdlcz4g
dGltZVJhbmdlcyA9IG1lZGlhRWxlbWVudC0+YnVmZmVyZWQoKTsKLSAgICBFeGNlcHRpb25Db2Rl
IGlnbm9yZWRFeGNlcHRpb247Ci0gICAgZmxvYXQgdGltZUxvYWRlZCA9IHRpbWVSYW5nZXMtPmxl
bmd0aCgpID8gdGltZVJhbmdlcy0+ZW5kKDAsIGlnbm9yZWRFeGNlcHRpb24pIDogMDsKLSAgICBm
bG9hdCBjdXJyZW50VGltZSA9IG1lZGlhRWxlbWVudC0+Y3VycmVudFRpbWUoKTsKLSAgICBmbG9h
dCBkdXJhdGlvbiA9IG1lZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsKLSAgICBpZiAoaXNuYW4oZHVy
YXRpb24pKQotICAgICAgICBkdXJhdGlvbiA9IDA7CisgICAgZmxvYXQgdGltZUxvYWRlZCA9IDA7
CisgICAgZmxvYXQgY3VycmVudFRpbWUgPSAwOworICAgIGZsb2F0IGR1cmF0aW9uID0gMDsKKyAg
ICBpZiAoTWVkaWFQbGF5ZXIqIHBsYXllciA9IG1lZGlhRWxlbWVudC0+cGxheWVyKCkpIHsKKyAg
ICAgICAgZHVyYXRpb24gPSBwbGF5ZXItPmR1cmF0aW9uKCk7CisgICAgICAgIHRpbWVMb2FkZWQg
PSBwbGF5ZXItPm1heFRpbWVCdWZmZXJlZCgpOworICAgICAgICBjdXJyZW50VGltZSA9IHBsYXll
ci0+Y3VycmVudFRpbWUoKTsKKyAgICB9CiAgCiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUo
KTsKICAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0ID0gZ2V0VW56b29tZWRSZWN0QW5kQWRqdXN0
Q3VycmVudENvbnRleHQobywgcGFpbnRJbmZvLCByKTsKQEAgLTE2MTgsNyArMTY5NCw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTbGlkZXJUcmEKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTbGlk
ZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUo
KTsKICAgICBpZiAoIW5vZGUpCkBAIC0xNjI5LDcgKzE3MDUsNyBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludE1lZGlhU2xpZGVyVGh1CiAgICAgcmV0dXJuIGZhbHNlOwogfQogICAgIAotYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVJld2luZEJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CiAgICAg
aWYgKCFub2RlKQpAQCAtMTY0MCw3ICsxNzE2LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRNZWRpYVJld2luZEJ1dAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZWRpYVJldHVyblRvUmVhbHRpbWVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhUmV0dXJuVG9SZWFsdGlt
ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUo
KTsKICAgICBpZiAoIW5vZGUpCkBAIC0xNjUyLDcgKzE3MjgsNyBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludE1lZGlhUmV0dXJuVG9SCiB9CiAKIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRNZWRpYUNvbnRyb2xzQmFja2dyb3VuZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByKQogewogICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CiAgICAgaWYgKCFub2Rl
KQpAQCAtMTY2Myw3ICsxNzM5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYUNv
bnRyb2xzQgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsK
ICAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKQEAgLTE2NzYsNyAr
MTc1Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFDdXJyZW50VGkKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFUaW1lUmVt
YWluaW5nKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cGFpbnRNZWRpYVRpbWVSZW1haW5pbmcoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUq
IG5vZGUgPSBvLT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTY4OSwxNiArMTc2NSwxMyBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhVGltZVJlbWFpCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1TdHJpbmcgUmVuZGVyVGhlbWVNYWM6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxl
U2hlZXQoKQorU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmV4dHJhTWVkaWFDb250cm9s
c1N0eWxlU2hlZXQoKQogewotICAgIGlmIChtZWRpYUNvbnRyb2xsZXJUaGVtZSgpID09IE1lZGlh
Q29udHJvbGxlclRoZW1lUVQpIAotICAgICAgICByZXR1cm4gU3RyaW5nKG1lZGlhQ29udHJvbHNR
VFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzUVRVc2VyQWdlbnRTdHls
ZVNoZWV0KSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgcmV0dXJu
IFN0cmluZygpOwogfQogI2VuZGlmCiAKLU5TUG9wVXBCdXR0b25DZWxsKiBSZW5kZXJUaGVtZU1h
Yzo6cG9wdXBCdXR0b24oKSBjb25zdAorTlNQb3BVcEJ1dHRvbkNlbGwqIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBvcHVwQnV0dG9uKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcG9wdXBCdXR0b24p
IHsKICAgICAgICAgbV9wb3B1cEJ1dHRvbi5hZG9wdE5TKFtbTlNQb3BVcEJ1dHRvbkNlbGwgYWxs
b2NdIGluaXRUZXh0Q2VsbDpAIiIgcHVsbHNEb3duOk5PXSk7CkBAIC0xNzA5LDcgKzE3ODIsNyBA
QCBOU1BvcFVwQnV0dG9uQ2VsbCogUmVuZGVyVGhlbWVNYWM6OnBvcHVwCiAgICAgcmV0dXJuIG1f
cG9wdXBCdXR0b24uZ2V0KCk7CiB9CiAKLU5TU2VhcmNoRmllbGRDZWxsKiBSZW5kZXJUaGVtZU1h
Yzo6c2VhcmNoKCkgY29uc3QKK05TU2VhcmNoRmllbGRDZWxsKiBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjpzZWFyY2goKSBjb25zdAogewogICAgIGlmICghbV9zZWFyY2gpIHsKICAgICAgICAgbV9z
ZWFyY2guYWRvcHROUyhbW05TU2VhcmNoRmllbGRDZWxsIGFsbG9jXSBpbml0VGV4dENlbGw6QCIi
XSk7CkBAIC0xNzIyLDcgKzE3OTUsNyBAQCBOU1NlYXJjaEZpZWxkQ2VsbCogUmVuZGVyVGhlbWVN
YWM6OnNlYXJjCiAgICAgcmV0dXJuIG1fc2VhcmNoLmdldCgpOwogfQogCi1OU01lbnUqIFJlbmRl
clRoZW1lTWFjOjpzZWFyY2hNZW51VGVtcGxhdGUoKSBjb25zdAorTlNNZW51KiBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpzZWFyY2hNZW51VGVtcGxhdGUoKSBjb25zdAogewogICAgIGlmICghbV9z
ZWFyY2hNZW51VGVtcGxhdGUpCiAgICAgICAgIG1fc2VhcmNoTWVudVRlbXBsYXRlLmFkb3B0TlMo
W1tOU01lbnUgYWxsb2NdIGluaXRXaXRoVGl0bGU6QCIiXSk7CkBAIC0xNzMwLDcgKzE4MDMsNyBA
QCBOU01lbnUqIFJlbmRlclRoZW1lTWFjOjpzZWFyY2hNZW51VGVtcGxhCiAgICAgcmV0dXJuIG1f
c2VhcmNoTWVudVRlbXBsYXRlLmdldCgpOwogfQogCi1OU1NsaWRlckNlbGwqIFJlbmRlclRoZW1l
TWFjOjpzbGlkZXJUaHVtYkhvcml6b250YWwoKSBjb25zdAorTlNTbGlkZXJDZWxsKiBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpzbGlkZXJUaHVtYkhvcml6b250YWwoKSBjb25zdAogewogICAgIGlm
ICghbV9zbGlkZXJUaHVtYkhvcml6b250YWwpIHsKICAgICAgICAgbV9zbGlkZXJUaHVtYkhvcml6
b250YWwuYWRvcHROUyhbW05TU2xpZGVyQ2VsbCBhbGxvY10gaW5pdF0pOwpAQCAtMTc0Myw3ICsx
ODE2LDcgQEAgTlNTbGlkZXJDZWxsKiBSZW5kZXJUaGVtZU1hYzo6c2xpZGVyVGh1bQogICAgIHJl
dHVybiBtX3NsaWRlclRodW1iSG9yaXpvbnRhbC5nZXQoKTsKIH0KIAotTlNTbGlkZXJDZWxsKiBS
ZW5kZXJUaGVtZU1hYzo6c2xpZGVyVGh1bWJWZXJ0aWNhbCgpIGNvbnN0CitOU1NsaWRlckNlbGwq
IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNsaWRlclRodW1iVmVydGljYWwoKSBjb25zdAogewog
ICAgIGlmICghbV9zbGlkZXJUaHVtYlZlcnRpY2FsKSB7CiAgICAgICAgIG1fc2xpZGVyVGh1bWJW
ZXJ0aWNhbC5hZG9wdE5TKFtbTlNTbGlkZXJDZWxsIGFsbG9jXSBpbml0XSk7Cg==
</data>
<flag name="review"
          id="20711"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39605</attachid>
            <date>2009-09-15 09:45:58 -0700</date>
            <delta_ts>2009-09-17 12:20:20 -0700</delta_ts>
            <desc>Update for fishd&apos;s comments</desc>
            <filename>rendertheme.patch</filename>
            <type>text/plain</type>
            <size>167579</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODM5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI0IEBACisyMDA5LTA5LTExICBBdmkgRHJpc3NtYW4gIDxhdmlAZ29vZ2xlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGUgdGhlIENocm9taXVtIE1hYyB0aGVtaW5nIGZpbGVzIChSZW5kZXJUaGVtZSBhbmQgVGhlbWUp
IHRvIGJlCisgICAgICAgIHVwLXRvLWRhdGUuCisgICAgICAgIAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkyNDMKKyAgICAgICAgaHR0cDovL2NyYnVn
LmNvbS8xOTYwNAorCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vVGhlbWVDaHJv
bWl1bU1hYy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQ2hyb21pdW1NYWM6OlRo
ZW1lQ2hyb21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVDaHJvbWl1bU1hYzo6flRo
ZW1lQ2hyb21pdW1NYWMpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVDaHJvbWl1bU1hYzo6Y29u
dHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
VGhlbWVDaHJvbWl1bU1hYy5tbTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAg
ICAoV2ViQ29yZTo6cGxhdGZvcm1UaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpjb250cm9sU2l6
ZUZvckZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6c2l6ZUZyb21Gb250KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldENvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVN0YXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjppbmZsYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpjaGVj
a2JveFNpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrYm94TWFyZ2lucyk6CisgICAgICAg
IChXZWJDb3JlOjpjaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Y2hlY2tib3gpOgor
ICAgICAgICAoV2ViQ29yZTo6cGFpbnRDaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpyYWRp
b1NpemVzKToKKyAgICAgICAgKFdlYkNvcmU6OnJhZGlvTWFyZ2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpyYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6cmFkaW8pOgorICAgICAgICAoV2Vi
Q29yZTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpidXR0b25TaXplcyk6CisgICAg
ICAgIChXZWJDb3JlOjpidXR0b25NYXJnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpUaGVt
ZUNocm9taXVtTWFjOjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZUNocm9taXVtTWFjOjpjb250cm9sRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpU
aGVtZUNocm9taXVtTWFjOjpjb250cm9sU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNo
cm9taXVtTWFjOjptaW5pbXVtQ29udHJvbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVD
aHJvbWl1bU1hYzo6Y29udHJvbEJvcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNocm9t
aXVtTWFjOjpjb250cm9sUGFkZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNocm9taXVt
TWFjOjppbmZsYXRlQ29udHJvbFBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUNo
cm9taXVtTWFjOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ludFJlY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3VwcG9ydHND
b250cm9sVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
c2Nyb2xsYmFyQ29udHJvbFNpemVGb3JQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW06CisgICAgICAgICgtW1dl
YkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlvbk9ic2VydmVyIHN5c3RlbUNvbG9yc0RpZENoYW5n
ZTpdKToKKyAgICAgICAgKC1bUlRDTUZsaXBwZWRWaWV3IGlzRmxpcHBlZF0pOgorICAgICAgICAo
LVtSVENNRmxpcHBlZFZpZXcgY3VycmVudEVkaXRvcl0pOgorICAgICAgICAoV2ViQ29yZTo6KToK
KyAgICAgICAgKFdlYkNvcmU6OkZsaXBwZWRWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtSW5hY3Rp
dmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnN5c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydE5TQ29sb3JUb0NvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6Om1lbnVCYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c3lzdGVtQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6aXNDb250cm9sU3R5bGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmluZmxhdGVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmNvbnZlcnRUb1BhaW50aW5nUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRGb250RnJv
bUNvbnRyb2xTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1N
YWM6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6cGFpbnRUZXh0QXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRvcEdy
YWRpZW50SW50ZXJwb2xhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Qm90dG9tR3JhZGllbnRJbnRl
cnBvbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNYWluR3JhZGllbnRJbnRlcnBvbGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUcmFja0dyYWRpZW50SW50ZXJwb2xhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVM
aXN0QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBv
cHVwSW50ZXJuYWxQYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5n
Qm90dG9tKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVz
dE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRTZWFyY2hDZWxsU3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFj
OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmll
bGREZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjptZWRpYUNvbnRyb2xsZXJUaGVtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVt
YlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFGdWxs
c2NyZWVuQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRp
YVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6
OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjpwYWludE1lZGlhUmV3aW5kQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFDb250
cm9sc0JhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50TWVkaWFUaW1lUmVtYWluaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgor
CiAyMDA5LTA5LTE1ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRleDogV2ViQ29yZS9XZWJD
b3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDQ4
MzkyKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE3NzEsNiAr
MTc3MSw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRp
b25DaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1N5c3RlbVRp
bWVDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hy
b21pdW1NYWMuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vVGhlbWVDaHJvbWl1
bU1hYy5tbScsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vV2lkZ2V0Q2hyb21pdW0u
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9XaW5kb3dzVmVyc2lvbi5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL1dpbmRvd3NWZXJzaW9uLmgnLApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgJKHJldmlz
aW9uIDQ4MzkyKQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5oOjQ4MzkyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFRoZW1lTWFjX2gKKyNkZWZpbmUgVGhlbWVNYWNfaAorCisj
aW5jbHVkZSAiVGhlbWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaGVtZU1h
YyA6IHB1YmxpYyBUaGVtZSB7CitwdWJsaWM6CisgICAgVGhlbWVNYWMoKSB7IH0KKyAgICB2aXJ0
dWFsIH5UaGVtZU1hYygpIHsgfQorICAgIAorICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRp
b25BZGp1c3RtZW50KENvbnRyb2xQYXJ0KSBjb25zdDsKKworICAgIHZpcnR1YWwgRm9udERlc2Ny
aXB0aW9uIGNvbnRyb2xGb250KENvbnRyb2xQYXJ0LCBjb25zdCBGb250JiwgZmxvYXQgem9vbUZh
Y3RvcikgY29uc3Q7CisgICAgCisgICAgdmlydHVhbCBMZW5ndGhTaXplIGNvbnRyb2xTaXplKENv
bnRyb2xQYXJ0LCBjb25zdCBGb250JiwgY29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0IHpvb21GYWN0
b3IpIGNvbnN0OworICAgIHZpcnR1YWwgTGVuZ3RoU2l6ZSBtaW5pbXVtQ29udHJvbFNpemUoQ29u
dHJvbFBhcnQsIGNvbnN0IEZvbnQmLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdDsKKworICAgIHZp
cnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xQYWRkaW5nKENvbnRyb2xQYXJ0LCBjb25zdCBGb250Jiwg
Y29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0OworICAg
IHZpcnR1YWwgTGVuZ3RoQm94IGNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnQm
LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFJlcXVpcmVzUHJlV2hpdGVTcGFjZShDb250cm9sUGFy
dCBwYXJ0KSBjb25zdCB7IHJldHVybiBwYXJ0ID09IFB1c2hCdXR0b25QYXJ0OyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMsIEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEludFJlY3QmLCBmbG9hdCB6b29tRmFjdG9yLCBTY3JvbGxWaWV3KikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGluZmxhdGVDb250cm9sUGFpbnRSZWN0KENvbnRyb2xQYXJ0
LCBDb250cm9sU3RhdGVzLCBJbnRSZWN0JiwgZmxvYXQgem9vbUZhY3RvcikgY29uc3Q7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUaGVtZU1hY19oCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMuaAkocmV2aXNpb24g
NDgzOTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1RoZW1lQ2hyb21pdW1NYWMuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdv
b2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTIzLDE3ICsyNCwyMCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRl
ZiBUaGVtZU1hY19oCi0jZGVmaW5lIFRoZW1lTWFjX2gKKyNpZm5kZWYgVGhlbWVDaHJvbWl1bU1h
Y19oCisjZGVmaW5lIFRoZW1lQ2hyb21pdW1NYWNfaAogCiAjaW5jbHVkZSAiVGhlbWUuaCIKIAor
Ly8gVGhpcyBmaWxlIChhbmQgaXRzIGFzc29jaWF0ZWQgLm1tIGZpbGUpIGlzIGEgY2xvbmUgb2Yg
VGhlbWVNYWMuaC4gU2VlCisvLyB0aGUgLm1tIGZpbGUgZm9yIGRldGFpbHMuCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgVGhlbWVNYWMgOiBwdWJsaWMgVGhlbWUgeworY2xhc3MgVGhl
bWVDaHJvbWl1bU1hYyA6IHB1YmxpYyBUaGVtZSB7CiBwdWJsaWM6Ci0gICAgVGhlbWVNYWMoKSB7
IH0KLSAgICB2aXJ0dWFsIH5UaGVtZU1hYygpIHsgfQorICAgIFRoZW1lQ2hyb21pdW1NYWMoKSB7
IH0KKyAgICB2aXJ0dWFsIH5UaGVtZUNocm9taXVtTWFjKCkgeyB9CiAgICAgCiAgICAgdmlydHVh
bCBpbnQgYmFzZWxpbmVQb3NpdGlvbkFkanVzdG1lbnQoQ29udHJvbFBhcnQpIGNvbnN0OwogCkBA
IC01Myw0ICs1Nyw0IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gVGhlbWVNYWNfaAorI2VuZGlmIC8vIFRoZW1lQ2hyb21pdW1NYWNfaApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vVGhlbWVDaHJvbWl1bU1hYy5tbQkocmV2aXNpb24g
NDgzOTIpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOjQ4MzkyKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2ltcG9ydCAiVGhlbWVNYWMuaCIKKwor
I2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbXBvcnQgIkxvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiU2Nyb2xs
Vmlldy5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworLy8gRklYTUU6IERl
ZmF1bHQgYnV0dG9ucyByZWFsbHkgc2hvdWxkIGJlIG1vcmUgbGlrZSBwdXNoIGJ1dHRvbnMgYW5k
IG5vdCBsaWtlIGJ1dHRvbnMuCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSB7CisgICAg
dG9wTWFyZ2luLAorICAgIHJpZ2h0TWFyZ2luLAorICAgIGJvdHRvbU1hcmdpbiwKKyAgICBsZWZ0
TWFyZ2luCit9OworCitUaGVtZSogcGxhdGZvcm1UaGVtZSgpCit7CisgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChUaGVtZU1hYywgdGhlbWVNYWMsICgpKTsKKyAgICByZXR1cm4gJnRoZW1lTWFjOwor
fQorCisvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgYSBidW5jaCBvZiBkaWZmZXJlbnQgY29u
dHJvbCBwYXJ0cy4KKworc3RhdGljIE5TQ29udHJvbFNpemUgY29udHJvbFNpemVGb3JGb250KGNv
bnN0IEZvbnQmIGZvbnQpCit7CisgICAgaW50IGZvbnRTaXplID0gZm9udC5waXhlbFNpemUoKTsK
KyAgICBpZiAoZm9udFNpemUgPj0gMTYpCisgICAgICAgIHJldHVybiBOU1JlZ3VsYXJDb250cm9s
U2l6ZTsKKyAgICBpZiAoZm9udFNpemUgPj0gMTEpCisgICAgICAgIHJldHVybiBOU1NtYWxsQ29u
dHJvbFNpemU7CisgICAgcmV0dXJuIE5TTWluaUNvbnRyb2xTaXplOworfQorCitzdGF0aWMgTGVu
Z3RoU2l6ZSBzaXplRnJvbUZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYg
em9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvciwgY29uc3QgSW50U2l6ZSogc2l6ZXMpCit7Cisg
ICAgSW50U2l6ZSBjb250cm9sU2l6ZSA9IHNpemVzW2NvbnRyb2xTaXplRm9yRm9udChmb250KV07
CisgICAgaWYgKHpvb21GYWN0b3IgIT0gMS4wZikKKyAgICAgICAgY29udHJvbFNpemUgPSBJbnRT
aXplKGNvbnRyb2xTaXplLndpZHRoKCkgKiB6b29tRmFjdG9yLCBjb250cm9sU2l6ZS5oZWlnaHQo
KSAqIHpvb21GYWN0b3IpOworICAgIExlbmd0aFNpemUgcmVzdWx0ID0gem9vbWVkU2l6ZTsKKyAg
ICBpZiAoem9vbWVkU2l6ZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgY29udHJvbFNp
emUud2lkdGgoKSA+IDApCisgICAgICAgIHJlc3VsdC5zZXRXaWR0aChMZW5ndGgoY29udHJvbFNp
emUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBpZiAoem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJp
bnNpY09yQXV0bygpICYmIGNvbnRyb2xTaXplLmhlaWdodCgpID4gMCkKKyAgICAgICAgcmVzdWx0
LnNldEhlaWdodChMZW5ndGgoY29udHJvbFNpemUuaGVpZ2h0KCksIEZpeGVkKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgc2V0Q29udHJvbFNpemUoTlNDZWxsKiBjZWxs
LCBjb25zdCBJbnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluWm9vbWVkU2l6ZSwgZmxv
YXQgem9vbUZhY3RvcikKK3sKKyAgICBOU0NvbnRyb2xTaXplIHNpemU7CisgICAgaWYgKG1pblpv
b21lZFNpemUud2lkdGgoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TUmVndWxhckNvbnRy
b2xTaXplXS53aWR0aCgpICogem9vbUZhY3RvcikgJiYKKyAgICAgICAgbWluWm9vbWVkU2l6ZS5o
ZWlnaHQoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TUmVndWxhckNvbnRyb2xTaXplXS5o
ZWlnaHQoKSAqIHpvb21GYWN0b3IpKQorICAgICAgICBzaXplID0gTlNSZWd1bGFyQ29udHJvbFNp
emU7CisgICAgZWxzZSBpZiAobWluWm9vbWVkU2l6ZS53aWR0aCgpID49IHN0YXRpY19jYXN0PGlu
dD4oc2l6ZXNbTlNTbWFsbENvbnRyb2xTaXplXS53aWR0aCgpICogem9vbUZhY3RvcikgJiYKKyAg
ICAgICAgICAgICBtaW5ab29tZWRTaXplLmhlaWdodCgpID49IHN0YXRpY19jYXN0PGludD4oc2l6
ZXNbTlNTbWFsbENvbnRyb2xTaXplXS5oZWlnaHQoKSAqIHpvb21GYWN0b3IpKQorICAgICAgICBz
aXplID0gTlNTbWFsbENvbnRyb2xTaXplOworICAgIGVsc2UKKyAgICAgICAgc2l6ZSA9IE5TTWlu
aUNvbnRyb2xTaXplOworICAgIGlmIChzaXplICE9IFtjZWxsIGNvbnRyb2xTaXplXSkgLy8gT25s
eSB1cGRhdGUgaWYgd2UgaGF2ZSB0bywgc2luY2UgQXBwS2l0IGRvZXMgd29yayBldmVuIGlmIHRo
ZSBzaXplIGlzIHRoZSBzYW1lLgorICAgICAgICBbY2VsbCBzZXRDb250cm9sU2l6ZTpzaXplXTsK
K30KKworc3RhdGljIHZvaWQgdXBkYXRlU3RhdGVzKE5TQ2VsbCogY2VsbCwgQ29udHJvbFN0YXRl
cyBzdGF0ZXMpCit7CisgICAgLy8gSG92ZXIgc3RhdGUgaXMgbm90IHN1cHBvcnRlZCBieSBBcXVh
LgorICAgIAorICAgIC8vIFByZXNzZWQgc3RhdGUKKyAgICBib29sIG9sZFByZXNzZWQgPSBbY2Vs
bCBpc0hpZ2hsaWdodGVkXTsKKyAgICBib29sIHByZXNzZWQgPSBzdGF0ZXMgJiBQcmVzc2VkU3Rh
dGU7CisgICAgaWYgKHByZXNzZWQgIT0gb2xkUHJlc3NlZCkKKyAgICAgICAgW2NlbGwgc2V0SGln
aGxpZ2h0ZWQ6cHJlc3NlZF07CisgICAgCisgICAgLy8gRW5hYmxlZCBzdGF0ZQorICAgIGJvb2wg
b2xkRW5hYmxlZCA9IFtjZWxsIGlzRW5hYmxlZF07CisgICAgYm9vbCBlbmFibGVkID0gc3RhdGVz
ICYgRW5hYmxlZFN0YXRlOworICAgIGlmIChlbmFibGVkICE9IG9sZEVuYWJsZWQpCisgICAgICAg
IFtjZWxsIHNldEVuYWJsZWQ6ZW5hYmxlZF07CisgICAgCisgICAgLy8gRm9jdXNlZCBzdGF0ZQor
ICAgIGJvb2wgb2xkRm9jdXNlZCA9IFtjZWxsIHNob3dzRmlyc3RSZXNwb25kZXJdOworICAgIGJv
b2wgZm9jdXNlZCA9IHN0YXRlcyAmIEZvY3VzU3RhdGU7CisgICAgaWYgKGZvY3VzZWQgIT0gb2xk
Rm9jdXNlZCkKKyAgICAgICAgW2NlbGwgc2V0U2hvd3NGaXJzdFJlc3BvbmRlcjpmb2N1c2VkXTsK
KworICAgIC8vIENoZWNrZWQgYW5kIEluZGV0ZXJtaW5hdGUKKyAgICBib29sIG9sZEluZGV0ZXJt
aW5hdGUgPSBbY2VsbCBzdGF0ZV0gPT0gTlNNaXhlZFN0YXRlOworICAgIGJvb2wgaW5kZXRlcm1p
bmF0ZSA9IChzdGF0ZXMgJiBJbmRldGVybWluYXRlU3RhdGUpOworICAgIGJvb2wgY2hlY2tlZCA9
IHN0YXRlcyAmIENoZWNrZWRTdGF0ZTsKKyAgICBib29sIG9sZENoZWNrZWQgPSBbY2VsbCBzdGF0
ZV0gPT0gTlNPblN0YXRlOworICAgIGlmIChvbGRJbmRldGVybWluYXRlICE9IGluZGV0ZXJtaW5h
dGUgfHwgY2hlY2tlZCAhPSBvbGRDaGVja2VkKQorICAgICAgICBbY2VsbCBzZXRTdGF0ZTppbmRl
dGVybWluYXRlID8gTlNNaXhlZFN0YXRlIDogKGNoZWNrZWQgPyBOU09uU3RhdGUgOiBOU09mZlN0
YXRlKV07CisgICAgICAgIAorICAgIC8vIFdpbmRvdyBpbmFjdGl2ZSBzdGF0ZSBkb2VzIG5vdCBu
ZWVkIHRvIGJlIGNoZWNrZWQgZXhwbGljaXRseSwgc2luY2Ugd2UgcGFpbnQgcGFyZW50ZWQgdG8g
CisgICAgLy8gYSB2aWV3IGluIGEgd2luZG93IHdob3NlIGtleSBzdGF0ZSBjYW4gYmUgZGV0ZWN0
ZWQuCit9CisKK3N0YXRpYyBJbnRSZWN0IGluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmIHpvb21l
ZFJlY3QsIGNvbnN0IEludFNpemUmIHpvb21lZFNpemUsIGNvbnN0IGludCogbWFyZ2lucywgZmxv
YXQgem9vbUZhY3RvcikKK3sKKyAgICAvLyBPbmx5IGRvIHRoZSBpbmZsYXRpb24gaWYgdGhlIGF2
YWlsYWJsZSB3aWR0aC9oZWlnaHQgYXJlIHRvbyBzbWFsbC4gIE90aGVyd2lzZSB0cnkgdG8KKyAg
ICAvLyBmaXQgdGhlIGdsb3cvY2hlY2sgc3BhY2UgaW50byB0aGUgYXZhaWxhYmxlIGJveCdzIHdp
ZHRoL2hlaWdodC4KKyAgICBpbnQgd2lkdGhEZWx0YSA9IHpvb21lZFJlY3Qud2lkdGgoKSAtICh6
b29tZWRTaXplLndpZHRoKCkgKyBtYXJnaW5zW2xlZnRNYXJnaW5dICogem9vbUZhY3RvciArIG1h
cmdpbnNbcmlnaHRNYXJnaW5dICogem9vbUZhY3Rvcik7CisgICAgaW50IGhlaWdodERlbHRhID0g
em9vbWVkUmVjdC5oZWlnaHQoKSAtICh6b29tZWRTaXplLmhlaWdodCgpICsgbWFyZ2luc1t0b3BN
YXJnaW5dICogem9vbUZhY3RvciArIG1hcmdpbnNbYm90dG9tTWFyZ2luXSAqIHpvb21GYWN0b3Ip
OworICAgIEludFJlY3QgcmVzdWx0KHpvb21lZFJlY3QpOworICAgIGlmICh3aWR0aERlbHRhIDwg
MCkgeworICAgICAgICByZXN1bHQuc2V0WChyZXN1bHQueCgpIC0gbWFyZ2luc1tsZWZ0TWFyZ2lu
XSAqIHpvb21GYWN0b3IpOworICAgICAgICByZXN1bHQuc2V0V2lkdGgocmVzdWx0LndpZHRoKCkg
LSB3aWR0aERlbHRhKTsKKyAgICB9CisgICAgaWYgKGhlaWdodERlbHRhIDwgMCkgeworICAgICAg
ICByZXN1bHQuc2V0WShyZXN1bHQueSgpIC0gbWFyZ2luc1t0b3BNYXJnaW5dICogem9vbUZhY3Rv
cik7CisgICAgICAgIHJlc3VsdC5zZXRIZWlnaHQocmVzdWx0LmhlaWdodCgpIC0gaGVpZ2h0RGVs
dGEpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBDaGVja2JveGVzCisKK3N0
YXRpYyBjb25zdCBJbnRTaXplKiBjaGVja2JveFNpemVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3Qg
SW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgxNCwgMTQpLCBJbnRTaXplKDEyLCAxMiksIElu
dFNpemUoMTAsIDEwKSB9OworICAgIHJldHVybiBzaXplczsKK30KKworc3RhdGljIGNvbnN0IGlu
dCogY2hlY2tib3hNYXJnaW5zKE5TQ29udHJvbFNpemUgY29udHJvbFNpemUpCit7CisgICAgc3Rh
dGljIGNvbnN0IGludCBtYXJnaW5zWzNdWzRdID0KKyAgICB7CisgICAgICAgIHsgMywgNCwgNCwg
MiB9LAorICAgICAgICB7IDQsIDMsIDMsIDMgfSwKKyAgICAgICAgeyA0LCAzLCAzLCAzIH0sCisg
ICAgfTsKKyAgICByZXR1cm4gbWFyZ2luc1tjb250cm9sU2l6ZV07Cit9CisKK3N0YXRpYyBMZW5n
dGhTaXplIGNoZWNrYm94U2l6ZShjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6
b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQoreworICAgIC8vIElmIHRoZSB3aWR0aCBhbmQg
aGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisg
ICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVk
U2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICByZXR1cm4gem9vbWVk
U2l6ZTsKKworICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50cmlu
c2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgorICAgIHJldHVybiBzaXplRnJvbUZvbnQoZm9udCwg
em9vbWVkU2l6ZSwgem9vbUZhY3RvciwgY2hlY2tib3hTaXplcygpKTsKK30KKworc3RhdGljIE5T
QnV0dG9uQ2VsbCogY2hlY2tib3goQ29udHJvbFN0YXRlcyBzdGF0ZXMsIGNvbnN0IEludFJlY3Qm
IHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpCit7CisgICAgc3RhdGljIE5TQnV0dG9uQ2Vs
bCogY2hlY2tib3hDZWxsOworICAgIGlmICghY2hlY2tib3hDZWxsKSB7CisgICAgICAgIGNoZWNr
Ym94Q2VsbCA9IFtbTlNCdXR0b25DZWxsIGFsbG9jXSBpbml0XTsKKyAgICAgICAgW2NoZWNrYm94
Q2VsbCBzZXRCdXR0b25UeXBlOk5TU3dpdGNoQnV0dG9uXTsKKyAgICAgICAgW2NoZWNrYm94Q2Vs
bCBzZXRUaXRsZTpuaWxdOworICAgICAgICBbY2hlY2tib3hDZWxsIHNldEFsbG93c01peGVkU3Rh
dGU6WUVTXTsKKyAgICAgICAgW2NoZWNrYm94Q2VsbCBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNS
aW5nVHlwZUV4dGVyaW9yXTsKKyAgICB9CisgICAgCisgICAgLy8gU2V0IHRoZSBjb250cm9sIHNp
emUgYmFzZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUgcGFpbnRpbmcgaW50by4KKyAgICBzZXRD
b250cm9sU2l6ZShjaGVja2JveENlbGwsIGNoZWNrYm94U2l6ZXMoKSwgem9vbWVkUmVjdC5zaXpl
KCksIHpvb21GYWN0b3IpOworCisgICAgLy8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3ZSBy
ZXNwb25kIHRvLgorICAgIHVwZGF0ZVN0YXRlcyhjaGVja2JveENlbGwsIHN0YXRlcyk7CisgICAg
CisgICAgcmV0dXJuIGNoZWNrYm94Q2VsbDsKK30KKworLy8gRklYTUU6IFNoYXJlIG1vcmUgY29k
ZSB3aXRoIHJhZGlvIGJ1dHRvbnMuCitzdGF0aWMgdm9pZCBwYWludENoZWNrYm94KENvbnRyb2xT
dGF0ZXMgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHpv
b21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXcpCit7Cisg
ICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHdp
ZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUgY29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2Vs
bCBmb3IgcGFpbnRpbmcuCisgICAgTlNCdXR0b25DZWxsKiBjaGVja2JveENlbGwgPSBjaGVja2Jv
eChzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOworCisgICAgY29udGV4dC0+c2F2ZSgp
OworCisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IFtjaGVja2JveENlbGwgY29udHJv
bFNpemVdOworICAgIEludFNpemUgem9vbWVkU2l6ZSA9IGNoZWNrYm94U2l6ZXMoKVtjb250cm9s
U2l6ZV07CisgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6b29tZWRTaXplLndpZHRoKCkgKiB6b29t
RmFjdG9yKTsKKyAgICB6b29tZWRTaXplLnNldEhlaWdodCh6b29tZWRTaXplLmhlaWdodCgpICog
em9vbUZhY3Rvcik7CisgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29t
ZWRSZWN0LCB6b29tZWRTaXplLCBjaGVja2JveE1hcmdpbnMoY29udHJvbFNpemUpLCB6b29tRmFj
dG9yKTsKKyAgICAKKyAgICBpZiAoem9vbUZhY3RvciAhPSAxLjBmKSB7CisgICAgICAgIGluZmxh
dGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOworICAg
ICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21G
YWN0b3IpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0LngoKSwgaW5m
bGF0ZWRSZWN0LnkoKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tRmFj
dG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRS
ZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOworICAgIH0KKyAgICAKKyAgICBbY2hlY2tib3hD
ZWxsIGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3OnNjcm9sbFZpZXct
PmRvY3VtZW50VmlldygpXTsKKyAgICBbY2hlY2tib3hDZWxsIHNldENvbnRyb2xWaWV3Om5pbF07
CisKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisgICAgCisgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworfQorCisvLyBSYWRpbyBCdXR0b25zCisKK3N0YXRpYyBjb25zdCBJbnRTaXplKiBy
YWRpb1NpemVzKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50
U2l6ZSgxNCwgMTUpLCBJbnRTaXplKDEyLCAxMyksIEludFNpemUoMTAsIDEwKSB9OworICAgIHJl
dHVybiBzaXplczsKK30KKworc3RhdGljIGNvbnN0IGludCogcmFkaW9NYXJnaW5zKE5TQ29udHJv
bFNpemUgY29udHJvbFNpemUpCit7CisgICAgc3RhdGljIGNvbnN0IGludCBtYXJnaW5zWzNdWzRd
ID0KKyAgICB7CisgICAgICAgIHsgMiwgMiwgNCwgMiB9LAorICAgICAgICB7IDMsIDIsIDMsIDIg
fSwKKyAgICAgICAgeyAxLCAwLCAyLCAwIH0sCisgICAgfTsKKyAgICByZXR1cm4gbWFyZ2luc1tj
b250cm9sU2l6ZV07Cit9CisKK3N0YXRpYyBMZW5ndGhTaXplIHJhZGlvU2l6ZShjb25zdCBGb250
JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKQor
eworICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhl
biB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCF6b29tZWRTaXplLndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiAhem9vbWVkU2l6ZS5oZWlnaHQoKS5pc0ludHJpbnNpY09yQXV0
bygpKQorICAgICAgICByZXR1cm4gem9vbWVkU2l6ZTsKKworICAgIC8vIFVzZSB0aGUgZm9udCBz
aXplIHRvIGRldGVybWluZSB0aGUgaW50cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgorICAg
IHJldHVybiBzaXplRnJvbUZvbnQoZm9udCwgem9vbWVkU2l6ZSwgem9vbUZhY3RvciwgcmFkaW9T
aXplcygpKTsKK30KKworc3RhdGljIE5TQnV0dG9uQ2VsbCogcmFkaW8oQ29udHJvbFN0YXRlcyBz
dGF0ZXMsIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpCit7Cisg
ICAgc3RhdGljIE5TQnV0dG9uQ2VsbCogcmFkaW9DZWxsOworICAgIGlmICghcmFkaW9DZWxsKSB7
CisgICAgICAgIHJhZGlvQ2VsbCA9IFtbTlNCdXR0b25DZWxsIGFsbG9jXSBpbml0XTsKKyAgICAg
ICAgW3JhZGlvQ2VsbCBzZXRCdXR0b25UeXBlOk5TUmFkaW9CdXR0b25dOworICAgICAgICBbcmFk
aW9DZWxsIHNldFRpdGxlOm5pbF07CisgICAgICAgIFtyYWRpb0NlbGwgc2V0Rm9jdXNSaW5nVHlw
ZTpOU0ZvY3VzUmluZ1R5cGVFeHRlcmlvcl07CisgICAgfQorICAgIAorICAgIC8vIFNldCB0aGUg
Y29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUgcmVjdGFuZ2xlIHdlJ3JlIHBhaW50aW5nIGludG8u
CisgICAgc2V0Q29udHJvbFNpemUocmFkaW9DZWxsLCByYWRpb1NpemVzKCksIHpvb21lZFJlY3Qu
c2l6ZSgpLCB6b29tRmFjdG9yKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBzdGF0ZXMg
d2UgcmVzcG9uZCB0by4KKyAgICB1cGRhdGVTdGF0ZXMocmFkaW9DZWxsLCBzdGF0ZXMpOworICAg
IAorICAgIHJldHVybiByYWRpb0NlbGw7Cit9CisKK3N0YXRpYyB2b2lkIHBhaW50UmFkaW8oQ29u
dHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykK
K3sKKyAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUg
Y29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCisgICAgTlNCdXR0b25D
ZWxsKiByYWRpb0NlbGwgPSByYWRpbyhzdGF0ZXMsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IpOwor
CisgICAgY29udGV4dC0+c2F2ZSgpOworCisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9
IFtyYWRpb0NlbGwgY29udHJvbFNpemVdOworICAgIEludFNpemUgem9vbWVkU2l6ZSA9IHJhZGlv
U2l6ZXMoKVtjb250cm9sU2l6ZV07CisgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6b29tZWRTaXpl
LndpZHRoKCkgKiB6b29tRmFjdG9yKTsKKyAgICB6b29tZWRTaXplLnNldEhlaWdodCh6b29tZWRT
aXplLmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSBp
bmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCByYWRpb01hcmdpbnMoY29udHJvbFNp
emUpLCB6b29tRmFjdG9yKTsKKyAgICAKKyAgICBpZiAoem9vbUZhY3RvciAhPSAxLjBmKSB7Cisg
ICAgICAgIGluZmxhdGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21G
YWN0b3IpOworICAgICAgICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWln
aHQoKSAvIHpvb21GYWN0b3IpOworICAgICAgICBjb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRS
ZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0
U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0
ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOworICAgIH0KKyAgICAKKyAg
ICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKyAgICBbcmFkaW9DZWxsIGRyYXdXaXRoRnJh
bWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3OnNjcm9sbFZpZXctPmRvY3VtZW50Vmlldygp
XTsKKyAgICBbcmFkaW9DZWxsIHNldENvbnRyb2xWaWV3Om5pbF07CisgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUworCisgICAgY29udGV4dC0+cmVzdG9yZSgpOworfQorCisvLyBCdXR0b25z
CisKKy8vIEJ1dHRvbnMgcmVhbGx5IG9ubHkgY29uc3RyYWluIGhlaWdodC4gVGhleSByZXNwZWN0
IHdpZHRoLgorc3RhdGljIGNvbnN0IEludFNpemUqIGJ1dHRvblNpemVzKCkKK3sKKyAgICBzdGF0
aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgwLCAyMSksIEludFNpemUoMCwg
MTgpLCBJbnRTaXplKDAsIDE1KSB9OworICAgIHJldHVybiBzaXplczsKK30KKworc3RhdGljIGNv
bnN0IGludCogYnV0dG9uTWFyZ2lucyhOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplKQoreworICAg
IHN0YXRpYyBjb25zdCBpbnQgbWFyZ2luc1szXVs0XSA9CisgICAgeworICAgICAgICB7IDQsIDYs
IDcsIDYgfSwKKyAgICAgICAgeyA0LCA1LCA2LCA1IH0sCisgICAgICAgIHsgMCwgMSwgMSwgMSB9
LAorICAgIH07CisgICAgcmV0dXJuIG1hcmdpbnNbY29udHJvbFNpemVdOworfQorCitzdGF0aWMg
TlNCdXR0b25DZWxsKiBidXR0b24oQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0
ZXMsIGNvbnN0IEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpCit7CisgICAg
c3RhdGljIE5TQnV0dG9uQ2VsbCAqYnV0dG9uQ2VsbDsKKyAgICBzdGF0aWMgYm9vbCBkZWZhdWx0
QnV0dG9uOworICAgIGlmICghYnV0dG9uQ2VsbCkgeworICAgICAgICBidXR0b25DZWxsID0gW1tO
U0J1dHRvbkNlbGwgYWxsb2NdIGluaXRdOworICAgICAgICBbYnV0dG9uQ2VsbCBzZXRUaXRsZTpu
aWxdOworICAgICAgICBbYnV0dG9uQ2VsbCBzZXRCdXR0b25UeXBlOk5TTW9tZW50YXJ5UHVzaElu
QnV0dG9uXTsKKyAgICB9CisKKyAgICAvLyBTZXQgdGhlIGNvbnRyb2wgc2l6ZSBiYXNlZCBvZmYg
dGhlIHJlY3RhbmdsZSB3ZSdyZSBwYWludGluZyBpbnRvLgorICAgIGlmIChwYXJ0ID09IFNxdWFy
ZUJ1dHRvblBhcnQgfHwgem9vbWVkUmVjdC5oZWlnaHQoKSA+IGJ1dHRvblNpemVzKClbTlNSZWd1
bGFyQ29udHJvbFNpemVdLmhlaWdodCgpICogem9vbUZhY3RvcikgeworICAgICAgICAvLyBVc2Ug
dGhlIHNxdWFyZSBidXR0b24KKyAgICAgICAgaWYgKFtidXR0b25DZWxsIGJlemVsU3R5bGVdICE9
IE5TU2hhZG93bGVzc1NxdWFyZUJlemVsU3R5bGUpCisgICAgICAgICAgICBbYnV0dG9uQ2VsbCBz
ZXRCZXplbFN0eWxlOk5TU2hhZG93bGVzc1NxdWFyZUJlemVsU3R5bGVdOworICAgIH0gZWxzZSBp
ZiAoW2J1dHRvbkNlbGwgYmV6ZWxTdHlsZV0gIT0gTlNSb3VuZGVkQmV6ZWxTdHlsZSkKKyAgICAg
ICAgW2J1dHRvbkNlbGwgc2V0QmV6ZWxTdHlsZTpOU1JvdW5kZWRCZXplbFN0eWxlXTsKKworICAg
IHNldENvbnRyb2xTaXplKGJ1dHRvbkNlbGwsIGJ1dHRvblNpemVzKCksIHpvb21lZFJlY3Quc2l6
ZSgpLCB6b29tRmFjdG9yKTsKKworICAgIGlmIChkZWZhdWx0QnV0dG9uICE9IChzdGF0ZXMgJiBE
ZWZhdWx0U3RhdGUpKSB7CisgICAgICAgIGRlZmF1bHRCdXR0b24gPSAhZGVmYXVsdEJ1dHRvbjsK
KyAgICAgICAgW2J1dHRvbkNlbGwgc2V0S2V5RXF1aXZhbGVudDooZGVmYXVsdEJ1dHRvbiA/IEAi
XHIiIDogQCIiKV07CisgICAgfQorCisgICAgLy8gVXBkYXRlIHRoZSB2YXJpb3VzIHN0YXRlcyB3
ZSByZXNwb25kIHRvLgorICAgIHVwZGF0ZVN0YXRlcyhidXR0b25DZWxsLCBzdGF0ZXMpOworICAg
IAorICAgIHJldHVybiBidXR0b25DZWxsOworfQorCitzdGF0aWMgdm9pZCBwYWludEJ1dHRvbihD
b250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCB6b29tRmFjdG9yLCBTY3Jv
bGxWaWV3KiBzY3JvbGxWaWV3KQoreworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUwor
ICAgIAorICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggYW5kIGhlaWdodCBuZWVkZWQgZm9yIHRo
ZSBjb250cm9sIGFuZCBwcmVwYXJlIHRoZSBjZWxsIGZvciBwYWludGluZy4KKyAgICBOU0J1dHRv
bkNlbGwgKmJ1dHRvbkNlbGwgPSBidXR0b24ocGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29t
RmFjdG9yKTsKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KGNv
bnRleHQpOworCisgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9IFtidXR0b25DZWxsIGNv
bnRyb2xTaXplXTsKKyAgICBJbnRTaXplIHpvb21lZFNpemUgPSBidXR0b25TaXplcygpW2NvbnRy
b2xTaXplXTsKKyAgICB6b29tZWRTaXplLnNldFdpZHRoKHpvb21lZFJlY3Qud2lkdGgoKSk7IC8v
IEJ1dHRvbnMgZG9uJ3QgZXZlciBjb25zdHJhaW4gd2lkdGgsIHNvIHRoZSB6b29tZWQgd2lkdGgg
Y2FuIGp1c3QgYmUgaG9ub3JlZC4KKyAgICB6b29tZWRTaXplLnNldEhlaWdodCh6b29tZWRTaXpl
LmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSB6b29t
ZWRSZWN0OworICAgIGlmIChbYnV0dG9uQ2VsbCBiZXplbFN0eWxlXSA9PSBOU1JvdW5kZWRCZXpl
bFN0eWxlKSB7CisgICAgICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHdpdGhpbiB0aGUgYXZhaWxh
YmxlIHNwYWNlLgorICAgICAgICBpZiAoaW5mbGF0ZWRSZWN0LmhlaWdodCgpID4gem9vbWVkU2l6
ZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldFkoaW5mbGF0ZWRSZWN0
LnkoKSArIChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLSB6b29tZWRTaXplLmhlaWdodCgpKSAvIDIp
OworICAgICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodCh6b29tZWRTaXplLmhlaWdodCgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291bnQgZm9y
IHRoZSBzaGFkb3cuCisgICAgICAgIGluZmxhdGVkUmVjdCA9IGluZmxhdGVSZWN0KGluZmxhdGVk
UmVjdCwgem9vbWVkU2l6ZSwgYnV0dG9uTWFyZ2lucyhjb250cm9sU2l6ZSksIHpvb21GYWN0b3Ip
OworCisgICAgICAgIGlmICh6b29tRmFjdG9yICE9IDEuMGYpIHsKKyAgICAgICAgICAgIGluZmxh
dGVkUmVjdC5zZXRXaWR0aChpbmZsYXRlZFJlY3Qud2lkdGgoKSAvIHpvb21GYWN0b3IpOworICAg
ICAgICAgICAgaW5mbGF0ZWRSZWN0LnNldEhlaWdodChpbmZsYXRlZFJlY3QuaGVpZ2h0KCkgLyB6
b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnRyYW5zbGF0ZShpbmZsYXRlZFJlY3Qu
eCgpLCBpbmZsYXRlZFJlY3QueSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0
U2l6ZSh6b29tRmFjdG9yLCB6b29tRmFjdG9yKSk7CisgICAgICAgICAgICBjb250ZXh0LT50cmFu
c2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKKyAgICAgICAgfQor
ICAgIH0gCisKKyAgICBOU1ZpZXcgKnZpZXcgPSBzY3JvbGxWaWV3LT5kb2N1bWVudFZpZXcoKTsK
KyAgICBOU1dpbmRvdyAqd2luZG93ID0gW3ZpZXcgd2luZG93XTsKKyAgICBOU0J1dHRvbkNlbGwg
KnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgPSBbd2luZG93IGRlZmF1bHRCdXR0b25DZWxsXTsK
KworICAgIGlmICgoc3RhdGVzICYgRGVmYXVsdFN0YXRlKSAmJiBbd2luZG93IGlzS2V5V2luZG93
XSkgeworICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOmJ1dHRvbkNlbGxdOwor
ICAgICAgICB3a0FkdmFuY2VEZWZhdWx0QnV0dG9uUHVsc2VBbmltYXRpb24oYnV0dG9uQ2VsbCk7
CisgICAgfSBlbHNlIGlmIChbcHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCBpc0VxdWFsOmJ1dHRv
bkNlbGxdKQorICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOm5pbF07CisKKyAg
ICBbYnV0dG9uQ2VsbCBkcmF3V2l0aEZyYW1lOk5TUmVjdChpbmZsYXRlZFJlY3QpIGluVmlldzp2
aWV3XTsKKyAgICBbYnV0dG9uQ2VsbCBzZXRDb250cm9sVmlldzpuaWxdOworCisgICAgaWYgKCFb
cHJldmlvdXNEZWZhdWx0QnV0dG9uQ2VsbCBpc0VxdWFsOmJ1dHRvbkNlbGxdKQorICAgICAgICBb
d2luZG93IHNldERlZmF1bHRCdXR0b25DZWxsOnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGxdOwor
CisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworfQorCisvLyBUaGVtZSBvdmVycmlkZXMK
KworaW50IFRoZW1lTWFjOjpiYXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChDb250cm9sUGFydCBw
YXJ0KSBjb25zdAoreworICAgIGlmIChwYXJ0ID09IENoZWNrYm94UGFydCB8fCBwYXJ0ID09IFJh
ZGlvUGFydCkKKyAgICAgICAgcmV0dXJuIC0yOworICAgIHJldHVybiBUaGVtZTo6YmFzZWxpbmVQ
b3NpdGlvbkFkanVzdG1lbnQocGFydCk7Cit9CisKK0ZvbnREZXNjcmlwdGlvbiBUaGVtZU1hYzo6
Y29udHJvbEZvbnQoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAgY2FzZSBQdXNo
QnV0dG9uUGFydDogeworICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
bjsKKyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsK
KyAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlw
dGlvbjo6U2VyaWZGYW1pbHkpOworCisgICAgICAgICAgICBOU0ZvbnQqIG5zRm9udCA9IFtOU0Zv
bnQgc3lzdGVtRm9udE9mU2l6ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplRm9yQ29udHJvbFNpemU6
Y29udHJvbFNpemVGb3JGb250KGZvbnQpXV07CisgICAgICAgICAgICBmb250RGVzY3JpcHRpb24u
Zmlyc3RGYW1pbHkoKS5zZXRGYW1pbHkoW25zRm9udCBmYW1pbHlOYW1lXSk7CisgICAgICAgICAg
ICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKFtuc0ZvbnQgcG9pbnRTaXplXSAqIHpv
b21GYWN0b3IpOworICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUo
W25zRm9udCBwb2ludFNpemVdICogem9vbUZhY3Rvcik7CisgICAgICAgICAgICByZXR1cm4gZm9u
dERlc2NyaXB0aW9uOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gVGhlbWU6OmNvbnRyb2xGb250KHBhcnQsIGZvbnQsIHpvb21GYWN0b3IpOworICAgIH0K
K30KKworTGVuZ3RoU2l6ZSBUaGVtZU1hYzo6Y29udHJvbFNpemUoQ29udHJvbFBhcnQgcGFydCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoU2l6ZSYgem9vbWVkU2l6ZSwgZmxvYXQgem9v
bUZhY3RvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAgY2FzZSBDaGVj
a2JveFBhcnQ6CisgICAgICAgICAgICByZXR1cm4gY2hlY2tib3hTaXplKGZvbnQsIHpvb21lZFNp
emUsIHpvb21GYWN0b3IpOworICAgICAgICBjYXNlIFJhZGlvUGFydDoKKyAgICAgICAgICAgIHJl
dHVybiByYWRpb1NpemUoZm9udCwgem9vbWVkU2l6ZSwgem9vbUZhY3Rvcik7CisgICAgICAgIGNh
c2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgICAgICAgICAvLyBIZWlnaHQgaXMgcmVzZXQgdG8gYXV0
byBzbyB0aGF0IHNwZWNpZmllZCBoZWlnaHRzIGNhbiBiZSBpZ25vcmVkLgorICAgICAgICAgICAg
cmV0dXJuIHNpemVGcm9tRm9udChmb250LCBMZW5ndGhTaXplKHpvb21lZFNpemUud2lkdGgoKSwg
TGVuZ3RoKCkpLCB6b29tRmFjdG9yLCBidXR0b25TaXplcygpKTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiB6b29tZWRTaXplOworICAgIH0KK30KKworTGVuZ3RoU2l6ZSBU
aGVtZU1hYzo6bWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQm
IGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChwYXJ0KSB7Cisg
ICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9u
UGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgICAgICAgICAgcmV0dXJuIExlbmd0
aFNpemUoTGVuZ3RoKDAsIEZpeGVkKSwgTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oMTUgKiB6b29t
RmFjdG9yKSwgRml4ZWQpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBU
aGVtZTo6bWluaW11bUNvbnRyb2xTaXplKHBhcnQsIGZvbnQsIHpvb21GYWN0b3IpOworICAgIH0K
K30KKworTGVuZ3RoQm94IFRoZW1lTWFjOjpjb250cm9sQm9yZGVyKENvbnRyb2xQYXJ0IHBhcnQs
IGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExlbmd0aEJveCYgem9vbWVkQm94LCBmbG9hdCB6b29t
RmFjdG9yKSBjb25zdAoreworICAgIHN3aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIFNxdWFy
ZUJ1dHRvblBhcnQ6CisgICAgICAgIGNhc2UgRGVmYXVsdEJ1dHRvblBhcnQ6CisgICAgICAgIGNh
c2UgQnV0dG9uUGFydDoKKyAgICAgICAgICAgIHJldHVybiBMZW5ndGhCb3goMCwgem9vbWVkQm94
LnJpZ2h0KCkudmFsdWUoKSwgMCwgem9vbWVkQm94LmxlZnQoKS52YWx1ZSgpKTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBUaGVtZTo6Y29udHJvbEJvcmRlcihwYXJ0LCBm
b250LCB6b29tZWRCb3gsIHpvb21GYWN0b3IpOworICAgIH0KK30KKworTGVuZ3RoQm94IFRoZW1l
TWFjOjpjb250cm9sUGFkZGluZyhDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBj
b25zdCBMZW5ndGhCb3gmIHpvb21lZEJveCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKHBhcnQpIHsKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDogeworICAgICAg
ICAgICAgLy8gSnVzdCB1c2UgOHB4LiAgQXBwS2l0IHdhbnRzIHRvIHVzZSAxMXB4IGZvciBtaW5p
IGJ1dHRvbnMsIGJ1dCB0aGF0IHBhZGRpbmcgaXMganVzdCB0b28gbGFyZ2UKKyAgICAgICAgICAg
IC8vIGZvciByZWFsLXdvcmxkIFdlYiBzaXRlcyAoY3JlYXRpbmcgYSBodWdlIG5lY2Vzc2FyeSBt
aW5pbXVtIHdpZHRoIGZvciBidXR0b25zIHdob3NlIHNwYWNlIGlzCisgICAgICAgICAgICAvLyBi
eSBkZWZpbml0aW9uIGNvbnN0cmFpbmVkLCBzaW5jZSB3ZSBzZWxlY3QgbWluaSBvbmx5IGZvciBz
bWFsbCBjcmFtcGVkIGVudmlyb25tZW50cy4KKyAgICAgICAgICAgIC8vIFRoaXMgYWxzbyBndWFy
YW50ZWVzIHRoZSBIVE1MIDxidXR0b24+IHdpbGwgbWF0Y2ggb3VyIHJlbmRlcmluZyBieSBkZWZh
dWx0LCBzaW5jZSB3ZSdyZSB1c2luZyBhIGNvbnNpc3RlbnQKKyAgICAgICAgICAgIC8vIHBhZGRp
bmcuCisgICAgICAgICAgICBjb25zdCBpbnQgcGFkZGluZyA9IDggKiB6b29tRmFjdG9yOworICAg
ICAgICAgICAgcmV0dXJuIExlbmd0aEJveCgwLCBwYWRkaW5nLCAwLCBwYWRkaW5nKTsKKyAgICAg
ICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFRoZW1lOjpjb250cm9s
UGFkZGluZyhwYXJ0LCBmb250LCB6b29tZWRCb3gsIHpvb21GYWN0b3IpOworICAgIH0KK30KKwor
dm9pZCBUaGVtZU1hYzo6aW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBhcnQgcGFydCwg
Q29udHJvbFN0YXRlcyBzdGF0ZXMsIEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0
b3IpIGNvbnN0Cit7CisgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCisgICAgc3dpdGNo
IChwYXJ0KSB7CisgICAgICAgIGNhc2UgQ2hlY2tib3hQYXJ0OiB7CisgICAgICAgICAgICAvLyBX
ZSBpbmZsYXRlIHRoZSByZWN0IGFzIG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1
ZGVkIGluIHRoZSBjZWxsIHRvIGFjY29tbW9kYXRlIHRoZSBjaGVja2JveAorICAgICAgICAgICAg
Ly8gc2hhZG93IiBhbmQgdGhlIGNoZWNrLiAgV2UgZG9uJ3QgY29uc2lkZXIgdGhpcyBwYXJ0IG9m
IHRoZSBib3VuZHMgb2YgdGhlIGNvbnRyb2wgaW4gV2ViS2l0LgorICAgICAgICAgICAgTlNDZWxs
ICpjZWxsID0gY2hlY2tib3goc3RhdGVzLCB6b29tZWRSZWN0LCB6b29tRmFjdG9yKTsKKyAgICAg
ICAgICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbY2VsbCBjb250cm9sU2l6ZV07Cisg
ICAgICAgICAgICBJbnRTaXplIHpvb21lZFNpemUgPSBjaGVja2JveFNpemVzKClbY29udHJvbFNp
emVdOworICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9vbWVkU2l6ZS5oZWlnaHQo
KSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRXaWR0aCh6b29tZWRT
aXplLndpZHRoKCkgKiB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIHpvb21lZFJlY3QgPSBpbmZs
YXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCBjaGVja2JveE1hcmdpbnMoY29udHJvbFNp
emUpLCB6b29tRmFjdG9yKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgUmFkaW9QYXJ0OiB7CisgICAgICAgICAgICAvLyBXZSBpbmZsYXRlIHRoZSByZWN0IGFz
IG5lZWRlZCB0byBhY2NvdW50IGZvciBwYWRkaW5nIGluY2x1ZGVkIGluIHRoZSBjZWxsIHRvIGFj
Y29tbW9kYXRlIHRoZSByYWRpbyBidXR0b24KKyAgICAgICAgICAgIC8vIHNoYWRvdyIuICBXZSBk
b24ndCBjb25zaWRlciB0aGlzIHBhcnQgb2YgdGhlIGJvdW5kcyBvZiB0aGUgY29udHJvbCBpbiBX
ZWJLaXQuCisgICAgICAgICAgICBOU0NlbGwgKmNlbGwgPSByYWRpbyhzdGF0ZXMsIHpvb21lZFJl
Y3QsIHpvb21GYWN0b3IpOworICAgICAgICAgICAgTlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZSA9
IFtjZWxsIGNvbnRyb2xTaXplXTsKKyAgICAgICAgICAgIEludFNpemUgem9vbWVkU2l6ZSA9IHJh
ZGlvU2l6ZXMoKVtjb250cm9sU2l6ZV07CisgICAgICAgICAgICB6b29tZWRTaXplLnNldEhlaWdo
dCh6b29tZWRTaXplLmhlaWdodCgpICogem9vbUZhY3Rvcik7CisgICAgICAgICAgICB6b29tZWRT
aXplLnNldFdpZHRoKHpvb21lZFNpemUud2lkdGgoKSAqIHpvb21GYWN0b3IpOworICAgICAgICAg
ICAgem9vbWVkUmVjdCA9IGluZmxhdGVSZWN0KHpvb21lZFJlY3QsIHpvb21lZFNpemUsIHJhZGlv
TWFyZ2lucyhjb250cm9sU2l6ZSksIHpvb21GYWN0b3IpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZh
dWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OiB7CisgICAgICAgICAgICBO
U0J1dHRvbkNlbGwgKmNlbGwgPSBidXR0b24ocGFydCwgc3RhdGVzLCB6b29tZWRSZWN0LCB6b29t
RmFjdG9yKTsKKyAgICAgICAgICAgIE5TQ29udHJvbFNpemUgY29udHJvbFNpemUgPSBbY2VsbCBj
b250cm9sU2l6ZV07CisKKyAgICAgICAgICAgIC8vIFdlIGluZmxhdGUgdGhlIHJlY3QgYXMgbmVl
ZGVkIHRvIGFjY291bnQgZm9yIHRoZSBBcXVhIGJ1dHRvbidzIHNoYWRvdy4KKyAgICAgICAgICAg
IGlmIChbY2VsbCBiZXplbFN0eWxlXSA9PSBOU1JvdW5kZWRCZXplbFN0eWxlKSB7CisgICAgICAg
ICAgICAgICAgSW50U2l6ZSB6b29tZWRTaXplID0gYnV0dG9uU2l6ZXMoKVtjb250cm9sU2l6ZV07
CisgICAgICAgICAgICAgICAgem9vbWVkU2l6ZS5zZXRIZWlnaHQoem9vbWVkU2l6ZS5oZWlnaHQo
KSAqIHpvb21GYWN0b3IpOworICAgICAgICAgICAgICAgIHpvb21lZFNpemUuc2V0V2lkdGgoem9v
bWVkUmVjdC53aWR0aCgpKTsgLy8gQnV0dG9ucyBkb24ndCBldmVyIGNvbnN0cmFpbiB3aWR0aCwg
c28gdGhlIHpvb21lZCB3aWR0aCBjYW4ganVzdCBiZSBob25vcmVkLgorICAgICAgICAgICAgICAg
IHpvb21lZFJlY3QgPSBpbmZsYXRlUmVjdCh6b29tZWRSZWN0LCB6b29tZWRTaXplLCBidXR0b25N
YXJnaW5zKGNvbnRyb2xTaXplKSwgem9vbUZhY3Rvcik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBUaGVt
ZU1hYzo6cGFpbnQoQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9v
bUZhY3RvciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHBh
cnQpIHsKKyAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgICAgICAgICBwYWludENoZWNr
Ym94KHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Nyb2xsVmlldyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgICAgICAg
ICBwYWludFJhZGlvKHN0YXRlcywgY29udGV4dCwgem9vbWVkUmVjdCwgem9vbUZhY3Rvciwgc2Ny
b2xsVmlldyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uUGFy
dDoKKyAgICAgICAgY2FzZSBEZWZhdWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25Q
YXJ0OgorICAgICAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6CisgICAgICAgICAgICBwYWludEJ1
dHRvbihwYXJ0LCBzdGF0ZXMsIGNvbnRleHQsIHpvb21lZFJlY3QsIHpvb21GYWN0b3IsIHNjcm9s
bFZpZXcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
VGhlbWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1RoZW1lQ2hyb21pdW1NYWMubW0JKHJldmlzaW9uIDQ4MzkyKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9UaGVtZUNocm9taXVtTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsNyArMjUsNyBA
QAogICovCiAKICNpbXBvcnQgImNvbmZpZy5oIgotI2ltcG9ydCAiVGhlbWVNYWMuaCIKKyNpbXBv
cnQgIlRoZW1lQ2hyb21pdW1NYWMuaCIKIAogI2ltcG9ydCAiQmxvY2tFeGNlcHRpb25zLmgiCiAj
aW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIKQEAgLTM1LDEwICszNiwyOSBAQAogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCisvLyBUaGlzIGZpbGUgKGFuZCBpdHMgYXNzb2NpYXRlZCAuaCBmaWxl
KSBpcyBhIGNsb25lIG9mIFRoZW1lTWFjLm1tLgorLy8gQmVjYXVzZSB0aGUgb3JpZ2luYWwgZmls
ZSBpcyBkZXNpZ25lZCB0byBydW4gaW4tcHJvY2VzcyBpbnNpZGUgYSBDb2NvYSB2aWV3LAorLy8g
d2UgbXVzdCBtYWludGFpbiBhIGZvcmsuIFBsZWFzZSBtYWludGFpbiB0aGlzIGZpbGUgYnkgcGVy
Zm9ybWluZyBwYXJhbGxlbAorLy8gY2hhbmdlcyB0byBpdC4KKy8vCisvLyBUaGUgb25seSBjaGFu
Z2VzIGZyb20gVGhlbWVNYWMgc2hvdWxkIGJlOgorLy8gLSBUaGUgY2xhc3NuYW1lIGNoYW5nZSBm
cm9tIFRoZW1lTWFjIHRvIFRoZW1lQ2hyb21pdW1NYWMuCisvLyAtIFRoZSBpbXBvcnQgb2YgRmxp
cHBlZFZpZXcoKSBhbmQgaXRzIHVzZSBhcyB0aGUgcGFyZW50IHZpZXcgZm9yIGNlbGwKKy8vICAg
cmVuZGVyaW5nLgorLy8gLSBJbiB1cGRhdGVTdGF0ZXMoKSB0aGUgY29kZSB0byB1cGRhdGUgdGhl
IGNlbGxzJyBpbmFjdGl2ZSBzdGF0ZS4KKy8vIC0gSW4gcGFpbnRCdXR0b24oKSB0aGUgY29kZSB0
byBzYXZlL3Jlc3RvcmUgdGhlIHdpbmRvdydzIGRlZmF1bHQgYnV0dG9uIGNlbGwuCisvLworLy8g
Rm9yIGFsbCBvdGhlciBkaWZmZXJlbmNlcywgaWYgaXQgd2FzIGludHJvZHVjZWQgaW4gdGhpcyBm
aWxlLCB0aGVuIHRoZQorLy8gbWFpbnRhaW5lciBmb3Jnb3QgdG8gaW5jbHVkZSBpdCBpbiB0aGUg
bGlzdDsgb3RoZXJ3aXNlIGl0IGlzIGFuIHVwZGF0ZSB0aGF0CisvLyBzaG91bGQgaGF2ZSBiZWVu
IGFwcGxpZWQgdG8gdGhpcyBmaWxlIGJ1dCB3YXMgbm90LgorCiAvLyBGSVhNRTogRGVmYXVsdCBi
dXR0b25zIHJlYWxseSBzaG91bGQgYmUgbW9yZSBsaWtlIHB1c2ggYnV0dG9ucyBhbmQgbm90IGxp
a2UgYnV0dG9ucy4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBQaWNrIHVwIHV0aWxpdHkg
ZnVuY3Rpb24gZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtTWFjLgorZXh0ZXJuIE5TVmlldyogRmxp
cHBlZFZpZXcoKTsKKwogZW51bSB7CiAgICAgdG9wTWFyZ2luLAogICAgIHJpZ2h0TWFyZ2luLApA
QCAtNDgsNyArNjgsNyBAQCBlbnVtIHsKIAogVGhlbWUqIHBsYXRmb3JtVGhlbWUoKQogewotICAg
IERFRklORV9TVEFUSUNfTE9DQUwoVGhlbWVNYWMsIHRoZW1lTWFjLCAoKSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChUaGVtZUNocm9taXVtTWFjLCB0aGVtZU1hYywgKCkpOwogICAgIHJldHVy
biAmdGhlbWVNYWM7CiB9CiAKQEAgLTEyMiw4ICsxNDIsMTIgQEAgc3RhdGljIHZvaWQgdXBkYXRl
U3RhdGVzKE5TQ2VsbCogY2VsbCwgQwogICAgIGlmIChvbGRJbmRldGVybWluYXRlICE9IGluZGV0
ZXJtaW5hdGUgfHwgY2hlY2tlZCAhPSBvbGRDaGVja2VkKQogICAgICAgICBbY2VsbCBzZXRTdGF0
ZTppbmRldGVybWluYXRlID8gTlNNaXhlZFN0YXRlIDogKGNoZWNrZWQgPyBOU09uU3RhdGUgOiBO
U09mZlN0YXRlKV07CiAgICAgICAgIAotICAgIC8vIFdpbmRvdyBpbmFjdGl2ZSBzdGF0ZSBkb2Vz
IG5vdCBuZWVkIHRvIGJlIGNoZWNrZWQgZXhwbGljaXRseSwgc2luY2Ugd2UgcGFpbnQgcGFyZW50
ZWQgdG8gCi0gICAgLy8gYSB2aWV3IGluIGEgd2luZG93IHdob3NlIGtleSBzdGF0ZSBjYW4gYmUg
ZGV0ZWN0ZWQuCisgICAgLy8gV2luZG93IEluYWN0aXZlIHN0YXRlCisgICAgTlNDb250cm9sVGlu
dCBvbGRUaW50ID0gW2NlbGwgY29udHJvbFRpbnRdOworICAgIGJvb2wgd2luZG93SW5hY3RpdmUg
PSAoc3RhdGVzICYgV2luZG93SW5hY3RpdmVTdGF0ZSk7CisgICAgTlNDb250cm9sVGludCB0aW50
ID0gd2luZG93SW5hY3RpdmUgPyBOU0NsZWFyQ29udHJvbFRpbnQgOiBbTlNDb2xvciBjdXJyZW50
Q29udHJvbFRpbnRdOworICAgIGlmICh0aW50ICE9IG9sZFRpbnQpCisgICAgICAgIFtjZWxsIHNl
dENvbnRyb2xUaW50OnRpbnRdOwogfQogCiBzdGF0aWMgSW50UmVjdCBpbmZsYXRlUmVjdChjb25z
dCBJbnRSZWN0JiB6b29tZWRSZWN0LCBjb25zdCBJbnRTaXplJiB6b29tZWRTaXplLCBjb25zdCBp
bnQqIG1hcmdpbnMsIGZsb2F0IHpvb21GYWN0b3IpCkBAIC0yMTcsNyArMjQxLDcgQEAgc3RhdGlj
IHZvaWQgcGFpbnRDaGVja2JveChDb250cm9sU3RhdGVzIAogICAgICAgICBjb250ZXh0LT50cmFu
c2xhdGUoLWluZmxhdGVkUmVjdC54KCksIC1pbmZsYXRlZFJlY3QueSgpKTsKICAgICB9CiAgICAg
Ci0gICAgW2NoZWNrYm94Q2VsbCBkcmF3V2l0aEZyYW1lOk5TUmVjdChpbmZsYXRlZFJlY3QpIGlu
VmlldzpzY3JvbGxWaWV3LT5kb2N1bWVudFZpZXcoKV07CisgICAgW2NoZWNrYm94Q2VsbCBkcmF3
V2l0aEZyYW1lOk5TUmVjdChpbmZsYXRlZFJlY3QpIGluVmlldzpGbGlwcGVkVmlldygpXTsKICAg
ICBbY2hlY2tib3hDZWxsIHNldENvbnRyb2xWaWV3Om5pbF07CiAKICAgICBjb250ZXh0LT5yZXN0
b3JlKCk7CkBAIC0yOTUsNyArMzE5LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRSYWRpbyhDb250cm9s
U3RhdGVzIHN0YQogICAgIH0KICAgICAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlMK
LSAgICBbcmFkaW9DZWxsIGRyYXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3
OnNjcm9sbFZpZXctPmRvY3VtZW50VmlldygpXTsKKyAgICBbcmFkaW9DZWxsIGRyYXdXaXRoRnJh
bWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwogICAgIFtyYWRp
b0NlbGwgc2V0Q29udHJvbFZpZXc6bmlsXTsKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05T
CiAKQEAgLTM4NSwzNSArNDA5LDIyIEBAIHN0YXRpYyB2b2lkIHBhaW50QnV0dG9uKENvbnRyb2xQ
YXJ0IHBhcnQKICAgICAgICAgfQogICAgIH0gCiAKLSAgICBOU1ZpZXcgKnZpZXcgPSBzY3JvbGxW
aWV3LT5kb2N1bWVudFZpZXcoKTsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW3ZpZXcgd2luZG93
XTsKLSAgICBOU0J1dHRvbkNlbGwgKnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGwgPSBbd2luZG93
IGRlZmF1bHRCdXR0b25DZWxsXTsKLQotICAgIGlmICgoc3RhdGVzICYgRGVmYXVsdFN0YXRlKSAm
JiBbd2luZG93IGlzS2V5V2luZG93XSkgewotICAgICAgICBbd2luZG93IHNldERlZmF1bHRCdXR0
b25DZWxsOmJ1dHRvbkNlbGxdOwotICAgICAgICB3a0FkdmFuY2VEZWZhdWx0QnV0dG9uUHVsc2VB
bmltYXRpb24oYnV0dG9uQ2VsbCk7Ci0gICAgfSBlbHNlIGlmIChbcHJldmlvdXNEZWZhdWx0QnV0
dG9uQ2VsbCBpc0VxdWFsOmJ1dHRvbkNlbGxdKQotICAgICAgICBbd2luZG93IHNldERlZmF1bHRC
dXR0b25DZWxsOm5pbF07Ci0KLSAgICBbYnV0dG9uQ2VsbCBkcmF3V2l0aEZyYW1lOk5TUmVjdChp
bmZsYXRlZFJlY3QpIGluVmlldzp2aWV3XTsKKyAgICBbYnV0dG9uQ2VsbCBkcmF3V2l0aEZyYW1l
Ok5TUmVjdChpbmZsYXRlZFJlY3QpIGluVmlldzpGbGlwcGVkVmlldygpXTsKICAgICBbYnV0dG9u
Q2VsbCBzZXRDb250cm9sVmlldzpuaWxdOwogCi0gICAgaWYgKCFbcHJldmlvdXNEZWZhdWx0QnV0
dG9uQ2VsbCBpc0VxdWFsOmJ1dHRvbkNlbGxdKQotICAgICAgICBbd2luZG93IHNldERlZmF1bHRC
dXR0b25DZWxsOnByZXZpb3VzRGVmYXVsdEJ1dHRvbkNlbGxdOwotCiAgICAgRU5EX0JMT0NLX09C
SkNfRVhDRVBUSU9OUwogfQogCiAvLyBUaGVtZSBvdmVycmlkZXMKIAotaW50IFRoZW1lTWFjOjpi
YXNlbGluZVBvc2l0aW9uQWRqdXN0bWVudChDb250cm9sUGFydCBwYXJ0KSBjb25zdAoraW50IFRo
ZW1lQ2hyb21pdW1NYWM6OmJhc2VsaW5lUG9zaXRpb25BZGp1c3RtZW50KENvbnRyb2xQYXJ0IHBh
cnQpIGNvbnN0CiB7CiAgICAgaWYgKHBhcnQgPT0gQ2hlY2tib3hQYXJ0IHx8IHBhcnQgPT0gUmFk
aW9QYXJ0KQogICAgICAgICByZXR1cm4gLTI7CiAgICAgcmV0dXJuIFRoZW1lOjpiYXNlbGluZVBv
c2l0aW9uQWRqdXN0bWVudChwYXJ0KTsKIH0KIAotRm9udERlc2NyaXB0aW9uIFRoZW1lTWFjOjpj
b250cm9sRm9udChDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBmbG9hdCB6b29t
RmFjdG9yKSBjb25zdAorRm9udERlc2NyaXB0aW9uIFRoZW1lQ2hyb21pdW1NYWM6OmNvbnRyb2xG
b250KENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3Ip
IGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6IHsKQEAgLTQzMiw3ICs0NDMsNyBAQCBGb250RGVzY3JpcHRpb24gVGhlbWVNYWM6OmNvbnRy
b2xGb250KENvCiAgICAgfQogfQogCi1MZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShD
b250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhTaXplJiB6b29t
ZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAorTGVuZ3RoU2l6ZSBUaGVtZUNocm9taXVt
TWFjOjpjb250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25z
dCBMZW5ndGhTaXplJiB6b29tZWRTaXplLCBmbG9hdCB6b29tRmFjdG9yKSBjb25zdAogewogICAg
IHN3aXRjaCAocGFydCkgewogICAgICAgICBjYXNlIENoZWNrYm94UGFydDoKQEAgLTQ0Nyw3ICs0
NTgsNyBAQCBMZW5ndGhTaXplIFRoZW1lTWFjOjpjb250cm9sU2l6ZShDb250cm9sCiAgICAgfQog
fQogCi1MZW5ndGhTaXplIFRoZW1lTWFjOjptaW5pbXVtQ29udHJvbFNpemUoQ29udHJvbFBhcnQg
cGFydCwgY29uc3QgRm9udCYgZm9udCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xlbmd0aFNp
emUgVGhlbWVDaHJvbWl1bU1hYzo6bWluaW11bUNvbnRyb2xTaXplKENvbnRyb2xQYXJ0IHBhcnQs
IGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNo
IChwYXJ0KSB7CiAgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKQEAgLTQ1OSw3ICs0NzAs
NyBAQCBMZW5ndGhTaXplIFRoZW1lTWFjOjptaW5pbXVtQ29udHJvbFNpemUoCiAgICAgfQogfQog
Ci1MZW5ndGhCb3ggVGhlbWVNYWM6OmNvbnRyb2xCb3JkZXIoQ29udHJvbFBhcnQgcGFydCwgY29u
c3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0
b3IpIGNvbnN0CitMZW5ndGhCb3ggVGhlbWVDaHJvbWl1bU1hYzo6Y29udHJvbEJvcmRlcihDb250
cm9sUGFydCBwYXJ0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBMZW5ndGhCb3gmIHpvb21lZEJv
eCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICAg
ICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgpAQCAtNDcxLDcgKzQ4Miw3IEBAIExlbmd0aEJveCBU
aGVtZU1hYzo6Y29udHJvbEJvcmRlcihDb250cm8KICAgICB9CiB9CiAKLUxlbmd0aEJveCBUaGVt
ZU1hYzo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwgY29uc3QgRm9udCYgZm9udCwg
Y29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0CitMZW5n
dGhCb3ggVGhlbWVDaHJvbWl1bU1hYzo6Y29udHJvbFBhZGRpbmcoQ29udHJvbFBhcnQgcGFydCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgTGVuZ3RoQm94JiB6b29tZWRCb3gsIGZsb2F0IHpvb21G
YWN0b3IpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1
dHRvblBhcnQ6IHsKQEAgLTQ4OCw3ICs0OTksNyBAQCBMZW5ndGhCb3ggVGhlbWVNYWM6OmNvbnRy
b2xQYWRkaW5nKENvbnRyCiAgICAgfQogfQogCi12b2lkIFRoZW1lTWFjOjppbmZsYXRlQ29udHJv
bFBhaW50UmVjdChDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzIHN0YXRlcywgSW50UmVj
dCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK3ZvaWQgVGhlbWVDaHJvbWl1
bU1hYzo6aW5mbGF0ZUNvbnRyb2xQYWludFJlY3QoQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0
YXRlcyBzdGF0ZXMsIEludFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IpIGNvbnN0
CiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCiAgICAgc3dpdGNoIChwYXJ0KSB7
CkBAIC01MzUsNyArNTQ2LDcgQEAgdm9pZCBUaGVtZU1hYzo6aW5mbGF0ZUNvbnRyb2xQYWludFJl
Y3QoQwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotdm9pZCBUaGVtZU1hYzo6
cGFpbnQoQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rv
ciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykgY29uc3QKK3ZvaWQgVGhlbWVDaHJvbWl1bU1hYzo6
cGFpbnQoQ29udHJvbFBhcnQgcGFydCwgQ29udHJvbFN0YXRlcyBzdGF0ZXMsIEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3Rv
ciwgU2Nyb2xsVmlldyogc2Nyb2xsVmlldykgY29uc3QKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsK
ICAgICAgICAgY2FzZSBDaGVja2JveFBhcnQ6CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Zsb2F0UG9pbnQuaAkocmV2aXNpb24gNDgzOTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogdHlwZWRl
ZiBzdHJ1Y3QgQ0dQb2ludCBDR1BvaW50OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisj
aWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIFBMQVRGT1JNKERBUldJ
TikpCiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5
cGVkZWYgc3RydWN0IENHUG9pbnQgTlNQb2ludDsKICNlbHNlCkBAIC04NCw3ICs4NCw4IEBAIHB1
YmxpYzoKICAgICBvcGVyYXRvciBDR1BvaW50KCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllf
VFlQRVMpCisjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19T
QU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCisgICAgICAgIHx8IChQTEFURk9STShDSFJPTUlV
TSkgJiYgUExBVEZPUk0oREFSV0lOKSkKICAgICBGbG9hdFBvaW50KGNvbnN0IE5TUG9pbnQmKTsK
ICAgICBvcGVyYXRvciBOU1BvaW50KCkgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRSZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFJlY3QuaAkocmV2aXNpb24gNDgzOTIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBA
CiB0eXBlZGVmIHN0cnVjdCBDR1JlY3QgQ0dSZWN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShN
QUMpCisjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIFBMQVRGT1JN
KERBUldJTikpCiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQ
RVMKIHR5cGVkZWYgc3RydWN0IENHUmVjdCBOU1JlY3Q7CiAjZWxzZQpAQCAtMTI3LDcgKzEyNyw4
IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1JlY3QoKSBjb25zdDsKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9N
RVRSWV9UWVBFUykKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZ
UEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpIFwKKyAgICAgICAgfHwgKFBMQVRGT1JNKENI
Uk9NSVVNKSAmJiBQTEFURk9STShEQVJXSU4pKQogICAgIEZsb2F0UmVjdChjb25zdCBOU1JlY3Qm
KTsKICAgICBvcGVyYXRvciBOU1JlY3QoKSBjb25zdDsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCShyZXZpc2lvbiA0ODM5MikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcg
QEAKIHR5cGVkZWYgc3RydWN0IENHU2l6ZSBDR1NpemU7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JN
KE1BQykKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgUExBVEZP
Uk0oREFSV0lOKSkKICNpZmRlZiBOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9U
WVBFUwogdHlwZWRlZiBzdHJ1Y3QgQ0dTaXplIE5TU2l6ZTsKICNlbHNlCkBAIC03OSw3ICs3OSw4
IEBAIHB1YmxpYzoKICAgICBvcGVyYXRvciBDR1NpemUoKSBjb25zdDsKICNlbmRpZgogCi0jaWYg
UExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZUEVTX1NBTUVfQVNfQ0dHRU9N
RVRSWV9UWVBFUykKKyNpZiAoUExBVEZPUk0oTUFDKSAmJiAhZGVmaW5lZChOU0dFT01FVFJZX1RZ
UEVTX1NBTUVfQVNfQ0dHRU9NRVRSWV9UWVBFUykpIFwKKyAgICAgICAgfHwgKFBMQVRGT1JNKENI
Uk9NSVVNKSAmJiBQTEFURk9STShEQVJXSU4pKQogICAgIGV4cGxpY2l0IEZsb2F0U2l6ZShjb25z
dCBOU1NpemUgJik7IC8vIGRvbid0IGRvIHRoaXMgaW1wbGljaXRseSBzaW5jZSBpdCdzIGxvc3N5
CiAgICAgb3BlcmF0b3IgTlNTaXplKCkgY29uc3Q7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5oCShyZXZpc2lvbiA0ODM5MikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBACiB0eXBl
ZGVmIHN0cnVjdCBDR1JlY3QgQ0dSZWN0OwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMpCisj
aWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIFBMQVRGT1JNKERBUldJ
TikpCiAjaWZkZWYgTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllfVFlQRVMKIHR5
cGVkZWYgc3RydWN0IENHUmVjdCBOU1JlY3Q7CiAjZWxzZQpAQCAtMTYxLDcgKzE2MSw4IEBAIHB1
YmxpYzoKICAgICBvcGVyYXRvciBTa0lSZWN0KCkgY29uc3Q7CiAjZW5kaWYKIAotI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19TQU1FX0FTX0NHR0VPTUVUUllf
VFlQRVMpCisjaWYgKFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoTlNHRU9NRVRSWV9UWVBFU19T
QU1FX0FTX0NHR0VPTUVUUllfVFlQRVMpKSBcCisgICAgICAgIHx8IChQTEFURk9STShDSFJPTUlV
TSkgJiYgUExBVEZPUk0oREFSV0lOKSkKICAgICBvcGVyYXRvciBOU1JlY3QoKSBjb25zdDsKICNl
bmRpZgogCkBAIC0xOTgsNyArMTk5LDggQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJ
bnRSZWN0JiBhLAogSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IENHUmVjdCYpOwogI2Vu
ZGlmCiAKLSNpZiBQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5TR0VPTUVUUllfVFlQRVNfU0FN
RV9BU19DR0dFT01FVFJZX1RZUEVTKQorI2lmIChQTEFURk9STShNQUMpICYmICFkZWZpbmVkKE5T
R0VPTUVUUllfVFlQRVNfU0FNRV9BU19DR0dFT01FVFJZX1RZUEVTKSkgXAorICAgICAgICB8fCAo
UExBVEZPUk0oQ0hST01JVU0pICYmIFBMQVRGT1JNKERBUldJTikpCiBJbnRSZWN0IGVuY2xvc2lu
Z0ludFJlY3QoY29uc3QgTlNSZWN0Jik7CiAjZW5kaWYKIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaAkocmV2aXNpb24gNDgzOTIpCShmcm9tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6NDgzOTIpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTcg
QEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgdGhlbWUgaW1wbGVtZW50YXRpb24g
Zm9yIGZvcm0gY29udHJvbHMgaW4gV2ViQ29yZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUg
QXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVyVGhlbWVNYWNfaAorI2RlZmlu
ZSBSZW5kZXJUaGVtZU1hY19oCisKKyNpbXBvcnQgIlJlbmRlclRoZW1lLmgiCisjaW1wb3J0IDx3
dGYvSGFzaE1hcC5oPgorI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorCisjaWZkZWYgX19PQkpD
X18KK0BjbGFzcyBXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcjsKKyNlbHNl
CitjbGFzcyBXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcjsKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFzcyBSZW5k
ZXJUaGVtZU1hYyA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZSgpOworCisgICAgLy8gQSBtZXRob2QgYXNraW5n
IGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1
cyBvciBub3QuCisgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJl
bmRlck9iamVjdCopIGNvbnN0OworCisgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYg
YW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgorICAgIHZpcnR1YWwgYm9v
bCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0
Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxl
KiwgY29uc3QgQm9yZGVyRGF0YSYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlTGlz
dEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3Ig
cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZUxpc3RC
b3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdDsKKworICAgIHZpcnR1YWwgU2Nyb2xsYmFyQ29u
dHJvbFNpemUgc2Nyb2xsYmFyQ29udHJvbFNpemVGb3JQYXJ0KENvbnRyb2xQYXJ0KSB7IHJldHVy
biBTbWFsbFNjcm9sbGJhcjsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNvbG9y
c0RpZENoYW5nZSgpOworCisgICAgLy8gU3lzdGVtIGZvbnRzLgorICAgIHZpcnR1YWwgdm9pZCBz
eXN0ZW1Gb250KGludCBjc3NWYWx1ZUlkLCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKworICAg
IHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KikgY29u
c3Q7CisgICAgCisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KFJlbmRl
clN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdo
dChSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRk
aW5nVG9wKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDYXBzTG9ja0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgQ29sb3Igc3lz
dGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCBib29sIHN1cHBvcnRzU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9ycygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRB
cmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlz
dFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
KworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRl
clRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZp
cnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9i
amVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisjaWYg
RU5BQkxFKFZJREVPKQorICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwg
Ym9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBh
aW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVy
VGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFSZXdpbmRCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5kKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFUaW1lUmVtYWluaW5nKFJlbmRlck9iamVjdCosIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgLy8gTWVkaWEg
Y29udHJvbHMKKyAgICB2aXJ0dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0
KCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBSZW5kZXJUaGVtZU1hYygpOworICAgIHZpcnR1
YWwgflJlbmRlclRoZW1lTWFjKCk7CisKKyAgICBJbnRSZWN0IGluZmxhdGVSZWN0KGNvbnN0IElu
dFJlY3QmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29tTGV2
ZWwgPSAxLjBmKSBjb25zdDsKKworICAgIEZsb2F0UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3Qo
Y29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBh
cnRSZW5kZXJlciwgY29uc3QgRmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIp
IGNvbnN0OworICAgIAorICAgIC8vIEdldCB0aGUgY29udHJvbCBzaXplIGJhc2VkIG9mZiB0aGUg
Zm9udC4gIFVzZWQgYnkgc29tZSBvZiB0aGUgY29udHJvbHMgKGxpa2UgYnV0dG9ucykuCisgICAg
TlNDb250cm9sU2l6ZSBjb250cm9sU2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAg
ICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplRm9yU3lzdGVtRm9udChSZW5kZXJTdHlsZSopIGNv
bnN0OworICAgIHZvaWQgc2V0Q29udHJvbFNpemUoTlNDZWxsKiwgY29uc3QgSW50U2l6ZSogc2l6
ZXMsIGNvbnN0IEludFNpemUmIG1pblNpemUsIGZsb2F0IHpvb21MZXZlbCA9IDEuMGYpOworICAg
IHZvaWQgc2V0U2l6ZUZyb21Gb250KFJlbmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMp
IGNvbnN0OworICAgIEludFNpemUgc2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqLCBjb25zdCBJbnRT
aXplKiBzaXplcykgY29uc3Q7CisgICAgSW50U2l6ZSBzaXplRm9yU3lzdGVtRm9udChSZW5kZXJT
dHlsZSosIGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdDsKKyAgICB2b2lkIHNldEZvbnRGcm9t
Q29udHJvbFNpemUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgTlNDb250cm9sU2l6
ZSkgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqLCBjb25zdCBS
ZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqLCBjb25z
dCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqLCBj
b25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIHVwZGF0ZVByZXNzZWRTdGF0ZShOU0NlbGwq
LCBjb25zdCBSZW5kZXJPYmplY3QqKTsKKworICAgIC8vIEhlbHBlcnMgZm9yIGFkanVzdGluZyBh
cHBlYXJhbmNlIGFuZCBmb3IgcGFpbnRpbmcKKworICAgIHZvaWQgc2V0UG9wdXBCdXR0b25DZWxs
U3RhdGUoY29uc3QgUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50UmVjdCYpOworICAgIGNvbnN0IElu
dFNpemUqIHBvcHVwQnV0dG9uU2l6ZXMoKSBjb25zdDsKKyAgICBjb25zdCBpbnQqIHBvcHVwQnV0
dG9uTWFyZ2lucygpIGNvbnN0OworICAgIGNvbnN0IGludCogcG9wdXBCdXR0b25QYWRkaW5nKE5T
Q29udHJvbFNpemUpIGNvbnN0OworICAgIHZvaWQgcGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRpZW50
cyhSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICBjb25zdCBJbnRTaXplKiBtZW51TGlzdFNpemVzKCkgY29uc3Q7CisKKyAg
ICBjb25zdCBJbnRTaXplKiBzZWFyY2hGaWVsZFNpemVzKCkgY29uc3Q7CisgICAgY29uc3QgSW50
U2l6ZSogY2FuY2VsQnV0dG9uU2l6ZXMoKSBjb25zdDsKKyAgICBjb25zdCBJbnRTaXplKiByZXN1
bHRzQnV0dG9uU2l6ZXMoKSBjb25zdDsKKyAgICB2b2lkIHNldFNlYXJjaENlbGxTdGF0ZShSZW5k
ZXJPYmplY3QqLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdm9pZCBzZXRTZWFyY2hGaWVsZFNpemUo
UmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICAKKyAgICBOU1BvcFVwQnV0dG9uQ2VsbCogcG9wdXBC
dXR0b24oKSBjb25zdDsKKyAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoKCkgY29uc3Q7Cisg
ICAgTlNNZW51KiBzZWFyY2hNZW51VGVtcGxhdGUoKSBjb25zdDsKKyAgICBOU1NsaWRlckNlbGwq
IHNsaWRlclRodW1iSG9yaXpvbnRhbCgpIGNvbnN0OworICAgIE5TU2xpZGVyQ2VsbCogc2xpZGVy
VGh1bWJWZXJ0aWNhbCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIG11dGFibGUgUmV0YWluUHRy
PE5TUG9wVXBCdXR0b25DZWxsPiBtX3BvcHVwQnV0dG9uOworICAgIG11dGFibGUgUmV0YWluUHRy
PE5TU2VhcmNoRmllbGRDZWxsPiBtX3NlYXJjaDsKKyAgICBtdXRhYmxlIFJldGFpblB0cjxOU01l
bnU+IG1fc2VhcmNoTWVudVRlbXBsYXRlOworICAgIG11dGFibGUgUmV0YWluUHRyPE5TU2xpZGVy
Q2VsbD4gbV9zbGlkZXJUaHVtYkhvcml6b250YWw7CisgICAgbXV0YWJsZSBSZXRhaW5QdHI8TlNT
bGlkZXJDZWxsPiBtX3NsaWRlclRodW1iVmVydGljYWw7CisKKyAgICBib29sIG1faXNTbGlkZXJU
aHVtYkhvcml6b250YWxQcmVzc2VkOworICAgIGJvb2wgbV9pc1NsaWRlclRodW1iVmVydGljYWxQ
cmVzc2VkOworCisgICAgbXV0YWJsZSBIYXNoTWFwPGludCwgUkdCQTMyPiBtX3N5c3RlbUNvbG9y
Q2FjaGU7CisKKyAgICBSZXRhaW5QdHI8V2ViQ29yZVJlbmRlclRoZW1lTm90aWZpY2F0aW9uT2Jz
ZXJ2ZXI+IG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZU1hY19oCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oCShyZXZpc2lvbiA0ODM5MikKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2
ICsyLDcgQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlv
biBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgogICoKICAqIENvcHlyaWdodCAoQykgMjAw
NSBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IEdvb2ds
ZSwgSW5jLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMCw4ICsyMSw4IEBACiAgKgogICovCiAK
LSNpZm5kZWYgUmVuZGVyVGhlbWVNYWNfaAotI2RlZmluZSBSZW5kZXJUaGVtZU1hY19oCisjaWZu
ZGVmIFJlbmRlclRoZW1lQ2hyb21pdW1NYWNfaAorI2RlZmluZSBSZW5kZXJUaGVtZUNocm9taXVt
TWFjX2gKIAogI2ltcG9ydCAiUmVuZGVyVGhlbWUuaCIKICNpbXBvcnQgPHd0Zi9IYXNoTWFwLmg+
CkBAIC0zMywxMSArMzQsMTQgQEAKIGNsYXNzIFdlYkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlv
bk9ic2VydmVyOwogI2VuZGlmCiAKKy8vIFRoaXMgZmlsZSAoYW5kIGl0cyBhc3NvY2lhdGVkIC5t
bSBmaWxlKSBpcyBhIGNsb25lIG9mIFJlbmRlclRoZW1lTWFjLmguIFNlZQorLy8gdGhlIC5tbSBm
aWxlIGZvciBkZXRhaWxzLgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlclN0
eWxlOwogCi1jbGFzcyBSZW5kZXJUaGVtZU1hYyA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CitjbGFz
cyBSZW5kZXJUaGVtZUNocm9taXVtTWFjIDogcHVibGljIFJlbmRlclRoZW1lIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKCk7CiAKQEAgLTEzNSw4
ICsxMzksOCBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBSZW5kZXJUaGVt
ZU1hYygpOwotICAgIHZpcnR1YWwgflJlbmRlclRoZW1lTWFjKCk7CisgICAgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYygpOworICAgIHZpcnR1YWwgflJlbmRlclRoZW1lQ2hyb21pdW1NYWMoKTsKIAog
ICAgIEludFJlY3QgaW5mbGF0ZVJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBj
b25zdCBpbnQqIG1hcmdpbnMsIGZsb2F0IHpvb21MZXZlbCA9IDEuMGYpIGNvbnN0OwogCkBAIC0x
NTEsNiArMTU1LDcgQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIHNpemVGb3JTeXN0ZW1Gb250KFJl
bmRlclN0eWxlKiwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0OwogICAgIHZvaWQgc2V0Rm9u
dEZyb21Db250cm9sU2l6ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBOU0NvbnRy
b2xTaXplKSBjb25zdDsKIAorICAgIHZvaWQgdXBkYXRlQWN0aXZlU3RhdGUoTlNDZWxsKiwgY29u
c3QgUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9pZCB1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxsKiwg
Y29uc3QgUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9pZCB1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxs
KiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAgICAgdm9pZCB1cGRhdGVGb2N1c2VkU3RhdGUoTlND
ZWxsKiwgY29uc3QgUmVuZGVyT2JqZWN0Kik7CkBAIC0xOTQsNCArMTk5LDQgQEAgcHJpdmF0ZToK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gUmVuZGVyVGhlbWVNYWNfaAor
I2VuZGlmIC8vIFJlbmRlclRoZW1lQ2hyb21pdW1NYWNfaApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCShyZXZpc2lvbiA0ODM5MikJKGZyb20gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06NDgzOTIpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTc1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbXBvcnQgImNvbmZpZy5oIgorI2lt
cG9ydCAiUmVuZGVyVGhlbWVNYWMuaCIKKworI2ltcG9ydCAiQml0bWFwSW1hZ2UuaCIKKyNpbXBv
cnQgIkNvbG9yTWFjLmgiCisjaW1wb3J0ICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW1wb3J0ICJD
U1NWYWx1ZUtleXdvcmRzLmgiCisjaW1wb3J0ICJEb2N1bWVudC5oIgorI2ltcG9ydCAiRWxlbWVu
dC5oIgorI2ltcG9ydCAiRnJhbWVWaWV3LmgiCisjaW1wb3J0ICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbXBvcnQgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbXBvcnQgIkhUTUxNZWRpYUVsZW1lbnQu
aCIKKyNpbXBvcnQgIkhUTUxOYW1lcy5oIgorI2ltcG9ydCAiSW1hZ2UuaCIKKyNpbXBvcnQgIkxv
Y2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dC5oIgorI2ltcG9ydCAiTWVkaWFDb250cm9sRWxlbWVu
dHMuaCIKKyNpbXBvcnQgIlJlbmRlck1lZGlhLmgiCisjaW1wb3J0ICJSZW5kZXJTbGlkZXIuaCIK
KyNpbXBvcnQgIlJlbmRlclZpZXcuaCIKKyNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgorI2ltcG9y
dCAiVGltZVJhbmdlcy5oIgorI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2lt
cG9ydCAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKKyNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4K
KyNpbXBvcnQgPENvY29hL0NvY29hLmg+CisjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CisjaW1w
b3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW1wb3J0IDxtYXRoLmg+CisKKyNpZmRlZiBCVUlM
RElOR19PTl9USUdFUgordHlwZWRlZiBpbnQgTlNJbnRlZ2VyOwordHlwZWRlZiB1bnNpZ25lZCBO
U1VJbnRlZ2VyOworI2VuZGlmCisKK3VzaW5nIHN0ZDo6bWluOworCisvLyBUaGUgbWV0aG9kcyBp
biB0aGlzIGZpbGUgYXJlIHNwZWNpZmljIHRvIHRoZSBNYWMgT1MgWCBwbGF0Zm9ybS4KKworLy8g
RklYTUU6IFRoZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBjb2RlIGluIHRoaXMgY2xhc3Mgc2hvdWxk
IGJlIGZhY3RvcmVkIG91dCBhbmQgbWVyZ2VkIHdpdGggUmVuZGVyVGhlbWVTYWZhcmkuIAorCitA
aW50ZXJmYWNlIFdlYkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlvbk9ic2VydmVyIDogTlNPYmpl
Y3QKK3sKKyAgICBXZWJDb3JlOjpSZW5kZXJUaGVtZSAqX3RoZW1lOworfQorCistIChpZClpbml0
V2l0aFRoZW1lOihXZWJDb3JlOjpSZW5kZXJUaGVtZSAqKXRoZW1lOworLSAodm9pZClzeXN0ZW1D
b2xvcnNEaWRDaGFuZ2U6KE5TTm90aWZpY2F0aW9uICopbm90aWZpY2F0aW9uOworCitAZW5kCisK
K0BpbXBsZW1lbnRhdGlvbiBXZWJDb3JlUmVuZGVyVGhlbWVOb3RpZmljYXRpb25PYnNlcnZlcgor
CistIChpZClpbml0V2l0aFRoZW1lOihXZWJDb3JlOjpSZW5kZXJUaGVtZSAqKXRoZW1lCit7Cisg
ICAgW3N1cGVyIGluaXRdOworICAgIF90aGVtZSA9IHRoZW1lOworICAgIAorICAgIHJldHVybiBz
ZWxmOworfQorCistICh2b2lkKXN5c3RlbUNvbG9yc0RpZENoYW5nZTooTlNOb3RpZmljYXRpb24g
Kil1bnVzZWROb3RpZmljYXRpb24KK3sKKyAgICBBU1NFUlRfVU5VU0VEKHVudXNlZE5vdGlmaWNh
dGlvbiwgW1t1bnVzZWROb3RpZmljYXRpb24gbmFtZV0gaXNFcXVhbFRvU3RyaW5nOk5TU3lzdGVt
Q29sb3JzRGlkQ2hhbmdlTm90aWZpY2F0aW9uXSk7CisgICAgX3RoZW1lLT5wbGF0Zm9ybUNvbG9y
c0RpZENoYW5nZSgpOworfQorCitAZW5kCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKKworZW51bSB7CisgICAgdG9wTWFyZ2luLAorICAgIHJpZ2h0
TWFyZ2luLAorICAgIGJvdHRvbU1hcmdpbiwKKyAgICBsZWZ0TWFyZ2luCit9OworCitlbnVtIHsK
KyAgICB0b3BQYWRkaW5nLAorICAgIHJpZ2h0UGFkZGluZywKKyAgICBib3R0b21QYWRkaW5nLAor
ICAgIGxlZnRQYWRkaW5nCit9OworCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVt
ZTo6dGhlbWVGb3JQYWdlKFBhZ2UqKQoreworICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogcnQgPSBS
ZW5kZXJUaGVtZU1hYzo6Y3JlYXRlKCkucmVsZWFzZVJlZigpOworICAgIHJldHVybiBydDsKK30K
KworUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVNYWM6OmNyZWF0ZSgpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZU1hYyk7Cit9CisKK1JlbmRlclRoZW1l
TWFjOjpSZW5kZXJUaGVtZU1hYygpCisgICAgOiBtX2lzU2xpZGVyVGh1bWJIb3Jpem9udGFsUHJl
c3NlZChmYWxzZSkKKyAgICAsIG1faXNTbGlkZXJUaHVtYlZlcnRpY2FsUHJlc3NlZChmYWxzZSkK
KyAgICAsIG1fbm90aWZpY2F0aW9uT2JzZXJ2ZXIoQWRvcHROUywgW1tXZWJDb3JlUmVuZGVyVGhl
bWVOb3RpZmljYXRpb25PYnNlcnZlciBhbGxvY10gaW5pdFdpdGhUaGVtZTp0aGlzXSkKK3sKKyAg
ICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fbm90
aWZpY2F0aW9uT2JzZXJ2ZXIuZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3I6QHNlbGVjdG9yKHN5c3RlbUNvbG9yc0Rp
ZENoYW5nZTopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lOk5TU3lzdGVtQ29sb3JzRGlkQ2hhbmdlTm90aWZpY2F0aW9uCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2JqZWN0Om5pbF07Cit9CisKK1JlbmRlclRoZW1lTWFjOjp+UmVuZGVyVGhlbWVNYWMoKQorewor
ICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gcmVtb3ZlT2JzZXJ2ZXI6
bV9ub3RpZmljYXRpb25PYnNlcnZlci5nZXQoKV07Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lTWFj
OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAg
TlNDb2xvciogY29sb3IgPSBbW05TQ29sb3Igc2VsZWN0ZWRUZXh0QmFja2dyb3VuZENvbG9yXSBj
b2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKKyAgICByZXR1
cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciByZWRDb21wb25lbnRdKSwg
c3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciBncmVlbkNvbXBvbmVudF0pLCBzdGF0aWNf
Y2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIGJsdWVDb21wb25lbnRdKSk7Cit9CisKK0NvbG9yIFJl
bmRlclRoZW1lTWFjOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkg
Y29uc3QKK3sKKyAgICBOU0NvbG9yKiBjb2xvciA9IFtbTlNDb2xvciBzZWNvbmRhcnlTZWxlY3Rl
ZENvbnRyb2xDb2xvcl0gY29sb3JVc2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JT
cGFjZV07CisgICAgcmV0dXJuIENvbG9yKHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3Ig
cmVkQ29tcG9uZW50XSksIHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29sb3IgZ3JlZW5Db21w
b25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xvciBibHVlQ29tcG9uZW50XSkp
OworfQorCitDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBOU0NvbG9yKiBjb2xvciA9IFtbTlND
b2xvciBhbHRlcm5hdGVTZWxlY3RlZENvbnRyb2xDb2xvcl0gY29sb3JVc2luZ0NvbG9yU3BhY2VO
YW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV07CisgICAgcmV0dXJuIENvbG9yKHN0YXRpY19jYXN0
PGludD4oMjU1LjAgKiBbY29sb3IgcmVkQ29tcG9uZW50XSksIHN0YXRpY19jYXN0PGludD4oMjU1
LjAgKiBbY29sb3IgZ3JlZW5Db21wb25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtj
b2xvciBibHVlQ29tcG9uZW50XSkpOworfQorCitDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZv
cm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gQ29sb3I6OndoaXRlOworfQorCitDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1J
bmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIHJl
dHVybiBDb2xvcjo6YmxhY2s7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUZv
Y3VzUmluZ0NvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAodXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29s
b3IoKSkKKyAgICAgICAgcmV0dXJuIG9sZEFxdWFGb2N1c1JpbmdDb2xvcigpOworCisgICAgcmV0
dXJuIHN5c3RlbUNvbG9yKENTU1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpOworfQorCitDb2xv
ciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdAoreworICAgIHJldHVybiBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCk7Cit9CisKK3N0YXRpYyBGb250V2VpZ2h0IHRvRm9udFdlaWdodChO
U0ludGVnZXIgYXBwS2l0Rm9udFdlaWdodCkKK3sKKyAgICBBU1NFUlQoYXBwS2l0Rm9udFdlaWdo
dCA+IDAgJiYgYXBwS2l0Rm9udFdlaWdodCA8IDE1KTsKKyAgICBpZiAoYXBwS2l0Rm9udFdlaWdo
dCA+IDE0KQorICAgICAgICBhcHBLaXRGb250V2VpZ2h0ID0gMTQ7CisgICAgZWxzZSBpZiAoYXBw
S2l0Rm9udFdlaWdodCA8IDEpCisgICAgICAgIGFwcEtpdEZvbnRXZWlnaHQgPSAxOworCisgICAg
c3RhdGljIEZvbnRXZWlnaHQgZm9udFdlaWdodHNbXSA9IHsKKyAgICAgICAgRm9udFdlaWdodDEw
MCwKKyAgICAgICAgRm9udFdlaWdodDEwMCwKKyAgICAgICAgRm9udFdlaWdodDIwMCwKKyAgICAg
ICAgRm9udFdlaWdodDMwMCwKKyAgICAgICAgRm9udFdlaWdodDQwMCwKKyAgICAgICAgRm9udFdl
aWdodDUwMCwKKyAgICAgICAgRm9udFdlaWdodDYwMCwKKyAgICAgICAgRm9udFdlaWdodDYwMCwK
KyAgICAgICAgRm9udFdlaWdodDcwMCwKKyAgICAgICAgRm9udFdlaWdodDgwMCwKKyAgICAgICAg
Rm9udFdlaWdodDgwMCwKKyAgICAgICAgRm9udFdlaWdodDkwMCwKKyAgICAgICAgRm9udFdlaWdo
dDkwMCwKKyAgICAgICAgRm9udFdlaWdodDkwMAorICAgIH07CisgICAgcmV0dXJuIGZvbnRXZWln
aHRzW2FwcEtpdEZvbnRXZWlnaHQgLSAxXTsKK30KKwordm9pZCBSZW5kZXJUaGVtZU1hYzo6c3lz
dGVtRm9udChpbnQgY3NzVmFsdWVJZCwgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24p
IGNvbnN0Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRpb24sIHN5c3Rl
bUZvbnQsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgc21h
bGxTeXN0ZW1Gb250LCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRp
b24sIG1lbnVGb250LCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250RGVzY3JpcHRp
b24sIGxhYmVsRm9udCwgKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0
aW9uLCBtaW5pQ29udHJvbEZvbnQsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRE
ZXNjcmlwdGlvbiwgc21hbGxDb250cm9sRm9udCwgKCkpOworICAgIERFRklORV9TVEFUSUNfTE9D
QUwoRm9udERlc2NyaXB0aW9uLCBjb250cm9sRm9udCwgKCkpOworCisgICAgRm9udERlc2NyaXB0
aW9uKiBjYWNoZWREZXNjOworICAgIE5TRm9udCogZm9udCA9IG5pbDsKKyAgICBzd2l0Y2ggKGNz
c1ZhbHVlSWQpIHsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNtYWxsQ2FwdGlvbjoKKyAgICAgICAg
ICAgIGNhY2hlZERlc2MgPSAmc21hbGxTeXN0ZW1Gb250OworICAgICAgICAgICAgaWYgKCFzbWFs
bFN5c3RlbUZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05T
Rm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0ZvbnQgc21hbGxTeXN0ZW1Gb250U2l6ZV1dOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVNZW51OgorICAgICAgICAgICAg
Y2FjaGVkRGVzYyA9ICZtZW51Rm9udDsKKyAgICAgICAgICAgIGlmICghbWVudUZvbnQuaXNBYnNv
bHV0ZVNpemUoKSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBtZW51Rm9udE9mU2l6
ZTpbTlNGb250IHN5c3RlbUZvbnRTaXplXV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBDU1NWYWx1ZVN0YXR1c0JhcjoKKyAgICAgICAgICAgIGNhY2hlZERlc2MgPSAmbGFiZWxG
b250OworICAgICAgICAgICAgaWYgKCFsYWJlbEZvbnQuaXNBYnNvbHV0ZVNpemUoKSkKKyAgICAg
ICAgICAgICAgICBmb250ID0gW05TRm9udCBsYWJlbEZvbnRPZlNpemU6W05TRm9udCBsYWJlbEZv
bnRTaXplXV07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dE1pbmlDb250cm9sOgorICAgICAgICAgICAgY2FjaGVkRGVzYyA9ICZtaW5pQ29udHJvbEZvbnQ7
CisgICAgICAgICAgICBpZiAoIW1pbmlDb250cm9sRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAg
ICAgICAgICAgICAgIGZvbnQgPSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0
ZW1Gb250U2l6ZUZvckNvbnRyb2xTaXplOk5TTWluaUNvbnRyb2xTaXplXV07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFNtYWxsQ29udHJvbDoKKyAgICAg
ICAgICAgIGNhY2hlZERlc2MgPSAmc21hbGxDb250cm9sRm9udDsKKyAgICAgICAgICAgIGlmICgh
c21hbGxDb250cm9sRm9udC5pc0Fic29sdXRlU2l6ZSgpKQorICAgICAgICAgICAgICAgIGZvbnQg
PSBbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6W05TRm9udCBzeXN0ZW1Gb250U2l6ZUZvckNvbnRy
b2xTaXplOk5TU21hbGxDb250cm9sU2l6ZV1dOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ1NTVmFsdWVXZWJraXRDb250cm9sOgorICAgICAgICAgICAgY2FjaGVkRGVzYyA9ICZj
b250cm9sRm9udDsKKyAgICAgICAgICAgIGlmICghY29udHJvbEZvbnQuaXNBYnNvbHV0ZVNpemUo
KSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOltOU0Zv
bnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpOU1JlZ3VsYXJDb250cm9sU2l6ZV1dOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjYWNoZWRE
ZXNjID0gJnN5c3RlbUZvbnQ7CisgICAgICAgICAgICBpZiAoIXN5c3RlbUZvbnQuaXNBYnNvbHV0
ZVNpemUoKSkKKyAgICAgICAgICAgICAgICBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXpl
OltOU0ZvbnQgc3lzdGVtRm9udFNpemVdXTsKKyAgICB9CisKKyAgICBpZiAoZm9udCkgeworICAg
ICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZv
bnRNYW5hZ2VyXTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7
CisgICAgICAgIGNhY2hlZERlc2MtPnNldEdlbmVyaWNGYW1pbHkoRm9udERlc2NyaXB0aW9uOjpO
b0ZhbWlseSk7CisgICAgICAgIGNhY2hlZERlc2MtPmZpcnN0RmFtaWx5KCkuc2V0RmFtaWx5KFtm
b250IGZhbWlseU5hbWVdKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0U3BlY2lmaWVkU2l6ZShb
Zm9udCBwb2ludFNpemVdKTsKKyAgICAgICAgY2FjaGVkRGVzYy0+c2V0V2VpZ2h0KHRvRm9udFdl
aWdodChbZm9udE1hbmFnZXIgd2VpZ2h0T2ZGb250OmZvbnRdKSk7CisgICAgICAgIGNhY2hlZERl
c2MtPnNldEl0YWxpYyhbZm9udE1hbmFnZXIgdHJhaXRzT2ZGb250OmZvbnRdICYgTlNJdGFsaWNG
b250TWFzayk7CisgICAgfQorICAgIGZvbnREZXNjcmlwdGlvbiA9ICpjYWNoZWREZXNjOworfQor
CitzdGF0aWMgUkdCQTMyIGNvbnZlcnROU0NvbG9yVG9Db2xvcihOU0NvbG9yICpjb2xvcikKK3sK
KyAgICBOU0NvbG9yICpjb2xvckluQ29sb3JTcGFjZSA9IFtjb2xvciBjb2xvclVzaW5nQ29sb3JT
cGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXTsKKyAgICBpZiAoY29sb3JJbkNvbG9yU3Bh
Y2UpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBzY2FsZUZhY3RvciA9IG5leHRhZnRl
cigyNTYuMCwgMC4wKTsKKyAgICAgICAgcmV0dXJuIG1ha2VSR0Ioc3RhdGljX2Nhc3Q8aW50Pihz
Y2FsZUZhY3RvciAqIFtjb2xvckluQ29sb3JTcGFjZSByZWRDb21wb25lbnRdKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludD4oc2NhbGVGYWN0b3IgKiBbY29sb3JJbkNvbG9yU3BhY2UgZ3Jl
ZW5Db21wb25lbnRdKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludD4oc2NhbGVGYWN0b3Ig
KiBbY29sb3JJbkNvbG9yU3BhY2UgYmx1ZUNvbXBvbmVudF0pKTsKKyAgICB9CisKKyAgICAvLyBU
aGlzIGNvbnZlcnNpb24gYWJvdmUgY2FuIGZhaWwgaWYgdGhlIE5TQ29sb3IgaW4gcXVlc3Rpb24g
aXMgYW4gTlNQYXR0ZXJuQ29sb3IgCisgICAgLy8gKGFzIG1hbnkgc3lzdGVtIGNvbG9ycyBhcmUp
LiBUaGVzZSBjb2xvcnMgYXJlIGFjdHVhbGx5IGEgcmVwZWF0aW5nIHBhdHRlcm4KKyAgICAvLyBu
b3QganVzdCBhIHNvbGlkIGNvbG9yLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHdlIHNpbXBseSBkcmF3
IGEgMXgxIGltYWdlIG9mCisgICAgLy8gdGhlIGNvbG9yIGFuZCB1c2UgdGhhdCBwaXhlbCdzIGNv
bG9yLiBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gdXNlIGFuIGF2ZXJhZ2Ugb2YKKyAgICAvLyB0aGUg
Y29sb3JzIGluIHRoZSBwYXR0ZXJuIGluc3RlYWQuCisgICAgTlNCaXRtYXBJbWFnZVJlcCAqb2Zm
c2NyZWVuUmVwID0gW1tOU0JpdG1hcEltYWdlUmVwIGFsbG9jXSBpbml0V2l0aEJpdG1hcERhdGFQ
bGFuZXM6bmlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsc1dpZGU6MQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwaXhlbHNIaWdoOjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c1BlclNhbXBsZTo4Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzYW1wbGVzUGVyUGl4ZWw6NAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh
c0FscGhhOllFUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGxhbmFyOk5PCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29sb3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnl0ZXNQZXJSb3c6NAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c1BlclBpeGVsOjMyXTsK
KworICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07CisgICAgW05TR3Jh
cGhpY3NDb250ZXh0IHNldEN1cnJlbnRDb250ZXh0OltOU0dyYXBoaWNzQ29udGV4dCBncmFwaGlj
c0NvbnRleHRXaXRoQml0bWFwSW1hZ2VSZXA6b2Zmc2NyZWVuUmVwXV07CisgICAgTlNFcmFzZVJl
Y3QoTlNNYWtlUmVjdCgwLCAwLCAxLCAxKSk7CisgICAgW2NvbG9yIGRyYXdTd2F0Y2hJblJlY3Q6
TlNNYWtlUmVjdCgwLCAwLCAxLCAxKV07CisgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVH
cmFwaGljc1N0YXRlXTsKKworICAgIE5TVUludGVnZXIgcGl4ZWxbNF07CisgICAgW29mZnNjcmVl
blJlcCBnZXRQaXhlbDpwaXhlbCBhdFg6MCB5OjBdOworCisgICAgW29mZnNjcmVlblJlcCByZWxl
YXNlXTsKKworICAgIHJldHVybiBtYWtlUkdCKHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0p
OworfQorCitzdGF0aWMgUkdCQTMyIG1lbnVCYWNrZ3JvdW5kQ29sb3IoKQoreworICAgIE5TQml0
bWFwSW1hZ2VSZXAgKm9mZnNjcmVlblJlcCA9IFtbTlNCaXRtYXBJbWFnZVJlcCBhbGxvY10gaW5p
dFdpdGhCaXRtYXBEYXRhUGxhbmVzOm5pbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbHNXaWRl
OjEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzSGlnaDoxCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJp
dHNQZXJTYW1wbGU6OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlc1BlclBpeGVsOjQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoYXNBbHBoYTpZRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BsYW5h
cjpOTworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFj
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUGVyUm93OjQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJp
dHNQZXJQaXhlbDozMl07CisKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHN0YXRpY19jYXN0
PENHQ29udGV4dFJlZj4oW1tOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHRXaXRoQml0
bWFwSW1hZ2VSZXA6b2Zmc2NyZWVuUmVwXSBncmFwaGljc1BvcnRdKTsKKyAgICBDR1JlY3QgcmVj
dCA9IENHUmVjdE1ha2UoMCwgMCwgMSwgMSk7CisgICAgSElUaGVtZU1lbnVEcmF3SW5mbyBkcmF3
SW5mbzsKKyAgICBkcmF3SW5mby52ZXJzaW9uID0gIDA7CisgICAgZHJhd0luZm8ubWVudVR5cGUg
PSBrVGhlbWVNZW51VHlwZVBvcFVwOworICAgIEhJVGhlbWVEcmF3TWVudUJhY2tncm91bmQoJnJl
Y3QsICZkcmF3SW5mbywgY29udGV4dCwga0hJVGhlbWVPcmllbnRhdGlvbkludmVydGVkKTsKKwor
ICAgIE5TVUludGVnZXIgcGl4ZWxbNF07CisgICAgW29mZnNjcmVlblJlcCBnZXRQaXhlbDpwaXhl
bCBhdFg6MCB5OjBdOworCisgICAgW29mZnNjcmVlblJlcCByZWxlYXNlXTsKKworICAgIHJldHVy
biBtYWtlUkdCKHBpeGVsWzBdLCBwaXhlbFsxXSwgcGl4ZWxbMl0pOworfQorCit2b2lkIFJlbmRl
clRoZW1lTWFjOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpCit7CisgICAgbV9zeXN0ZW1Db2xv
ckNhY2hlLmNsZWFyKCk7CisgICAgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdl
KCk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lTWFjOjpzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJ
ZCkgY29uc3QKK3sKKyAgICBpZiAobV9zeXN0ZW1Db2xvckNhY2hlLmNvbnRhaW5zKGNzc1ZhbHVl
SWQpKQorICAgICAgICByZXR1cm4gbV9zeXN0ZW1Db2xvckNhY2hlLmdldChjc3NWYWx1ZUlkKTsK
KyAgICAKKyAgICBDb2xvciBjb2xvcjsKKyAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKKyAgICAg
ICAgY2FzZSBDU1NWYWx1ZUFjdGl2ZWJvcmRlcjoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVy
dE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGtleWJvYXJkRm9jdXNJbmRpY2F0b3JDb2xvcl0pOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVBY3RpdmVjYXB0aW9uOgor
ICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igd2luZG93
RnJhbWVUZXh0Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Zh
bHVlQXBwd29ya3NwYWNlOgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29s
b3IoW05TQ29sb3IgaGVhZGVyQ29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIENTU1ZhbHVlQmFja2dyb3VuZDoKKyAgICAgICAgICAgIC8vIFVzZSB0aGVtZSBpbmRlcGVu
ZGVudCBkZWZhdWx0CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUJ1
dHRvbmZhY2U6CisgICAgICAgICAgICAvLyBXZSB1c2UgdGhpcyB2YWx1ZSBpbnN0ZWFkIG9mIE5T
Q29sb3IncyBjb250cm9sQ29sb3IgdG8gYXZvaWQgd2Vic2l0ZSBpbmNvbXBhdGliaWxpdGllcy4K
KyAgICAgICAgICAgIC8vIFdlIG1heSB3YW50IHRvIGNoYW5nZSB0aGlzIHRvIHVzZSB0aGUgTlND
b2xvciBpbiBmdXR1cmUuCisgICAgICAgICAgICBjb2xvciA9IDB4RkZDMEMwQzA7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbmhpZ2hsaWdodDoKKyAgICAg
ICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xIaWdo
bGlnaHRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVC
dXR0b25zaGFkb3c6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihb
TlNDb2xvciBjb250cm9sU2hhZG93Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENTU1ZhbHVlQnV0dG9udGV4dDoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5T
Q29sb3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xUZXh0Q29sb3JdKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6CisgICAgICAgICAgICBjb2xv
ciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB0ZXh0Q29sb3JdKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlR3JheXRleHQ6CisgICAgICAgICAgICBj
b2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBkaXNhYmxlZENvbnRyb2xUZXh0
Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlSGlnaGxp
Z2h0OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Ig
c2VsZWN0ZWRUZXh0QmFja2dyb3VuZENvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NWYWx1ZUhpZ2hsaWdodHRleHQ6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZl
cnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBzZWxlY3RlZFRleHRDb2xvcl0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWJvcmRlcjoKKyAgICAgICAg
ICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIGNvbnRyb2xCYWNrZ3Jv
dW5kQ29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlSW5h
Y3RpdmVjYXB0aW9uOgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3Io
W05TQ29sb3IgY29udHJvbEJhY2tncm91bmRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTVmFsdWVJbmFjdGl2ZWNhcHRpb250ZXh0OgorICAgICAgICAgICAgY29s
b3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENvbG9yXSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUluZm9iYWNrZ3JvdW5kOgorICAgICAg
ICAgICAgLy8gVGhlcmUgaXMgbm8gY29ycmVzcG9uZGluZyBOU0NvbG9yIGZvciB0aGlzIHNvIHdl
IHVzZSBhIGhhcmQgY29kZWQgdmFsdWUuCisgICAgICAgICAgICBjb2xvciA9IDB4RkZGQkZDQzU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZUluZm90ZXh0OgorICAg
ICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3IgdGV4dENvbG9y
XSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZU1lbnU6CisgICAg
ICAgICAgICBjb2xvciA9IG1lbnVCYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENTU1ZhbHVlTWVudXRleHQ6CisgICAgICAgICAgICBjb2xvciA9IGNv
bnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBzZWxlY3RlZE1lbnVJdGVtVGV4dENvbG9yXSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVNjcm9sbGJhcjoKKyAg
ICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtOU0NvbG9yIHNjcm9sbEJh
ckNvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVRleHQ6
CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB0ZXh0
Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlVGhyZWVk
ZGFya3NoYWRvdzoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9yKFtO
U0NvbG9yIGNvbnRyb2xEYXJrU2hhZG93Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIENTU1ZhbHVlVGhyZWVkc2hhZG93OgorICAgICAgICAgICAgY29sb3IgPSBjb252
ZXJ0TlNDb2xvclRvQ29sb3IoW05TQ29sb3Igc2hhZG93Q29sb3JdKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlVGhyZWVkZmFjZToKKyAgICAgICAgICAgIC8vIFdl
IHVzZSB0aGlzIHZhbHVlIGluc3RlYWQgb2YgTlNDb2xvcidzIGNvbnRyb2xDb2xvciB0byBhdm9p
ZCB3ZWJzaXRlIGluY29tcGF0aWJpbGl0aWVzLgorICAgICAgICAgICAgLy8gV2UgbWF5IHdhbnQg
dG8gY2hhbmdlIHRoaXMgdG8gdXNlIHRoZSBOU0NvbG9yIGluIGZ1dHVyZS4KKyAgICAgICAgICAg
IGNvbG9yID0gMHhGRkMwQzBDMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1ZhbHVlVGhyZWVkaGlnaGxpZ2h0OgorICAgICAgICAgICAgY29sb3IgPSBjb252ZXJ0TlNDb2xv
clRvQ29sb3IoW05TQ29sb3IgaGlnaGxpZ2h0Q29sb3JdKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIENTU1ZhbHVlVGhyZWVkbGlnaHRzaGFkb3c6CisgICAgICAgICAgICBjb2xv
ciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciBjb250cm9sTGlnaHRIaWdobGlnaHRD
b2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRG
b2N1c1JpbmdDb2xvcjoKKyAgICAgICAgICAgIGNvbG9yID0gY29udmVydE5TQ29sb3JUb0NvbG9y
KFtOU0NvbG9yIGtleWJvYXJkRm9jdXNJbmRpY2F0b3JDb2xvcl0pOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ1NTVmFsdWVXaW5kb3c6CisgICAgICAgICAgICBjb2xvciA9IGNv
bnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB3aW5kb3dCYWNrZ3JvdW5kQ29sb3JdKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1ZhbHVlV2luZG93ZnJhbWU6CisgICAg
ICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xvciB3aW5kb3dGcmFt
ZUNvbG9yXSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NWYWx1ZVdpbmRv
d3RleHQ6CisgICAgICAgICAgICBjb2xvciA9IGNvbnZlcnROU0NvbG9yVG9Db2xvcihbTlNDb2xv
ciB3aW5kb3dGcmFtZVRleHRDb2xvcl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCisgICAgICAgIGNvbG9yID0gUmVuZGVyVGhlbWU6OnN5
c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOworCisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkKKyAgICAg
ICAgbV9zeXN0ZW1Db2xvckNhY2hlLnNldChjc3NWYWx1ZUlkLCBjb2xvci5yZ2IoKSk7CisKKyAg
ICByZXR1cm4gY29sb3I7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29udHJvbFN0eWxl
ZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxsTGF5ZXImIGJhY2tn
cm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Cit7CisgICAgaWYgKHN0
eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgp
ID09IFRleHRBcmVhUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IExpc3Rib3hQYXJ0KQor
ICAgICAgICByZXR1cm4gc3R5bGUtPmJvcmRlcigpICE9IGJvcmRlcjsKKyAgICAgICAgCisgICAg
Ly8gRklYTUU6IFRoaXMgaXMgaG9ycmlibGUsIGJ1dCB0aGVyZSBpcyBub3QgbXVjaCBlbHNlIHRo
YXQgY2FuIGJlIGRvbmUuICBNZW51IGxpc3RzIGNhbm5vdCBkcmF3IHByb3Blcmx5IHdoZW4KKyAg
ICAvLyBzY2FsZWQuICBUaGV5IGNhbid0IHJlYWxseSBkcmF3IHByb3Blcmx5IHdoZW4gdHJhbnNm
b3JtZWQgZWl0aGVyLiAgV2UgY2FuJ3QgZGV0ZWN0IHRoZSB0cmFuc2Zvcm0gY2FzZSBhdCBzdHls
ZQorICAgIC8vIGFkanVzdG1lbnQgdGltZSBzbyB0aGF0IHdpbGwganVzdCBoYXZlIHRvIHN0YXkg
YnJva2VuLiAgV2UgY2FuIGhvd2V2ZXIgZGV0ZWN0IHRoYXQgd2UncmUgem9vbWluZy4gIElmIHpv
b21pbmcKKyAgICAvLyBpcyBpbiBlZmZlY3Qgd2UgdHJlYXQgaXQgbGlrZSB0aGUgY29udHJvbCBp
cyBzdHlsZWQuCisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0ICYm
IHN0eWxlLT5lZmZlY3RpdmVab29tKCkgIT0gMS4wZikKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBi
YWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpOworfQorCit2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJlY3QmIHIpCit7Cisg
ICAgQ29udHJvbFBhcnQgcGFydCA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKKyAgICAKKyNp
ZiBVU0UoTkVXX1RIRU1FKQorICAgIHN3aXRjaCAocGFydCkgeworICAgICAgICBjYXNlIENoZWNr
Ym94UGFydDoKKyAgICAgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgICAgIGNhc2UgUHVzaEJ1dHRv
blBhcnQ6CisgICAgICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBEZWZh
dWx0QnV0dG9uUGFydDoKKyAgICAgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgICAgICAgICAgcmV0
dXJuIFJlbmRlclRoZW1lOjphZGp1c3RSZXBhaW50UmVjdChvLCByKTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyNlbmRpZgorCisgICAgZmxvYXQgem9vbUxl
dmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgaWYgKHBhcnQgPT0gTWVu
dWxpc3RQYXJ0KSB7CisgICAgICAgIHNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKG8sIHIpOworICAg
ICAgICBJbnRTaXplIHNpemUgPSBwb3B1cEJ1dHRvblNpemVzKClbW3BvcHVwQnV0dG9uKCkgY29u
dHJvbFNpemVdXTsKKyAgICAgICAgc2l6ZS5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSAqIHpvb21M
ZXZlbCk7CisgICAgICAgIHNpemUuc2V0V2lkdGgoci53aWR0aCgpKTsKKyAgICAgICAgciA9IGlu
ZmxhdGVSZWN0KHIsIHNpemUsIHBvcHVwQnV0dG9uTWFyZ2lucygpLCB6b29tTGV2ZWwpOworICAg
IH0KK30KKworSW50UmVjdCBSZW5kZXJUaGVtZU1hYzo6aW5mbGF0ZVJlY3QoY29uc3QgSW50UmVj
dCYgciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgaW50KiBtYXJnaW5zLCBmbG9hdCB6b29t
TGV2ZWwpIGNvbnN0Cit7CisgICAgLy8gT25seSBkbyB0aGUgaW5mbGF0aW9uIGlmIHRoZSBhdmFp
bGFibGUgd2lkdGgvaGVpZ2h0IGFyZSB0b28gc21hbGwuICBPdGhlcndpc2UgdHJ5IHRvCisgICAg
Ly8gZml0IHRoZSBnbG93L2NoZWNrIHNwYWNlIGludG8gdGhlIGF2YWlsYWJsZSBib3gncyB3aWR0
aC9oZWlnaHQuCisgICAgaW50IHdpZHRoRGVsdGEgPSByLndpZHRoKCkgLSAoc2l6ZS53aWR0aCgp
ICsgbWFyZ2luc1tsZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCArIG1hcmdpbnNbcmlnaHRNYXJnaW5d
ICogem9vbUxldmVsKTsKKyAgICBpbnQgaGVpZ2h0RGVsdGEgPSByLmhlaWdodCgpIC0gKHNpemUu
aGVpZ2h0KCkgKyBtYXJnaW5zW3RvcE1hcmdpbl0gKiB6b29tTGV2ZWwgKyBtYXJnaW5zW2JvdHRv
bU1hcmdpbl0gKiB6b29tTGV2ZWwpOworICAgIEludFJlY3QgcmVzdWx0KHIpOworICAgIGlmICh3
aWR0aERlbHRhIDwgMCkgeworICAgICAgICByZXN1bHQuc2V0WChyZXN1bHQueCgpIC0gbWFyZ2lu
c1tsZWZ0TWFyZ2luXSAqIHpvb21MZXZlbCk7CisgICAgICAgIHJlc3VsdC5zZXRXaWR0aChyZXN1
bHQud2lkdGgoKSAtIHdpZHRoRGVsdGEpOworICAgIH0KKyAgICBpZiAoaGVpZ2h0RGVsdGEgPCAw
KSB7CisgICAgICAgIHJlc3VsdC5zZXRZKHJlc3VsdC55KCkgLSBtYXJnaW5zW3RvcE1hcmdpbl0g
KiB6b29tTGV2ZWwpOworICAgICAgICByZXN1bHQuc2V0SGVpZ2h0KHJlc3VsdC5oZWlnaHQoKSAt
IGhlaWdodERlbHRhKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworRmxvYXRSZWN0
IFJlbmRlclRoZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0
KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3Qg
RmxvYXRSZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0Cit7CisgICAgRmxv
YXRSZWN0IHBhcnRSZWN0KGlucHV0UmVjdCk7CisgICAgCisgICAgLy8gQ29tcHV0ZSBhbiBvZmZz
ZXQgYmV0d2VlbiB0aGUgcGFydCByZW5kZXJlciBhbmQgdGhlIGlucHV0IHJlbmRlcmVyCisgICAg
RmxvYXRTaXplIG9mZnNldEZyb21JbnB1dFJlbmRlcmVyOworICAgIGNvbnN0IFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBwYXJ0UmVuZGVyZXI7CisgICAgd2hpbGUgKHJlbmRlcmVyICYmIHJlbmRl
cmVyICE9IGlucHV0UmVuZGVyZXIpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBjb250YWluaW5n
UmVuZGVyZXIgPSByZW5kZXJlci0+Y29udGFpbmVyKCk7CisgICAgICAgIG9mZnNldEZyb21JbnB1
dFJlbmRlcmVyIC09IHJlbmRlcmVyLT5vZmZzZXRGcm9tQ29udGFpbmVyKGNvbnRhaW5pbmdSZW5k
ZXJlcik7CisgICAgICAgIHJlbmRlcmVyID0gY29udGFpbmluZ1JlbmRlcmVyOworICAgIH0KKyAg
ICAvLyBJZiB0aGUgaW5wdXQgcmVuZGVyZXIgd2FzIG5vdCBhIGNvbnRhaW5lciwgc29tZXRoaW5n
IHdlbnQgd3JvbmcKKyAgICBBU1NFUlQocmVuZGVyZXIgPT0gaW5wdXRSZW5kZXJlcik7CisgICAg
Ly8gTW92ZSB0aGUgcmVjdCBpbnRvIHBhcnRSZW5kZXJlcidzIGNvb3JkcworICAgIHBhcnRSZWN0
Lm1vdmUob2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIpOworICAgIC8vIEFjY291bnQgZm9yIHRoZSBs
b2NhbCBkcmF3aW5nIG9mZnNldCAodHgsIHR5KQorICAgIHBhcnRSZWN0Lm1vdmUoci54KCksIHIu
eSgpKTsKKworICAgIHJldHVybiBwYXJ0UmVjdDsKK30KKwordm9pZCBSZW5kZXJUaGVtZU1hYzo6
dXBkYXRlQ2hlY2tlZFN0YXRlKE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQor
eworICAgIGJvb2wgb2xkSW5kZXRlcm1pbmF0ZSA9IFtjZWxsIHN0YXRlXSA9PSBOU01peGVkU3Rh
dGU7CisgICAgYm9vbCBpbmRldGVybWluYXRlID0gaXNJbmRldGVybWluYXRlKG8pOworICAgIGJv
b2wgY2hlY2tlZCA9IGlzQ2hlY2tlZChvKTsKKworICAgIGlmIChvbGRJbmRldGVybWluYXRlICE9
IGluZGV0ZXJtaW5hdGUpIHsKKyAgICAgICAgW2NlbGwgc2V0U3RhdGU6aW5kZXRlcm1pbmF0ZSA/
IE5TTWl4ZWRTdGF0ZSA6IChjaGVja2VkID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZSldOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBvbGRDaGVja2VkID0gW2NlbGwgc3RhdGVd
ID09IE5TT25TdGF0ZTsKKyAgICBpZiAoY2hlY2tlZCAhPSBvbGRDaGVja2VkKQorICAgICAgICBb
Y2VsbCBzZXRTdGF0ZTpjaGVja2VkID8gTlNPblN0YXRlIDogTlNPZmZTdGF0ZV07Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZUVuYWJsZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0
IFJlbmRlck9iamVjdCogbykKK3sKKyAgICBib29sIG9sZEVuYWJsZWQgPSBbY2VsbCBpc0VuYWJs
ZWRdOworICAgIGJvb2wgZW5hYmxlZCA9IGlzRW5hYmxlZChvKTsKKyAgICBpZiAoZW5hYmxlZCAh
PSBvbGRFbmFibGVkKQorICAgICAgICBbY2VsbCBzZXRFbmFibGVkOmVuYWJsZWRdOworfQorCit2
b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25z
dCBSZW5kZXJPYmplY3QqIG8pCit7CisgICAgYm9vbCBvbGRGb2N1c2VkID0gW2NlbGwgc2hvd3NG
aXJzdFJlc3BvbmRlcl07CisgICAgYm9vbCBmb2N1c2VkID0gaXNGb2N1c2VkKG8pICYmIG8tPnN0
eWxlKCktPm91dGxpbmVTdHlsZUlzQXV0bygpOworICAgIGlmIChmb2N1c2VkICE9IG9sZEZvY3Vz
ZWQpCisgICAgICAgIFtjZWxsIHNldFNob3dzRmlyc3RSZXNwb25kZXI6Zm9jdXNlZF07Cit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNv
bnN0IFJlbmRlck9iamVjdCogbykKK3sKKyAgICBib29sIG9sZFByZXNzZWQgPSBbY2VsbCBpc0hp
Z2hsaWdodGVkXTsKKyAgICBib29sIHByZXNzZWQgPSAoby0+bm9kZSgpICYmIG8tPm5vZGUoKS0+
YWN0aXZlKCkpOworICAgIGlmIChwcmVzc2VkICE9IG9sZFByZXNzZWQpCisgICAgICAgIFtjZWxs
IHNldEhpZ2hsaWdodGVkOnByZXNzZWRdOworfQorCitib29sIFJlbmRlclRoZW1lTWFjOjpjb250
cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgLy8g
QW4gYWx0ZXJuYXRlIHdheSB0byBpbXBsZW1lbnQgdGhpcyB3b3VsZCBiZSB0byBnZXQgdGhlIGFw
cHJvcHJpYXRlIGNlbGwgb2JqZWN0CisgICAgLy8gYW5kIGNhbGwgdGhlIHByaXZhdGUgX25lZWRS
ZWRyYXdPbldpbmRvd0NoYW5nZWRLZXlTdGF0ZSBtZXRob2QuIEFuIGFkdmFudGFnZSBvZgorICAg
IC8vIHRoYXQgd291bGQgYmUgdGhhdCB3ZSB3b3VsZCBtYXRjaCBBcHBLaXQgYmVoYXZpb3IgbW9y
ZSBjbG9zZWx5LCBidXQgYSBkaXNhZHZhbnRhZ2UKKyAgICAvLyB3b3VsZCBiZSB0aGF0IHdlIHdv
dWxkIHJlbHkgb24gYW4gQXBwS2l0IFNQSSBtZXRob2QuCisKKyAgICBpZiAoIWlzRW5hYmxlZChv
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gQ2hlY2tib3hlcyBvbmx5IGhhdmUg
dGludCB3aGVuIGNoZWNrZWQuCisgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBD
aGVja2JveFBhcnQpCisgICAgICAgIHJldHVybiBpc0NoZWNrZWQobyk7CisKKyAgICAvLyBGb3Ig
bm93IGFzc3VtZSBvdGhlciBjb250cm9scyBoYXZlIHRpbnQgaWYgZW5hYmxlZC4KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVG
b3JGb250KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpbnQgZm9udFNpemUgPSBz
dHlsZS0+Zm9udFNpemUoKTsKKyAgICBpZiAoZm9udFNpemUgPj0gMTYpCisgICAgICAgIHJldHVy
biBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKKyAgICBpZiAoZm9udFNpemUgPj0gMTEpCisgICAgICAg
IHJldHVybiBOU1NtYWxsQ29udHJvbFNpemU7CisgICAgcmV0dXJuIE5TTWluaUNvbnRyb2xTaXpl
OworfQorCit2b2lkIFJlbmRlclRoZW1lTWFjOjpzZXRDb250cm9sU2l6ZShOU0NlbGwqIGNlbGws
IGNvbnN0IEludFNpemUqIHNpemVzLCBjb25zdCBJbnRTaXplJiBtaW5TaXplLCBmbG9hdCB6b29t
TGV2ZWwpCit7CisgICAgTlNDb250cm9sU2l6ZSBzaXplOworICAgIGlmIChtaW5TaXplLndpZHRo
KCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tOU1JlZ3VsYXJDb250cm9sU2l6ZV0ud2lkdGgo
KSAqIHpvb21MZXZlbCkgJiYKKyAgICAgICAgbWluU2l6ZS5oZWlnaHQoKSA+PSBzdGF0aWNfY2Fz
dDxpbnQ+KHNpemVzW05TUmVndWxhckNvbnRyb2xTaXplXS5oZWlnaHQoKSAqIHpvb21MZXZlbCkp
CisgICAgICAgIHNpemUgPSBOU1JlZ3VsYXJDb250cm9sU2l6ZTsKKyAgICBlbHNlIGlmIChtaW5T
aXplLndpZHRoKCkgPj0gc3RhdGljX2Nhc3Q8aW50PihzaXplc1tOU1NtYWxsQ29udHJvbFNpemVd
LndpZHRoKCkgKiB6b29tTGV2ZWwpICYmCisgICAgICAgICAgICAgbWluU2l6ZS5oZWlnaHQoKSA+
PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVzW05TU21hbGxDb250cm9sU2l6ZV0uaGVpZ2h0KCkgKiB6
b29tTGV2ZWwpKQorICAgICAgICBzaXplID0gTlNTbWFsbENvbnRyb2xTaXplOworICAgIGVsc2UK
KyAgICAgICAgc2l6ZSA9IE5TTWluaUNvbnRyb2xTaXplOworICAgIGlmIChzaXplICE9IFtjZWxs
IGNvbnRyb2xTaXplXSkgLy8gT25seSB1cGRhdGUgaWYgd2UgaGF2ZSB0bywgc2luY2UgQXBwS2l0
IGRvZXMgd29yayBldmVuIGlmIHRoZSBzaXplIGlzIHRoZSBzYW1lLgorICAgICAgICBbY2VsbCBz
ZXRDb250cm9sU2l6ZTpzaXplXTsKK30KKworSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZv
ckZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK3sK
KyAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKSB7CisgICAgICAgIEludFNp
emUgcmVzdWx0ID0gc2l6ZXNbY29udHJvbFNpemVGb3JGb250KHN0eWxlKV07CisgICAgICAgIHJl
dHVybiBJbnRTaXplKHJlc3VsdC53aWR0aCgpICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSwgcmVz
dWx0LmhlaWdodCgpICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgfQorICAgIHJldHVy
biBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKK30KKworSW50U2l6ZSBSZW5kZXJU
aGVtZU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRT
aXplKiBzaXplcykgY29uc3QKK3sKKyAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSAx
LjBmKSB7CisgICAgICAgIEludFNpemUgcmVzdWx0ID0gc2l6ZXNbY29udHJvbFNpemVGb3JTeXN0
ZW1Gb250KHN0eWxlKV07CisgICAgICAgIHJldHVybiBJbnRTaXplKHJlc3VsdC53aWR0aCgpICog
c3R5bGUtPmVmZmVjdGl2ZVpvb20oKSwgcmVzdWx0LmhlaWdodCgpICogc3R5bGUtPmVmZmVjdGl2
ZVpvb20oKSk7CisgICAgfQorICAgIHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvclN5c3RlbUZv
bnQoc3R5bGUpXTsKK30KKwordm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZyb21Gb250KFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Cit7CisgICAgLy8g
RklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9t
YXgtd2lkdGggaW50byBhY2NvdW50LgorICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JGb250KHN0
eWxlLCBzaXplcyk7CisgICAgaWYgKHN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgc2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXpl
LndpZHRoKCksIEZpeGVkKSk7CisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBz
aXplLmhlaWdodCgpID4gMCkKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5o
ZWlnaHQoKSwgRml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21D
b250cm9sU2l6ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBOU0NvbnRy
b2xTaXplIGNvbnRyb2xTaXplKSBjb25zdAoreworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVz
Y3JpcHRpb247CisgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRHZW5lcmljRmFtaWx5KEZvbnREZXNjcmlwdGlvbjo6U2Vy
aWZGYW1pbHkpOworCisgICAgTlNGb250KiBmb250ID0gW05TRm9udCBzeXN0ZW1Gb250T2ZTaXpl
OltOU0ZvbnQgc3lzdGVtRm9udFNpemVGb3JDb250cm9sU2l6ZTpjb250cm9sU2l6ZV1dOworICAg
IGZvbnREZXNjcmlwdGlvbi5maXJzdEZhbWlseSgpLnNldEZhbWlseShbZm9udCBmYW1pbHlOYW1l
XSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShbZm9udCBwb2ludFNpemVd
ICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoW2ZvbnQgcG9pbnRTaXplXSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCkpOworCisg
ICAgLy8gUmVzZXQgbGluZSBoZWlnaHQKKyAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJT
dHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisKKyAgICBpZiAoc3R5bGUtPnNldEZvbnREZXNj
cmlwdGlvbihmb250RGVzY3JpcHRpb24pKQorICAgICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZSgw
KTsKK30KKworTlNDb250cm9sU2l6ZSBSZW5kZXJUaGVtZU1hYzo6Y29udHJvbFNpemVGb3JTeXN0
ZW1Gb250KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpbnQgZm9udFNpemUgPSBz
dHlsZS0+Zm9udFNpemUoKTsKKyAgICBpZiAoZm9udFNpemUgPj0gW05TRm9udCBzeXN0ZW1Gb250
U2l6ZUZvckNvbnRyb2xTaXplOk5TUmVndWxhckNvbnRyb2xTaXplXSkKKyAgICAgICAgcmV0dXJu
IE5TUmVndWxhckNvbnRyb2xTaXplOworICAgIGlmIChmb250U2l6ZSA+PSBbTlNGb250IHN5c3Rl
bUZvbnRTaXplRm9yQ29udHJvbFNpemU6TlNTbWFsbENvbnRyb2xTaXplXSkKKyAgICAgICAgcmV0
dXJuIE5TU21hbGxDb250cm9sU2l6ZTsKKyAgICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7Cit9
CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50
SW5mby5jb250ZXh0KTsKKyAgICB3a0RyYXdCZXplbGVkVGV4dEZpZWxkQ2VsbChyLCBpc0VuYWJs
ZWQobykgJiYgIWlzUmVhZE9ubHlDb250cm9sKG8pKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAoreworfQorCitib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
aWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChw
YWludEluZm8uY29udGV4dCk7CisgICAgd2tEcmF3Q2Fwc0xvY2tJbmRpY2F0b3IocGFpbnRJbmZv
LmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByKTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByKQoreworICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFp
bnRJbmZvLmNvbnRleHQpOworICAgIHdrRHJhd0JlemVsZWRUZXh0QXJlYShyLCBpc0VuYWJsZWQo
bykgJiYgIWlzUmVhZE9ubHlDb250cm9sKG8pKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Cit7Cit9CisKK2NvbnN0IGludCogUmVuZGVy
VGhlbWVNYWM6OnBvcHVwQnV0dG9uTWFyZ2lucygpIGNvbnN0Cit7CisgICAgc3RhdGljIGNvbnN0
IGludCBtYXJnaW5zWzNdWzRdID0KKyAgICB7CisgICAgICAgIHsgMCwgMywgMSwgMyB9LAorICAg
ICAgICB7IDAsIDMsIDIsIDMgfSwKKyAgICAgICAgeyAwLCAxLCAwLCAxIH0KKyAgICB9OworICAg
IHJldHVybiBtYXJnaW5zW1twb3B1cEJ1dHRvbigpIGNvbnRyb2xTaXplXV07Cit9CisKK2NvbnN0
IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpwb3B1cEJ1dHRvblNpemVzKCkgY29uc3QKK3sKKyAg
ICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgwLCAyMSksIEludFNp
emUoMCwgMTgpLCBJbnRTaXplKDAsIDE1KSB9OworICAgIHJldHVybiBzaXplczsKK30KKworY29u
c3QgaW50KiBSZW5kZXJUaGVtZU1hYzo6cG9wdXBCdXR0b25QYWRkaW5nKE5TQ29udHJvbFNpemUg
c2l6ZSkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IHBhZGRpbmdbM11bNF0gPQorICAg
IHsKKyAgICAgICAgeyAyLCAyNiwgMywgOCB9LAorICAgICAgICB7IDIsIDIzLCAzLCA4IH0sCisg
ICAgICAgIHsgMiwgMjIsIDMsIDEwIH0KKyAgICB9OworICAgIHJldHVybiBwYWRkaW5nW3NpemVd
OworfQorCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKKworICAgIE5TUG9w
VXBCdXR0b25DZWxsKiBwb3B1cEJ1dHRvbiA9IHRoaXMtPnBvcHVwQnV0dG9uKCk7CisKKyAgICBm
bG9hdCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisgICAgSW50U2l6
ZSBzaXplID0gcG9wdXBCdXR0b25TaXplcygpW1twb3B1cEJ1dHRvbiBjb250cm9sU2l6ZV1dOwor
ICAgIHNpemUuc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkgKiB6b29tTGV2ZWwpOworICAgIHNpemUu
c2V0V2lkdGgoci53aWR0aCgpKTsKKworICAgIC8vIE5vdyBpbmZsYXRlIGl0IHRvIGFjY291bnQg
Zm9yIHRoZSBzaGFkb3cuCisgICAgSW50UmVjdCBpbmZsYXRlZFJlY3QgPSByOworICAgIGlmIChy
LndpZHRoKCkgPj0gbWluaW11bU1lbnVMaXN0U2l6ZShvLT5zdHlsZSgpKSkKKyAgICAgICAgaW5m
bGF0ZWRSZWN0ID0gaW5mbGF0ZVJlY3QoaW5mbGF0ZWRSZWN0LCBzaXplLCBwb3B1cEJ1dHRvbk1h
cmdpbnMoKSwgem9vbUxldmVsKTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7Cisg
ICAgCisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgLy8gT24gTGVvcGFyZCwgdGhlIGNl
bGwgd2lsbCBkcmF3IG91dHNpZGUgb2YgdGhlIGdpdmVuIHJlY3QsIHNvIHdlIGhhdmUgdG8gY2xp
cCB0byB0aGUgcmVjdAorICAgIHBhaW50SW5mby5jb250ZXh0LT5jbGlwKGluZmxhdGVkUmVjdCk7
CisjZW5kaWYKKworICAgIGlmICh6b29tTGV2ZWwgIT0gMS4wZikgeworICAgICAgICBpbmZsYXRl
ZFJlY3Quc2V0V2lkdGgoaW5mbGF0ZWRSZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwpOworICAgICAg
ICBpbmZsYXRlZFJlY3Quc2V0SGVpZ2h0KGluZmxhdGVkUmVjdC5oZWlnaHQoKSAvIHpvb21MZXZl
bCk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoaW5mbGF0ZWRSZWN0Lngo
KSwgaW5mbGF0ZWRSZWN0LnkoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShG
bG9hdFNpemUoem9vbUxldmVsLCB6b29tTGV2ZWwpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWluZmxhdGVkUmVjdC55KCkpOworICAg
IH0KKworICAgIFtwb3B1cEJ1dHRvbiBkcmF3V2l0aEZyYW1lOmluZmxhdGVkUmVjdCBpblZpZXc6
by0+dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCldOworICAgIFtwb3B1cEJ1dHRv
biBzZXRDb250cm9sVmlldzpuaWxdOworCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUo
KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworY29uc3QgZmxvYXQgYmFzZUZvbnRTaXplID0g
MTEuMGY7Citjb25zdCBmbG9hdCBiYXNlQXJyb3dIZWlnaHQgPSA0LjBmOworY29uc3QgZmxvYXQg
YmFzZUFycm93V2lkdGggPSA1LjBmOworY29uc3QgZmxvYXQgYmFzZVNwYWNlQmV0d2VlbkFycm93
cyA9IDIuMGY7Citjb25zdCBpbnQgYXJyb3dQYWRkaW5nTGVmdCA9IDY7Citjb25zdCBpbnQgYXJy
b3dQYWRkaW5nUmlnaHQgPSA2OworY29uc3QgaW50IHBhZGRpbmdCZWZvcmVTZXBhcmF0b3IgPSA0
OworY29uc3QgaW50IGJhc2VCb3JkZXJSYWRpdXMgPSA1OworY29uc3QgaW50IHN0eWxlZFBvcHVw
UGFkZGluZ0xlZnQgPSA4OworY29uc3QgaW50IHN0eWxlZFBvcHVwUGFkZGluZ1RvcCA9IDE7Citj
b25zdCBpbnQgc3R5bGVkUG9wdXBQYWRkaW5nQm90dG9tID0gMjsKKworc3RhdGljIHZvaWQgVG9w
R3JhZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0
KiBvdXREYXRhKQoreworICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAxLjBmLCAxLjBmLCAx
LjBmLCAwLjRmIH07CisgICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAxLjBmLCAxLjBmLCAx
LjBmLCAwLjE1ZiB9OworICAgIGZsb2F0IGEgPSBpbkRhdGFbMF07CisgICAgaW50IGkgPSAwOwor
ICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAt
IGEpICogZGFya1tpXSArIGEgKiBsaWdodFtpXTsKK30KKworc3RhdGljIHZvaWQgQm90dG9tR3Jh
ZGllbnRJbnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBv
dXREYXRhKQoreworICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAxLjBmLCAxLjBmLCAxLjBm
LCAwLjBmIH07CisgICAgc3RhdGljIGZsb2F0IGxpZ2h0WzRdID0geyAxLjBmLCAxLjBmLCAxLjBm
LCAwLjNmIH07CisgICAgZmxvYXQgYSA9IGluRGF0YVswXTsKKyAgICBpbnQgaSA9IDA7CisgICAg
Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICAgICAgb3V0RGF0YVtpXSA9ICgxLjBmIC0gYSkg
KiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOworfQorCitzdGF0aWMgdm9pZCBNYWluR3JhZGllbnRJ
bnRlcnBvbGF0ZSh2b2lkKiwgY29uc3QgQ0dGbG9hdCogaW5EYXRhLCBDR0Zsb2F0KiBvdXREYXRh
KQoreworICAgIHN0YXRpYyBmbG9hdCBkYXJrWzRdID0geyAwLjBmLCAwLjBmLCAwLjBmLCAwLjE1
ZiB9OworICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC4w
ZiB9OworICAgIGZsb2F0IGEgPSBpbkRhdGFbMF07CisgICAgaW50IGkgPSAwOworICAgIGZvciAo
aSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgIG91dERhdGFbaV0gPSAoMS4wZiAtIGEpICogZGFy
a1tpXSArIGEgKiBsaWdodFtpXTsKK30KKworc3RhdGljIHZvaWQgVHJhY2tHcmFkaWVudEludGVy
cG9sYXRlKHZvaWQqLCBjb25zdCBDR0Zsb2F0KiBpbkRhdGEsIENHRmxvYXQqIG91dERhdGEpCit7
CisgICAgc3RhdGljIGZsb2F0IGRhcmtbNF0gPSB7IDAuMGYsIDAuMGYsIDAuMGYsIDAuNjc4ZiB9
OworICAgIHN0YXRpYyBmbG9hdCBsaWdodFs0XSA9IHsgMC4wZiwgMC4wZiwgMC4wZiwgMC4xM2Yg
fTsKKyAgICBmbG9hdCBhID0gaW5EYXRhWzBdOworICAgIGludCBpID0gMDsKKyAgICBmb3IgKGkg
PSAwOyBpIDwgNDsgaSsrKQorICAgICAgICBvdXREYXRhW2ldID0gKDEuMGYgLSBhKSAqIGRhcmtb
aV0gKyBhICogbGlnaHRbaV07Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxp
c3RCdXR0b25HcmFkaWVudHMoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlmIChyLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwYWlu
dEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBwYWludEluZm8uY29udGV4
dC0+c2F2ZSgpOworCisgICAgSW50U2l6ZSB0b3BMZWZ0UmFkaXVzOworICAgIEludFNpemUgdG9w
UmlnaHRSYWRpdXM7CisgICAgSW50U2l6ZSBib3R0b21MZWZ0UmFkaXVzOworICAgIEludFNpemUg
Ym90dG9tUmlnaHRSYWRpdXM7CisKKyAgICBvLT5zdHlsZSgpLT5nZXRCb3JkZXJSYWRpaUZvclJl
Y3QociwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJv
dHRvbVJpZ2h0UmFkaXVzKTsKKworICAgIGludCByYWRpdXMgPSB0b3BMZWZ0UmFkaXVzLndpZHRo
KCk7CisKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjc3BhY2UoQWRvcHRDRiwgQ0dD
b2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCkpOworCisgICAgRmxvYXRSZWN0IHRvcEdyYWRpZW50
KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpIC8gMi4wZik7CisgICAgc3RydWN0
IENHRnVuY3Rpb25DYWxsYmFja3MgdG9wQ2FsbGJhY2tzID0geyAwLCBUb3BHcmFkaWVudEludGVy
cG9sYXRlLCBOVUxMIH07CisgICAgUmV0YWluUHRyPENHRnVuY3Rpb25SZWY+IHRvcEZ1bmN0aW9u
KEFkb3B0Q0YsIENHRnVuY3Rpb25DcmVhdGUoTlVMTCwgMSwgTlVMTCwgNCwgTlVMTCwgJnRvcENh
bGxiYWNrcykpOworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IHRvcFNoYWRpbmcoQWRvcHRD
RiwgQ0dTaGFkaW5nQ3JlYXRlQXhpYWwoY3NwYWNlLmdldCgpLCBDR1BvaW50TWFrZSh0b3BHcmFk
aWVudC54KCksIHRvcEdyYWRpZW50LnkoKSksIENHUG9pbnRNYWtlKHRvcEdyYWRpZW50LngoKSwg
dG9wR3JhZGllbnQuYm90dG9tKCkpLCB0b3BGdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7
CisKKyAgICBGbG9hdFJlY3QgYm90dG9tR3JhZGllbnQoci54KCkgKyByYWRpdXMsIHIueSgpICsg
ci5oZWlnaHQoKSAvIDIuMGYsIHIud2lkdGgoKSAtIDIuMGYgKiByYWRpdXMsIHIuaGVpZ2h0KCkg
LyAyLjBmKTsKKyAgICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBib3R0b21DYWxsYmFja3Mg
PSB7IDAsIEJvdHRvbUdyYWRpZW50SW50ZXJwb2xhdGUsIE5VTEwgfTsKKyAgICBSZXRhaW5QdHI8
Q0dGdW5jdGlvblJlZj4gYm90dG9tRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShO
VUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAmYm90dG9tQ2FsbGJhY2tzKSk7CisgICAgUmV0YWluUHRy
PENHU2hhZGluZ1JlZj4gYm90dG9tU2hhZGluZyhBZG9wdENGLCBDR1NoYWRpbmdDcmVhdGVBeGlh
bChjc3BhY2UuZ2V0KCksIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgIGJvdHRvbUdy
YWRpZW50LnkoKSksIENHUG9pbnRNYWtlKGJvdHRvbUdyYWRpZW50LngoKSwgYm90dG9tR3JhZGll
bnQuYm90dG9tKCkpLCBib3R0b21GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisKKyAg
ICBzdHJ1Y3QgQ0dGdW5jdGlvbkNhbGxiYWNrcyBtYWluQ2FsbGJhY2tzID0geyAwLCBNYWluR3Jh
ZGllbnRJbnRlcnBvbGF0ZSwgTlVMTCB9OworICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBt
YWluRnVuY3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBO
VUxMLCAmbWFpbkNhbGxiYWNrcykpOworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5T
aGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZS5nZXQoKSwgQ0dQb2lu
dE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIueCgpLCByLmJvdHRvbSgpKSwgbWFp
bkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKworICAgIFJldGFpblB0cjxDR1NoYWRp
bmdSZWY+IGxlZnRTaGFkaW5nKEFkb3B0Q0YsIENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFjZS5n
ZXQoKSwgQ0dQb2ludE1ha2Uoci54KCksICByLnkoKSksIENHUG9pbnRNYWtlKHIueCgpICsgcmFk
aXVzLCByLnkoKSksIG1haW5GdW5jdGlvbi5nZXQoKSwgZmFsc2UsIGZhbHNlKSk7CisKKyAgICBS
ZXRhaW5QdHI8Q0dTaGFkaW5nUmVmPiByaWdodFNoYWRpbmcoQWRvcHRDRiwgQ0dTaGFkaW5nQ3Jl
YXRlQXhpYWwoY3NwYWNlLmdldCgpLCBDR1BvaW50TWFrZShyLnJpZ2h0KCksICByLnkoKSksIENH
UG9pbnRNYWtlKHIucmlnaHQoKSAtIHJhZGl1cywgci55KCkpLCBtYWluRnVuY3Rpb24uZ2V0KCks
IGZhbHNlLCBmYWxzZSkpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgQ0dD
b250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCByKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+YWRk
Um91bmRlZFJlY3RDbGlwKHIsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21M
ZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1cyk7CisgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmco
Y29udGV4dCwgbWFpblNoYWRpbmcuZ2V0KCkpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0
b3JlKCk7CisKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIENHQ29udGV4dENs
aXBUb1JlY3QoY29udGV4dCwgdG9wR3JhZGllbnQpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5h
ZGRSb3VuZGVkUmVjdENsaXAoZW5jbG9zaW5nSW50UmVjdCh0b3BHcmFkaWVudCksIHRvcExlZnRS
YWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBJbnRTaXplKCksIEludFNpemUoKSk7CisgICAgQ0dDb250
ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgdG9wU2hhZGluZy5nZXQoKSk7CisgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIGlmICghYm90dG9tR3JhZGllbnQuaXNFbXB0eSgp
KSB7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgICAgIENHQ29udGV4
dENsaXBUb1JlY3QoY29udGV4dCwgYm90dG9tR3JhZGllbnQpOworICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGVuY2xvc2luZ0ludFJlY3QoYm90dG9tR3JhZGll
bnQpLCBJbnRTaXplKCksIEludFNpemUoKSwgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRS
YWRpdXMpOworICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBib3R0b21TaGFk
aW5nLmdldCgpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9
CisKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIENHQ29udGV4dENsaXBUb1Jl
Y3QoY29udGV4dCwgcik7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xp
cChyLCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90
dG9tUmlnaHRSYWRpdXMpOworICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIGxlZnRT
aGFkaW5nLmdldCgpKTsKKyAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCByaWdodFNo
YWRpbmcuZ2V0KCkpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CisKKyAgICBw
YWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworfQorCitib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBJbnRSZWN0IGJv
dW5kcyA9IEludFJlY3Qoci54KCkgKyBvLT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgci55KCkgKyBvLT5zdHlsZSgpLT5ib3JkZXJUb3BX
aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLndpZHRoKCkgLSBvLT5zdHls
ZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSAtIG8tPnN0eWxlKCktPmJvcmRlclJpZ2h0V2lkdGgoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5oZWlnaHQoKSAtIG8tPnN0eWxlKCktPmJv
cmRlclRvcFdpZHRoKCkgLSBvLT5zdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICAv
LyBEcmF3IHRoZSBncmFkaWVudHMgdG8gZ2l2ZSB0aGUgc3R5bGVkIHBvcHVwIG1lbnUgYSBidXR0
b24gYXBwZWFyYW5jZQorICAgIHBhaW50TWVudUxpc3RCdXR0b25HcmFkaWVudHMobywgcGFpbnRJ
bmZvLCBib3VuZHMpOworCisgICAgLy8gU2luY2Ugd2UgYWN0dWFsbHkga25vdyB0aGUgc2l6ZSBv
ZiB0aGUgY29udHJvbCBoZXJlLCB3ZSByZXN0cmljdCB0aGUgZm9udCBzY2FsZSB0byBtYWtlIHN1
cmUgdGhlIGFycm93cyB3aWxsIGZpdCB2ZXJ0aWNhbGx5IGluIHRoZSBib3VuZHMKKyAgICBmbG9h
dCBmb250U2NhbGUgPSBtaW4oby0+c3R5bGUoKS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZSwg
Ym91bmRzLmhlaWdodCgpIC8gKGJhc2VBcnJvd0hlaWdodCAqIDIgKyBiYXNlU3BhY2VCZXR3ZWVu
QXJyb3dzKSk7CisgICAgZmxvYXQgY2VudGVyWSA9IGJvdW5kcy55KCkgKyBib3VuZHMuaGVpZ2h0
KCkgLyAyLjBmOworICAgIGZsb2F0IGFycm93SGVpZ2h0ID0gYmFzZUFycm93SGVpZ2h0ICogZm9u
dFNjYWxlOworICAgIGZsb2F0IGFycm93V2lkdGggPSBiYXNlQXJyb3dXaWR0aCAqIGZvbnRTY2Fs
ZTsKKyAgICBmbG9hdCBsZWZ0RWRnZSA9IGJvdW5kcy5yaWdodCgpIC0gYXJyb3dQYWRkaW5nUmln
aHQgKiBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgLSBhcnJvd1dpZHRoOworICAgIGZsb2F0
IHNwYWNlQmV0d2VlbkFycm93cyA9IGJhc2VTcGFjZUJldHdlZW5BcnJvd3MgKiBmb250U2NhbGU7
CisKKyAgICBpZiAoYm91bmRzLndpZHRoKCkgPCBhcnJvd1dpZHRoICsgYXJyb3dQYWRkaW5nTGVm
dCAqIG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisKKyAgICBwYWludEluZm8uY29u
dGV4dC0+c2V0RmlsbENvbG9yKG8tPnN0eWxlKCktPmNvbG9yKCkpOworICAgIHBhaW50SW5mby5j
b250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7CisKKyAgICBGbG9hdFBvaW50IGFycm93
MVszXTsKKyAgICBhcnJvdzFbMF0gPSBGbG9hdFBvaW50KGxlZnRFZGdlLCBjZW50ZXJZIC0gc3Bh
Y2VCZXR3ZWVuQXJyb3dzIC8gMi4wZik7CisgICAgYXJyb3cxWzFdID0gRmxvYXRQb2ludChsZWZ0
RWRnZSArIGFycm93V2lkdGgsIGNlbnRlclkgLSBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsK
KyAgICBhcnJvdzFbMl0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMGYs
IGNlbnRlclkgLSBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmIC0gYXJyb3dIZWlnaHQpOworCisg
ICAgLy8gRHJhdyB0aGUgdG9wIGFycm93CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252
ZXhQb2x5Z29uKDMsIGFycm93MSwgdHJ1ZSk7CisKKyAgICBGbG9hdFBvaW50IGFycm93MlszXTsK
KyAgICBhcnJvdzJbMF0gPSBGbG9hdFBvaW50KGxlZnRFZGdlLCBjZW50ZXJZICsgc3BhY2VCZXR3
ZWVuQXJyb3dzIC8gMi4wZik7CisgICAgYXJyb3cyWzFdID0gRmxvYXRQb2ludChsZWZ0RWRnZSAr
IGFycm93V2lkdGgsIGNlbnRlclkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmKTsKKyAgICBh
cnJvdzJbMl0gPSBGbG9hdFBvaW50KGxlZnRFZGdlICsgYXJyb3dXaWR0aCAvIDIuMGYsIGNlbnRl
clkgKyBzcGFjZUJldHdlZW5BcnJvd3MgLyAyLjBmICsgYXJyb3dIZWlnaHQpOworCisgICAgLy8g
RHJhdyB0aGUgYm90dG9tIGFycm93CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRyYXdDb252ZXhQ
b2x5Z29uKDMsIGFycm93MiwgdHJ1ZSk7CisKKyAgICBDb2xvciBsZWZ0U2VwYXJhdG9yQ29sb3Io
MCwgMCwgMCwgNDApOworICAgIENvbG9yIHJpZ2h0U2VwYXJhdG9yQ29sb3IoMjU1LCAyNTUsIDI1
NSwgNDApOworCisgICAgLy8gRklYTUU6IFNob3VsZCB0aGUgc2VwYXJhdG9yIHRoaWNrbmVzcyBh
bmQgc3BhY2UgYmUgc2NhbGVkIHVwIGJ5IGZvbnRTY2FsZT8KKyAgICBpbnQgc2VwYXJhdG9yU3Bh
Y2UgPSAyOyAvLyBEZWxpYmVyYXRlbHkgaWdub3JlcyB6b29tIHNpbmNlIGl0IGxvb2tzIG5pY2Vy
IGlmIGl0IHN0YXlzIHRoaW4uCisgICAgaW50IGxlZnRFZGdlT2ZTZXBhcmF0b3IgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGxlZnRFZGdlIC0gYXJyb3dQYWRkaW5nTGVmdCAqIG8tPnN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKSk7IC8vIEZJWE1FOiBSb3VuZD8KKworICAgIC8vIERyYXcgdGhlIHNlcGFyYXRv
ciB0byB0aGUgbGVmdCBvZiB0aGUgYXJyb3dzCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0
cm9rZVRoaWNrbmVzcygxLjBmKTsgLy8gRGVsaWJlcmF0ZWx5IGlnbm9yZXMgem9vbSBzaW5jZSBp
dCBsb29rcyBuaWNlciBpZiBpdCBzdGF5cyB0aGluLgorICAgIHBhaW50SW5mby5jb250ZXh0LT5z
ZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKGxlZnRTZXBhcmF0b3JDb2xvcik7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmRy
YXdMaW5lKEludFBvaW50KGxlZnRFZGdlT2ZTZXBhcmF0b3IsIGJvdW5kcy55KCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChsZWZ0RWRnZU9mU2VwYXJhdG9yLCBi
b3VuZHMuYm90dG9tKCkpKTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xv
cihyaWdodFNlcGFyYXRvckNvbG9yKTsKKyAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0xpbmUo
SW50UG9pbnQobGVmdEVkZ2VPZlNlcGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMueSgp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQobGVmdEVkZ2VPZlNl
cGFyYXRvciArIHNlcGFyYXRvclNwYWNlLCBib3VuZHMuYm90dG9tKCkpKTsKKworICAgIHBhaW50
SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMg
Y29uc3QgSW50U2l6ZSogbWVudUxpc3RCdXR0b25TaXplcygpCit7CisgICAgc3RhdGljIGNvbnN0
IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMCwgMjEpLCBJbnRTaXplKDAsIDE4KSwgSW50
U2l6ZSgwLCAxNSkgfTsKKyAgICByZXR1cm4gc2l6ZXM7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBOU0NvbnRyb2xTaXplIGNv
bnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250KHN0eWxlKTsKKworICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICAKKyAgICAvLyBIZWln
aHQgaXMgbG9ja2VkIHRvIGF1dG8uCisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykp
OworCisgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQorICAgIHN0eWxlLT5zZXRX
aGl0ZVNwYWNlKFBSRSk7CisKKyAgICAvLyBTZXQgdGhlIGZvcmVncm91bmQgY29sb3IgdG8gYmxh
Y2sgb3IgZ3JheSB3aGVuIHdlIGhhdmUgdGhlIGFxdWEgbG9vay4KKyAgICAvLyBDYXN0IHRvIFJH
QjMyIGlzIHRvIHdvcmsgYXJvdW5kIGEgY29tcGlsZXIgYnVnLgorICAgIHN0eWxlLT5zZXRDb2xv
cihlICYmIGUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCkgPyBzdGF0aWNfY2FzdDxSR0JBMzI+KENv
bG9yOjpibGFjaykgOiBDb2xvcjo6ZGFya0dyYXkpOworCisgICAgLy8gU2V0IHRoZSBidXR0b24n
cyB2ZXJ0aWNhbCBzaXplLgorICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwgbWVudUxpc3RCdXR0
b25TaXplcygpKTsKKworICAgIC8vIE91ciBmb250IGlzIGxvY2tlZCB0byB0aGUgYXBwcm9wcmlh
dGUgc3lzdGVtIGZvbnQgc2l6ZSBmb3IgdGhlIGNvbnRyb2wuICBUbyBjbGFyaWZ5LCB3ZSBmaXJz
dCB1c2UgdGhlIENTUy1zcGVjaWZpZWQgZm9udCB0byBmaWd1cmUgb3V0CisgICAgLy8gYSByZWFz
b25hYmxlIGNvbnRyb2wgc2l6ZSwgYnV0IG9uY2UgdGhhdCBjb250cm9sIHNpemUgaXMgZGV0ZXJt
aW5lZCwgd2UgdGhyb3cgdGhhdCBmb250IGF3YXkgYW5kIHVzZSB0aGUgYXBwcm9wcmlhdGUKKyAg
ICAvLyBzeXN0ZW0gZm9udCBmb3IgdGhlIGNvbnRyb2wgc2l6ZSBpbnN0ZWFkLgorICAgIHNldEZv
bnRGcm9tQ29udHJvbFNpemUoc2VsZWN0b3IsIHN0eWxlLCBjb250cm9sU2l6ZSk7CisKKyAgICBz
dHlsZS0+c2V0Qm94U2hhZG93KDApOworfQorCitpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50
ZXJuYWxQYWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgaWYgKHN0
eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgICAgICByZXR1cm4gcG9wdXBC
dXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2xlZnRQYWRkaW5nXSAqIHN0
eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVu
dWxpc3RCdXR0b25QYXJ0KQorICAgICAgICByZXR1cm4gc3R5bGVkUG9wdXBQYWRkaW5nTGVmdCAq
IHN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBSZW5kZXJU
aGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Cit7CisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAg
ICAgICByZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkp
W3JpZ2h0UGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIGlmIChzdHlsZS0+
YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkgeworICAgICAgICBmbG9hdCBmb250
U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKKyAgICAgICAgZmxvYXQg
YXJyb3dXaWR0aCA9IGJhc2VBcnJvd1dpZHRoICogZm9udFNjYWxlOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PihjZWlsZihhcnJvd1dpZHRoICsgKGFycm93UGFkZGluZ0xlZnQgKyBh
cnJvd1BhZGRpbmdSaWdodCArIHBhZGRpbmdCZWZvcmVTZXBhcmF0b3IpICogc3R5bGUtPmVmZmVj
dGl2ZVpvb20oKSkpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IFJlbmRlclRoZW1l
TWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7
CisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQorICAgICAgICBy
ZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW3RvcFBh
ZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBNZW51bGlzdEJ1dHRvblBhcnQpCisgICAgICAgIHJldHVybiBzdHlsZWRQb3B1cFBh
ZGRpbmdUb3AgKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgIHJldHVybiAwOworfQorCitp
bnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK3sKKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlz
dFBhcnQpCisgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JG
b250KHN0eWxlKSlbYm90dG9tUGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAg
IGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IE1lbnVsaXN0QnV0dG9uUGFydCkKKyAgICAgICAg
cmV0dXJuIHN0eWxlZFBvcHVwUGFkZGluZ0JvdHRvbSAqIHN0eWxlLT5lZmZlY3RpdmVab29tKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdE1lbnVMaXN0
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit7CisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBi
YXNlRm9udFNpemU7CisKKyAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgc3R5bGUtPnNl
dEJvcmRlclJhZGl1cyhJbnRTaXplKGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0g
MSksIGludChiYXNlQm9yZGVyUmFkaXVzICsgZm9udFNjYWxlIC0gMSkpKTsgLy8gRklYTUU6IFJv
dW5kIHVwPworCisgICAgY29uc3QgaW50IG1pbkhlaWdodCA9IDE1OworICAgIHN0eWxlLT5zZXRN
aW5IZWlnaHQoTGVuZ3RoKG1pbkhlaWdodCwgRml4ZWQpKTsKKyAgICAKKyAgICBzdHlsZS0+c2V0
TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVNYWM6OnNldFBvcHVwQnV0dG9uQ2VsbFN0YXRlKGNvbnN0IFJlbmRlck9iamVj
dCogbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBOU1BvcFVwQnV0dG9uQ2VsbCogcG9wdXBC
dXR0b24gPSB0aGlzLT5wb3B1cEJ1dHRvbigpOworCisgICAgLy8gU2V0IHRoZSBjb250cm9sIHNp
emUgYmFzZWQgb2ZmIHRoZSByZWN0YW5nbGUgd2UncmUgcGFpbnRpbmcgaW50by4KKyAgICBzZXRD
b250cm9sU2l6ZShwb3B1cEJ1dHRvbiwgcG9wdXBCdXR0b25TaXplcygpLCByLnNpemUoKSwgby0+
c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgdmFyaW91cyBz
dGF0ZXMgd2UgcmVzcG9uZCB0by4KKyAgICB1cGRhdGVDaGVja2VkU3RhdGUocG9wdXBCdXR0b24s
IG8pOworICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShwb3B1cEJ1dHRvbiwgbyk7CisgICAgdXBkYXRl
UHJlc3NlZFN0YXRlKHBvcHVwQnV0dG9uLCBvKTsKKyAgICB1cGRhdGVGb2N1c2VkU3RhdGUocG9w
dXBCdXR0b24sIG8pOworfQorCitjb25zdCBJbnRTaXplKiBSZW5kZXJUaGVtZU1hYzo6bWVudUxp
c3RTaXplcygpIGNvbnN0Cit7CisgICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7
IEludFNpemUoOSwgMCksIEludFNpemUoNSwgMCksIEludFNpemUoMCwgMCkgfTsKKyAgICByZXR1
cm4gc2l6ZXM7Cit9CisKK2ludCBSZW5kZXJUaGVtZU1hYzo6bWluaW11bU1lbnVMaXN0U2l6ZShS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNpemVGb3JTeXN0ZW1Gb250
KHN0eWxlLCBtZW51TGlzdFNpemVzKCkpLndpZHRoKCk7Cit9CisKK2NvbnN0IGludCB0cmFja1dp
ZHRoID0gNTsKK2NvbnN0IGludCB0cmFja1JhZGl1cyA9IDI7CisKK3ZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCit7CisgICAgSW50UmVjdCBib3VuZHMgPSByOworICAgIGZsb2F0IHpvb21MZXZlbCA9
IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBmbG9hdCB6b29tZWRUcmFja1dpZHRo
ID0gdHJhY2tXaWR0aCAqIHpvb21MZXZlbDsKKworICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCkgPT0gIFNsaWRlckhvcml6b250YWxQYXJ0IHx8IG8tPnN0eWxlKCktPmFwcGVhcmFuY2Uo
KSA9PSAgTWVkaWFTbGlkZXJQYXJ0KSB7CisgICAgICAgIGJvdW5kcy5zZXRIZWlnaHQoem9vbWVk
VHJhY2tXaWR0aCk7CisgICAgICAgIGJvdW5kcy5zZXRZKHIueSgpICsgci5oZWlnaHQoKSAvIDIg
LSB6b29tZWRUcmFja1dpZHRoIC8gMik7CisgICAgfSBlbHNlIGlmIChvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0KSB7CisgICAgICAgIGJvdW5kcy5zZXRXaWR0
aCh6b29tZWRUcmFja1dpZHRoKTsKKyAgICAgICAgYm91bmRzLnNldFgoci54KCkgKyByLndpZHRo
KCkgLyAyIC0gem9vbWVkVHJhY2tXaWR0aCAvIDIpOworICAgIH0KKworICAgIExvY2FsQ3VycmVu
dEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOworICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OworICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNzcGFjZShBZG9wdENGLCBDR0NvbG9y
U3BhY2VDcmVhdGVEZXZpY2VSR0IoKSk7CisKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgp
OworICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgYm91bmRzKTsKKworICAgIHN0cnVj
dCBDR0Z1bmN0aW9uQ2FsbGJhY2tzIG1haW5DYWxsYmFja3MgPSB7IDAsIFRyYWNrR3JhZGllbnRJ
bnRlcnBvbGF0ZSwgTlVMTCB9OworICAgIFJldGFpblB0cjxDR0Z1bmN0aW9uUmVmPiBtYWluRnVu
Y3Rpb24oQWRvcHRDRiwgQ0dGdW5jdGlvbkNyZWF0ZShOVUxMLCAxLCBOVUxMLCA0LCBOVUxMLCAm
bWFpbkNhbGxiYWNrcykpOworICAgIFJldGFpblB0cjxDR1NoYWRpbmdSZWY+IG1haW5TaGFkaW5n
OworICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVmVydGljYWxQYXJ0
KQorICAgICAgICBtYWluU2hhZGluZy5hZG9wdENGKENHU2hhZGluZ0NyZWF0ZUF4aWFsKGNzcGFj
ZS5nZXQoKSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgIGJvdW5kcy5ib3R0b20oKSksIENHUG9p
bnRNYWtlKGJvdW5kcy5yaWdodCgpLCBib3VuZHMuYm90dG9tKCkpLCBtYWluRnVuY3Rpb24uZ2V0
KCksIGZhbHNlLCBmYWxzZSkpOworICAgIGVsc2UKKyAgICAgICAgbWFpblNoYWRpbmcuYWRvcHRD
RihDR1NoYWRpbmdDcmVhdGVBeGlhbChjc3BhY2UuZ2V0KCksIENHUG9pbnRNYWtlKGJvdW5kcy54
KCksICBib3VuZHMueSgpKSwgQ0dQb2ludE1ha2UoYm91bmRzLngoKSwgYm91bmRzLmJvdHRvbSgp
KSwgbWFpbkZ1bmN0aW9uLmdldCgpLCBmYWxzZSwgZmFsc2UpKTsKKworICAgIEludFNpemUgcmFk
aXVzKHRyYWNrUmFkaXVzLCB0cmFja1JhZGl1cyk7CisgICAgcGFpbnRJbmZvLmNvbnRleHQtPmFk
ZFJvdW5kZWRSZWN0Q2xpcChib3VuZHMsCisgICAgICAgIHJhZGl1cywgcmFkaXVzLAorICAgICAg
ICByYWRpdXMsIHJhZGl1cyk7CisgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbWFp
blNoYWRpbmcuZ2V0KCkpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlk
ZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAoreworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7Cit9CisKK2NvbnN0IGZs
b2F0IHZlcnRpY2FsU2xpZGVySGVpZ2h0UGFkZGluZyA9IDAuMWY7CisKK2Jvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEFTU0VS
VChvLT5wYXJlbnQoKS0+aXNTbGlkZXIoKSk7CisKKyAgICBOU1NsaWRlckNlbGwqIHNsaWRlclRo
dW1iQ2VsbCA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBTbGlkZXJUaHVtYlZlcnRpY2Fs
UGFydAorICAgICAgICA/IHNsaWRlclRodW1iVmVydGljYWwoKQorICAgICAgICA6IHNsaWRlclRo
dW1iSG9yaXpvbnRhbCgpOworCisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2Fs
Q29udGV4dChwYWludEluZm8uY29udGV4dCk7CisKKyAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMg
c3RhdGVzIHdlIHJlc3BvbmQgdG8uCisgICAgdXBkYXRlRW5hYmxlZFN0YXRlKHNsaWRlclRodW1i
Q2VsbCwgby0+cGFyZW50KCkpOworICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShzbGlkZXJUaHVtYkNl
bGwsIG8tPnBhcmVudCgpKTsKKworICAgIC8vIFVwZGF0ZSB0aGUgcHJlc3NlZCBzdGF0ZSB1c2lu
ZyB0aGUgTlNDZWxsIHRyYWNraW5nIG1ldGhvZHMsIHNpbmNlIHRoYXQncyBob3cgTlNTbGlkZXJD
ZWxsIGtlZXBzIHRyYWNrIG9mIGl0LgorICAgIGJvb2wgb2xkUHJlc3NlZDsKKyAgICBpZiAoby0+
c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAg
ICBvbGRQcmVzc2VkID0gbV9pc1NsaWRlclRodW1iVmVydGljYWxQcmVzc2VkOworICAgIGVsc2UK
KyAgICAgICAgb2xkUHJlc3NlZCA9IG1faXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkOwor
CisgICAgYm9vbCBwcmVzc2VkID0gdG9SZW5kZXJTbGlkZXIoby0+cGFyZW50KCkpLT5pbkRyYWdN
b2RlKCk7CisKKyAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1i
VmVydGljYWxQYXJ0KQorICAgICAgICBtX2lzU2xpZGVyVGh1bWJWZXJ0aWNhbFByZXNzZWQgPSBw
cmVzc2VkOworICAgIGVsc2UKKyAgICAgICAgbV9pc1NsaWRlclRodW1iSG9yaXpvbnRhbFByZXNz
ZWQgPSBwcmVzc2VkOworCisgICAgaWYgKHByZXNzZWQgIT0gb2xkUHJlc3NlZCkgeworICAgICAg
ICBpZiAocHJlc3NlZCkKKyAgICAgICAgICAgIFtzbGlkZXJUaHVtYkNlbGwgc3RhcnRUcmFja2lu
Z0F0Ok5TUG9pbnQoKSBpblZpZXc6bmlsXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW3Ns
aWRlclRodW1iQ2VsbCBzdG9wVHJhY2tpbmc6TlNQb2ludCgpIGF0Ok5TUG9pbnQoKSBpblZpZXc6
bmlsIG1vdXNlSXNVcDpZRVNdOworICAgIH0KKworICAgIEZsb2F0UmVjdCBib3VuZHMgPSByOwor
ICAgIC8vIE1ha2UgdGhlIGhlaWdodCBvZiB0aGUgdmVydGljYWwgc2xpZGVyIHNsaWdodGx5IGxh
cmdlciBzbyBOU1NsaWRlckNlbGwgd2lsbCBkcmF3IGEgdmVydGljYWwgc2xpZGVyLgorICAgIGlm
IChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCisg
ICAgICAgIGJvdW5kcy5zZXRIZWlnaHQoYm91bmRzLmhlaWdodCgpICsgdmVydGljYWxTbGlkZXJI
ZWlnaHRQYWRkaW5nICogby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpKTsKKworICAgIHBhaW50
SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+
ZWZmZWN0aXZlWm9vbSgpOworICAgIAorICAgIEZsb2F0UmVjdCB1bnpvb21lZFJlY3QgPSBib3Vu
ZHM7CisgICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7CisgICAgICAgIHVuem9vbWVkUmVjdC5z
ZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21MZXZlbCk7CisgICAgICAgIHVuem9v
bWVkUmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdodCgpIC8gem9vbUxldmVsKTsKKyAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1bnpvb21lZFJlY3QueCgpLCB1bnpv
b21lZFJlY3QueSgpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNjYWxlKEZsb2F0U2l6
ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJh
bnNsYXRlKC11bnpvb21lZFJlY3QueCgpLCAtdW56b29tZWRSZWN0LnkoKSk7CisgICAgfQorCisg
ICAgW3NsaWRlclRodW1iQ2VsbCBkcmF3V2l0aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6by0+
dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCldOworICAgIFtzbGlkZXJUaHVtYkNl
bGwgc2V0Q29udHJvbFZpZXc6bmlsXTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3Jl
KCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIE5TU2VhcmNoRmllbGRDZWxs
KiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRl
eHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKworICAgIHNldFNlYXJjaENlbGxT
dGF0ZShvLCByKTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisKKyAgICBmbG9h
dCB6b29tTGV2ZWwgPSBvLT5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7CisKKyAgICBJbnRSZWN0
IHVuem9vbWVkUmVjdCA9IHI7CisgICAgCisgICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmKSB7Cisg
ICAgICAgIHVuem9vbWVkUmVjdC5zZXRXaWR0aCh1bnpvb21lZFJlY3Qud2lkdGgoKSAvIHpvb21M
ZXZlbCk7CisgICAgICAgIHVuem9vbWVkUmVjdC5zZXRIZWlnaHQodW56b29tZWRSZWN0LmhlaWdo
dCgpIC8gem9vbUxldmVsKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSh1
bnpvb21lZFJlY3QueCgpLCB1bnpvb21lZFJlY3QueSgpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNjYWxlKEZsb2F0U2l6ZSh6b29tTGV2ZWwsIHpvb21MZXZlbCkpOworICAgICAgICBw
YWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKC11bnpvb21lZFJlY3QueCgpLCAtdW56b29tZWRS
ZWN0LnkoKSk7CisgICAgfQorCisgICAgLy8gU2V0IHRoZSBzZWFyY2ggYnV0dG9uIHRvIG5pbCBi
ZWZvcmUgZHJhd2luZy4gIFRoZW4gcmVzZXQgaXQgc28gd2UgY2FuIGRyYXcgaXQgbGF0ZXIuCisg
ICAgW3NlYXJjaCBzZXRTZWFyY2hCdXR0b25DZWxsOm5pbF07CisKKyAgICBbc2VhcmNoIGRyYXdX
aXRoRnJhbWU6TlNSZWN0KHVuem9vbWVkUmVjdCkgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3
KCktPmRvY3VtZW50VmlldygpXTsKKyNpZmRlZiBCVUlMRElOR19PTl9USUdFUgorICAgIGlmIChb
c2VhcmNoIHNob3dzRmlyc3RSZXNwb25kZXJdKQorICAgICAgICB3a0RyYXdUZXh0RmllbGRDZWxs
Rm9jdXNSaW5nKHNlYXJjaCwgTlNSZWN0KHVuem9vbWVkUmVjdCkpOworI2VuZGlmCisKKyAgICBb
c2VhcmNoIHNldENvbnRyb2xWaWV3Om5pbF07CisgICAgW3NlYXJjaCByZXNldFNlYXJjaEJ1dHRv
bkNlbGxdOworCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2VhcmNoQ2VsbFN0YXRlKFJl
bmRlck9iamVjdCogbywgY29uc3QgSW50UmVjdCYpCit7CisgICAgTlNTZWFyY2hGaWVsZENlbGwq
IHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOworCisgICAgW3NlYXJjaCBzZXRDb250cm9sU2l6ZTpj
b250cm9sU2l6ZUZvckZvbnQoby0+c3R5bGUoKSldOworCisgICAgLy8gVXBkYXRlIHRoZSB2YXJp
b3VzIHN0YXRlcyB3ZSByZXNwb25kIHRvLgorICAgIHVwZGF0ZUVuYWJsZWRTdGF0ZShzZWFyY2gs
IG8pOworICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShzZWFyY2gsIG8pOworfQorCitjb25zdCBJbnRT
aXplKiBSZW5kZXJUaGVtZU1hYzo6c2VhcmNoRmllbGRTaXplcygpIGNvbnN0Cit7CisgICAgc3Rh
dGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMCwgMjIpLCBJbnRTaXplKDAs
IDE5KSwgSW50U2l6ZSgwLCAxNykgfTsKKyAgICByZXR1cm4gc2l6ZXM7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Cit7CisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0
aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50
cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIC8vIFVzZSB0aGUgZm9udCBzaXplIHRvIGRldGVybWluZSB0aGUgaW50
cmluc2ljIHdpZHRoIG9mIHRoZSBjb250cm9sLgorICAgIHNldFNpemVGcm9tRm9udChzdHlsZSwg
c2VhcmNoRmllbGRTaXplcygpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2Vh
cmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICAvLyBPdmVycmlkZSBib3JkZXIuCisgICAgc3R5
bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgY29uc3Qgc2hvcnQgYm9yZGVyV2lkdGggPSAyICogc3R5
bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBzdHlsZS0+c2V0Qm9yZGVyTGVmdFdpZHRoKGJvcmRl
cldpZHRoKTsKKyAgICBzdHlsZS0+c2V0Qm9yZGVyTGVmdFN0eWxlKElOU0VUKTsKKyAgICBzdHls
ZS0+c2V0Qm9yZGVyUmlnaHRXaWR0aChib3JkZXJXaWR0aCk7CisgICAgc3R5bGUtPnNldEJvcmRl
clJpZ2h0U3R5bGUoSU5TRVQpOworICAgIHN0eWxlLT5zZXRCb3JkZXJCb3R0b21XaWR0aChib3Jk
ZXJXaWR0aCk7CisgICAgc3R5bGUtPnNldEJvcmRlckJvdHRvbVN0eWxlKElOU0VUKTsKKyAgICBz
dHlsZS0+c2V0Qm9yZGVyVG9wV2lkdGgoYm9yZGVyV2lkdGgpOworICAgIHN0eWxlLT5zZXRCb3Jk
ZXJUb3BTdHlsZShJTlNFVCk7ICAgIAorICAgIAorICAgIC8vIE92ZXJyaWRlIGhlaWdodC4KKyAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgc2V0U2VhcmNoRmllbGRTaXpl
KHN0eWxlKTsKKyAgICAKKyAgICAvLyBPdmVycmlkZSBwYWRkaW5nIHNpemUgdG8gbWF0Y2ggQXBw
S2l0IHRleHQgcG9zaXRpb25pbmcuCisgICAgY29uc3QgaW50IHBhZGRpbmcgPSAxICogc3R5bGUt
PmVmZmVjdGl2ZVpvb20oKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRp
bmcsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywg
Rml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsK
KyAgICAKKyAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVGb3JGb250
KHN0eWxlKTsKKyAgICBzZXRGb250RnJvbUNvbnRyb2xTaXplKHNlbGVjdG9yLCBzdHlsZSwgY29u
dHJvbFNpemUpOworCisgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
OworICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHNldFNlYXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CisK
KyAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CisKKyAgICB1
cGRhdGVQcmVzc2VkU3RhdGUoW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSwgbyk7CisKKyAgICBw
YWludEluZm8uY29udGV4dC0+c2F2ZSgpOworCisgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOworCisgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3Nl
YXJjaCBjYW5jZWxCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCkt
PmJvcmRlckJveFJlY3QoKSldOworICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdS
ZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CisKKyAgICBGbG9hdFJl
Y3QgdW56b29tZWRSZWN0KGxvY2FsQm91bmRzKTsKKyAgICBpZiAoem9vbUxldmVsICE9IDEuMGYp
IHsKKyAgICAgICAgdW56b29tZWRSZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8g
em9vbUxldmVsKTsKKyAgICAgICAgdW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3Qu
aGVpZ2h0KCkgLyB6b29tTGV2ZWwpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNs
YXRlKHVuem9vbWVkUmVjdC54KCksIHVuem9vbWVkUmVjdC55KCkpOworICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+c2NhbGUoRmxvYXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CisgICAg
ICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpv
b21lZFJlY3QueSgpKTsKKyAgICB9CisKKyAgICBbW3NlYXJjaCBjYW5jZWxCdXR0b25DZWxsXSBk
cmF3V2l0aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+
ZG9jdW1lbnRWaWV3KCldOworICAgIFtbc2VhcmNoIGNhbmNlbEJ1dHRvbkNlbGxdIHNldENvbnRy
b2xWaWV3Om5pbF07CisKKyAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKworY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6OmNhbmNlbEJ1
dHRvblNpemVzKCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9
IHsgSW50U2l6ZSgxNiwgMTMpLCBJbnRTaXplKDEzLCAxMSksIEludFNpemUoMTMsIDkpIH07Cisg
ICAgcmV0dXJuIHNpemVzOworfQorCit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1G
b250KHN0eWxlLCBjYW5jZWxCdXR0b25TaXplcygpKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChz
aXplLmhlaWdodCgpLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7Cit9CisK
K2NvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpyZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25z
dAoreworICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDE5LCAx
MyksIEludFNpemUoMTcsIDExKSwgSW50U2l6ZSgxNywgOSkgfTsKKyAgICByZXR1cm4gc2l6ZXM7
Cit9CisKK2NvbnN0IGludCBlbXB0eVJlc3VsdHNPZmZzZXQgPSA5Owordm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgSW50U2l6ZSBzaXpl
ID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKKyAgICBz
dHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSAtIGVtcHR5UmVzdWx0c09mZnNldCwg
Rml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhl
ZCkpOworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit7CisgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3RlbUZvbnQoc3R5bGUs
IHJlc3VsdHNCdXR0b25TaXplcygpKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUu
d2lkdGgoKSwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzaXplLmhlaWdo
dCgpLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7Cit9CisKK2Jvb2wgUmVu
ZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYgcikK
K3sKKyAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7Cisg
ICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgc2V0U2VhcmNoQ2VsbFN0YXRlKGlucHV0LT5yZW5kZXJlcigpLCByKTsKKworICAg
IE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2ggPSB0aGlzLT5zZWFyY2goKTsKKworICAgIGlmIChb
c2VhcmNoIHNlYXJjaE1lbnVUZW1wbGF0ZV0gIT0gbmlsKQorICAgICAgICBbc2VhcmNoIHNldFNl
YXJjaE1lbnVUZW1wbGF0ZTpuaWxdOworCisgICAgRmxvYXRSZWN0IGxvY2FsQm91bmRzID0gW3Nl
YXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1dC0+cmVuZGVyQm94KCkt
PmJvcmRlckJveFJlY3QoKSldOworICAgIGxvY2FsQm91bmRzID0gY29udmVydFRvUGFpbnRpbmdS
ZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7CisKKyAgICBbW3NlYXJj
aCBzZWFyY2hCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOmxvY2FsQm91bmRzIGluVmlldzpvLT52
aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07CisgICAgW1tzZWFyY2ggc2VhcmNo
QnV0dG9uQ2VsbF0gc2V0Q29udHJvbFZpZXc6bmlsXTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2NvbnN0IGludCByZXN1bHRzQXJyb3dXaWR0aCA9IDU7Cit2b2lkIFJlbmRlclRoZW1lTWFjOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBJbnRTaXplIHNpemUgPSBz
aXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNpemVzKCkpOworICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpICsgcmVzdWx0c0Fycm93V2lkdGgsIEZpeGVk
KSk7CisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
KyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KDApOworfQorCitib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
Tm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgpOworICAgIGlmICgh
aW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHNldFNlYXJjaENlbGxTdGF0ZShpbnB1dC0+cmVuZGVyZXIoKSwgcik7CisKKyAgICBOU1NlYXJj
aEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CisKKyAgICBpZiAoIVtzZWFyY2gg
c2VhcmNoTWVudVRlbXBsYXRlXSkKKyAgICAgICAgW3NlYXJjaCBzZXRTZWFyY2hNZW51VGVtcGxh
dGU6c2VhcmNoTWVudVRlbXBsYXRlKCldOworCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnNhdmUo
KTsKKworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsK
KworICAgIEZsb2F0UmVjdCBsb2NhbEJvdW5kcyA9IFtzZWFyY2ggc2VhcmNoQnV0dG9uUmVjdEZv
ckJvdW5kczpOU1JlY3QoaW5wdXQtPnJlbmRlckJveCgpLT5ib3JkZXJCb3hSZWN0KCkpXTsKKyAg
ICBsb2NhbEJvdW5kcyA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dC0+cmVuZGVyZXIoKSwg
bywgbG9jYWxCb3VuZHMsIHIpOworICAgIAorICAgIEludFJlY3QgdW56b29tZWRSZWN0KGxvY2Fs
Qm91bmRzKTsKKyAgICBpZiAoem9vbUxldmVsICE9IDEuMGYpIHsKKyAgICAgICAgdW56b29tZWRS
ZWN0LnNldFdpZHRoKHVuem9vbWVkUmVjdC53aWR0aCgpIC8gem9vbUxldmVsKTsKKyAgICAgICAg
dW56b29tZWRSZWN0LnNldEhlaWdodCh1bnpvb21lZFJlY3QuaGVpZ2h0KCkgLyB6b29tTGV2ZWwp
OworICAgICAgICBwYWludEluZm8uY29udGV4dC0+dHJhbnNsYXRlKHVuem9vbWVkUmVjdC54KCks
IHVuem9vbWVkUmVjdC55KCkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2NhbGUoRmxv
YXRTaXplKHpvb21MZXZlbCwgem9vbUxldmVsKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKKyAgICB9
CisKKyAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOnVuem9vbWVk
UmVjdCBpblZpZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3KCldOworICAg
IFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIHNldENvbnRyb2xWaWV3Om5pbF07CisgICAgCisg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
KworI2lmIEVOQUJMRShWSURFTykKK3R5cGVkZWYgZW51bSB7CisgICAgTWVkaWFDb250cm9sbGVy
VGhlbWVDbGFzc2ljICAgPSAxLAorICAgIE1lZGlhQ29udHJvbGxlclRoZW1lUVQgICAgICAgID0g
MgorfSBNZWRpYUNvbnRyb2xsZXJUaGVtZVN0eWxlOworCitzdGF0aWMgaW50IG1lZGlhQ29udHJv
bGxlclRoZW1lKCkKK3sKKyAgICBzdGF0aWMgY29uc3QgbG9uZyBtaW5pbXVtUXVpY2tUaW1lVmVy
c2lvbiA9IDB4MDc2MzAwMDA7IC8vIDcuNi4zCisgICAgc3RhdGljIFNJbnQzMiBxdWlja1RpbWVW
ZXJzaW9uID0gMDsKKyAgICBzdGF0aWMgaW50IGNvbnRyb2xsZXJUaGVtZSA9IC0xOworICAgIAor
ICAgIGlmIChjb250cm9sbGVyVGhlbWUgIT0gLTEpCisgICAgICAgIHJldHVybiBjb250cm9sbGVy
VGhlbWU7CisKKyAgICBjb250cm9sbGVyVGhlbWUgPSBNZWRpYUNvbnRyb2xsZXJUaGVtZUNsYXNz
aWM7CisKKyAgICBpZiAoIXF1aWNrVGltZVZlcnNpb24pIHsKKyAgICAgICAgT1NFcnIgZXJyOwor
ICAgICAgICBlcnIgPSBHZXN0YWx0KGdlc3RhbHRRdWlja1RpbWUsICZxdWlja1RpbWVWZXJzaW9u
KTsKKyAgICAgICAgaWYgKGVyciAhPSBub0VycikKKyAgICAgICAgICAgIHJldHVybiBjb250cm9s
bGVyVGhlbWU7CisgICAgfQorICAgIGlmIChxdWlja1RpbWVWZXJzaW9uIDwgbWluaW11bVF1aWNr
VGltZVZlcnNpb24pCisgICAgICAgIHJldHVybiBjb250cm9sbGVyVGhlbWU7CisKKyAgICBCb29s
ZWFuIHZhbGlkS2V5OworICAgIEJvb2xlYW4gdXNlUVRNZWRpYVVJID0gQ0ZQcmVmZXJlbmNlc0dl
dEFwcEJvb2xlYW5WYWx1ZShDRlNUUigiVXNlUXVpY2tUaW1lTWVkaWFVSSIpLCBDRlNUUigiY29t
LmFwcGxlLldlYkNvcmUiKSwgJnZhbGlkS2V5KTsKKworI2lmICFkZWZpbmVkKEJVSUxESU5HX09O
X1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQorICAgIGlmICh2YWxpZEtl
eSAmJiAhdXNlUVRNZWRpYVVJKQorICAgICAgICByZXR1cm4gY29udHJvbGxlclRoZW1lOworI2Vs
c2UKKyAgICBpZiAoIXZhbGlkS2V5IHx8ICF1c2VRVE1lZGlhVUkpCisgICAgICAgIHJldHVybiBj
b250cm9sbGVyVGhlbWU7CisjZW5kaWYKKworICAgIGNvbnRyb2xsZXJUaGVtZSA9IE1lZGlhQ29u
dHJvbGxlclRoZW1lUVQ7CisgICAgcmV0dXJuIGNvbnRyb2xsZXJUaGVtZTsKK30KKyNlbmRpZgor
Citjb25zdCBpbnQgc2xpZGVyVGh1bWJXaWR0aCA9IDE1OworY29uc3QgaW50IHNsaWRlclRodW1i
SGVpZ2h0ID0gMTU7Citjb25zdCBpbnQgbWVkaWFTbGlkZXJUaHVtYldpZHRoID0gMTM7Citjb25z
dCBpbnQgbWVkaWFTbGlkZXJUaHVtYkhlaWdodCA9IDE0OworCit2b2lkIFJlbmRlclRoZW1lTWFj
OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIGZs
b2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKTsKKyAgICBpZiAoby0+
c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgby0+
c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAg
ICAgIG8tPnN0eWxlKCktPnNldFdpZHRoKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KHNsaWRlclRo
dW1iV2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOworICAgICAgICBvLT5zdHlsZSgpLT5zZXRI
ZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oc2xpZGVyVGh1bWJIZWlnaHQgKiB6b29tTGV2
ZWwpLCBGaXhlZCkpOworICAgIH0gCisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgZWxzZSBpZiAo
by0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KSB7CisgICAg
ICAgIGludCB3aWR0aCA9IG1lZGlhU2xpZGVyVGh1bWJXaWR0aDsKKyAgICAgICAgaW50IGhlaWdo
dCA9IG1lZGlhU2xpZGVyVGh1bWJIZWlnaHQ7CisgICAgICAgIAorICAgICAgICBpZiAobWVkaWFD
b250cm9sbGVyVGhlbWUoKSA9PSBNZWRpYUNvbnRyb2xsZXJUaGVtZVFUKSB7CisgICAgICAgICAg
ICBDR1NpemUgIHNpemU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdrTWVhc3VyZU1lZGlh
VUlQYXJ0KE1lZGlhU2xpZGVyVGh1bWIsIE1lZGlhQ29udHJvbGxlclRoZW1lUVQsIE5VTEwsICZz
aXplKTsKKyAgICAgICAgICAgIHdpZHRoID0gc2l6ZS53aWR0aDsKKyAgICAgICAgICAgIGhlaWdo
dCA9IHNpemUuaGVpZ2h0OworICAgICAgICB9CisKKyAgICAgICAgby0+c3R5bGUoKS0+c2V0V2lk
dGgoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4od2lkdGggKiB6b29tTGV2ZWwpLCBGaXhlZCkpOwor
ICAgICAgICBvLT5zdHlsZSgpLT5zZXRIZWlnaHQoTGVuZ3RoKHN0YXRpY19jYXN0PGludD4oaGVp
Z2h0ICogem9vbUxldmVsKSwgRml4ZWQpKTsKKyAgICB9CisjZW5kaWYKK30KKworCisjaWYgRU5B
QkxFKFZJREVPKQorCitlbnVtIFdLTWVkaWFDb250cm9sbGVyVGhlbWVTdGF0ZSB7IAorICAgIE1l
ZGlhVUlQYXJ0RGlzYWJsZWRGbGFnID0gMSA8PCAwLAorICAgIE1lZGlhVUlQYXJ0UHJlc3NlZEZs
YWcgPSAxIDw8IDEsCisgICAgTWVkaWFVSVBhcnREcmF3RW5kQ2Fwc0ZsYWcgPSAxIDw8IDMsCit9
OworCitzdGF0aWMgdW5zaWduZWQgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKE5vZGUqIG5vZGUp
Cit7CisgICAgdW5zaWduZWQgZmxhZ3MgPSAwOworCisgICAgaWYgKG5vZGUtPmRpc2FibGVkKCkp
CisgICAgICAgIGZsYWdzIHw9IE1lZGlhVUlQYXJ0RGlzYWJsZWRGbGFnOworICAgIGVsc2UgaWYg
KG5vZGUtPmFjdGl2ZSgpKQorICAgICAgICBmbGFncyB8PSBNZWRpYVVJUGFydFByZXNzZWRGbGFn
OworICAgIHJldHVybiBmbGFnczsKK30KKworLy8gVXRpbGl0eSB0byBzY2FsZSB3aGVuIHRoZSBV
SSBwYXJ0IGFyZSBub3Qgc2NhbGVkIGJ5IHdrRHJhd01lZGlhVUlQYXJ0CitzdGF0aWMgRmxvYXRS
ZWN0IGdldFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCAmb3JpZ2luYWxSZWN0KQoreworICAgIGZsb2F0IHpvb21MZXZlbCA9IG8tPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKTsKKyAgICBGbG9hdFJlY3QgdW56b29tZWRSZWN0KG9yaWdpbmFsUmVjdCk7
CisgICAgaWYgKHpvb21MZXZlbCAhPSAxLjBmICYmIG1lZGlhQ29udHJvbGxlclRoZW1lKCkgPT0g
TWVkaWFDb250cm9sbGVyVGhlbWVRVCkgeworICAgICAgICB1bnpvb21lZFJlY3Quc2V0V2lkdGgo
dW56b29tZWRSZWN0LndpZHRoKCkgLyB6b29tTGV2ZWwpOworICAgICAgICB1bnpvb21lZFJlY3Qu
c2V0SGVpZ2h0KHVuem9vbWVkUmVjdC5oZWlnaHQoKSAvIHpvb21MZXZlbCk7CisgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUodW56b29tZWRSZWN0LngoKSwgdW56b29tZWRSZWN0
LnkoKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zY2FsZShGbG9hdFNpemUoem9vbUxl
dmVsLCB6b29tTGV2ZWwpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgt
dW56b29tZWRSZWN0LngoKSwgLXVuem9vbWVkUmVjdC55KCkpOworICAgIH0KKyAgICByZXR1cm4g
dW56b29tZWRSZWN0OworfQorCisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFGdWxs
c2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBOb2RlKiBub2RlID0gby0+
bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTG9j
YWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7
CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFGdWxsc2NyZWVuQnV0dG9uLCBtZWRpYUNvbnRy
b2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdl
dE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBtZWRpYU5vZGUg
PSBub2RlID8gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOworICAgIGlmICghbWVkaWFO
b2RlIHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5o
YXNUYWdOYW1lKGF1ZGlvVGFnKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChN
ZWRpYUNvbnRyb2xNdXRlQnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250
cm9sTXV0ZUJ1dHRvbkVsZW1lbnQqPihub2RlKSkgeworICAgICAgICBMb2NhbEN1cnJlbnRHcmFw
aGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKyAgICAgICAgd2tE
cmF3TWVkaWFVSVBhcnQoYnRuLT5kaXNwbGF5VHlwZSgpLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgp
LCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0
U3RhdGVGbGFncyhub2RlKSk7CisKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBOb2RlKiBtZWRpYU5vZGUgPSBu
b2RlID8gbm9kZS0+c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOworICAgIGlmICghbWVkaWFOb2Rl
IHx8ICghbWVkaWFOb2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNU
YWdOYW1lKGF1ZGlvVGFnKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChNZWRp
YUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9s
UGxheUJ1dHRvbkVsZW1lbnQqPihub2RlKSkgeworICAgICAgICBMb2NhbEN1cnJlbnRHcmFwaGlj
c0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKyAgICAgICAgd2tEcmF3
TWVkaWFVSVBhcnQoYnRuLT5kaXNwbGF5VHlwZSgpLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBw
YWludEluZm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3Rh
dGVGbGFncyhub2RlKSk7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikK
K3sKKyAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29u
dGV4dChwYWludEluZm8uY29udGV4dCk7CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVr
QmFja0J1dHRvbiwgbWVkaWFDb250cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLCByLCBnZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNlZWtG
b3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBOb2RlKiBub2RlID0gby0+
bm9kZSgpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTG9j
YWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7
CisgICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFTZWVrRm9yd2FyZEJ1dHRvbiwgbWVkaWFDb250
cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCByLCBn
ZXRNZWRpYVVJUGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIE5vZGUqIG1lZGlhTm9k
ZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CisgICAgaWYgKCFtZWRp
YU5vZGUgfHwgKCFtZWRpYU5vZGUtPmhhc1RhZ05hbWUodmlkZW9UYWcpICYmICFtZWRpYU5vZGUt
Pmhhc1RhZ05hbWUoYXVkaW9UYWcpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRN
TE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTE1lZGlhRWxlbWVu
dCo+KG1lZGlhTm9kZSk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiB0aW1lUmFuZ2VzID0gbWVkaWFFbGVtZW50
LT5idWZmZXJlZCgpOworICAgIEV4Y2VwdGlvbkNvZGUgaWdub3JlZEV4Y2VwdGlvbjsKKyAgICBm
bG9hdCB0aW1lTG9hZGVkID0gdGltZVJhbmdlcy0+bGVuZ3RoKCkgPyB0aW1lUmFuZ2VzLT5lbmQo
MCwgaWdub3JlZEV4Y2VwdGlvbikgOiAwOworICAgIGZsb2F0IGN1cnJlbnRUaW1lID0gbWVkaWFF
bGVtZW50LT5jdXJyZW50VGltZSgpOworICAgIGZsb2F0IGR1cmF0aW9uID0gbWVkaWFFbGVtZW50
LT5kdXJhdGlvbigpOworICAgIGlmIChpc25hbihkdXJhdGlvbikpCisgICAgICAgIGR1cmF0aW9u
ID0gMDsKKyAKKyAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIEZsb2F0UmVjdCB1
bnpvb21lZFJlY3QgPSBnZXRVbnpvb21lZFJlY3RBbmRBZGp1c3RDdXJyZW50Q29udGV4dChvLCBw
YWludEluZm8sIHIpOworICAgIHdrRHJhd01lZGlhU2xpZGVyVHJhY2sobWVkaWFDb250cm9sbGVy
VGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCB1bnpvb21lZFJl
Y3QsIAorICAgICAgICB0aW1lTG9hZGVkLCBjdXJyZW50VGltZSwgZHVyYXRpb24sIGdldE1lZGlh
VUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgCisgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJl
c3RvcmUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgTm9kZSogbm9k
ZSA9IG8tPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNv
bnRleHQpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhU2xpZGVyVGh1bWIsIG1lZGlhQ29u
dHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwg
Z2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9Cisg
ICAgCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhUmV3aW5kQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcikKK3sKKyAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOworICAgIGlmICghbm9k
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIExvY2FsQ3VycmVudEdyYXBoaWNz
Q29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOworICAgIHdrRHJhd01lZGlh
VUlQYXJ0KE1lZGlhUmV3aW5kQnV0dG9uLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludElu
Zm8uY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFn
cyhub2RlKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludE1lZGlhUmV0dXJuVG9SZWFsdGltZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7Cisg
ICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250
ZXh0KHBhaW50SW5mby5jb250ZXh0KTsKKyAgICB3a0RyYXdNZWRpYVVJUGFydChNZWRpYVJldHVy
blRvUmVhbHRpbWVCdXR0b24sIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUp
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKworYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRN
ZWRpYUNvbnRyb2xzQmFja2dyb3VuZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgTm9kZSog
bm9kZSA9IG8tPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIExvY2FsQ3VycmVudEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZv
LmNvbnRleHQpOworICAgIHdrRHJhd01lZGlhVUlQYXJ0KE1lZGlhVGltZWxpbmVDb250YWluZXIs
IG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgciwgZ2V0TWVkaWFVSVBhcnRTdGF0ZUZsYWdzKG5vZGUpKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFDdXJyZW50VGltZShSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHIpCit7CisgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKKyAgICBpZiAo
IW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBhaW50SW5mby5jb250ZXh0LT5z
YXZlKCk7CisgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVjdEFuZEFk
anVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7CisgICAgd2tEcmF3TWVkaWFVSVBh
cnQoTWVkaWFDdXJyZW50VGltZURpc3BsYXksIG1lZGlhQ29udHJvbGxlclRoZW1lKCksIHBhaW50
SW5mby5jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgdW56b29tZWRSZWN0LCBnZXRNZWRpYVVJ
UGFydFN0YXRlRmxhZ3Mobm9kZSkpOworICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlh
VGltZVJlbWFpbmluZyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgTm9kZSogbm9kZSA9IG8t
Pm5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBh
aW50SW5mby5jb250ZXh0LT5zYXZlKCk7CisgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGdl
dFVuem9vbWVkUmVjdEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7Cisg
ICAgd2tEcmF3TWVkaWFVSVBhcnQoTWVkaWFUaW1lUmVtYWluaW5nRGlzcGxheSwgbWVkaWFDb250
cm9sbGVyVGhlbWUoKSwgcGFpbnRJbmZvLmNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCB1bnpv
b21lZFJlY3QsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CisgICAgcGFpbnRJbmZv
LmNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBSZW5k
ZXJUaGVtZU1hYzo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCit7CisgICAgaWYgKG1l
ZGlhQ29udHJvbGxlclRoZW1lKCkgPT0gTWVkaWFDb250cm9sbGVyVGhlbWVRVCkgCisgICAgICAg
IHJldHVybiBTdHJpbmcobWVkaWFDb250cm9sc1FUVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9m
KG1lZGlhQ29udHJvbHNRVFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKyNlbmRpZgorCitOU1BvcFVwQnV0dG9uQ2VsbCogUmVuZGVy
VGhlbWVNYWM6OnBvcHVwQnV0dG9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcG9wdXBCdXR0b24p
IHsKKyAgICAgICAgbV9wb3B1cEJ1dHRvbi5hZG9wdE5TKFtbTlNQb3BVcEJ1dHRvbkNlbGwgYWxs
b2NdIGluaXRUZXh0Q2VsbDpAIiIgcHVsbHNEb3duOk5PXSk7CisgICAgICAgIFttX3BvcHVwQnV0
dG9uLmdldCgpIHNldFVzZXNJdGVtRnJvbU1lbnU6Tk9dOworICAgICAgICBbbV9wb3B1cEJ1dHRv
bi5nZXQoKSBzZXRGb2N1c1JpbmdUeXBlOk5TRm9jdXNSaW5nVHlwZUV4dGVyaW9yXTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIG1fcG9wdXBCdXR0b24uZ2V0KCk7Cit9CisKK05TU2VhcmNoRmll
bGRDZWxsKiBSZW5kZXJUaGVtZU1hYzo6c2VhcmNoKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fc2Vh
cmNoKSB7CisgICAgICAgIG1fc2VhcmNoLmFkb3B0TlMoW1tOU1NlYXJjaEZpZWxkQ2VsbCBhbGxv
Y10gaW5pdFRleHRDZWxsOkAiIl0pOworICAgICAgICBbbV9zZWFyY2guZ2V0KCkgc2V0QmV6ZWxT
dHlsZTpOU1RleHRGaWVsZFJvdW5kZWRCZXplbF07CisgICAgICAgIFttX3NlYXJjaC5nZXQoKSBz
ZXRCZXplbGVkOllFU107CisgICAgICAgIFttX3NlYXJjaC5nZXQoKSBzZXRFZGl0YWJsZTpZRVNd
OworICAgICAgICBbbV9zZWFyY2guZ2V0KCkgc2V0Rm9jdXNSaW5nVHlwZTpOU0ZvY3VzUmluZ1R5
cGVFeHRlcmlvcl07CisgICAgfQorCisgICAgcmV0dXJuIG1fc2VhcmNoLmdldCgpOworfQorCitO
U01lbnUqIFJlbmRlclRoZW1lTWFjOjpzZWFyY2hNZW51VGVtcGxhdGUoKSBjb25zdAoreworICAg
IGlmICghbV9zZWFyY2hNZW51VGVtcGxhdGUpCisgICAgICAgIG1fc2VhcmNoTWVudVRlbXBsYXRl
LmFkb3B0TlMoW1tOU01lbnUgYWxsb2NdIGluaXRXaXRoVGl0bGU6QCIiXSk7CisKKyAgICByZXR1
cm4gbV9zZWFyY2hNZW51VGVtcGxhdGUuZ2V0KCk7Cit9CisKK05TU2xpZGVyQ2VsbCogUmVuZGVy
VGhlbWVNYWM6OnNsaWRlclRodW1iSG9yaXpvbnRhbCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Ns
aWRlclRodW1iSG9yaXpvbnRhbCkgeworICAgICAgICBtX3NsaWRlclRodW1iSG9yaXpvbnRhbC5h
ZG9wdE5TKFtbTlNTbGlkZXJDZWxsIGFsbG9jXSBpbml0XSk7CisgICAgICAgIFttX3NsaWRlclRo
dW1iSG9yaXpvbnRhbC5nZXQoKSBzZXRUaXRsZTpuaWxdOworICAgICAgICBbbV9zbGlkZXJUaHVt
Ykhvcml6b250YWwuZ2V0KCkgc2V0U2xpZGVyVHlwZTpOU0xpbmVhclNsaWRlcl07CisgICAgICAg
IFttX3NsaWRlclRodW1iSG9yaXpvbnRhbC5nZXQoKSBzZXRDb250cm9sU2l6ZTpOU1NtYWxsQ29u
dHJvbFNpemVdOworICAgICAgICBbbV9zbGlkZXJUaHVtYkhvcml6b250YWwuZ2V0KCkgc2V0Rm9j
dXNSaW5nVHlwZTpOU0ZvY3VzUmluZ1R5cGVFeHRlcmlvcl07CisgICAgfQorICAgIAorICAgIHJl
dHVybiBtX3NsaWRlclRodW1iSG9yaXpvbnRhbC5nZXQoKTsKK30KKworTlNTbGlkZXJDZWxsKiBS
ZW5kZXJUaGVtZU1hYzo6c2xpZGVyVGh1bWJWZXJ0aWNhbCgpIGNvbnN0Cit7CisgICAgaWYgKCFt
X3NsaWRlclRodW1iVmVydGljYWwpIHsKKyAgICAgICAgbV9zbGlkZXJUaHVtYlZlcnRpY2FsLmFk
b3B0TlMoW1tOU1NsaWRlckNlbGwgYWxsb2NdIGluaXRdKTsKKyAgICAgICAgW21fc2xpZGVyVGh1
bWJWZXJ0aWNhbC5nZXQoKSBzZXRUaXRsZTpuaWxdOworICAgICAgICBbbV9zbGlkZXJUaHVtYlZl
cnRpY2FsLmdldCgpIHNldFNsaWRlclR5cGU6TlNMaW5lYXJTbGlkZXJdOworICAgICAgICBbbV9z
bGlkZXJUaHVtYlZlcnRpY2FsLmdldCgpIHNldENvbnRyb2xTaXplOk5TU21hbGxDb250cm9sU2l6
ZV07CisgICAgICAgIFttX3NsaWRlclRodW1iVmVydGljYWwuZ2V0KCkgc2V0Rm9jdXNSaW5nVHlw
ZTpOU0ZvY3VzUmluZ1R5cGVFeHRlcmlvcl07CisgICAgfQorICAgIAorICAgIHJldHVybiBtX3Ns
aWRlclRodW1iVmVydGljYWwuZ2V0KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQkocmV2aXNp
b24gNDgzOTIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlLCBJbmMuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTE4LDkgKzE5LDEwIEBACiAgKi8KIAogI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJSZW5kZXJUaGVtZU1hYy5oIgorI2ltcG9ydCAiUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5o
IgogCiAjaW1wb3J0ICJCaXRtYXBJbWFnZS5oIgorI2ltcG9ydCAiQ2hyb21pdW1CcmlkZ2UuaCIK
ICNpbXBvcnQgIkNvbG9yTWFjLmgiCiAjaW1wb3J0ICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW1w
b3J0ICJDU1NWYWx1ZUtleXdvcmRzLmgiCkBAIC0zOCw3ICs0MCw2IEBACiAjaW1wb3J0ICJSZW5k
ZXJTbGlkZXIuaCIKICNpbXBvcnQgIlJlbmRlclZpZXcuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZl
ci5oIgotI2ltcG9ydCAiVGltZVJhbmdlcy5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUludGVy
ZmFjZS5oIgogI2ltcG9ydCAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKICNpbXBvcnQgPENhcmJv
bi9DYXJib24uaD4KQEAgLTU0LDYgKzU1LDIzIEBAIHR5cGVkZWYgdW5zaWduZWQgTlNVSW50ZWdl
cjsKIAogdXNpbmcgc3RkOjptaW47CiAKKy8vIFRoaXMgZmlsZSAoYW5kIGl0cyBhc3NvY2lhdGVk
IC5oIGZpbGUpIGlzIGEgY2xvbmUgb2YgUmVuZGVyVGhlbWVNYWMubW0uCisvLyBCZWNhdXNlIHRo
ZSBvcmlnaW5hbCBmaWxlIGlzIGRlc2lnbmVkIHRvIHJ1biBpbi1wcm9jZXNzIGluc2lkZSBhIENv
Y29hIHZpZXcsCisvLyB3ZSBtdXN0IG1haW50YWluIGEgZm9yay4gUGxlYXNlIG1haW50YWluIHRo
aXMgZmlsZSBieSBwZXJmb3JtaW5nIHBhcmFsbGVsCisvLyBjaGFuZ2VzIHRvIGl0LgorLy8KKy8v
IFRoZSBvbmx5IGNoYW5nZXMgZnJvbSBSZW5kZXJUaGVtZU1hYyBzaG91bGQgYmU6CisvLyAtIFRo
ZSBjbGFzc25hbWUgY2hhbmdlIGZyb20gUmVuZGVyVGhlbWVNYWMgdG8gUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYy4KKy8vIC0gVGhlIGludHJvZHVjdGlvbiBvZiBSVENNRmxpcHBlZFZpZXcgYW5kIEZs
aXBwZWRWaWV3KCkgYW5kIGl0cyB1c2UgYXMgdGhlCisvLyAgIHBhcmVudCB2aWV3IGZvciBjZWxs
IHJlbmRlcmluZy4KKy8vIC0gSW4gcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpLCB0aGUgdXNlIG9m
IENocm9taXVtQnJpZGdlIHRvIGRldGVybWluZSBpZgorLy8gICB3ZSdyZSBpbiBsYXlvdXQgdGVz
dCBtb2RlLgorLy8gLSB1cGRhdGVBY3RpdmVTdGF0ZSgpIGFuZCBpdHMgdXNlIHRvIHVwZGF0ZSB0
aGUgY2VsbHMnIHZpc3VhbCBhcHBlYXJhbmNlLgorLy8KKy8vIEZvciBhbGwgb3RoZXIgZGlmZmVy
ZW5jZXMsIGlmIGl0IHdhcyBpbnRyb2R1Y2VkIGluIHRoaXMgZmlsZSwgdGhlbiB0aGUKKy8vIG1h
aW50YWluZXIgZm9yZ290IHRvIGluY2x1ZGUgaXQgaW4gdGhlIGxpc3Q7IG90aGVyd2lzZSBpdCBp
cyBhbiB1cGRhdGUgdGhhdAorLy8gc2hvdWxkIGhhdmUgYmVlbiBhcHBsaWVkIHRvIHRoaXMgZmls
ZSBidXQgd2FzIG5vdC4KKwogLy8gVGhlIG1ldGhvZHMgaW4gdGhpcyBmaWxlIGFyZSBzcGVjaWZp
YyB0byB0aGUgTWFjIE9TIFggcGxhdGZvcm0uCiAKIC8vIEZJWE1FOiBUaGUgcGxhdGZvcm0taW5k
ZXBlbmRlbnQgY29kZSBpbiB0aGlzIGNsYXNzIHNob3VsZCBiZSBmYWN0b3JlZCBvdXQgYW5kIG1l
cmdlZCB3aXRoIFJlbmRlclRoZW1lU2FmYXJpLiAKQEAgLTg2LDYgKzEwNCwyNiBAQCB1c2luZyBz
dGQ6Om1pbjsKIAogQGVuZAogCitAaW50ZXJmYWNlIFJUQ01GbGlwcGVkVmlldyA6IE5TVmlldwor
e30KKworLSAoQk9PTClpc0ZsaXBwZWQ7CistIChOU1RleHQgKiljdXJyZW50RWRpdG9yOworCitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBSVENNRmxpcHBlZFZpZXcKKworLSAoQk9PTClpc0ZsaXBw
ZWQgeworICAgIHJldHVybiBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0Zs
aXBwZWRdOworfQorCistIChOU1RleHQgKiljdXJyZW50RWRpdG9yIHsKKyAgICByZXR1cm4gbmls
OworfQorCitAZW5kCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKQEAgLTEwNCwxOCArMTQyLDI4IEBAIGVudW0gewogICAgIGxlZnRQYWRkaW5nCiB9
OwogCisvLyBJbiBTbm93IExlb3BhcmQsIG1hbnkgY2VsbHMgb25seSBjaGVjayB0byBzZWUgaWYg
dGhlIHZpZXcgdGhleSdyZSBwYXNzZWQgaXMKKy8vIGZsaXBwZWQsIGFuZCBpZiBhIG5pbCB2aWV3
IGlzIHBhc3NlZCwgbmVnbGVjdCB0byBjaGVjayBpZiB0aGUgY3VycmVudAorLy8gZ3JhcGhpY3Mg
Y29udGV4dCBpcyBmbGlwcGVkLiBUaHVzIHdlIHBhc3MgYSBzaGFtIHZpZXcgdG8gdGhlbSwgb25l
IHdob3NlCisvLyBmbGlwcGVkIHN0YXRlIGp1c3QgcmVmbGVjdHMgdGhlIHN0YXRlIG9mIHRoZSBj
b250ZXh0LgorTlNWaWV3KiBGbGlwcGVkVmlldygpCit7CisgICAgc3RhdGljIE5TVmlldyogdmll
dyA9IFtbUlRDTUZsaXBwZWRWaWV3IGFsbG9jXSBpbml0XTsKKyAgICByZXR1cm4gdmlldzsKK30K
KwogUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdl
KikKIHsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIHJ0ID0gUmVuZGVyVGhlbWVNYWM6OmNyZWF0
ZSgpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIHJ0ID0gUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6Y3JlYXRlKCkucmVsZWFzZVJlZigpOwogICAgIHJldHVybiBydDsKIH0K
IAotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVNYWM6OmNyZWF0ZSgpCitQYXNz
UmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpjcmVhdGUoKQogewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVyVGhlbWVNYWMpOworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYyk7CiB9CiAKLVJlbmRlclRoZW1lTWFjOjpS
ZW5kZXJUaGVtZU1hYygpCitSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpSZW5kZXJUaGVtZUNocm9t
aXVtTWFjKCkKICAgICA6IG1faXNTbGlkZXJUaHVtYkhvcml6b250YWxQcmVzc2VkKGZhbHNlKQog
ICAgICwgbV9pc1NsaWRlclRodW1iVmVydGljYWxQcmVzc2VkKGZhbHNlKQogICAgICwgbV9ub3Rp
ZmljYXRpb25PYnNlcnZlcihBZG9wdE5TLCBbW1dlYkNvcmVSZW5kZXJUaGVtZU5vdGlmaWNhdGlv
bk9ic2VydmVyIGFsbG9jXSBpbml0V2l0aFRoZW1lOnRoaXNdKQpAQCAtMTI2LDQ4ICsxNzQsNDgg
QEAgUmVuZGVyVGhlbWVNYWM6OlJlbmRlclRoZW1lTWFjKCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3Q6bmlsXTsKIH0KIAot
UmVuZGVyVGhlbWVNYWM6On5SZW5kZXJUaGVtZU1hYygpCitSZW5kZXJUaGVtZUNocm9taXVtTWFj
Ojp+UmVuZGVyVGhlbWVDaHJvbWl1bU1hYygpCiB7CiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRl
ciBkZWZhdWx0Q2VudGVyXSByZW1vdmVPYnNlcnZlcjptX25vdGlmaWNhdGlvbk9ic2VydmVyLmdl
dCgpXTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKICAgICBOU0Nv
bG9yKiBjb2xvciA9IFtbTlNDb2xvciBzZWxlY3RlZFRleHRCYWNrZ3JvdW5kQ29sb3JdIGNvbG9y
VXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOwogICAgIHJldHVybiBD
b2xvcihzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIHJlZENvbXBvbmVudF0pLCBzdGF0
aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIGdyZWVuQ29tcG9uZW50XSksIHN0YXRpY19jYXN0
PGludD4oMjU1LjAgKiBbY29sb3IgYmx1ZUNvbXBvbmVudF0pKTsKIH0KIAotQ29sb3IgUmVuZGVy
VGhlbWVNYWM6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7CiAgICAgTlNDb2xvciogY29sb3IgPSBbW05TQ29s
b3Igc2Vjb25kYXJ5U2VsZWN0ZWRDb250cm9sQ29sb3JdIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFt
ZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdOwogICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxp
bnQ+KDI1NS4wICogW2NvbG9yIHJlZENvbXBvbmVudF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NS4w
ICogW2NvbG9yIGdyZWVuQ29tcG9uZW50XSksIHN0YXRpY19jYXN0PGludD4oMjU1LjAgKiBbY29s
b3IgYmx1ZUNvbXBvbmVudF0pKTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3Jt
QWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CitDb2xvciBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdAogewogICAgIE5TQ29sb3IqIGNvbG9yID0gW1tOU0NvbG9yIGFsdGVy
bmF0ZVNlbGVjdGVkQ29udHJvbENvbG9yXSBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNEZXZp
Y2VSR0JDb2xvclNwYWNlXTsKICAgICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PigyNTUu
MCAqIFtjb2xvciByZWRDb21wb25lbnRdKSwgc3RhdGljX2Nhc3Q8aW50PigyNTUuMCAqIFtjb2xv
ciBncmVlbkNvbXBvbmVudF0pLCBzdGF0aWNfY2FzdDxpbnQ+KDI1NS4wICogW2NvbG9yIGJsdWVD
b21wb25lbnRdKSk7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVD
aHJvbWl1bU1hYzo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3QKIHsKICAgICByZXR1cm4gQ29sb3I6OndoaXRlOwogfQogCi1Db2xvciBSZW5kZXJU
aGVtZU1hYzo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1JbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBDb2xv
cjo6YmxhY2s7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUZvY3VzUmluZ0Nv
bG9yKCkgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBsYXRmb3JtRm9jdXNS
aW5nQ29sb3IoKSBjb25zdAogewotICAgIGlmICh1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigp
KQorICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKICAgICAgICAgcmV0
dXJuIG9sZEFxdWFGb2N1c1JpbmdDb2xvcigpOwogCiAgICAgcmV0dXJuIHN5c3RlbUNvbG9yKENT
U1ZhbHVlV2Via2l0Rm9jdXNSaW5nQ29sb3IpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZU1hYzo6
cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAor
Q29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewogICAgIHJldHVybiBwbGF0Zm9ybUluYWN0
aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiB9CkBAIC0xOTksNyArMjQ3LDcgQEAgc3Rh
dGljIEZvbnRXZWlnaHQgdG9Gb250V2VpZ2h0KE5TSW50ZWdlcgogICAgIHJldHVybiBmb250V2Vp
Z2h0c1thcHBLaXRGb250V2VpZ2h0IC0gMV07CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnN5
c3RlbUZvbnQoaW50IGNzc1ZhbHVlSWQsIEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzeXN0ZW1Gb250KGludCBjc3NW
YWx1ZUlkLCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKIHsKICAgICBE
RUZJTkVfU1RBVElDX0xPQ0FMKEZvbnREZXNjcmlwdGlvbiwgc3lzdGVtRm9udCwgKCkpOwogICAg
IERFRklORV9TVEFUSUNfTE9DQUwoRm9udERlc2NyaXB0aW9uLCBzbWFsbFN5c3RlbUZvbnQsICgp
KTsKQEAgLTMyOCwxMyArMzc2LDEzIEBAIHN0YXRpYyBSR0JBMzIgbWVudUJhY2tncm91bmRDb2xv
cigpCiAgICAgcmV0dXJuIG1ha2VSR0IocGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSk7CiB9
CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCkKK3ZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKQogewogICAg
IG1fc3lzdGVtQ29sb3JDYWNoZS5jbGVhcigpOwogICAgIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUNv
bG9yc0RpZENoYW5nZSgpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZU1hYzo6c3lzdGVtQ29sb3Io
aW50IGNzc1ZhbHVlSWQpIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzeXN0
ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3QKIHsKICAgICBpZiAobV9zeXN0ZW1Db2xvckNh
Y2hlLmNvbnRhaW5zKGNzc1ZhbHVlSWQpKQogICAgICAgICByZXR1cm4gbV9zeXN0ZW1Db2xvckNh
Y2hlLmdldChjc3NWYWx1ZUlkKTsKQEAgLTQ0Nyw3ICs0OTUsNyBAQCBDb2xvciBSZW5kZXJUaGVt
ZU1hYzo6c3lzdGVtQ29sb3IoaW50IGNzCiAgICAgcmV0dXJuIGNvbG9yOwogfQogCi1ib29sIFJl
bmRlclRoZW1lTWFjOjppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBCb3JkZXJEYXRhJiBib3JkZXIsCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6Omlz
Q29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEm
IGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGaWxs
TGF5ZXImIGJhY2tncm91bmQsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7
CiAgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gVGV4dEZpZWxkUGFydCB8fCBzdHlsZS0+
YXBwZWFyYW5jZSgpID09IFRleHRBcmVhUGFydCB8fCBzdHlsZS0+YXBwZWFyYW5jZSgpID09IExp
c3Rib3hQYXJ0KQpAQCAtNDYzLDcgKzUxMSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OmlzQ29u
dHJvbFN0eWxlZChjb24KICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChz
dHlsZSwgYm9yZGVyLCBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kQ29sb3IpOwogfQogCi12b2lkIFJl
bmRlclRoZW1lTWFjOjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIElu
dFJlY3QmIHIpCit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFJlcGFpbnRSZWN0
KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcikKIHsKICAgICBDb250cm9sUGFydCBw
YXJ0ID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOwogICAgIApAQCAtNDkyLDcgKzU0MCw3IEBA
IHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFJlcGFpbnRSZWN0KGMKICAgICB9CiB9CiAKLUlu
dFJlY3QgUmVuZGVyVGhlbWVNYWM6OmluZmxhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIsIGNvbnN0
IEludFNpemUmIHNpemUsIGNvbnN0IGludCogbWFyZ2lucywgZmxvYXQgem9vbUxldmVsKSBjb25z
dAorSW50UmVjdCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjppbmZsYXRlUmVjdChjb25zdCBJbnRS
ZWN0JiByLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBpbnQqIG1hcmdpbnMsIGZsb2F0IHpv
b21MZXZlbCkgY29uc3QKIHsKICAgICAvLyBPbmx5IGRvIHRoZSBpbmZsYXRpb24gaWYgdGhlIGF2
YWlsYWJsZSB3aWR0aC9oZWlnaHQgYXJlIHRvbyBzbWFsbC4gIE90aGVyd2lzZSB0cnkgdG8KICAg
ICAvLyBmaXQgdGhlIGdsb3cvY2hlY2sgc3BhY2UgaW50byB0aGUgYXZhaWxhYmxlIGJveCdzIHdp
ZHRoL2hlaWdodC4KQEAgLTUxMCw3ICs1NTgsNyBAQCBJbnRSZWN0IFJlbmRlclRoZW1lTWFjOjpp
bmZsYXRlUmVjdChjb25zCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRmxvYXRSZWN0IFJlbmRl
clRoZW1lTWFjOjpjb252ZXJ0VG9QYWludGluZ1JlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBpbnB1
dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgY29uc3QgRmxvYXRS
ZWN0JiBpbnB1dFJlY3QsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0CitGbG9hdFJlY3QgUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6Y29udmVydFRvUGFpbnRpbmdSZWN0KGNvbnN0IFJlbmRlck9iamVj
dCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIGNvbnN0
IEZsb2F0UmVjdCYgaW5wdXRSZWN0LCBjb25zdCBJbnRSZWN0JiByKSBjb25zdAogewogICAgIEZs
b2F0UmVjdCBwYXJ0UmVjdChpbnB1dFJlY3QpOwogICAgIApAQCAtNTMyLDcgKzU4MCwyNiBAQCBG
bG9hdFJlY3QgUmVuZGVyVGhlbWVNYWM6OmNvbnZlcnRUb1BhaW50CiAgICAgcmV0dXJuIHBhcnRS
ZWN0OwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDaGVja2VkU3RhdGUoTlNDZWxs
KiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCisvLyBVcGRhdGVzIHRoZSBjb250cm9sIHRp
bnQgKGEuay5hLiBhY3RpdmUgc3RhdGUpIG9mIHxjZWxsfCAoZnJvbSB8b3wpLgorLy8gSW4gdGhl
IENocm9taXVtIHBvcnQsIHRoZSByZW5kZXJlciBydW5zIGFzIGEgYmFja2dyb3VuZCBwcm9jZXNz
IGFuZCBjb250cm9scycKKy8vIE5TQ2VsbChzKSBsYWNrIGEgcGFyZW50IE5TVmlldy4gVGhlcmVm
b3JlIGNvbnRyb2xzIGRvbid0IGhhdmUgdGhlaXIgdGludAorLy8gY29sb3IgdXBkYXRlZCBjb3Jy
ZWN0bHkgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgYWN0aXZhdGVkL2RlYWN0aXZhdGVkLgorLy8g
Rm9jdXNDb250cm9sbGVyJ3Mgc2V0QWN0aXZlKCkgaXMgY2FsbGVkIHdoZW4gdGhlIGFwcGxpY2F0
aW9uIGlzCisvLyBhY3RpdmF0ZWQvZGVhY3RpdmF0ZWQsIHdoaWNoIGNhdXNlcyBhIHJlcGFpbnQg
YXQgd2hpY2ggdGltZSB0aGlzIGNvZGUgaXMKKy8vIGNhbGxlZC4KKy8vIFRoaXMgZnVuY3Rpb24g
c2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgZHJhd2luZyBhbnkgTlNDZWxsLWRlcml2ZWQgY29udHJv
bHMsCisvLyB1bmxlc3MgeW91J3JlIHN1cmUgaXQgaXNuJ3QgbmVlZGVkLgordm9pZCBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjp1cGRhdGVBY3RpdmVTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJl
bmRlck9iamVjdCogbykKK3sKKyAgICBOU0NvbnRyb2xUaW50IG9sZFRpbnQgPSBbY2VsbCBjb250
cm9sVGludF07CisgICAgTlNDb250cm9sVGludCB0aW50ID0gaXNBY3RpdmUobykgPyBbTlNDb2xv
ciBjdXJyZW50Q29udHJvbFRpbnRdIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5TQ2xlYXJDb250cm9sVGludDsKKworICAgIGlmICh0aW50ICE9IG9sZFRpbnQpCisg
ICAgICAgIFtjZWxsIHNldENvbnRyb2xUaW50OnRpbnRdOworfQorCit2b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnVwZGF0ZUNoZWNrZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRl
ck9iamVjdCogbykKIHsKICAgICBib29sIG9sZEluZGV0ZXJtaW5hdGUgPSBbY2VsbCBzdGF0ZV0g
PT0gTlNNaXhlZFN0YXRlOwogICAgIGJvb2wgaW5kZXRlcm1pbmF0ZSA9IGlzSW5kZXRlcm1pbmF0
ZShvKTsKQEAgLTU0OCw3ICs2MTUsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVDaGVj
a2VkU3RhdGUoCiAgICAgICAgIFtjZWxsIHNldFN0YXRlOmNoZWNrZWQgPyBOU09uU3RhdGUgOiBO
U09mZlN0YXRlXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRl
KE5TQ2VsbCogY2VsbCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvKQordm9pZCBSZW5kZXJUaGVtZUNo
cm9taXVtTWFjOjp1cGRhdGVFbmFibGVkU3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJP
YmplY3QqIG8pCiB7CiAgICAgYm9vbCBvbGRFbmFibGVkID0gW2NlbGwgaXNFbmFibGVkXTsKICAg
ICBib29sIGVuYWJsZWQgPSBpc0VuYWJsZWQobyk7CkBAIC01NTYsNyArNjIzLDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZU1hYzo6dXBkYXRlRW5hYmxlZFN0YXRlKAogICAgICAgICBbY2VsbCBzZXRFbmFi
bGVkOmVuYWJsZWRdOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVGb2N1c2VkU3Rh
dGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCit2b2lkIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnVwZGF0ZUZvY3VzZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJlbmRl
ck9iamVjdCogbykKIHsKICAgICBib29sIG9sZEZvY3VzZWQgPSBbY2VsbCBzaG93c0ZpcnN0UmVz
cG9uZGVyXTsKICAgICBib29sIGZvY3VzZWQgPSBpc0ZvY3VzZWQobykgJiYgby0+c3R5bGUoKS0+
b3V0bGluZVN0eWxlSXNBdXRvKCk7CkBAIC01NjQsNyArNjMxLDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6dXBkYXRlRm9jdXNlZFN0YXRlKAogICAgICAgICBbY2VsbCBzZXRTaG93c0ZpcnN0UmVz
cG9uZGVyOmZvY3VzZWRdOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjp1cGRhdGVQcmVzc2Vk
U3RhdGUoTlNDZWxsKiBjZWxsLCBjb25zdCBSZW5kZXJPYmplY3QqIG8pCit2b2lkIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnVwZGF0ZVByZXNzZWRTdGF0ZShOU0NlbGwqIGNlbGwsIGNvbnN0IFJl
bmRlck9iamVjdCogbykKIHsKICAgICBib29sIG9sZFByZXNzZWQgPSBbY2VsbCBpc0hpZ2hsaWdo
dGVkXTsKICAgICBib29sIHByZXNzZWQgPSAoby0+bm9kZSgpICYmIG8tPm5vZGUoKS0+YWN0aXZl
KCkpOwpAQCAtNTcyLDcgKzYzOSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnVwZGF0ZVByZXNz
ZWRTdGF0ZSgKICAgICAgICAgW2NlbGwgc2V0SGlnaGxpZ2h0ZWQ6cHJlc3NlZF07CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVj
dCogbykgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y29udHJvbFN1cHBvcnRz
VGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAogewogICAgIC8vIEFuIGFsdGVybmF0
ZSB3YXkgdG8gaW1wbGVtZW50IHRoaXMgd291bGQgYmUgdG8gZ2V0IHRoZSBhcHByb3ByaWF0ZSBj
ZWxsIG9iamVjdAogICAgIC8vIGFuZCBjYWxsIHRoZSBwcml2YXRlIF9uZWVkUmVkcmF3T25XaW5k
b3dDaGFuZ2VkS2V5U3RhdGUgbWV0aG9kLiBBbiBhZHZhbnRhZ2Ugb2YKQEAgLTU5MCw3ICs2NTcs
NyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpjb250cm9sU3VwcG9ydHNUaW50CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLU5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXplRm9y
Rm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CitOU0NvbnRyb2xTaXplIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OmNvbnRyb2xTaXplRm9yRm9udChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
CiB7CiAgICAgaW50IGZvbnRTaXplID0gc3R5bGUtPmZvbnRTaXplKCk7CiAgICAgaWYgKGZvbnRT
aXplID49IDE2KQpAQCAtNjAwLDcgKzY2Nyw3IEBAIE5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVN
YWM6OmNvbnRyb2xTaXoKICAgICByZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7CiB9CiAKLXZvaWQg
UmVuZGVyVGhlbWVNYWM6OnNldENvbnRyb2xTaXplKE5TQ2VsbCogY2VsbCwgY29uc3QgSW50U2l6
ZSogc2l6ZXMsIGNvbnN0IEludFNpemUmIG1pblNpemUsIGZsb2F0IHpvb21MZXZlbCkKK3ZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2V0Q29udHJvbFNpemUoTlNDZWxsKiBjZWxsLCBjb25z
dCBJbnRTaXplKiBzaXplcywgY29uc3QgSW50U2l6ZSYgbWluU2l6ZSwgZmxvYXQgem9vbUxldmVs
KQogewogICAgIE5TQ29udHJvbFNpemUgc2l6ZTsKICAgICBpZiAobWluU2l6ZS53aWR0aCgpID49
IHN0YXRpY19jYXN0PGludD4oc2l6ZXNbTlNSZWd1bGFyQ29udHJvbFNpemVdLndpZHRoKCkgKiB6
b29tTGV2ZWwpICYmCkBAIC02MTUsNyArNjgyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0
Q29udHJvbFNpemUoTlNDZQogICAgICAgICBbY2VsbCBzZXRDb250cm9sU2l6ZTpzaXplXTsKIH0K
IAotSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqIHN0eWxl
LCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVDaHJvbWl1
bU1hYzo6c2l6ZUZvckZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRTaXplKiBzaXpl
cykgY29uc3QKIHsKICAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSAxLjBmKSB7CiAg
ICAgICAgIEludFNpemUgcmVzdWx0ID0gc2l6ZXNbY29udHJvbFNpemVGb3JGb250KHN0eWxlKV07
CkBAIC02MjQsNyArNjkxLDcgQEAgSW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvckZvbnQo
UmVuZAogICAgIHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvckZvbnQoc3R5bGUpXTsKIH0KIAot
SW50U2l6ZSBSZW5kZXJUaGVtZU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBJbnRTaXplKiBzaXplcykgY29uc3QKK0ludFNpemUgUmVuZGVyVGhlbWVDaHJv
bWl1bU1hYzo6c2l6ZUZvclN5c3RlbUZvbnQoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBJbnRT
aXplKiBzaXplcykgY29uc3QKIHsKICAgICBpZiAoc3R5bGUtPmVmZmVjdGl2ZVpvb20oKSAhPSAx
LjBmKSB7CiAgICAgICAgIEludFNpemUgcmVzdWx0ID0gc2l6ZXNbY29udHJvbFNpemVGb3JTeXN0
ZW1Gb250KHN0eWxlKV07CkBAIC02MzMsNyArNzAwLDcgQEAgSW50U2l6ZSBSZW5kZXJUaGVtZU1h
Yzo6c2l6ZUZvclN5c3RlbUZvbgogICAgIHJldHVybiBzaXplc1tjb250cm9sU2l6ZUZvclN5c3Rl
bUZvbnQoc3R5bGUpXTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0U2l6ZUZyb21Gb250
KFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgSW50U2l6ZSogc2l6ZXMpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldFNpemVGcm9tRm9udChSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IEludFNpemUqIHNpemVzKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBDaGVjayBpcyBm
bGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNj
b3VudC4KICAgICBJbnRTaXplIHNpemUgPSBzaXplRm9yRm9udChzdHlsZSwgc2l6ZXMpOwpAQCAt
NjQzLDcgKzcxMCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNpemVGcm9tRm9udChSZW4K
ICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sU2l6ZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXpl
KSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzZXRGb250RnJvbUNvbnRyb2xT
aXplKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIE5TQ29udHJvbFNpemUg
Y29udHJvbFNpemUpIGNvbnN0CiB7CiAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlv
bjsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CkBAIC02NjEs
NyArNzI4LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0Rm9udEZyb21Db250cm9sUwogICAg
ICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZSgwKTsKIH0KIAotTlNDb250cm9sU2l6ZSBSZW5kZXJU
aGVtZU1hYzo6Y29udHJvbFNpemVGb3JTeXN0ZW1Gb250KFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK05TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y29udHJvbFNpemVGb3JT
eXN0ZW1Gb250KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBpbnQgZm9udFNpemUg
PSBzdHlsZS0+Zm9udFNpemUoKTsKICAgICBpZiAoZm9udFNpemUgPj0gW05TRm9udCBzeXN0ZW1G
b250U2l6ZUZvckNvbnRyb2xTaXplOk5TUmVndWxhckNvbnRyb2xTaXplXSkKQEAgLTY3MSwxOCAr
NzM4LDE4IEBAIE5TQ29udHJvbFNpemUgUmVuZGVyVGhlbWVNYWM6OmNvbnRyb2xTaXoKICAgICBy
ZXR1cm4gTlNNaW5pQ29udHJvbFNpemU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50
VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1h
Yzo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIExvY2FsQ3VycmVu
dEdyYXBoaWNzQ29udGV4dCBsb2NhbENvbnRleHQocGFpbnRJbmZvLmNvbnRleHQpOwogICAgIHdr
RHJhd0JlemVsZWRUZXh0RmllbGRDZWxsKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNv
bnRyb2wobykpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFRleHRGaWVs
ZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdAog
ewogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50Q2Fwc0xvY2tJ
bmRpY2F0b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQt
PnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC02OTMsMTggKzc2
MCwxOCBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludENhcHNMb2NrSW5kaWNhCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRBcmVhKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRUZXh0QXJl
YShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0
IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CiAgICAgd2tEcmF3QmV6ZWxlZFRleHRB
cmVhKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRyb2wobykpOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEFyZWFTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3QKIHsKIH0KIAotY29uc3QgaW50KiBSZW5k
ZXJUaGVtZU1hYzo6cG9wdXBCdXR0b25NYXJnaW5zKCkgY29uc3QKK2NvbnN0IGludCogUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBCdXR0b25NYXJnaW5zKCkgY29uc3QKIHsKICAgICBzdGF0
aWMgY29uc3QgaW50IG1hcmdpbnNbM11bNF0gPQogICAgIHsKQEAgLTcxNSwxMyArNzgyLDEzIEBA
IGNvbnN0IGludCogUmVuZGVyVGhlbWVNYWM6OnBvcHVwQnV0dG9uTWEKICAgICByZXR1cm4gbWFy
Z2luc1tbcG9wdXBCdXR0b24oKSBjb250cm9sU2l6ZV1dOwogfQogCi1jb25zdCBJbnRTaXplKiBS
ZW5kZXJUaGVtZU1hYzo6cG9wdXBCdXR0b25TaXplcygpIGNvbnN0Citjb25zdCBJbnRTaXplKiBS
ZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1cEJ1dHRvblNpemVzKCkgY29uc3QKIHsKICAgICBz
dGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgwLCAyMSksIEludFNpemUo
MCwgMTgpLCBJbnRTaXplKDAsIDE1KSB9OwogICAgIHJldHVybiBzaXplczsKIH0KIAotY29uc3Qg
aW50KiBSZW5kZXJUaGVtZU1hYzo6cG9wdXBCdXR0b25QYWRkaW5nKE5TQ29udHJvbFNpemUgc2l6
ZSkgY29uc3QKK2NvbnN0IGludCogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cG9wdXBCdXR0b25Q
YWRkaW5nKE5TQ29udHJvbFNpemUgc2l6ZSkgY29uc3QKIHsKICAgICBzdGF0aWMgY29uc3QgaW50
IHBhZGRpbmdbM11bNF0gPQogICAgIHsKQEAgLTczMiw3ICs3OTksNyBAQCBjb25zdCBpbnQqIFJl
bmRlclRoZW1lTWFjOjpwb3B1cEJ1dHRvblBhCiAgICAgcmV0dXJuIHBhZGRpbmdbc2l6ZV07CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVj
dCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKIHsKICAgICBzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShvLCByKTsKIApAQCAtNzYz
LDcgKzgzMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3QoUmVuZGUKICAg
ICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtaW5mbGF0ZWRSZWN0LngoKSwgLWlu
ZmxhdGVkUmVjdC55KCkpOwogICAgIH0KIAotICAgIFtwb3B1cEJ1dHRvbiBkcmF3V2l0aEZyYW1l
OmluZmxhdGVkUmVjdCBpblZpZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1lbnRWaWV3
KCldOworICAgIFtwb3B1cEJ1dHRvbiBkcmF3V2l0aEZyYW1lOmluZmxhdGVkUmVjdCBpblZpZXc6
RmxpcHBlZFZpZXcoKV07CiAgICAgW3BvcHVwQnV0dG9uIHNldENvbnRyb2xWaWV3Om5pbF07CiAK
ICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwpAQCAtODIzLDcgKzg5MCw3IEBAIHN0
YXRpYyB2b2lkIFRyYWNrR3JhZGllbnRJbnRlcnBvbGF0ZSh2b2kKICAgICAgICAgb3V0RGF0YVtp
XSA9ICgxLjBmIC0gYSkgKiBkYXJrW2ldICsgYSAqIGxpZ2h0W2ldOwogfQogCi12b2lkIFJlbmRl
clRoZW1lTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uR3JhZGllbnRzKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZW51TGlzdEJ1dHRvbkdyYWRp
ZW50cyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgaWYgKHIuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CkBAIC04OTAsNyArOTU3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRN
ZW51TGlzdEJ1dHRvbgogICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKLWJv
b2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5kcyA9IEludFJlY3Qoci54KCkgKyBv
LT5zdHlsZSgpLT5ib3JkZXJMZWZ0V2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgci55KCkgKyBvLT5zdHlsZSgpLT5ib3JkZXJUb3BXaWR0aCgpLApAQCAtOTU5LDcgKzEwMjYs
NyBAQCBzdGF0aWMgY29uc3QgSW50U2l6ZSogbWVudUxpc3RCdXR0b25TaXplCiAgICAgcmV0dXJu
IHNpemVzOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RNZW51TGlzdFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGUp
IGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdE1lbnVMaXN0U3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZSkgY29uc3QKIHsKICAgICBOU0NvbnRyb2xTaXplIGNvbnRyb2xTaXplID0gY29udHJvbFNpemVG
b3JGb250KHN0eWxlKTsKIApAQCAtOTg3LDcgKzEwNTQsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFj
OjphZGp1c3RNZW51TGlzdFN0eWxlCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KIAot
aW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5bGUq
IHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nTGVmdChSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxlLT5h
cHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQogICAgICAgICByZXR1cm4gcG9wdXBCdXR0b25Q
YWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2xlZnRQYWRkaW5nXSAqIHN0eWxlLT5l
ZmZlY3RpdmVab29tKCk7CkBAIC05OTYsNyArMTA2Myw3IEBAIGludCBSZW5kZXJUaGVtZU1hYzo6
cG9wdXBJbnRlcm5hbFBhZGRpbmcKICAgICByZXR1cm4gMDsKIH0KIAotaW50IFJlbmRlclRoZW1l
TWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QK
K2ludCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJl
bmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9
PSBNZW51bGlzdFBhcnQpCiAgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJv
bFNpemVGb3JGb250KHN0eWxlKSlbcmlnaHRQYWRkaW5nXSAqIHN0eWxlLT5lZmZlY3RpdmVab29t
KCk7CkBAIC0xMDA4LDcgKzEwNzUsNyBAQCBpbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJu
YWxQYWRkaW5nCiAgICAgcmV0dXJuIDA7CiB9CiAKLWludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJ
bnRlcm5hbFBhZGRpbmdUb3AoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoraW50IFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nVG9wKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9PSBNZW51bGlzdFBhcnQp
CiAgICAgICAgIHJldHVybiBwb3B1cEJ1dHRvblBhZGRpbmcoY29udHJvbFNpemVGb3JGb250KHN0
eWxlKSlbdG9wUGFkZGluZ10gKiBzdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOwpAQCAtMTAxNyw3ICsx
MDg0LDcgQEAgaW50IFJlbmRlclRoZW1lTWFjOjpwb3B1cEludGVybmFsUGFkZGluZwogICAgIHJl
dHVybiAwOwogfQogCi1pbnQgUmVuZGVyVGhlbWVNYWM6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90
dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK2ludCBSZW5kZXJUaGVtZUNocm9taXVtTWFj
Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7
CiAgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gTWVudWxpc3RQYXJ0KQogICAgICAgICBy
ZXR1cm4gcG9wdXBCdXR0b25QYWRkaW5nKGNvbnRyb2xTaXplRm9yRm9udChzdHlsZSkpW2JvdHRv
bVBhZGRpbmddICogc3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKQEAgLTEwMjYsNyArMTA5Myw3IEBA
IGludCBSZW5kZXJUaGVtZU1hYzo6cG9wdXBJbnRlcm5hbFBhZGRpbmcKICAgICByZXR1cm4gMDsK
IH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBm
bG9hdCBmb250U2NhbGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGJhc2VGb250U2l6ZTsKIApAQCAt
MTAzOSw3ICsxMTA2LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0TWVudUxpc3RCdXR0
bwogICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdo
dCgpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZU1hYzo6c2V0UG9wdXBCdXR0b25DZWxsU3RhdGUo
Y29uc3QgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRSZWN0JiByKQordm9pZCBSZW5kZXJUaGVt
ZUNocm9taXVtTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTdGF0ZShjb25zdCBSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTlNQb3BVcEJ1dHRvbkNlbGwqIHBvcHVwQnV0
dG9uID0gdGhpcy0+cG9wdXBCdXR0b24oKTsKIApAQCAtMTA0NywxOSArMTExNCwyMCBAQCB2b2lk
IFJlbmRlclRoZW1lTWFjOjpzZXRQb3B1cEJ1dHRvbkNlbGxTCiAgICAgc2V0Q29udHJvbFNpemUo
cG9wdXBCdXR0b24sIHBvcHVwQnV0dG9uU2l6ZXMoKSwgci5zaXplKCksIG8tPnN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJl
c3BvbmQgdG8uCisgICAgdXBkYXRlQWN0aXZlU3RhdGUocG9wdXBCdXR0b24sIG8pOwogICAgIHVw
ZGF0ZUNoZWNrZWRTdGF0ZShwb3B1cEJ1dHRvbiwgbyk7CiAgICAgdXBkYXRlRW5hYmxlZFN0YXRl
KHBvcHVwQnV0dG9uLCBvKTsKICAgICB1cGRhdGVQcmVzc2VkU3RhdGUocG9wdXBCdXR0b24sIG8p
OwogICAgIHVwZGF0ZUZvY3VzZWRTdGF0ZShwb3B1cEJ1dHRvbiwgbyk7CiB9CiAKLWNvbnN0IElu
dFNpemUqIFJlbmRlclRoZW1lTWFjOjptZW51TGlzdFNpemVzKCkgY29uc3QKK2NvbnN0IEludFNp
emUqIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6Om1lbnVMaXN0U2l6ZXMoKSBjb25zdAogewogICAg
IHN0YXRpYyBjb25zdCBJbnRTaXplIHNpemVzWzNdID0geyBJbnRTaXplKDksIDApLCBJbnRTaXpl
KDUsIDApLCBJbnRTaXplKDAsIDApIH07CiAgICAgcmV0dXJuIHNpemVzOwogfQogCi1pbnQgUmVu
ZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAoraW50IFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAogewogICAgIHJldHVybiBzaXplRm9yU3lzdGVtRm9udChzdHls
ZSwgbWVudUxpc3RTaXplcygpKS53aWR0aCgpOwogfQpAQCAtMTA2NywxMiArMTEzNSwxMiBAQCBp
bnQgUmVuZGVyVGhlbWVNYWM6Om1pbmltdW1NZW51TGlzdFNpemUoCiBjb25zdCBpbnQgdHJhY2tX
aWR0aCA9IDU7CiBjb25zdCBpbnQgdHJhY2tSYWRpdXMgPSAyOwogCi12b2lkIFJlbmRlclRoZW1l
TWFjOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjph
ZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5
bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
KQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcikKIHsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHI7CiAgICAgZmxvYXQgem9vbUxl
dmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwpAQCAtMTExMSwxNCArMTE3OSwxNCBA
QCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNsaWRlclRyYWNrKFJlCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9p
ZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0
eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9CiAKIGNvbnN0IGZsb2F0IHZlcnRpY2FsU2xpZGVySGVp
Z2h0UGFkZGluZyA9IDAuMWY7CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2xpZGVyVGh1
bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWlu
dFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBBU1NFUlQoby0+cGFyZW50
KCktPmlzU2xpZGVyKCkpOwogCkBAIC0xMTI5LDYgKzExOTcsNyBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludFNsaWRlclRodW1iKFJlCiAgICAgTG9jYWxDdXJyZW50R3JhcGhpY3NDb250ZXh0
IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZh
cmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCisgICAgdXBkYXRlQWN0aXZlU3RhdGUoc2xpZGVy
VGh1bWJDZWxsLCBvKTsKICAgICB1cGRhdGVFbmFibGVkU3RhdGUoc2xpZGVyVGh1bWJDZWxsLCBv
LT5wYXJlbnQoKSk7CiAgICAgdXBkYXRlRm9jdXNlZFN0YXRlKHNsaWRlclRodW1iQ2VsbCwgby0+
cGFyZW50KCkpOwogCkBAIC0xMTcwLDcgKzEyMzksNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludFNsaWRlclRodW1iKFJlCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUo
LXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJlY3QueSgpKTsKICAgICB9CiAKLSAgICBbc2xp
ZGVyVGh1bWJDZWxsIGRyYXdXaXRoRnJhbWU6dW56b29tZWRSZWN0IGluVmlldzpvLT52aWV3KCkt
PmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07CisgICAgW3NsaWRlclRodW1iQ2VsbCBkcmF3
V2l0aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6RmxpcHBlZFZpZXcoKV07CiAgICAgW3NsaWRl
clRodW1iQ2VsbCBzZXRDb250cm9sVmlldzpuaWxdOwogCiAgICAgcGFpbnRJbmZvLmNvbnRleHQt
PnJlc3RvcmUoKTsKQEAgLTExNzgsNyArMTI0Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2xpZGVyVGh1bWIoUmUKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsK
ICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAgICAgTG9j
YWxDdXJyZW50R3JhcGhpY3NDb250ZXh0IGxvY2FsQ29udGV4dChwYWludEluZm8uY29udGV4dCk7
CkBAIC0xMjAyLDcgKzEyNzEsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZp
ZWxkKFJlCiAgICAgLy8gU2V0IHRoZSBzZWFyY2ggYnV0dG9uIHRvIG5pbCBiZWZvcmUgZHJhd2lu
Zy4gIFRoZW4gcmVzZXQgaXQgc28gd2UgY2FuIGRyYXcgaXQgbGF0ZXIuCiAgICAgW3NlYXJjaCBz
ZXRTZWFyY2hCdXR0b25DZWxsOm5pbF07CiAKLSAgICBbc2VhcmNoIGRyYXdXaXRoRnJhbWU6TlNS
ZWN0KHVuem9vbWVkUmVjdCkgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVWaWV3KCktPmRvY3VtZW50
VmlldygpXTsKKyAgICBbc2VhcmNoIGRyYXdXaXRoRnJhbWU6TlNSZWN0KHVuem9vbWVkUmVjdCkg
aW5WaWV3OkZsaXBwZWRWaWV3KCldOwogI2lmZGVmIEJVSUxESU5HX09OX1RJR0VSCiAgICAgaWYg
KFtzZWFyY2ggc2hvd3NGaXJzdFJlc3BvbmRlcl0pCiAgICAgICAgIHdrRHJhd1RleHRGaWVsZENl
bGxGb2N1c1Jpbmcoc2VhcmNoLCBOU1JlY3QodW56b29tZWRSZWN0KSk7CkBAIC0xMjE2LDI0ICsx
Mjg1LDI1IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGQoUmUKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaENlbGxTdGF0
ZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IEludFJlY3QmKQordm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtTWFjOjpzZXRTZWFyY2hDZWxsU3RhdGUoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBJbnRSZWN0
JikKIHsKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNoKCk7CiAK
ICAgICBbc2VhcmNoIHNldENvbnRyb2xTaXplOmNvbnRyb2xTaXplRm9yRm9udChvLT5zdHlsZSgp
KV07CiAKICAgICAvLyBVcGRhdGUgdGhlIHZhcmlvdXMgc3RhdGVzIHdlIHJlc3BvbmQgdG8uCisg
ICAgdXBkYXRlQWN0aXZlU3RhdGUoc2VhcmNoLCBvKTsKICAgICB1cGRhdGVFbmFibGVkU3RhdGUo
c2VhcmNoLCBvKTsKICAgICB1cGRhdGVGb2N1c2VkU3RhdGUoc2VhcmNoLCBvKTsKIH0KIAotY29u
c3QgSW50U2l6ZSogUmVuZGVyVGhlbWVNYWM6OnNlYXJjaEZpZWxkU2l6ZXMoKSBjb25zdAorY29u
c3QgSW50U2l6ZSogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2VhcmNoRmllbGRTaXplcygpIGNv
bnN0CiB7CiAgICAgc3RhdGljIGNvbnN0IEludFNpemUgc2l6ZXNbM10gPSB7IEludFNpemUoMCwg
MjIpLCBJbnRTaXplKDAsIDE5KSwgSW50U2l6ZSgwLCAxNykgfTsKICAgICByZXR1cm4gc2l6ZXM7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnNldFNlYXJjaEZp
ZWxkU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgLy8gSWYgdGhlIHdpZHRo
IGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBk
by4KICAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxl
LT5oZWlnaHQoKS5pc0F1dG8oKSkKQEAgLTEyNDMsNyArMTMxMyw3IEBAIHZvaWQgUmVuZGVyVGhl
bWVNYWM6OnNldFNlYXJjaEZpZWxkU2l6ZSgKICAgICBzZXRTaXplRnJvbUZvbnQoc3R5bGUsIHNl
YXJjaEZpZWxkU2l6ZXMoKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJj
aEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHls
ZSwgRWxlbWVudCopIGNvbnN0Cit2b2lkIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNl
YXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgLy8gT3ZlcnJpZGUgYm9yZGVyLgogICAgIHN0
eWxlLT5yZXNldEJvcmRlcigpOwpAQCAtMTI3NCw3ICsxMzQ0LDcgQEAgdm9pZCBSZW5kZXJUaGVt
ZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRTdAogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9
CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJj
aEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBOb2RlKiBpbnB1
dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CiAgICAgaWYgKCFpbnB1dC0+cmVu
ZGVyZXIoKS0+aXNCb3goKSkKQEAgLTEyODQsNiArMTM1NCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50U2VhcmNoRmllbGRDYW4KIAogICAgIE5TU2VhcmNoRmllbGRDZWxsKiBzZWFyY2gg
PSB0aGlzLT5zZWFyY2goKTsKIAorICAgIHVwZGF0ZUFjdGl2ZVN0YXRlKFtzZWFyY2ggY2FuY2Vs
QnV0dG9uQ2VsbF0sIG8pOwogICAgIHVwZGF0ZVByZXNzZWRTdGF0ZShbc2VhcmNoIGNhbmNlbEJ1
dHRvbkNlbGxdLCBvKTsKIAogICAgIHBhaW50SW5mby5jb250ZXh0LT5zYXZlKCk7CkBAIC0xMzAy
LDIwICsxMzczLDIwIEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50U2VhcmNoRmllbGRDYW4K
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnRyYW5zbGF0ZSgtdW56b29tZWRSZWN0LngoKSwg
LXVuem9vbWVkUmVjdC55KCkpOwogICAgIH0KIAotICAgIFtbc2VhcmNoIGNhbmNlbEJ1dHRvbkNl
bGxdIGRyYXdXaXRoRnJhbWU6dW56b29tZWRSZWN0IGluVmlldzpvLT52aWV3KCktPmZyYW1lVmll
dygpLT5kb2N1bWVudFZpZXcoKV07CisgICAgW1tzZWFyY2ggY2FuY2VsQnV0dG9uQ2VsbF0gZHJh
d1dpdGhGcmFtZTp1bnpvb21lZFJlY3QgaW5WaWV3OkZsaXBwZWRWaWV3KCldOwogICAgIFtbc2Vh
cmNoIGNhbmNlbEJ1dHRvbkNlbGxdIHNldENvbnRyb2xWaWV3Om5pbF07CiAKICAgICBwYWludElu
Zm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotY29uc3QgSW50
U2l6ZSogUmVuZGVyVGhlbWVNYWM6OmNhbmNlbEJ1dHRvblNpemVzKCkgY29uc3QKK2NvbnN0IElu
dFNpemUqIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OmNhbmNlbEJ1dHRvblNpemVzKCkgY29uc3QK
IHsKICAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50U2l6ZSgxNiwgMTMp
LCBJbnRTaXplKDEzLCAxMSksIEludFNpemUoMTMsIDkpIH07CiAgICAgcmV0dXJuIHNpemVzOwog
fQogCi12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAordm9pZCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1
dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAogewogICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCBj
YW5jZWxCdXR0b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNpemUud2lk
dGgoKSwgRml4ZWQpKTsKQEAgLTEzMjMsMTQgKzEzOTQsMTQgQEAgdm9pZCBSZW5kZXJUaGVtZU1h
Yzo6YWRqdXN0U2VhcmNoRmllbGRDYQogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9CiAK
LWNvbnN0IEludFNpemUqIFJlbmRlclRoZW1lTWFjOjpyZXN1bHRzQnV0dG9uU2l6ZXMoKSBjb25z
dAorY29uc3QgSW50U2l6ZSogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cmVzdWx0c0J1dHRvblNp
emVzKCkgY29uc3QKIHsKICAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBzaXplc1szXSA9IHsgSW50
U2l6ZSgxOSwgMTMpLCBJbnRTaXplKDE3LCAxMSksIEludFNpemUoMTcsIDkpIH07CiAgICAgcmV0
dXJuIHNpemVzOwogfQogCiBjb25zdCBpbnQgZW1wdHlSZXN1bHRzT2Zmc2V0ID0gOTsKLXZvaWQg
UmVuZGVyVGhlbWVNYWM6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAordm9pZCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAg
ICBJbnRTaXplIHNpemUgPSBzaXplRm9yU3lzdGVtRm9udChzdHlsZSwgcmVzdWx0c0J1dHRvblNp
emVzKCkpOwogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpIC0gZW1wdHlS
ZXN1bHRzT2Zmc2V0LCBGaXhlZCkpOwpAQCAtMTMzOCwxMiArMTQwOSwxMiBAQCB2b2lkIFJlbmRl
clRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZERlCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygw
KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0JikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZERlY29y
YXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0JikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewog
ICAgIEludFNpemUgc2l6ZSA9IHNpemVGb3JTeXN0ZW1Gb250KHN0eWxlLCByZXN1bHRzQnV0dG9u
U2l6ZXMoKSk7CiAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVk
KSk7CkBAIC0xMzUxLDcgKzE0MjIsNyBAQCB2b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFy
Y2hGaWVsZFJlCiAgICAgc3R5bGUtPnNldEJveFNoYWRvdygwKTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiByKQorYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRp
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIGlucHV0ID0gby0+bm9kZSgpLT5z
aGFkb3dBbmNlc3Rvck5vZGUoKTsKICAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgp
KQpAQCAtMTM2MSwxOSArMTQzMiwyMSBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJj
aEZpZWxkUmVzCiAKICAgICBOU1NlYXJjaEZpZWxkQ2VsbCogc2VhcmNoID0gdGhpcy0+c2VhcmNo
KCk7CiAKKyAgICB1cGRhdGVBY3RpdmVTdGF0ZShbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdLCBv
KTsKKwogICAgIGlmIChbc2VhcmNoIHNlYXJjaE1lbnVUZW1wbGF0ZV0gIT0gbmlsKQogICAgICAg
ICBbc2VhcmNoIHNldFNlYXJjaE1lbnVUZW1wbGF0ZTpuaWxdOwogCiAgICAgRmxvYXRSZWN0IGxv
Y2FsQm91bmRzID0gW3NlYXJjaCBzZWFyY2hCdXR0b25SZWN0Rm9yQm91bmRzOk5TUmVjdChpbnB1
dC0+cmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSldOwogICAgIGxvY2FsQm91bmRzID0gY29u
dmVydFRvUGFpbnRpbmdSZWN0KGlucHV0LT5yZW5kZXJlcigpLCBvLCBsb2NhbEJvdW5kcywgcik7
CiAKLSAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBkcmF3V2l0aEZyYW1lOmxvY2FsQm91
bmRzIGluVmlldzpvLT52aWV3KCktPmZyYW1lVmlldygpLT5kb2N1bWVudFZpZXcoKV07CisgICAg
W1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gZHJhd1dpdGhGcmFtZTpsb2NhbEJvdW5kcyBpblZp
ZXc6RmxpcHBlZFZpZXcoKV07CiAgICAgW1tzZWFyY2ggc2VhcmNoQnV0dG9uQ2VsbF0gc2V0Q29u
dHJvbFZpZXc6bmlsXTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGNvbnN0IGludCByZXN1bHRz
QXJyb3dXaWR0aCA9IDU7Ci12b2lkIFJlbmRlclRoZW1lTWFjOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6YWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0CiB7CiAgICAgSW50U2l6ZSBzaXplID0gc2l6ZUZvclN5c3Rl
bUZvbnQoc3R5bGUsIHJlc3VsdHNCdXR0b25TaXplcygpKTsKICAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKHNpemUud2lkdGgoKSArIHJlc3VsdHNBcnJvd1dpZHRoLCBGaXhlZCkpOwpAQCAtMTM4
MSw3ICsxNDU0LDcgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0U2VhcmNoRmllbGRSZQog
ICAgIHN0eWxlLT5zZXRCb3hTaGFkb3coMCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dBbmNl
c3Rvck5vZGUoKTsKICAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQpAQCAtMTM5
MSw2ICsxNDY0LDggQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRTZWFyY2hGaWVsZFJlcwog
CiAgICAgTlNTZWFyY2hGaWVsZENlbGwqIHNlYXJjaCA9IHRoaXMtPnNlYXJjaCgpOwogCisgICAg
dXBkYXRlQWN0aXZlU3RhdGUoW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSwgbyk7CisKICAgICBp
ZiAoIVtzZWFyY2ggc2VhcmNoTWVudVRlbXBsYXRlXSkKICAgICAgICAgW3NlYXJjaCBzZXRTZWFy
Y2hNZW51VGVtcGxhdGU6c2VhcmNoTWVudVRlbXBsYXRlKCldOwogCkBAIC0xNDEwLDcgKzE0ODUs
NyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFNlYXJjaEZpZWxkUmVzCiAgICAgICAgIHBh
aW50SW5mby5jb250ZXh0LT50cmFuc2xhdGUoLXVuem9vbWVkUmVjdC54KCksIC11bnpvb21lZFJl
Y3QueSgpKTsKICAgICB9CiAKLSAgICBbW3NlYXJjaCBzZWFyY2hCdXR0b25DZWxsXSBkcmF3V2l0
aEZyYW1lOnVuem9vbWVkUmVjdCBpblZpZXc6by0+dmlldygpLT5mcmFtZVZpZXcoKS0+ZG9jdW1l
bnRWaWV3KCldOworICAgIFtbc2VhcmNoIHNlYXJjaEJ1dHRvbkNlbGxdIGRyYXdXaXRoRnJhbWU6
dW56b29tZWRSZWN0IGluVmlldzpGbGlwcGVkVmlldygpXTsKICAgICBbW3NlYXJjaCBzZWFyY2hC
dXR0b25DZWxsXSBzZXRDb250cm9sVmlldzpuaWxdOwogICAgIAogICAgIHBhaW50SW5mby5jb250
ZXh0LT5yZXN0b3JlKCk7CkBAIC0xNDY1LDcgKzE1NDAsNyBAQCBjb25zdCBpbnQgc2xpZGVyVGh1
bWJIZWlnaHQgPSAxNTsKIGNvbnN0IGludCBtZWRpYVNsaWRlclRodW1iV2lkdGggPSAxMzsKIGNv
bnN0IGludCBtZWRpYVNsaWRlclRodW1iSGVpZ2h0ID0gMTQ7CiAKLXZvaWQgUmVuZGVyVGhlbWVN
YWM6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJPYmplY3Qq
IG8pIGNvbnN0CiB7CiAgICAgZmxvYXQgem9vbUxldmVsID0gby0+c3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpOwogICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJI
b3Jpem9udGFsUGFydCB8fCBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gU2xpZGVyVGh1bWJW
ZXJ0aWNhbFBhcnQpIHsKQEAgLTE1MjgsNyArMTYwMyw3IEBAIHN0YXRpYyBGbG9hdFJlY3QgZ2V0
VW56b29tZWRSZWN0QW5kQWRqdXMKIH0KIAogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
ZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1l
Q2hyb21pdW1NYWM6OnBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKIHsKICAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKQEAgLTE1
MzksMTQgKzE2MTQsMTQgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYUZ1bGxzY3Jl
ZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRp
YU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTm9k
ZSogbm9kZSA9IG8tPm5vZGUoKTsKICAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2RlID8gbm9kZS0+
c2hhZG93QW5jZXN0b3JOb2RlKCkgOiAwOwogICAgIGlmICghbWVkaWFOb2RlIHx8ICghbWVkaWFO
b2RlLT5oYXNUYWdOYW1lKHZpZGVvVGFnKSAmJiAhbWVkaWFOb2RlLT5oYXNUYWdOYW1lKGF1ZGlv
VGFnKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChNZWRpYUNvbnRyb2xNdXRl
QnV0dG9uRWxlbWVudCogYnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sTXV0ZUJ1dHRvbkVs
ZW1lbnQqPihub2RlKSkgeworICAgIGlmIChNZWRpYUNvbnRyb2xQbGF5QnV0dG9uRWxlbWVudCog
YnRuID0gc3RhdGljX2Nhc3Q8TWVkaWFDb250cm9sUGxheUJ1dHRvbkVsZW1lbnQqPihub2RlKSkg
ewogICAgICAgICBMb2NhbEN1cnJlbnRHcmFwaGljc0NvbnRleHQgbG9jYWxDb250ZXh0KHBhaW50
SW5mby5jb250ZXh0KTsKICAgICAgICAgd2tEcmF3TWVkaWFVSVBhcnQoYnRuLT5kaXNwbGF5VHlw
ZSgpLCBtZWRpYUNvbnRyb2xsZXJUaGVtZSgpLCBwYWludEluZm8uY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCksIHIsIGdldE1lZGlhVUlQYXJ0U3RhdGVGbGFncyhub2RlKSk7CiAKQEAgLTE1NTQs
NyArMTYyOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFNdXRlQnV0dG8KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFQbGF5
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6
cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIG5v
ZGUgPSBvLT5ub2RlKCk7CiAgICAgTm9kZSogbWVkaWFOb2RlID0gbm9kZSA/IG5vZGUtPnNoYWRv
d0FuY2VzdG9yTm9kZSgpIDogMDsKQEAgLTE1NjgsNyArMTY0Myw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVkaWFQbGF5QnV0dG8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCitib29sIFJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKICAg
ICBpZiAoIW5vZGUpCkBAIC0xNTc5LDcgKzE2NTQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpw
YWludE1lZGlhU2Vla0JhY2tCCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lTWFjOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQor
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIG5vZGUgPSBvLT5ub2RlKCk7CiAgICAg
aWYgKCFub2RlKQpAQCAtMTU5MCw3ICsxNjY1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRNZWRpYVNlZWtGb3J3YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKIHsKICAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwogICAgIE5vZGUqIG1lZGlhTm9k
ZSA9IG5vZGUgPyBub2RlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKSA6IDA7CkBAIC0xNjAxLDEzICsx
Njc2LDE0IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFTbGlkZXJUcmEKICAgICBp
ZiAoIW1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPFRp
bWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7Ci0gICAgRXhj
ZXB0aW9uQ29kZSBpZ25vcmVkRXhjZXB0aW9uOwotICAgIGZsb2F0IHRpbWVMb2FkZWQgPSB0aW1l
UmFuZ2VzLT5sZW5ndGgoKSA/IHRpbWVSYW5nZXMtPmVuZCgwLCBpZ25vcmVkRXhjZXB0aW9uKSA6
IDA7Ci0gICAgZmxvYXQgY3VycmVudFRpbWUgPSBtZWRpYUVsZW1lbnQtPmN1cnJlbnRUaW1lKCk7
Ci0gICAgZmxvYXQgZHVyYXRpb24gPSBtZWRpYUVsZW1lbnQtPmR1cmF0aW9uKCk7Ci0gICAgaWYg
KGlzbmFuKGR1cmF0aW9uKSkKLSAgICAgICAgZHVyYXRpb24gPSAwOworICAgIGZsb2F0IHRpbWVM
b2FkZWQgPSAwOworICAgIGZsb2F0IGN1cnJlbnRUaW1lID0gMDsKKyAgICBmbG9hdCBkdXJhdGlv
biA9IDA7CisgICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBtZWRpYUVsZW1lbnQtPnBsYXll
cigpKSB7CisgICAgICAgIGR1cmF0aW9uID0gcGxheWVyLT5kdXJhdGlvbigpOworICAgICAgICB0
aW1lTG9hZGVkID0gcGxheWVyLT5tYXhUaW1lQnVmZmVyZWQoKTsKKyAgICAgICAgY3VycmVudFRp
bWUgPSBwbGF5ZXItPmN1cnJlbnRUaW1lKCk7CisgICAgfQogIAogICAgIHBhaW50SW5mby5jb250
ZXh0LT5zYXZlKCk7CiAgICAgRmxvYXRSZWN0IHVuem9vbWVkUmVjdCA9IGdldFVuem9vbWVkUmVj
dEFuZEFkanVzdEN1cnJlbnRDb250ZXh0KG8sIHBhaW50SW5mbywgcik7CkBAIC0xNjE4LDcgKzE2
OTQsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhU2xpZGVyVGh1
bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWlu
dE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIG5vZGUg
PSBvLT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTYyOSw3ICsxNzA1LDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVNsaWRlclRodQogICAgIHJldHVybiBmYWxzZTsKIH0K
ICAgICAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFSZXdpbmRCdXR0b24oUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhUmV3
aW5kQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBOb2RlKiBub2RlID0gby0+bm9k
ZSgpOwogICAgIGlmICghbm9kZSkKQEAgLTE2NDAsNyArMTcxNiw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVkaWFSZXdpbmRCdXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50TWVkaWFSZXR1cm5Ub1JlYWx0aW1lQnV0dG9uKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVJldHVy
blRvUmVhbHRpbWVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewogICAgIE5vZGUqIG5vZGUg
PSBvLT5ub2RlKCk7CiAgICAgaWYgKCFub2RlKQpAQCAtMTY1Miw3ICsxNzI4LDcgQEAgYm9vbCBS
ZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVJldHVyblRvUgogfQogCiAKLWJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVkaWFDb250cm9sc0JhY2tncm91bmQoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQor
Ym9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhQ29udHJvbHNCYWNrZ3JvdW5k
KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKIHsKICAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwogICAg
IGlmICghbm9kZSkKQEAgLTE2NjMsNyArMTczOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBh
aW50TWVkaWFDb250cm9sc0IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhl
bWVNYWM6OnBhaW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJl
bmRlclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHIpCiB7CiAgICAgTm9kZSogbm9kZSA9IG8tPm5vZGUoKTsKICAgICBpZiAoIW5vZGUpCkBA
IC0xNjc2LDcgKzE3NTIsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1lZGlhQ3VycmVu
dFRpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludE1l
ZGlhVGltZVJlbWFpbmluZyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lQ2hy
b21pdW1NYWM6OnBhaW50TWVkaWFUaW1lUmVtYWluaW5nKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsK
ICAgICBOb2RlKiBub2RlID0gby0+bm9kZSgpOwogICAgIGlmICghbm9kZSkKQEAgLTE2ODksMTYg
KzE3NjUsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRNZWRpYVRpbWVSZW1haQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotU3RyaW5nIFJlbmRlclRoZW1lTWFjOjpleHRyYU1lZGlhQ29u
dHJvbHNTdHlsZVNoZWV0KCkKK1N0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpleHRyYU1l
ZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkKIHsKLSAgICBpZiAobWVkaWFDb250cm9sbGVyVGhlbWUo
KSA9PSBNZWRpYUNvbnRyb2xsZXJUaGVtZVFUKSAKLSAgICAgICAgcmV0dXJuIFN0cmluZyhtZWRp
YUNvbnRyb2xzUVRVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1FUVXNl
ckFnZW50U3R5bGVTaGVldCkpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwor
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KICNlbmRpZgogCi1OU1BvcFVwQnV0dG9uQ2VsbCogUmVu
ZGVyVGhlbWVNYWM6OnBvcHVwQnV0dG9uKCkgY29uc3QKK05TUG9wVXBCdXR0b25DZWxsKiBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjpwb3B1cEJ1dHRvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Bv
cHVwQnV0dG9uKSB7CiAgICAgICAgIG1fcG9wdXBCdXR0b24uYWRvcHROUyhbW05TUG9wVXBCdXR0
b25DZWxsIGFsbG9jXSBpbml0VGV4dENlbGw6QCIiIHB1bGxzRG93bjpOT10pOwpAQCAtMTcwOSw3
ICsxNzgyLDcgQEAgTlNQb3BVcEJ1dHRvbkNlbGwqIFJlbmRlclRoZW1lTWFjOjpwb3B1cAogICAg
IHJldHVybiBtX3BvcHVwQnV0dG9uLmdldCgpOwogfQogCi1OU1NlYXJjaEZpZWxkQ2VsbCogUmVu
ZGVyVGhlbWVNYWM6OnNlYXJjaCgpIGNvbnN0CitOU1NlYXJjaEZpZWxkQ2VsbCogUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYzo6c2VhcmNoKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2VhcmNoKSB7CiAg
ICAgICAgIG1fc2VhcmNoLmFkb3B0TlMoW1tOU1NlYXJjaEZpZWxkQ2VsbCBhbGxvY10gaW5pdFRl
eHRDZWxsOkAiIl0pOwpAQCAtMTcyMiw3ICsxNzk1LDcgQEAgTlNTZWFyY2hGaWVsZENlbGwqIFJl
bmRlclRoZW1lTWFjOjpzZWFyYwogICAgIHJldHVybiBtX3NlYXJjaC5nZXQoKTsKIH0KIAotTlNN
ZW51KiBSZW5kZXJUaGVtZU1hYzo6c2VhcmNoTWVudVRlbXBsYXRlKCkgY29uc3QKK05TTWVudSog
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2VhcmNoTWVudVRlbXBsYXRlKCkgY29uc3QKIHsKICAg
ICBpZiAoIW1fc2VhcmNoTWVudVRlbXBsYXRlKQogICAgICAgICBtX3NlYXJjaE1lbnVUZW1wbGF0
ZS5hZG9wdE5TKFtbTlNNZW51IGFsbG9jXSBpbml0V2l0aFRpdGxlOkAiIl0pOwpAQCAtMTczMCw3
ICsxODAzLDcgQEAgTlNNZW51KiBSZW5kZXJUaGVtZU1hYzo6c2VhcmNoTWVudVRlbXBsYQogICAg
IHJldHVybiBtX3NlYXJjaE1lbnVUZW1wbGF0ZS5nZXQoKTsKIH0KIAotTlNTbGlkZXJDZWxsKiBS
ZW5kZXJUaGVtZU1hYzo6c2xpZGVyVGh1bWJIb3Jpem9udGFsKCkgY29uc3QKK05TU2xpZGVyQ2Vs
bCogUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6c2xpZGVyVGh1bWJIb3Jpem9udGFsKCkgY29uc3QK
IHsKICAgICBpZiAoIW1fc2xpZGVyVGh1bWJIb3Jpem9udGFsKSB7CiAgICAgICAgIG1fc2xpZGVy
VGh1bWJIb3Jpem9udGFsLmFkb3B0TlMoW1tOU1NsaWRlckNlbGwgYWxsb2NdIGluaXRdKTsKQEAg
LTE3NDMsNyArMTgxNiw3IEBAIE5TU2xpZGVyQ2VsbCogUmVuZGVyVGhlbWVNYWM6OnNsaWRlclRo
dW0KICAgICByZXR1cm4gbV9zbGlkZXJUaHVtYkhvcml6b250YWwuZ2V0KCk7CiB9CiAKLU5TU2xp
ZGVyQ2VsbCogUmVuZGVyVGhlbWVNYWM6OnNsaWRlclRodW1iVmVydGljYWwoKSBjb25zdAorTlNT
bGlkZXJDZWxsKiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpzbGlkZXJUaHVtYlZlcnRpY2FsKCkg
Y29uc3QKIHsKICAgICBpZiAoIW1fc2xpZGVyVGh1bWJWZXJ0aWNhbCkgewogICAgICAgICBtX3Ns
aWRlclRodW1iVmVydGljYWwuYWRvcHROUyhbW05TU2xpZGVyQ2VsbCBhbGxvY10gaW5pdF0pOwo=
</data>
<flag name="review"
          id="20714"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="20715"
          type_id="3"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39708</attachid>
            <date>2009-09-17 11:11:47 -0700</date>
            <delta_ts>2009-09-17 12:20:29 -0700</delta_ts>
            <desc>Quick fix to make it compile</desc>
            <filename>render.diff</filename>
            <type>text/plain</type>
            <size>1688</size>
            <attacher name="Avi Drissman">avi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODQ3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMDktMDktMTcgIEF2aSBEcmlzc21hbiAgPGF2aUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2hh
bmdlIHRvIG1ha2UgUmVuZGVyVGhlbWVDaHJvbWl1bU1hYyBjb21waWxlIGluc2lkZSBvZiBub24g
UExBVEZPUk0oTUFDKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgor
CiAyMDA5LTA5LTE3ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTWFjLm1tCShyZXZpc2lvbiA0ODQ3MikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lQ2hyb21pdW1NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3
LDkgQEAgdXNpbmcgc3RkOjptaW47CiAvLyAtIEluIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSwg
dGhlIHVzZSBvZiBDaHJvbWl1bUJyaWRnZSB0byBkZXRlcm1pbmUgaWYKIC8vICAgd2UncmUgaW4g
bGF5b3V0IHRlc3QgbW9kZS4KIC8vIC0gdXBkYXRlQWN0aXZlU3RhdGUoKSBhbmQgaXRzIHVzZSB0
byB1cGRhdGUgdGhlIGNlbGxzJyB2aXN1YWwgYXBwZWFyYW5jZS4KKy8vIC0gQWx0ZXJpbmcgcGFp
bnRNZWRpYVNsaWRlclRyYWNrKCkgYW5kIGV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKSB0
byBub3QKKy8vICAgdXNlIHZhcmlhYmxlcyBub3QgZGVmaW5lZC4gKFRoZSBlbnRpcmUgd2F5IHdl
J3JlIGRyYXdpbmcgbWVkaWEgY29udHJvbHMgaXMKKy8vICAgVEJELikKIC8vCiAvLyBGb3IgYWxs
IG90aGVyIGRpZmZlcmVuY2VzLCBpZiBpdCB3YXMgaW50cm9kdWNlZCBpbiB0aGlzIGZpbGUsIHRo
ZW4gdGhlCiAvLyBtYWludGFpbmVyIGZvcmdvdCB0byBpbmNsdWRlIGl0IGluIHRoZSBsaXN0OyBv
dGhlcndpc2UgaXQgaXMgYW4gdXBkYXRlIHRoYXQKQEAgLTE2ODEsNyArMTY4NCw2IEBAIGJvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6cGFpbnRNZWRpYVMKICAgICBmbG9hdCBkdXJhdGlvbiA9
IDA7CiAgICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBtZWRpYUVsZW1lbnQtPnBsYXllcigp
KSB7CiAgICAgICAgIGR1cmF0aW9uID0gcGxheWVyLT5kdXJhdGlvbigpOwotICAgICAgICB0aW1l
TG9hZGVkID0gcGxheWVyLT5tYXhUaW1lQnVmZmVyZWQoKTsKICAgICAgICAgY3VycmVudFRpbWUg
PSBwbGF5ZXItPmN1cnJlbnRUaW1lKCk7CiAgICAgfQogIAo=
</data>
<flag name="review"
          id="20835"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
          </attachment>
      

    </bug>

</bugzilla>