<?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>14732</bug_id>
          
          <creation_ts>2007-07-23 12:06:55 -0700</creation_ts>
          <short_desc>[gtk] Rename *Gdk to *Gtk</short_desc>
          <delta_ts>2007-09-23 14:52:40 -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>New Bugs</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>14725</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Holger Freyther">zecke</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alp</cc>
    
    <cc>jasuarez</cc>
    
    <cc>jmalonzo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>3935</commentid>
    <comment_count>0</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-23 12:06:55 -0700</bug_when>
    <thetext>Rename the WebKit/Gdk port to WebKit/Gtk. This should involve renaming the library and the files currently named *Gdk.
The question is what to do with the WebKitGtk namespace as WebKitGtk::FrameLoaderClientGtk looks redundant. Proposal would be to remove the Gtk from the namespace once we do the renaming.

Someone should prepare a script to do the renaming as svn-create-patch could be error prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3928</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-07-23 13:01:19 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Rename the WebKit/Gdk port to WebKit/Gtk. This should involve renaming the
&gt; library and the files currently named *Gdk.
&gt; The question is what to do with the WebKitGtk namespace as
&gt; WebKitGtk::FrameLoaderClientGtk looks redundant. Proposal would be to remove
&gt; the Gtk from the namespace once we do the renaming.

   I think removing Gtk from both the namespace and the class names is good. WebKit::FrameLoaderClient is all you need.

&gt; Someone should prepare a script to do the renaming as svn-create-patch could be
&gt; error prone.

You should use WebKitTools/Scripts/do-{webcore,file}-rename to accomplish this. It&apos;s been used a few times before for tasks like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3913</commentid>
    <comment_count>2</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-23 13:14:39 -0700</bug_when>
    <thetext>Add the Gtk keyword, even to the curl bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2406</commentid>
    <comment_count>3</comment_count>
      <attachid>15953</attachid>
    <who name="Juan A. Suarez">jasuarez</who>
    <bug_when>2007-08-13 10:26:38 -0700</bug_when>
    <thetext>Created attachment 15953
Rename files from *Gdk to *Gtk (first part)

This is the first part of the patch to fix this bug.

It renames files from *Gdk* to *Gtk*. Unfortunately, some directories couldn&apos;t be renamed, as subversion warns me that first it requires to do a commit first with the changes done.

This patch doesn&apos;t changes the API at all, but changes the Launcher, which now is called GtkLauncher. Anyway, both the launcher and the build system could still be called using &apos;--gdk&apos; option.

In the future I pretend upload to new patches.

  1) A patch that definitely changes all references from gdk to gtk (in the names of files and directories). This requires to commit the present patch.

  2) A patch that changes the gdk references in the API code. This will be done following the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2097</commentid>
    <comment_count>4</comment_count>
      <attachid>16008</attachid>
    <who name="Juan A. Suarez">jasuarez</who>
    <bug_when>2007-08-17 08:05:25 -0700</bug_when>
    <thetext>Created attachment 16008
Rename files from *Gdk to *Gtk (first part).

This patch changes the previous patch by adding a script to do the task.

At now, it renames all *Gdk files to *Gtk files, and updates the references in the  source code.

Besides this, the new library is WebKitGtk (instead of WebKitGdk), and the launcher becomes GtkLauncher.

Two changes are not done yet in this patch:

   * The scripts still uses &quot;--gdk&quot; option instead of &quot;--gtk&quot; option.
   * The directories were not renamed. This is due because we can&apos;t rename both the directories and its contents at the same time. So this script only renames the files inside the directories. ASAP they will be commited in the trunk, a patch to rename the directories will be uploaded.
   * The functions were not renamed. So we have, as example, &quot;RenderThemeGdk&quot; object instead of &quot;RenderTheme&quot;. This task will be done in future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2088</commentid>
    <comment_count>5</comment_count>
      <attachid>16008</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-08-17 10:08:56 -0700</bug_when>
    <thetext>Comment on attachment 16008
Rename files from *Gdk to *Gtk (first part).

I think it would be better to use the do-webcore-rename script for this purpose. It has been used before and should work as desired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2082</commentid>
    <comment_count>6</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-17 10:59:13 -0700</bug_when>
    <thetext>Do we have any examples for do-webcore-rename? The script itself has no documentation and a grep didn&apos;t expose any examples.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2080</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-08-17 11:03:41 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Do we have any examples for do-webcore-rename? The script itself has no
&gt; documentation and a grep didn&apos;t expose any examples.

All you have to do is modify the %renames hash (some examples are included in the script):

my %renames = ( 
    &quot;xxx&quot; =&gt; &quot;yyy&quot;,
    #&quot;KURL&quot; =&gt; &quot;PlatformURL&quot;,
    #&quot;KURLMac&quot; =&gt; &quot;PlatformURLMac&quot;,
    #&quot;KURL_H_&quot; =&gt; &quot;PlatformURL_h&quot;,
);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1805</commentid>
    <comment_count>8</comment_count>
    <who name="Juan A. Suarez">jasuarez</who>
    <bug_when>2007-08-21 07:10:04 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 16008 [edit])
&gt; I think it would be better to use the do-webcore-rename script for this
&gt; purpose. It has been used before and should work as desired.
&gt; 

So, how should I do the patch? Modifying the script itself, or creating a new copy from it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1797</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-08-21 09:22:52 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 16008 [edit] [edit])
&gt; &gt; I think it would be better to use the do-webcore-rename script for this
&gt; &gt; purpose. It has been used before and should work as desired.
&gt; &gt; 
&gt; 
&gt; So, how should I do the patch? Modifying the script itself, or creating a new
&gt; copy from it?

   Probably the best thing to do would be to modify the script locally to do the renames that you want, run the script, ensure everything builds and runs, then make a diff of the result and post it here as a patch. When you upload the patch, you can also paste into Bugzilla your %renames hash from the script that you used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1791</commentid>
    <comment_count>10</comment_count>
      <attachid>16054</attachid>
    <who name="Juan A. Suarez">jasuarez</who>
    <bug_when>2007-08-21 09:43:08 -0700</bug_when>
    <thetext>Created attachment 16054
Rename files from *Gdk to *Gtk (first part)

This patch is the result of using do-webcore-rename to do the rename from *Gdk to *Gtk.

This patch only renames the files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1792</commentid>
    <comment_count>11</comment_count>
      <attachid>16055</attachid>
    <who name="Juan A. Suarez">jasuarez</who>
    <bug_when>2007-08-21 09:44:31 -0700</bug_when>
    <thetext>Created attachment 16055
Hash files renamed

Here is a patch with the files renamed to be applied to do-webcore-rename.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147</commentid>
    <comment_count>12</comment_count>
      <attachid>16055</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-09-22 13:41:06 -0700</bug_when>
    <thetext>Comment on attachment 16055
Hash files renamed

This looks good to me. A committer should apply this patch, run the script, and commit the result with your ChangeLog from attachment 16054. I think also that some new *Gdk files have been added since this patch was uploaded -- perhaps the person running the script can add those as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142</commentid>
    <comment_count>13</comment_count>
      <attachid>16054</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-09-22 13:41:22 -0700</bug_when>
    <thetext>Comment on attachment 16054
Rename files from *Gdk to *Gtk (first part)

Clearing review flag since we&apos;ll want someone to run the script rather than commit this directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144</commentid>
    <comment_count>14</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-09-22 14:26:09 -0700</bug_when>
    <thetext>I have http://page.mi.fu-berlin.de/freyther/webkit/webkit-gdk-to-gtk-renaming-r0.patch (http://page.mi.fu-berlin.de/freyther/webkit/webkit-gdk-to-gtk-renaming.diff which includes the change to the hash as well) applied in my working copy and I&apos;m ready to do a commit.

Additionally to the script I&apos;m also changing the cmd line options and defines from gdk to gtk and rename the directories. I can do these things in two different commits but have waited for alp to spare a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111</commentid>
    <comment_count>15</comment_count>
      <attachid>16361</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-09-23 07:25:56 -0700</bug_when>
    <thetext>Created attachment 16361
The used hash for the renames

Just for reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112</commentid>
    <comment_count>16</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-09-23 07:26:45 -0700</bug_when>
    <thetext>Landed in r25703.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84</commentid>
    <comment_count>17</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-09-23 14:52:40 -0700</bug_when>
    <thetext>*** Bug 14497 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15953</attachid>
            <date>2007-08-13 10:26:38 -0700</date>
            <delta_ts>2007-08-17 08:05:25 -0700</delta_ts>
            <desc>Rename files from *Gdk to *Gtk (first part)</desc>
            <filename>rename_gdk_to_gtk_r1.patch</filename>
            <type>text/plain</type>
            <size>304111</size>
            <attacher name="Juan A. Suarez">jasuarez</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDI1MDU0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOSBAQAorMjAwNy0wOC0x
MyAgSnVhbiBBLiBTdWFyZXogUm9tZXJvICA8amFzdWFyZXpAaWdhbGlhLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5wcm86IHJl
bmFtZWQgR2RrTGF1bmNoZXIucHJvIHRvIEd0a0xhdW5jaGVyLnBybworCiAyMDA3LTA3LTI5ICBC
cmlhbiBNYXN0ZW5icm9vayAgPGJyaWFuQG1hc3RlbmJyb29rLm5ldD4KIAogICAgICAgICBCdWls
ZCBmaXggZm9yIFdlYktpdC9HdGsgdG8gY29tcGlsZSBvbiBGZWRvcmEgNyBhcyBkZXNjcmliZWQg
aW4KSW5kZXg6IFdlYktpdC5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LnBybwkocmV2aXNpb24g
MjUwNTQpCisrKyBXZWJLaXQucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw0ICsxNCw0IEBAIHF0
LXBvcnQgewogfQogCiBnZGstcG9ydDpTVUJESVJTICs9IFwKLSAgICAgICAgV2ViS2l0VG9vbHMv
R2RrTGF1bmNoZXIKKyAgICAgICAgV2ViS2l0VG9vbHMvR2RrTGF1bmNoZXIvR3RrTGF1bmNoZXIu
cHJvCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjUwNTQpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDY5IEBACisyMDA3LTA4LTEzICBKdWFuIEEuIFN1YXJleiBSb21lcm8gIDxq
YXN1YXJlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisJ
UmVuYW1lZCBmaWxlcyBmcm9tICpHZGsgdG8gKkd0ayAoc2VlICMxNDczMikuCisKKyAgICAgICAg
KiBQcm9qZWN0cy9nZGsvd2ViY29yZS1nZGsuYmtsOgorICAgICAgICAqIFdlYkNvcmUucHJvOgor
ICAgICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBsb2FkZXIvZ2RrL0RvY3Vt
ZW50TG9hZGVyR2RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvZ2RrL0RvY3VtZW50
TG9hZGVyR3RrLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9sb2FkZXIvZ2RrL0RvY3VtZW50TG9h
ZGVyR2RrLmNwcC4KKyAgICAgICAgKiBwYWdlL2dkay9EcmFnQ29udHJvbGxlckdkay5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogcGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwOiBDb3BpZWQg
ZnJvbSBXZWJDb3JlL3BhZ2UvZ2RrL0RyYWdDb250cm9sbGVyR2RrLmNwcC4KKyAgICAgICAgKiBw
YWdlL2dkay9FdmVudEhhbmRsZXJHZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvZ2Rr
L0V2ZW50SGFuZGxlckd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGFnZS9nZGsvRXZlbnRI
YW5kbGVyR2RrLmNwcC4KKyAgICAgICAgKiBwYWdlL2dkay9GcmFtZUdkay5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGFnZS9nZGsvRnJhbWVHdGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3Bh
Z2UvZ2RrL0ZyYW1lR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvQ29va2llSmFyR2Rr
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvQ29va2llSmFyR3RrLmNwcDog
Q29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNwcC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvQ3Vyc29yR3RrLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
Q3Vyc29yR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRHJhZ0RhdGFHZGsuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dkay9EcmFnRGF0YUd0ay5jcHA6IENvcGllZCBm
cm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0RyYWdEYXRhR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvRHJhZ0ltYWdlR2RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
ZGsvRHJhZ0ltYWdlR3RrLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRHJh
Z0ltYWdlR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udENhY2hlR2RrLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udENhY2hlR3RrLmNwcDogQ29waWVk
IGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udENhY2hlR2RrLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dkay9Gb250RGF0YUd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Zv
bnREYXRhR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udEdkay5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0ZvbnRHdGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJD
b3JlL3BsYXRmb3JtL2dkay9Gb250R2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9u
dFBsYXRmb3JtRGF0YUdkay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0Zv
bnRQbGF0Zm9ybURhdGFHdGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9G
b250UGxhdGZvcm1EYXRhR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvR2x5cGhQYWdl
VHJlZU5vZGVHZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dkay9HbHlwaFBh
Z2VUcmVlTm9kZUd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBo
UGFnZVRyZWVOb2RlR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvS2V5RXZlbnRHZGsu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dkay9LZXlFdmVudEd0ay5jcHA6IENv
cGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9nZGsvTG9nZ2luZ0dkay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ2RrL0xvZ2dpbmdHdGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9M
b2dnaW5nR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvTUlNRVR5cGVSZWdpc3RyeUdk
ay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2RrL01JTUVUeXBlUmVnaXN0cnlH
dGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9NSU1FVHlwZVJlZ2lzdHJ5
R2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHdGsuY3BwOiBDb3BpZWQgZnJv
bSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2RrLmNwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvUGxhdGZvcm1TY3JlZW5HZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dkay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1BsYXRmb3JtU2NyZWVuR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUGxh
dGZvcm1TY3JvbGxCYXJHZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dkay9Q
bGF0Zm9ybVNjcm9sbEJhckd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUG9wdXBN
ZW51R2RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUG9wdXBNZW51R3Rr
LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUG9wdXBNZW51R2RrLmNwcC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUmVu
ZGVyVGhlbWVHdGsuaDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhl
bWVHZGsuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0dkay5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHdGsuY3BwOiBDb3BpZWQgZnJv
bSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvU291bmRHZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dkay9T
b3VuZEd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1NvdW5kR2RrLmNw
cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHdGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJD
b3JlL3BsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
ZGsvV2lkZ2V0R2RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvV2lkZ2V0
R3RrLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dkay9JbWFnZUd0ay5jcHA6IENvcGllZCBmcm9t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2RrL0ltYWdlR2RrLmNwcC4KKwogMjAwNy0wOC0x
MyAgTGFycyBLbm9sbCAgPGxhcnNAdHJvbGx0ZWNoLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTaW1vbi4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMjUwNTQpCisrKyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3
b3JraW5nIGNvcHkpCkBAIC04NjIsMzUgKzg2MiwzNSBAQCBnZGstcG9ydCB7CiAgICAgU09VUkNF
UyArPSBcCiAgICAgICAgIHBsYXRmb3JtL1RleHRDb2RlY0lDVS5jcHAgXAogICAgICAgICBwbGF0
Zm9ybS9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgXAotICAgICAgICBwYWdlL2dkay9FdmVudEhh
bmRsZXJHZGsuY3BwIFwKLSAgICAgICAgcGFnZS9nZGsvRnJhbWVHZGsuY3BwIFwKLSAgICAgICAg
cGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHZGsuY3BwIFwKLSAgICAgICAgbG9hZGVyL2dkay9Eb2N1
bWVudExvYWRlckdkay5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNw
cCBcCi0gICAgICAgIHBsYXRmb3JtL2dkay9DdXJzb3JHZGsuY3BwIFwKLSAgICAgICAgcGxhdGZv
cm0vZ2RrL0RyYWdEYXRhR2RrLmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dkay9EcmFnSW1hZ2VH
ZGsuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRDYWNoZUdkay5jcHAgXAotICAgICAg
ICBwbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL0Zv
bnRHZGsuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3Bw
IFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNwcCBcCi0gICAg
ICAgIHBsYXRmb3JtL2dkay9LZXlFdmVudEdkay5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9nZGsv
TG9nZ2luZ0dkay5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9nZGsvTUlNRVR5cGVSZWdpc3RyeUdk
ay5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAgXAotICAgICAg
ICBwbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JlZW5HZGsuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0v
Z2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dkay9Qb3B1
cE1lbnVHZGsuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcCBc
Ci0gICAgICAgIHBsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcCBcCisgICAgICAgIHBhZ2Uv
Z2RrL0V2ZW50SGFuZGxlckd0ay5jcHAgXAorICAgICAgICBwYWdlL2dkay9GcmFtZUd0ay5jcHAg
XAorICAgICAgICBwYWdlL2dkay9EcmFnQ29udHJvbGxlckd0ay5jcHAgXAorICAgICAgICBsb2Fk
ZXIvZ2RrL0RvY3VtZW50TG9hZGVyR3RrLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dkay9Db29r
aWVKYXJHdGsuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ2RrL0N1cnNvckd0ay5jcHAgXAorICAg
ICAgICBwbGF0Zm9ybS9nZGsvRHJhZ0RhdGFHdGsuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ2Rr
L0RyYWdJbWFnZUd0ay5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udENhY2hlR3RrLmNw
cCBcCisgICAgICAgIHBsYXRmb3JtL2dkay9Gb250RGF0YUd0ay5jcHAgXAorICAgICAgICBwbGF0
Zm9ybS9nZGsvRm9udEd0ay5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3Jt
RGF0YUd0ay5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9nZGsvR2x5cGhQYWdlVHJlZU5vZGVHdGsu
Y3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ2RrL0tleUV2ZW50R3RrLmNwcCBcCisgICAgICAgIHBs
YXRmb3JtL2dkay9Mb2dnaW5nR3RrLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dkay9NSU1FVHlw
ZVJlZ2lzdHJ5R3RrLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R3RrLmNw
cCBcCisgICAgICAgIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAgXAorICAgICAg
ICBwbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHdGsuY3BwIFwKKyAgICAgICAgcGxhdGZv
cm0vZ2RrL1BvcHVwTWVudUd0ay5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhl
bWVHdGsuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHdGsuY3BwIFwKICAg
ICAgICAgcGxhdGZvcm0vZ2RrL1NoYXJlZFRpbWVyTGludXguY3BwIFwKLSAgICAgICAgcGxhdGZv
cm0vZ2RrL1NvdW5kR2RrLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dkay9Tb3VuZEd0ay5jcHAg
XAogICAgICAgICBwbGF0Zm9ybS9nZGsvU3lzdGVtVGltZUxpbnV4LmNwcCBcCiAgICAgICAgIHBs
YXRmb3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2Rr
L1doZWVsRXZlbnRHZGsuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAg
XAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwIFwKKyAgICAgICAg
cGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHdGsuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ2RrL1dp
ZGdldEd0ay5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHdGsuY3Bw
IFwKICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAg
XAogICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNw
cCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0FmZmluZVRyYW5zZm9ybUNhaXJv
LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmVTb3VyY2VzLmJrbAkocmV2aXNpb24gMjUwNTQpCisrKyBXZWJDb3JlL1dl
YkNvcmVTb3VyY2VzLmJrbAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDkgKzEyMyw5IEBACiAgICAg
ICAgIHBhZ2UvTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5jcHAKICAgICAgICAgcGFnZS9Q
YWdlLmNwcAogICAgICAgICBwYWdlL1NldHRpbmdzLmNwcAotICAgICAgICBwYWdlL2dkay9FdmVu
dEhhbmRsZXJHZGsuY3BwCisgICAgICAgIHBhZ2UvZ2RrL0V2ZW50SGFuZGxlckd0ay5jcHAKICAg
ICAgICAgcGFnZS9nZGsvQ29udGV4dE1lbnVDbGllbnRHZGsuY3BwCi0gICAgICAgIHBhZ2UvZ2Rr
L0RyYWdDb250cm9sbGVyR2RrLmNwcAorICAgICAgICBwYWdlL2dkay9EcmFnQ29udHJvbGxlckd0
ay5jcHAKICAgICAgICAgcGFnZS9nZGsvSW5zcGVjdG9yQ2xpZW50R2RrLmNwcAogICAgIDwvc2V0
PgogCkBAIC0xNTMsNyArMTUzLDcgQEAKICAgICAgICAgbG9hZGVyL1RleHREb2N1bWVudC5jcHAK
ICAgICAgICAgbG9hZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwCiAgICAgICAgIGxvYWRlci9s
b2FkZXIuY3BwCi0gICAgICAgIGxvYWRlci9nZGsvRG9jdW1lbnRMb2FkZXJHZGsuY3BwCisgICAg
ICAgIGxvYWRlci9nZGsvRG9jdW1lbnRMb2FkZXJHdGsuY3BwCiAgICAgICAgIGxvYWRlci9nZGsv
RnJhbWVMb2FkZXJDbGllbnRHZGsuY3BwCiAgICAgPC9zZXQ+CiAKSW5kZXg6IFdlYkNvcmUvUHJv
amVjdHMvZ2RrL3dlYmNvcmUtZ2RrLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1Byb2plY3Rz
L2dkay93ZWJjb3JlLWdkay5ia2wJKHJldmlzaW9uIDI1MDU0KQorKysgV2ViQ29yZS9Qcm9qZWN0
cy9nZGsvd2ViY29yZS1nZGsuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC00NCwzMCArNDQsMzAgQEAK
ICAgICAgICAgPGRlZmluZT5FTkFCTEVfWFBBVEg8L2RlZmluZT4KICAKICAgICAgICAgPHNvdXJj
ZXM+Ci0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNwcAotICAgICAgICAg
ICAgcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9E
cmFnRGF0YUdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9EcmFnSW1hZ2VHZGsuY3Bw
CisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvQ29va2llSmFyR3RrLmNwcAorICAgICAgICAgICAg
cGxhdGZvcm0vZ2RrL0N1cnNvckd0ay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9EcmFn
RGF0YUd0ay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9EcmFnSW1hZ2VHdGsuY3BwCiAg
ICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRWRpdG9yQ2xpZW50R2RrLmNwcAotICAgICAgICAgICAg
cGxhdGZvcm0vZ2RrL0ZvbnRDYWNoZUdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9G
b250RGF0YUdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250R2RrLmNwcAotICAg
ICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCi0gICAgICAgICAg
ICBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvR2x5
cGhQYWdlVHJlZU5vZGVHZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvS2V5RXZlbnRH
ZGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udENhY2hlR3RrLmNwcAorICAgICAg
ICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnREYXRhR3RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0v
Z2RrL0ZvbnRHdGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0
YUd0ay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9GcmFtZUd0ay5jcHAKKyAgICAgICAg
ICAgIHBsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUd0ay5jcHAKKyAgICAgICAgICAgIHBs
YXRmb3JtL2dkay9LZXlFdmVudEd0ay5jcHAKICAgICAgICAgICAgIHBsYXRmb3JtL2dkay9NaW1l
VHlwZVJlZ2lzdHJ5R2RrLmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRH
ZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvUG9wdXBNZW51R2RrLmNwcAotICAgICAg
ICAgICAgcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAotICAgICAgICAgICAgcGxhdGZv
cm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvTW91c2VF
dmVudEd0ay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9Qb3B1cE1lbnVHdGsuY3BwCisg
ICAgICAgICAgICBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHdGsuY3BwCisgICAgICAgICAgICBw
bGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0d0ay5jcHAKICAgICAgICAgICAgIHBsYXRmb3JtL2dkay9T
Y3JlZW5HZGsuY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvU2hhcmVkVGltZXJMaW51eC5j
cHAKICAgICAgICAgICAgIHBsYXRmb3JtL2dkay9TeXN0ZW1UaW1lTGludXguY3BwCiAgICAgICAg
ICAgICBwbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAotICAgICAgICAgICAgcGxh
dGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwCi0gICAgICAgICAgICBwbGF0Zm9ybS9nZGsvV2lk
Z2V0R2RrLmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ2RrL0ltYWdlR2RrLmNw
cAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHdGsuY3BwCisgICAgICAgICAg
ICBwbGF0Zm9ybS9nZGsvV2lkZ2V0R3RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZ2RrL0ltYWdlR3RrLmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9nZGsvUmVz
b3VyY2VIYW5kbGVDdXJsLmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9nZGsvUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyLmNwcAogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9nZGsvRG9jdW1l
bnRMb2FkZXJHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL2dkay9Eb2N1bWVu
dExvYWRlckdkay5jcHAJKHJldmlzaW9uIDI1MDU0KQorKysgV2ViQ29yZS9sb2FkZXIvZ2RrL0Rv
Y3VtZW50TG9hZGVyR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSAKLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotYm9vbCBEb2N1bWVudExvYWRlcjo6Z2V0UmVzcG9uc2VNb2RpZmllZEhlYWRl
cihTdHJpbmcmIG1vZGlmaWVkKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi19Ci0KSW5kZXg6IFdlYkNvcmUvbG9hZGVyL2dkay9Eb2N1bWVu
dExvYWRlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvZ2RrL0RvY3VtZW50
TG9hZGVyR3RrLmNwcAkocmV2aXNpb24gMjQ5OTIpCShmcm9tIFdlYkNvcmUvbG9hZGVyL2dkay9E
b2N1bWVudExvYWRlckdkay5jcHA6MjQ5OTIpCisrKyBXZWJDb3JlL2xvYWRlci9nZGsvRG9jdW1l
bnRMb2FkZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorIAorbmFtZXNwYWNlIFdlYkNv
cmUgeworCitib29sIERvY3VtZW50TG9hZGVyOjpnZXRSZXNwb25zZU1vZGlmaWVkSGVhZGVyKFN0
cmluZyYgbW9kaWZpZWQpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK30KKwpJbmRleDogV2ViQ29yZS9wYWdlL2dkay9EcmFnQ29udHJvbGxl
ckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2dkay9EcmFnQ29udHJvbGxlckdk
ay5jcHAJKHJldmlzaW9uIDI1MDU0KQorKysgV2ViQ29yZS9wYWdlL2dkay9EcmFnQ29udHJvbGxl
ckdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIuaCIKLQotI2luY2x1ZGUg
IkRyYWdEYXRhLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
LSNpbmNsdWRlICJQYWdlLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6IFRo
ZXNlIHZhbHVlcyBhcmUgc3RyYWlnaHQgb3V0IG9mIERyYWdDb250cm9sbGVyTWFjLCBzbyBwcm9i
YWJseSBoYXZlIAotLy8gbGl0dGxlIGNvcnJlbGF0aW9uIHdpdGggR2RrIHN0YW5kYXJkcy4uLgot
Y29uc3QgaW50IERyYWdDb250cm9sbGVyOjpMaW5rRHJhZ0JvcmRlckluc2V0ID0gMjsKLWNvbnN0
IGludCBEcmFnQ29udHJvbGxlcjo6TWF4T3JpZ2luYWxJbWFnZUFyZWEgPSAxNTAwICogMTUwMDsK
LWNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25SaWdodEluc2V0ID0gNzsKLWNvbnN0
IGludCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ljb25Cb3R0b21JbnNldCA9IDM7Ci0KLWNvbnN0IGZs
b2F0IERyYWdDb250cm9sbGVyOjpEcmFnSW1hZ2VBbHBoYSA9IDAuNzVmOwotCi1ib29sIERyYWdD
b250cm9sbGVyOjppc0NvcHlLZXlEb3duKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0gICAg
Ci1EcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBk
cmFnRGF0YSkKLXsKLSAgICAvL0ZJWE1FOiBUaGlzIGxvZ2ljIGlzIGluY29tcGxldGUgICAgICAg
IAotICAgICBpZiAoZHJhZ0RhdGEtPmNvbnRhaW5zVVJMKCkpCi0gICAgICAgIHJldHVybiBEcmFn
T3BlcmF0aW9uQ29weTsKLQotICAgcmV0dXJuIERyYWdPcGVyYXRpb25Ob25lOwotfQotCi1jb25z
dCBJbnRTaXplJiBEcmFnQ29udHJvbGxlcjo6bWF4RHJhZ0ltYWdlU2l6ZSgpCi17Ci0gICAgc3Rh
dGljIGNvbnN0IEludFNpemUgbWF4RHJhZ0ltYWdlU2l6ZSg0MDAsIDQwMCk7Ci0gICAgCi0gICAg
cmV0dXJuIG1heERyYWdJbWFnZVNpemU7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGFnZS9nZGsv
RHJhZ0NvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9nZGsvRHJh
Z0NvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAyNDk5MikJKGZyb20gV2ViQ29yZS9wYWdlL2dk
ay9EcmFnQ29udHJvbGxlckdkay5jcHA6MjQ5OTIpCisrKyBXZWJDb3JlL3BhZ2UvZ2RrL0RyYWdD
b250cm9sbGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgorCisj
aW5jbHVkZSAiRHJhZ0RhdGEuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBG
SVhNRTogVGhlc2UgdmFsdWVzIGFyZSBzdHJhaWdodCBvdXQgb2YgRHJhZ0NvbnRyb2xsZXJNYWMs
IHNvIHByb2JhYmx5IGhhdmUgCisvLyBsaXR0bGUgY29ycmVsYXRpb24gd2l0aCBHZGsgc3RhbmRh
cmRzLi4uCitjb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkxpbmtEcmFnQm9yZGVySW5zZXQgPSAy
OworY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpNYXhPcmlnaW5hbEltYWdlQXJlYSA9IDE1MDAg
KiAxNTAwOworY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvblJpZ2h0SW5zZXQgPSA3
OworY29uc3QgaW50IERyYWdDb250cm9sbGVyOjpEcmFnSWNvbkJvdHRvbUluc2V0ID0gMzsKKwor
Y29uc3QgZmxvYXQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJbWFnZUFscGhhID0gMC43NWY7CisKK2Jv
b2wgRHJhZ0NvbnRyb2xsZXI6OmlzQ29weUtleURvd24oKQoreworICAgIHJldHVybiBmYWxzZTsK
K30KKyAgICAKK0RyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6OmRyYWdPcGVyYXRpb24oRHJh
Z0RhdGEqIGRyYWdEYXRhKQoreworICAgIC8vRklYTUU6IFRoaXMgbG9naWMgaXMgaW5jb21wbGV0
ZSAgICAgICAgCisgICAgIGlmIChkcmFnRGF0YS0+Y29udGFpbnNVUkwoKSkKKyAgICAgICAgcmV0
dXJuIERyYWdPcGVyYXRpb25Db3B5OworCisgICByZXR1cm4gRHJhZ09wZXJhdGlvbk5vbmU7Cit9
CisKK2NvbnN0IEludFNpemUmIERyYWdDb250cm9sbGVyOjptYXhEcmFnSW1hZ2VTaXplKCkKK3sK
KyAgICBzdGF0aWMgY29uc3QgSW50U2l6ZSBtYXhEcmFnSW1hZ2VTaXplKDQwMCwgNDAwKTsKKyAg
ICAKKyAgICByZXR1cm4gbWF4RHJhZ0ltYWdlU2l6ZTsKK30KKworfQpJbmRleDogV2ViQ29yZS9w
YWdlL2dkay9FdmVudEhhbmRsZXJHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9n
ZGsvRXZlbnRIYW5kbGVyR2RrLmNwcAkocmV2aXNpb24gMjUwNTQpCisrKyBXZWJDb3JlL3BhZ2Uv
Z2RrL0V2ZW50SGFuZGxlckdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTE5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0KLSNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUg
IkZvY3VzQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1ZGUgIk1vdXNlRXZlbnRX
aXRoSGl0VGVzdFJlc3VsdHMuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1
ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwotCi1ib29sIEV2ZW50
SGFuZGxlcjo6dGFic1RvQWxsQ29udHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50
VmlldygpCi17Ci0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCi0gICAgICAg
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5zZXRGb2N1c2VkRnJhbWUobV9mcmFtZSk7Ci19Ci0K
LWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25z
dCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBldmVudCkKLXsKLSAgICAvLyBGaWd1cmUg
b3V0IHdoaWNoIHZpZXcgdG8gc2VuZCB0aGUgZXZlbnQgdG8uCi0gICAgUmVuZGVyT2JqZWN0KiB0
YXJnZXQgPSBldmVudC50YXJnZXROb2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVy
KCkgOiAwOwotICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRn
ZXQoc3RhdGljX2Nhc3Q8UmVuZGVyV2lkZ2V0Kj4odGFyZ2V0KS0+d2lkZ2V0KCkpOwotfQotCi1i
b29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVuZGVy
V2lkZ2V0KiByZW5kZXJXaWRnZXQpCi17Ci0gICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRv
V2lkZ2V0KHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpOwotfQotCi1ib29sIEV2ZW50SGFuZGxlcjo6
cGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjpl
dmVudEFjdGl2YXRlZFZpZXcoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgY29uc3QKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZl
bnRUb1dpZGdldChQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQ2xpcGJvYXJkKiBFdmVu
dEhhbmRsZXI6OmNyZWF0ZURyYWdnaW5nQ2xpcGJvYXJkKCkgY29uc3QgCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NN
b3VzZVByZXNzRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1l
diwgRnJhbWUqIHN1YmZyYW1lKQotewotICAgIHN1YmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KG1ldi5ldmVudCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZU1vdmVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVu
dFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1bHQq
IGhvdmVyZWROb2RlKQotewotICAgIHN1YmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91
c2VNb3ZlRXZlbnQobWV2LmV2ZW50KCksIGhvdmVyZWROb2RlKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUo
TW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCi17Ci0g
ICAgc3ViZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChtZXYu
ZXZlbnQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNz
TW91c2VQcmVzc0V2ZW50VG9TY3JvbGxiYXIoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYs
IFBsYXRmb3JtU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGFnZS9nZGsvRXZlbnRI
YW5kbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ2RrL0V2ZW50SGFuZGxl
ckd0ay5jcHAJKHJldmlzaW9uIDI1MDU0KQkoZnJvbSBXZWJDb3JlL3BhZ2UvZ2RrL0V2ZW50SGFu
ZGxlckdkay5jcHA6MjUwNTQpCisrKyBXZWJDb3JlL3BhZ2UvZ2RrL0V2ZW50SGFuZGxlckd0ay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgor
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiS2V5
Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVNjcm9sbEJhci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgor
I2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBFdmVudE5hbWVzOworCitib29sIEV2ZW50SGFuZGxlcjo6dGFic1RvQWxsQ29u
dHJvbHMoS2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgRXZlbnRIYW5kbGVyOjpmb2N1c0RvY3VtZW50VmlldygpCit7CisgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCkpCisgICAgICAgIHBhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLT5zZXRGb2N1c2VkRnJhbWUobV9mcmFtZSk7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpw
YXNzV2lkZ2V0TW91c2VEb3duRXZlbnRUb1dpZGdldChjb25zdCBNb3VzZUV2ZW50V2l0aEhpdFRl
c3RSZXN1bHRzJiBldmVudCkKK3sKKyAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIHZpZXcgdG8gc2Vu
ZCB0aGUgZXZlbnQgdG8uCisgICAgUmVuZGVyT2JqZWN0KiB0YXJnZXQgPSBldmVudC50YXJnZXRO
b2RlKCkgPyBldmVudC50YXJnZXROb2RlKCktPnJlbmRlcmVyKCkgOiAwOworICAgIGlmICghdGFy
Z2V0IHx8ICF0YXJnZXQtPmlzV2lkZ2V0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gcGFzc01vdXNlRG93bkV2ZW50VG9XaWRnZXQoc3RhdGljX2Nhc3Q8UmVuZGVy
V2lkZ2V0Kj4odGFyZ2V0KS0+d2lkZ2V0KCkpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFz
c1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQoUmVuZGVyV2lkZ2V0KiByZW5kZXJXaWRnZXQp
Cit7CisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHJlbmRlcldpZGdldC0+
d2lkZ2V0KCkpOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlRG93bkV2ZW50VG9X
aWRnZXQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXcoY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChQbGF0Zm9ybVdo
ZWVsRXZlbnQmLCBXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworQ2xpcGJvYXJkKiBFdmVudEhhbmRsZXI6OmNyZWF0ZURyYWdn
aW5nQ2xpcGJvYXJkKCkgY29uc3QgCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVByZXNzRXZlbnRUb1N1YmZy
YW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lKQor
eworICAgIHN1YmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KG1l
di5ldmVudCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBh
c3NNb3VzZU1vdmVFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYg
bWV2LCBGcmFtZSogc3ViZnJhbWUsIEhpdFRlc3RSZXN1bHQqIGhvdmVyZWROb2RlKQoreworICAg
IHN1YmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VNb3ZlRXZlbnQobWV2LmV2ZW50
KCksIGhvdmVyZWROb2RlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFdmVudEhhbmRs
ZXI6OnBhc3NNb3VzZVJlbGVhc2VFdmVudFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0
UmVzdWx0cyYgbWV2LCBGcmFtZSogc3ViZnJhbWUpCit7CisgICAgc3ViZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChtZXYuZXZlbnQoKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VQcmVzc0V2ZW50VG9TY3Jv
bGxiYXIoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYsIFBsYXRmb3JtU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30KSW5kZXg6IFdlYkNvcmUvcGFnZS9nZGsvRnJhbWVHZGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9nZGsvRnJhbWVHZGsuY3BwCShyZXZpc2lvbiAyNTA1NCkKKysrIFdlYkNv
cmUvcGFnZS9nZGsvRnJhbWVHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVt
bWVsQGdtYWlsLmNvbSAKLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRnJhbWU6Omlzc3VlVHJhbnNwb3NlQ29tbWFu
ZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZTo6Y2xlYW51cFBs
YXRmb3JtU2NyaXB0T2JqZWN0cygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotRHJh
Z0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKSAKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIEZyYW1lOjpkYXNoYm9hcmRSZWdp
b25zQ2hhbmdlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZTo6
c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkKLXsKLSAgIG5vdEltcGxlbWVudGVkKCk7IAotfQotfQpJ
bmRleDogV2ViQ29yZS9wYWdlL2dkay9GcmFtZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL2dkay9GcmFtZUd0ay5jcHAJKHJldmlzaW9uIDI0OTkyKQkoZnJvbSBXZWJDb3JlL3Bh
Z2UvZ2RrL0ZyYW1lR2RrLmNwcDoyNDk5MikKKysrIFdlYkNvcmUvcGFnZS9nZGsvRnJhbWVHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgRnJhbWU6Omlzc3VlVHJhbnNwb3NlQ29tbWFuZCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZTo6Y2xlYW51cFBsYXRmb3JtU2NyaXB0T2JqZWN0cygp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFn
SW1hZ2VGb3JTZWxlY3Rpb24oKSAKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biAwOworfQorCit2b2lkIEZyYW1lOjpkYXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVz
KCkKK3sKKyAgIG5vdEltcGxlbWVudGVkKCk7IAorfQorfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvQ29va2llSmFyR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9Db29raWVKYXJHZGsuY3BwCShyZXZpc2lvbiAyNTA1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0Nvb2tpZUphckdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tIAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNvb2tpZUphci5oIgotCi0jaW5jbHVkZSAiRGVwcmVjYXRlZFN0
cmluZy5oIgotI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
I2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBjb29raWVK
YXI7Ci0KLXZvaWQgc2V0Q29va2llcyhjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIC8qcG9s
aWN5VVJMKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgY29va2llSmFyLnNldCh1cmwu
dXJsKCksIHZhbHVlKTsKLX0KLQotU3RyaW5nIGNvb2tpZXMoY29uc3QgS1VSTCYgdXJsKQotewot
ICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC51cmwoKSk7Ci19Ci0KLWJvb2wgY29va2llc0Vu
YWJsZWQoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dkay9Db29raWVKYXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0Nvb2tpZUphckd0ay5jcHAJKHJldmlzaW9uIDI0OTkyKQkoZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dkay9Db29raWVKYXJHZGsuY3BwOjI0OTkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
Q29va2llSmFyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ29va2llSmFyLmgiCisKKyNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5n
LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGNvb2tpZUphcjsK
Kwordm9pZCBzZXRDb29raWVzKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgLypwb2xpY3lV
UkwqLywgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBjb29raWVKYXIuc2V0KHVybC51cmwo
KSwgdmFsdWUpOworfQorCitTdHJpbmcgY29va2llcyhjb25zdCBLVVJMJiB1cmwpCit7CisgICAg
cmV0dXJuIGNvb2tpZUphci5nZXQodXJsLnVybCgpKTsKK30KKworYm9vbCBjb29raWVzRW5hYmxl
ZCgpCit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0N1cnNvckdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ3Vy
c29yR2RrLmNwcAkocmV2aXNpb24gMjUwNTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9DdXJz
b3JHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI1NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20g
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQ3Vyc29yLmgiCi0KLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0j
aW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUN1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNvciYgb3RoZXIpCi0gICAgOiBtX2lt
cGwob3RoZXIubV9pbXBsKQotewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIGdka19jdXJzb3Jf
cmVmKG1faW1wbCk7Ci19Ci0KLUN1cnNvcjo6Q3Vyc29yKEltYWdlKiwgY29uc3QgSW50UG9pbnQm
KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLUN1cnNvcjo6fkN1cnNvcigpCi17Ci0g
ICAgaWYgKG1faW1wbCkKLSAgICAgICAgZ2RrX2N1cnNvcl91bnJlZihtX2ltcGwpOwotfQotCi1D
dXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNvciYgb3RoZXIpCi17Ci0gICAgZ2Rr
X2N1cnNvcl9yZWYob3RoZXIubV9pbXBsKTsKLSAgICBnZGtfY3Vyc29yX3VucmVmKG1faW1wbCk7
Ci0gICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotQ3Vy
c29yOjpDdXJzb3IoR2RrQ3Vyc29yKiBjKQotICAgIDogbV9pbXBsKGMpCi17Ci0gICAgbV9pbXBs
ID0gYzsKLSAgICBBU1NFUlQoYyk7Ci0gICAgZ2RrX2N1cnNvcl9yZWYoYyk7Ci19Ci0KLWNvbnN0
IEN1cnNvciYgcG9pbnRlckN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1
cnNvcl9uZXcoR0RLX0xFRlRfUFRSKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29y
JiBjcm9zc0N1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXco
R0RLX0NST1NTKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBoYW5kQ3Vyc29y
KCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfSEFORDIpOwot
ICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG1vdmVDdXJzb3IoKSAKLXsKLSAgICBz
dGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfRkxFVVIpOwotICAgIHJldHVybiBj
OyAKLX0KLQotY29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNv
ciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1hURVJNKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29u
c3QgQ3Vyc29yJiB3YWl0Q3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vy
c29yX25ldyhHREtfV0FUQ0gpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGhl
bHBDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19R
VUVTVElPTl9BUlJPVyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgZWFzdFJl
c2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RL
X1JJR0hUX1NJREUpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoUmVz
aXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtf
VE9QX1NJREUpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoRWFzdFJl
c2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RL
X1RPUF9SSUdIVF9DT1JORVIpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5v
cnRoV2VzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNv
cl9uZXcoR0RLX1RPUF9MRUZUX0NPUk5FUik7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgc291dGhSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19j
dXJzb3JfbmV3KEdES19CT1RUT01fU0lERSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1
cnNvciYgc291dGhFYXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBn
ZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX1JJR0hUX0NPUk5FUik7Ci0gICAgcmV0dXJuIGM7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgc291dGhXZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMg
Q3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX0xFRlRfQ09STkVSKTsKLSAgICBy
ZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiB3ZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBz
dGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfTEVGVF9TSURFKTsKLSAgICByZXR1
cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aFNvdXRoUmVzaXplQ3Vyc29yKCkKLXsKLSAg
ICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfVE9QX1RFRSk7Ci0gICAgcmV0
dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgZWFzdFdlc3RSZXNpemVDdXJzb3IoKQotewotICAg
IHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19MRUZUX1NJREUpOwotICAgIHJl
dHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIG5vcnRoRWFzdFNvdXRoV2VzdFJlc2l6ZUN1cnNv
cigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1NJWklORyk7
Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhXZXN0U291dGhFYXN0UmVz
aXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtf
U0laSU5HKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBjb2x1bW5SZXNpemVD
dXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19ET1VC
TEVfQVJST1cpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHJvd1Jlc2l6ZUN1
cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0RPVUJM
RV9BUlJPVyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLS8vIEZJWE1FOiBzaG91bGQgZmluZCBiZXR0
ZXIgR0RLIGN1cnNvcnMgZm9yIHRob3NlIHRoYW4gYSBnZW5lcmljIEdES19MRUZUX1BUUgotY29u
c3QgQ3Vyc29yJiB2ZXJ0aWNhbFRleHRDdXJzb3IoKQotewotICAgIHJldHVybiBwb2ludGVyQ3Vy
c29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgY2VsbEN1cnNvcigpCi17Ci0gICAgcmV0dXJuIHBv
aW50ZXJDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBjb250ZXh0TWVudUN1cnNvcigpCi17
Ci0gICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub0Ryb3BD
dXJzb3IoKQotewotICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNv
ciYgY29weUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKLX0KLQotY29u
c3QgQ3Vyc29yJiBwcm9ncmVzc0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHBvaW50ZXJDdXJzb3Io
KTsKLX0KLQotY29uc3QgQ3Vyc29yJiBhbGlhc0N1cnNvcigpCi17Ci0gICAgcmV0dXJuIHBvaW50
ZXJDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiBub25lQ3Vyc29yKCkKLXsKLSAgICByZXR1
cm4gcG9pbnRlckN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIG5vdEFsbG93ZWRDdXJzb3Io
KQotewotICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgem9v
bUluQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwotfQotCi1jb25zdCBD
dXJzb3ImIHpvb21PdXRDdXJzb3IoKQotewotICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Ci19
Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0N1cnNvckd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ3Vyc29yR3RrLmNwcAkocmV2aXNpb24gMjQ5OTIp
CShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHA6MjQ5OTIpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dkay9DdXJzb3JHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwg
bWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisKKyNpbmNsdWRlICJEZXBy
ZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPHN0ZGlv
Lmg+CisgCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0N1cnNvcjo6Q3Vyc29yKGNvbnN0IEN1cnNv
ciYgb3RoZXIpCisgICAgOiBtX2ltcGwob3RoZXIubV9pbXBsKQoreworICAgIGlmIChtX2ltcGwp
CisgICAgICAgIGdka19jdXJzb3JfcmVmKG1faW1wbCk7Cit9CisKK0N1cnNvcjo6Q3Vyc29yKElt
YWdlKiwgY29uc3QgSW50UG9pbnQmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0N1
cnNvcjo6fkN1cnNvcigpCit7CisgICAgaWYgKG1faW1wbCkKKyAgICAgICAgZ2RrX2N1cnNvcl91
bnJlZihtX2ltcGwpOworfQorCitDdXJzb3ImIEN1cnNvcjo6b3BlcmF0b3I9KGNvbnN0IEN1cnNv
ciYgb3RoZXIpCit7CisgICAgZ2RrX2N1cnNvcl9yZWYob3RoZXIubV9pbXBsKTsKKyAgICBnZGtf
Y3Vyc29yX3VucmVmKG1faW1wbCk7CisgICAgbV9pbXBsID0gb3RoZXIubV9pbXBsOworICAgIHJl
dHVybiAqdGhpczsKK30KKworQ3Vyc29yOjpDdXJzb3IoR2RrQ3Vyc29yKiBjKQorICAgIDogbV9p
bXBsKGMpCit7CisgICAgbV9pbXBsID0gYzsKKyAgICBBU1NFUlQoYyk7CisgICAgZ2RrX2N1cnNv
cl9yZWYoYyk7Cit9CisKK2NvbnN0IEN1cnNvciYgcG9pbnRlckN1cnNvcigpCit7CisgICAgc3Rh
dGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0xFRlRfUFRSKTsKKyAgICByZXR1cm4g
YzsKK30KKworY29uc3QgQ3Vyc29yJiBjcm9zc0N1cnNvcigpCit7CisgICAgc3RhdGljIEN1cnNv
ciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0NST1NTKTsKKyAgICByZXR1cm4gYzsKK30KKworY29u
c3QgQ3Vyc29yJiBoYW5kQ3Vyc29yKCkKK3sKKyAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vy
c29yX25ldyhHREtfSEFORDIpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG1v
dmVDdXJzb3IoKSAKK3sKKyAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtf
RkxFVVIpOworICAgIHJldHVybiBjOyAKK30KKworY29uc3QgQ3Vyc29yJiBpQmVhbUN1cnNvcigp
Cit7CisgICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1hURVJNKTsKKyAg
ICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiB3YWl0Q3Vyc29yKCkKK3sKKyAgICBzdGF0
aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfV0FUQ0gpOworICAgIHJldHVybiBjOwor
fQorCitjb25zdCBDdXJzb3ImIGhlbHBDdXJzb3IoKQoreworICAgIHN0YXRpYyBDdXJzb3IgYyA9
IGdka19jdXJzb3JfbmV3KEdES19RVUVTVElPTl9BUlJPVyk7CisgICAgcmV0dXJuIGM7Cit9CisK
K2NvbnN0IEN1cnNvciYgZWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgc3RhdGljIEN1cnNvciBj
ID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1JJR0hUX1NJREUpOworICAgIHJldHVybiBjOworfQorCitj
b25zdCBDdXJzb3ImIG5vcnRoUmVzaXplQ3Vyc29yKCkKK3sKKyAgICBzdGF0aWMgQ3Vyc29yIGMg
PSBnZGtfY3Vyc29yX25ldyhHREtfVE9QX1NJREUpOworICAgIHJldHVybiBjOworfQorCitjb25z
dCBDdXJzb3ImIG5vcnRoRWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgc3RhdGljIEN1cnNvciBj
ID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9SSUdIVF9DT1JORVIpOworICAgIHJldHVybiBjOwor
fQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgc3RhdGlj
IEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9MRUZUX0NPUk5FUik7CisgICAgcmV0
dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhSZXNpemVDdXJzb3IoKQoreworICAgIHN0
YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19CT1RUT01fU0lERSk7CisgICAgcmV0
dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAg
ICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX1JJR0hUX0NPUk5F
Uik7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgc291dGhXZXN0UmVzaXplQ3Vy
c29yKCkKK3sKKyAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9N
X0xFRlRfQ09STkVSKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiB3ZXN0UmVz
aXplQ3Vyc29yKCkKK3sKKyAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtf
TEVGVF9TSURFKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFNvdXRo
UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhH
REtfVE9QX1RFRSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgZWFzdFdlc3RS
ZXNpemVDdXJzb3IoKQoreworICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdE
S19MRUZUX1NJREUpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoRWFz
dFNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1
cnNvcl9uZXcoR0RLX1NJWklORyk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYg
bm9ydGhXZXN0U291dGhFYXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBzdGF0aWMgQ3Vyc29yIGMg
PSBnZGtfY3Vyc29yX25ldyhHREtfU0laSU5HKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3Qg
Q3Vyc29yJiBjb2x1bW5SZXNpemVDdXJzb3IoKQoreworICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdk
a19jdXJzb3JfbmV3KEdES19ET1VCTEVfQVJST1cpOworICAgIHJldHVybiBjOworfQorCitjb25z
dCBDdXJzb3ImIHJvd1Jlc2l6ZUN1cnNvcigpCit7CisgICAgc3RhdGljIEN1cnNvciBjID0gZ2Rr
X2N1cnNvcl9uZXcoR0RLX0RPVUJMRV9BUlJPVyk7CisgICAgcmV0dXJuIGM7Cit9CisKKy8vIEZJ
WE1FOiBzaG91bGQgZmluZCBiZXR0ZXIgR0RLIGN1cnNvcnMgZm9yIHRob3NlIHRoYW4gYSBnZW5l
cmljIEdES19MRUZUX1BUUgorY29uc3QgQ3Vyc29yJiB2ZXJ0aWNhbFRleHRDdXJzb3IoKQorewor
ICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Cit9CisKK2NvbnN0IEN1cnNvciYgY2VsbEN1cnNv
cigpCit7CisgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKK30KKworY29uc3QgQ3Vyc29yJiBj
b250ZXh0TWVudUN1cnNvcigpCit7CisgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKK30KKwor
Y29uc3QgQ3Vyc29yJiBub0Ryb3BDdXJzb3IoKQoreworICAgIHJldHVybiBwb2ludGVyQ3Vyc29y
KCk7Cit9CisKK2NvbnN0IEN1cnNvciYgY29weUN1cnNvcigpCit7CisgICAgcmV0dXJuIHBvaW50
ZXJDdXJzb3IoKTsKK30KKworY29uc3QgQ3Vyc29yJiBwcm9ncmVzc0N1cnNvcigpCit7CisgICAg
cmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKK30KKworY29uc3QgQ3Vyc29yJiBhbGlhc0N1cnNvcigp
Cit7CisgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKK30KKworY29uc3QgQ3Vyc29yJiBub25l
Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOworfQorCitjb25zdCBDdXJz
b3ImIG5vdEFsbG93ZWRDdXJzb3IoKQoreworICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Cit9
CisKK2NvbnN0IEN1cnNvciYgem9vbUluQ3Vyc29yKCkKK3sKKyAgICByZXR1cm4gcG9pbnRlckN1
cnNvcigpOworfQorCitjb25zdCBDdXJzb3ImIHpvb21PdXRDdXJzb3IoKQoreworICAgIHJldHVy
biBwb2ludGVyQ3Vyc29yKCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Ry
YWdEYXRhR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9EcmFnRGF0
YUdkay5jcHAJKHJldmlzaW9uIDI1MDU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRHJhZ0Rh
dGFHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRyYWdEYXRhLmgiCi0KLSNpbmNsdWRlICJEb2N1
bWVudC5oIgotI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1ib29sIERyYWdEYXRhOjpjYW5TbWFydFJlcGxhY2UoKSBjb25zdAotewotICAgIHJl
dHVybiBmYWxzZTsKLX0KLSAgICAKLWJvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zQ29sb3IoKSBjb25z
dAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNGaWxl
cygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIERyYWdEYXRhOjphc0Zp
bGVuYW1lcyhWZWN0b3I8U3RyaW5nPiYgcmVzdWx0KSBjb25zdAotewotfQotCi1ib29sIERyYWdE
YXRhOjpjb250YWluc1BsYWluVGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1TdHJpbmcgRHJhZ0RhdGE6OmFzUGxhaW5UZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0gICAgCi1Db2xvciBEcmFnRGF0YTo6YXNDb2xvcigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIENvbG9yKCk7Ci19Ci0KLUNsaXBib2FyZCogRHJhZ0RhdGE6OmNyZWF0ZUNsaXBib2Fy
ZChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0gICAg
Ci1ib29sIERyYWdEYXRhOjpjb250YWluc0NvbXBhdGlibGVDb250ZW50KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0gICAgCi1ib29sIERyYWdEYXRhOjpjb250YWluc1VSTCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotU3RyaW5nIERyYWdEYXRhOjphc1VS
TChTdHJpbmcqIHRpdGxlKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSAgICAK
LSAgICAKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFzRnJhZ21lbnQo
RG9jdW1lbnQqKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotICAgIAotfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvRHJhZ0RhdGFHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0RyYWdEYXRhR3RrLmNwcAkocmV2aXNpb24gMjQ5OTIpCShmcm9tIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL0RyYWdEYXRhR2RrLmNwcDoyNDk5MikKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL0RyYWdEYXRhR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEcmFnRGF0YS5oIgorCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRSZXBsYWNlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCitib29sIERyYWdEYXRhOjpjb250YWlu
c0NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6
OmNvbnRhaW5zRmlsZXMoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBE
cmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkgY29uc3QKK3sKK30K
KworYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFN0cmluZygpOworfQorICAgIAorQ29sb3IgRHJhZ0RhdGE6OmFzQ29sb3IoKSBj
b25zdAoreworICAgIHJldHVybiBDb2xvcigpOworfQorCitDbGlwYm9hcmQqIERyYWdEYXRhOjpj
cmVhdGVDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5KSBjb25zdAoreworICAgIHJldHVy
biAwOworfQorICAgIAorYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRpYmxlQ29udGVudCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorYm9vbCBEcmFnRGF0YTo6Y29u
dGFpbnNVUkwoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKK1N0cmluZyBE
cmFnRGF0YTo6YXNVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisgICAgCisgICAgCitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRh
Ojphc0ZyYWdtZW50KERvY3VtZW50KikgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKyAgICAK
K30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0RyYWdJbWFnZUdkay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRHJhZ0ltYWdlR2RrLmNwcAkocmV2aXNpb24gMjUw
NTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9EcmFnSW1hZ2VHZGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkRyYWdJbWFnZS5oIgotCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRl
ICJJbWFnZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUludFNpemUgZHJhZ0ltYWdlU2l6
ZShEcmFnSW1hZ2VSZWYpCi17Ci0gICAgcmV0dXJuIEludFNpemUoMCwgMCk7Ci19Ci0KLXZvaWQg
ZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZikKLXsKLX0KLQotRHJhZ0ltYWdlUmVmIHNjYWxl
RHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwgRmxvYXRTaXplKQotewotICAgIHJldHVybiBp
bWFnZTsKLX0KLSAgICAKLURyYWdJbWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24o
RHJhZ0ltYWdlUmVmIGltYWdlLCBmbG9hdCkKLXsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0gICAg
ICAgIAotRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSopCi17Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0gICAgCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZv
ckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKLXsKLSAgICByZXR1cm4gMDsgICAgIAotfQotICAg
IAotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRHJhZ0ltYWdlR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9EcmFnSW1hZ2VHdGsuY3BwCShyZXZpc2lvbiAy
NDk5MikJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRHJhZ0ltYWdlR2RrLmNwcDoyNDk5MikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0RyYWdJbWFnZUd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRHJhZ0ltYWdlLmgiCisKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIklt
YWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBkcmFnSW1hZ2VTaXplKERy
YWdJbWFnZVJlZikKK3sKKyAgICByZXR1cm4gSW50U2l6ZSgwLCAwKTsKK30KKwordm9pZCBkZWxl
dGVEcmFnSW1hZ2UoRHJhZ0ltYWdlUmVmKQoreworfQorCitEcmFnSW1hZ2VSZWYgc2NhbGVEcmFn
SW1hZ2UoRHJhZ0ltYWdlUmVmIGltYWdlLCBGbG9hdFNpemUpCit7CisgICAgcmV0dXJuIGltYWdl
OworfQorICAgIAorRHJhZ0ltYWdlUmVmIGRpc3NvbHZlRHJhZ0ltYWdlVG9GcmFjdGlvbihEcmFn
SW1hZ2VSZWYgaW1hZ2UsIGZsb2F0KQoreworICAgIHJldHVybiBpbWFnZTsKK30KKyAgICAgICAg
CitEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKikKK3sKKyAgICBy
ZXR1cm4gMDsKK30KKyAgICAKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2Fj
aGVkSW1hZ2UoQ2FjaGVkSW1hZ2UqKQoreworICAgIHJldHVybiAwOyAgICAgCit9CisgICAgCit9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250Q2FjaGVHZGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRDYWNoZUdkay5jcHAJKHJldmlzaW9uIDI1MDU0
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udENhY2hlR2RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1p
Y2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLQotI2luY2x1
ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250RGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGlmICghRm9udFBsYXRm
b3JtRGF0YTo6aW5pdCgpKSB7Ci0gICAgICAgIGFzc2VydCgwKTsKLSAgICAgICAgZnByaW50Zihz
dGRlcnIsICJubyBmb250cyBmb3VuZCBleGl0aW5nXG4iKTsKLSAgICAgICAgZXhpdCgtMSk7Ci0g
ICAgfQotfQotCi1jb25zdCBGb250RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJh
Y3RlcnMoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5n
dGgpCi17Ci0KLSAgICBGb250RGF0YSogZm9udERhdGEgPSAwOwotICAgIGZvbnREYXRhID0gbmV3
IEZvbnREYXRhKEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5m
YW1pbHkoKS5mYW1pbHkoKSkpOwotICAgIHJldHVybiBmb250RGF0YTsKLX0KLQotRm9udFBsYXRm
b3JtRGF0YSogRm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
JiBmb250KQotewotICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNj
cmlwdGlvbigpLCBmb250LmZhbWlseSgpLmZhbWlseSgpKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0
YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnQmIGZvbnQp
Ci17Ci0gICAgLy8gRklYTUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRo
ZSB1c2VyJ3MgZGVmYXVsdCBmb250IGhlcmUuCi0gICAgLy8gRm9yIG5vdyB3ZSdsbCBwaWNrIHRo
ZSBkZWZhdWx0IHRoYXQgdGhlIHVzZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHBy
ZWZzLgotICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgdGltZXNTdHIoIlRpbWVzIE5ldyBSb21hbiIp
OwotICAgIHJldHVybiBnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0
aW9uKCksIHRpbWVzU3RyKTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKLXsKLSAgICByZXR1cm4gbmV3IEZvbnRQbGF0
Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uLCBmYW1pbHkpOwotfQotCi19CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9Gb250Q2FjaGVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0ZvbnRDYWNoZUd0ay5jcHAJKHJldmlzaW9uIDI0OTkyKQkoZnJvbSBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9Gb250Q2FjaGVHZGsuY3BwOjI0OTkyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvRm9udENhY2hlR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1l
bEBnbWFpbC5jb20gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4g
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKworI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRl
ICJGb250RGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udENhY2hlOjpw
bGF0Zm9ybUluaXQoKQoreworICAgIGlmICghRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpKSB7Cisg
ICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJubyBmb250cyBmb3Vu
ZCBleGl0aW5nXG4iKTsKKyAgICAgICAgZXhpdCgtMSk7CisgICAgfQorfQorCitjb25zdCBGb250
RGF0YSogRm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpCit7CisKKyAgICBGb250RGF0
YSogZm9udERhdGEgPSAwOworICAgIGZvbnREYXRhID0gbmV3IEZvbnREYXRhKEZvbnRQbGF0Zm9y
bURhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSkpOwor
ICAgIHJldHVybiBmb250RGF0YTsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpn
ZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250JiBmb250KQoreworICAgIHJldHVy
biBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCBmb250LmZhbWls
eSgpLmZhbWlseSgpKTsKK30KKworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRMYXN0
UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgLy8gRklYTUU6IFdv
dWxkIGJlIGV2ZW4gYmV0dGVyIHRvIHNvbWVob3cgZ2V0IHRoZSB1c2VyJ3MgZGVmYXVsdCBmb250
IGhlcmUuCisgICAgLy8gRm9yIG5vdyB3ZSdsbCBwaWNrIHRoZSBkZWZhdWx0IHRoYXQgdGhlIHVz
ZXIgd291bGQgZ2V0IHdpdGhvdXQgY2hhbmdpbmcgYW55IHByZWZzLgorICAgIHN0YXRpYyBBdG9t
aWNTdHJpbmcgdGltZXNTdHIoIlRpbWVzIE5ldyBSb21hbiIpOworICAgIHJldHVybiBnZXRDYWNo
ZWRGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIHRpbWVzU3RyKTsKK30K
KworRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
IGZhbWlseSkKK3sKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0
aW9uLCBmYW1pbHkpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250RGF0
YUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsu
Y3BwCShyZXZpc2lvbiAyNTA1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnREYXRhR2Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAotICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4K
LSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udERh
dGEuaCIKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNs
dWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKLSNpbmNsdWRl
ICJHbHlwaEJ1ZmZlci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8dW5pY29kZS91
Y2hhci5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9udERhdGE6OnBsYXRmb3Jt
SW5pdCgpCi17Ci0gICAgY2Fpcm9fZm9udF9leHRlbnRzX3QgZm9udF9leHRlbnRzOwotICAgIGNh
aXJvX3RleHRfZXh0ZW50c190IHRleHRfZXh0ZW50czsKLSAgICBjYWlyb19zY2FsZWRfZm9udF9l
eHRlbnRzKG1fZm9udC5tX3NjYWxlZEZvbnQsICZmb250X2V4dGVudHMpOwotICAgIG1fYXNjZW50
ID0gc3RhdGljX2Nhc3Q8aW50Pihmb250X2V4dGVudHMuYXNjZW50KTsKLSAgICBtX2Rlc2NlbnQg
PSBzdGF0aWNfY2FzdDxpbnQ+KGZvbnRfZXh0ZW50cy5kZXNjZW50KTsKLSAgICBtX2xpbmVTcGFj
aW5nID0gc3RhdGljX2Nhc3Q8aW50Pihmb250X2V4dGVudHMuaGVpZ2h0KTsKLSAgICBjYWlyb19z
Y2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9mb250Lm1fc2NhbGVkRm9udCwgIngiLCAmdGV4dF9l
eHRlbnRzKTsKLSAgICBtX3hIZWlnaHQgPSB0ZXh0X2V4dGVudHMuaGVpZ2h0OwotICAgIGNhaXJv
X3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250LCAiICIsICZ0ZXh0
X2V4dGVudHMpOwotICAgIG1fc3BhY2VXaWR0aCA9ICBzdGF0aWNfY2FzdDxpbnQ+KHRleHRfZXh0
ZW50cy54X2FkdmFuY2UpOwotICAgIG1fbGluZUdhcCA9IG1fbGluZVNwYWNpbmcgLSBtX2FzY2Vu
dCAtIG1fZGVzY2VudDsKLX0KLQotdm9pZCBGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKLXsK
LSAgICBpZiAobV9mb250Lm1fcGF0dGVybiAmJiAoKEZjUGF0dGVybiopLTEgIT0gbV9mb250Lm1f
cGF0dGVybikpCi0gICAgICAgIEZjUGF0dGVybkRlc3Ryb3kobV9mb250Lm1fcGF0dGVybik7Ci0K
LSAgICBpZiAobV9mb250Lm1fZm9udE1hdHJpeCkKLSAgICAgICAgZnJlZShtX2ZvbnQubV9mb250
TWF0cml4KTsKLSAgICBpZiAobV9mb250Lm1fZm9udEZhY2UpCi0gICAgICAgIGNhaXJvX2ZvbnRf
ZmFjZV9kZXN0cm95KG1fZm9udC5tX2ZvbnRGYWNlKTsKLSAgICBpZiAobV9mb250Lm1fc2NhbGVk
Rm9udCkKLSAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX2ZvbnQubV9zY2FsZWRG
b250KTsKLSAgICBpZiAobV9mb250Lm1fb3B0aW9ucykKLSAgICAgICAgY2Fpcm9fZm9udF9vcHRp
b25zX2Rlc3Ryb3kobV9mb250Lm1fb3B0aW9ucyk7Ci0gICAgZGVsZXRlIG1fc21hbGxDYXBzRm9u
dERhdGE7Ci19Ci0KLUZvbnREYXRhKiBGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3Nt
YWxsQ2Fwc0ZvbnREYXRhKSB7Ci0gICAgICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjID0gRm9udERl
c2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7Ci0gICAgICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6
ZSgwLjcwZipmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwotICAgICAgICBjb25zdCBG
b250UGxhdGZvcm1EYXRhKiBwZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2MsIGRlc2Mu
ZmFtaWx5KCkuZmFtaWx5KCkpOwotICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3IEZv
bnREYXRhKCpwZGF0YSk7Ci0gICAgfQotICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnREYXRhOwot
fQotCi1ib29sIEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Ci17Ci0gICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRf
c2NhbGVkX2ZvbnRfbG9ja19mYWNlKG1fZm9udC5tX3NjYWxlZEZvbnQpOwotCi0gICAgaWYgKCFm
YWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKEZjRnJlZVR5cGVDaGFySW5kZXgoZmFjZSwg
Y2hhcmFjdGVyc1tpXSkgPT0gMCkgewotICAgICAgICAgICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRf
dW5sb2NrX2ZhY2UobV9mb250Lm1fc2NhbGVkRm9udCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tf
ZmFjZShtX2ZvbnQubV9zY2FsZWRGb250KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IEZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCi17Ci0gICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9
IG1fZm9udC5pc0ZpeGVkUGl0Y2goKTsKLX0KLQotZmxvYXQgRm9udERhdGE6OnBsYXRmb3JtV2lk
dGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKLXsKLSAgICBBU1NFUlQobV9mb250Lm1fc2Nh
bGVkRm9udCk7Ci0KLSAgICBjYWlyb19nbHlwaF90IGNnbHlwaCA9IHsgZ2x5cGgsIDAsIDAgfTsK
LSAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBleHRlbnRzOwotICAgIGNhaXJvX3NjYWxlZF9mb250
X2dseXBoX2V4dGVudHMobV9mb250Lm1fc2NhbGVkRm9udCwgJmNnbHlwaCwgMSwgJmV4dGVudHMp
OwotCi0gICAgZmxvYXQgdyA9IChmbG9hdCltX3NwYWNlV2lkdGg7Ci0gICAgaWYgKGNhaXJvX3Nj
YWxlZF9mb250X3N0YXR1cyhtX2ZvbnQubV9zY2FsZWRGb250KSA9PSBDQUlST19TVEFUVVNfU1VD
Q0VTUyAmJiBleHRlbnRzLnhfYWR2YW5jZSAhPSAwKQotICAgICAgICB3ID0gKGZsb2F0KWV4dGVu
dHMueF9hZHZhbmNlOwotICAgIHJldHVybiB3OwotfQotCi12b2lkIEZvbnREYXRhOjpzZXRGb250
KGNhaXJvX3QqIGNyKSBjb25zdAotewotICAgIEFTU0VSVChjcik7Ci0gICAgbV9mb250LnNldEZv
bnQoY3IpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250RGF0YUd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udERhdGFHdGsuY3BwCShy
ZXZpc2lvbiAyNDk5MikJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3Bw
OjI0OTkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udERhdGFHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250RGF0YS5oIgorCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRDYWNo
ZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkdseXBoQnVmZmVy
LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CisjaW5j
bHVkZSA8dW5pY29kZS91bm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAg
ICBjYWlyb19mb250X2V4dGVudHNfdCBmb250X2V4dGVudHM7CisgICAgY2Fpcm9fdGV4dF9leHRl
bnRzX3QgdGV4dF9leHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250X2V4dGVudHMobV9mb250
Lm1fc2NhbGVkRm9udCwgJmZvbnRfZXh0ZW50cyk7CisgICAgbV9hc2NlbnQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGZvbnRfZXh0ZW50cy5hc2NlbnQpOworICAgIG1fZGVzY2VudCA9IHN0YXRpY19jYXN0
PGludD4oZm9udF9leHRlbnRzLmRlc2NlbnQpOworICAgIG1fbGluZVNwYWNpbmcgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGZvbnRfZXh0ZW50cy5oZWlnaHQpOworICAgIGNhaXJvX3NjYWxlZF9mb250X3Rl
eHRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250LCAieCIsICZ0ZXh0X2V4dGVudHMpOworICAg
IG1feEhlaWdodCA9IHRleHRfZXh0ZW50cy5oZWlnaHQ7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRf
dGV4dF9leHRlbnRzKG1fZm9udC5tX3NjYWxlZEZvbnQsICIgIiwgJnRleHRfZXh0ZW50cyk7Cisg
ICAgbV9zcGFjZVdpZHRoID0gIHN0YXRpY19jYXN0PGludD4odGV4dF9leHRlbnRzLnhfYWR2YW5j
ZSk7CisgICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2luZyAtIG1fYXNjZW50IC0gbV9kZXNjZW50
OworfQorCit2b2lkIEZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKQoreworICAgIGlmIChtX2Zv
bnQubV9wYXR0ZXJuICYmICgoRmNQYXR0ZXJuKiktMSAhPSBtX2ZvbnQubV9wYXR0ZXJuKSkKKyAg
ICAgICAgRmNQYXR0ZXJuRGVzdHJveShtX2ZvbnQubV9wYXR0ZXJuKTsKKworICAgIGlmIChtX2Zv
bnQubV9mb250TWF0cml4KQorICAgICAgICBmcmVlKG1fZm9udC5tX2ZvbnRNYXRyaXgpOworICAg
IGlmIChtX2ZvbnQubV9mb250RmFjZSkKKyAgICAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3ko
bV9mb250Lm1fZm9udEZhY2UpOworICAgIGlmIChtX2ZvbnQubV9zY2FsZWRGb250KQorICAgICAg
ICBjYWlyb19zY2FsZWRfZm9udF9kZXN0cm95KG1fZm9udC5tX3NjYWxlZEZvbnQpOworICAgIGlm
IChtX2ZvbnQubV9vcHRpb25zKQorICAgICAgICBjYWlyb19mb250X29wdGlvbnNfZGVzdHJveSht
X2ZvbnQubV9vcHRpb25zKTsKKyAgICBkZWxldGUgbV9zbWFsbENhcHNGb250RGF0YTsKK30KKwor
Rm9udERhdGEqIEZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QKK3sKKyAgICBpZiAoIW1fc21hbGxDYXBzRm9udERh
dGEpIHsKKyAgICAgICAgRm9udERlc2NyaXB0aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKTsKKyAgICAgICAgZGVzYy5zZXRTcGVjaWZpZWRTaXplKDAuNzBmKmZvbnRE
ZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CisgICAgICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEqIHBkYXRhID0gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZGVzYywgZGVzYy5mYW1pbHkoKS5mYW1p
bHkoKSk7CisgICAgICAgIG1fc21hbGxDYXBzRm9udERhdGEgPSBuZXcgRm9udERhdGEoKnBkYXRh
KTsKKyAgICB9CisgICAgcmV0dXJuIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK2Jvb2wgRm9u
dERhdGE6OmNvbnRhaW5zQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxl
bmd0aCkgY29uc3QKK3sKKyAgICBGVF9GYWNlIGZhY2UgPSBjYWlyb19mdF9zY2FsZWRfZm9udF9s
b2NrX2ZhY2UobV9mb250Lm1fc2NhbGVkRm9udCk7CisKKyAgICBpZiAoIWZhY2UpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkr
KykgeworICAgICAgICBpZiAoRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBjaGFyYWN0ZXJzW2ld
KSA9PSAwKSB7CisgICAgICAgICAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tfZmFjZSht
X2ZvbnQubV9zY2FsZWRGb250KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fZm9udC5t
X3NjYWxlZEZvbnQpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgRm9udERhdGE6OmRl
dGVybWluZVBpdGNoKCkKK3sKKyAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9mb250LmlzRml4
ZWRQaXRjaCgpOworfQorCitmbG9hdCBGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEds
eXBoIGdseXBoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ZvbnQubV9zY2FsZWRGb250KTsKKwor
ICAgIGNhaXJvX2dseXBoX3QgY2dseXBoID0geyBnbHlwaCwgMCwgMCB9OworICAgIGNhaXJvX3Rl
eHRfZXh0ZW50c190IGV4dGVudHM7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZ2x5cGhfZXh0ZW50
cyhtX2ZvbnQubV9zY2FsZWRGb250LCAmY2dseXBoLCAxLCAmZXh0ZW50cyk7CisKKyAgICBmbG9h
dCB3ID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKKyAgICBpZiAoY2Fpcm9fc2NhbGVkX2ZvbnRfc3Rh
dHVzKG1fZm9udC5tX3NjYWxlZEZvbnQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTICYmIGV4dGVu
dHMueF9hZHZhbmNlICE9IDApCisgICAgICAgIHcgPSAoZmxvYXQpZXh0ZW50cy54X2FkdmFuY2U7
CisgICAgcmV0dXJuIHc7Cit9CisKK3ZvaWQgRm9udERhdGE6OnNldEZvbnQoY2Fpcm9fdCogY3Ip
IGNvbnN0Cit7CisgICAgQVNTRVJUKGNyKTsKKyAgICBtX2ZvbnQuc2V0Rm9udChjcik7Cit9CisK
K30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRHZGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRHZGsuY3BwCShyZXZpc2lvbiAyNTA1NCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250LmgiCi0KLSNpbmNsdWRlICJGb250RGF0
YS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBjYWlyb190
KiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIC8v
IFNldCB0aGUgdGV4dCBjb2xvciB0byB1c2UgZm9yIGRyYXdpbmcuCi0gICAgZmxvYXQgcmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgQ29sb3IgcGVuQ29sb3IgPSBncmFwaGljc0NvbnRleHQt
PmZpbGxDb2xvcigpOwotICAgIHBlbkNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOwotICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Ci0KLSAgICAvLyBUaGlzIHdhcyBjb21tZW50ZWQgb3V0IGFzIGl0IG1hZGUgInNv
bWUgdGV4dCBpbnZpc2libGUiIGJ1dCBzZWVtcyB0byB3b3JrIG5vdy4KLSAgICBmb250LT5zZXRG
b250KGNvbnRleHQpOwotCi0gICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gKEdseXBoQnVm
ZmVyR2x5cGgqKSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSk7Ci0KLSAgICBmbG9hdCBvZmZzZXQg
PSBwb2ludC54KCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgaSsrKSB7
Ci0gICAgICAgIGdseXBoc1tpXS54ID0gb2Zmc2V0OwotICAgICAgICBnbHlwaHNbaV0ueSA9IHBv
aW50LnkoKTsKLSAgICAgICAgb2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChmcm9tICsg
aSk7Ci0gICAgfQotICAgIGNhaXJvX3Nob3dfZ2x5cGhzKGNvbnRleHQsIGdseXBocywgbnVtR2x5
cGhzKTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udEd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udEd0ay5jcHAJKHJldmlzaW9uIDI0
OTkyKQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250R2RrLmNwcDoyNDk5MikKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGb250LmgiCisKKyNpbmNsdWRlICJGb250RGF0
YS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBjYWlyb190
KiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIC8v
IFNldCB0aGUgdGV4dCBjb2xvciB0byB1c2UgZm9yIGRyYXdpbmcuCisgICAgZmxvYXQgcmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGE7CisgICAgQ29sb3IgcGVuQ29sb3IgPSBncmFwaGljc0NvbnRleHQt
PmZpbGxDb2xvcigpOworICAgIHBlbkNvbG9yLmdldFJHQkEocmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOworICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjb250ZXh0LCByZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7CisKKyAgICAvLyBUaGlzIHdhcyBjb21tZW50ZWQgb3V0IGFzIGl0IG1hZGUgInNv
bWUgdGV4dCBpbnZpc2libGUiIGJ1dCBzZWVtcyB0byB3b3JrIG5vdy4KKyAgICBmb250LT5zZXRG
b250KGNvbnRleHQpOworCisgICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gKEdseXBoQnVm
ZmVyR2x5cGgqKSBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSk7CisKKyAgICBmbG9hdCBvZmZzZXQg
PSBwb2ludC54KCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUdseXBoczsgaSsrKSB7
CisgICAgICAgIGdseXBoc1tpXS54ID0gb2Zmc2V0OworICAgICAgICBnbHlwaHNbaV0ueSA9IHBv
aW50LnkoKTsKKyAgICAgICAgb2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChmcm9tICsg
aSk7CisgICAgfQorICAgIGNhaXJvX3Nob3dfZ2x5cGhzKGNvbnRleHQsIGdseXBocywgbnVtR2x5
cGhzKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0
YUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3Jt
RGF0YUdkay5jcHAJKHJldmlzaW9uIDI1MDU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9u
dFBsYXRmb3JtRGF0YUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTg4ICswLDAgQEAKLS8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgaW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlv
bi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQgYnkgYW55b25lIG90aGVyIHRoYW4KLSAqIEZv
bnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9udC5jcHAuCi0gKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAg
VG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAq
IEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgotCi0jaW5jbHVkZSAiQ1N0cmluZy5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiRm9udERlc2NyaXB0aW9u
LmgiCi0jaW5jbHVkZSAiY2Fpcm8tZnQuaCIKLSNpbmNsdWRlICJjYWlyby5oIgotI2luY2x1ZGUg
PGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5TmFtZSkKLSAgICA6IG1fcGF0dGVybigwKQotICAgICwgbV9mb250RGVzY3JpcHRpb24oZm9u
dERlc2NyaXB0aW9uKQotICAgICwgbV9mb250TWF0cml4KDApCi0gICAgLCBtX2ZvbnRGYWNlKDAp
Ci0gICAgLCBtX29wdGlvbnMoMCkKLSAgICAsIG1fc2NhbGVkRm9udCgwKQotewotICAgIEZvbnRQ
bGF0Zm9ybURhdGE6OmluaXQoKTsKLQotICAgIENTdHJpbmcgZmFtaWx5TmFtZVN0cmluZyA9IGZh
bWlseU5hbWUuZG9tU3RyaW5nKCkudXRmOCgpOwotICAgIGNvbnN0IGNoYXIqIGZjZmFtaWx5ID0g
ZmFtaWx5TmFtZVN0cmluZy5kYXRhKCk7Ci0gICAgaW50IGZjc2xhbnQgPSBGQ19TTEFOVF9ST01B
TjsKLSAgICBpbnQgZmN3ZWlnaHQgPSBGQ19XRUlHSFRfTk9STUFMOwotICAgIGZsb2F0IGZjc2l6
ZSA9IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKTsKLSAgICBpZiAoZm9udERlc2NyaXB0
aW9uLml0YWxpYygpKQotICAgICAgICBmY3NsYW50ID0gRkNfU0xBTlRfSVRBTElDOwotICAgIGlm
IChmb250RGVzY3JpcHRpb24uYm9sZCgpKQotICAgICAgICBmY3dlaWdodCA9IEZDX1dFSUdIVF9C
T0xEOwotCi0gICAgaW50IHR5cGUgPSBmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOwot
Ci0gICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7Ci0KLSAgICBpZiAo
IUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLCBGQ19GQU1JTFksIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgRmNDaGFyOCo+KGZjZmFtaWx5KSkpCi0gICAgICAgIGdvdG8gZnJlZVBhdHRlcm47Ci0K
LSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlm
RmFtaWx5OgotICAgICAgICAgICAgZmNmYW1pbHkgPSAic2VyaWYiOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6Ci0gICAg
ICAgICAgICBmY2ZhbWlseSA9ICJzYW5zLXNlcmlmIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5OgotICAgICAgICAgICAg
ZmNmYW1pbHkgPSAibW9ub3NwYWNlIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9u
OjpTdGFuZGFyZEZhbWlseToKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZjZmFtaWx5
ID0gInNhbnMtc2VyaWYiOwotICAgIH0KLQotICAgIGlmICghRmNQYXR0ZXJuQWRkU3RyaW5nKHBh
dHRlcm4sIEZDX0ZBTUlMWSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZmNmYW1p
bHkpKSkKLSAgICAgICAgZ290byBmcmVlUGF0dGVybjsKLSAgICBpZiAoIUZjUGF0dGVybkFkZElu
dGVnZXIocGF0dGVybiwgRkNfU0xBTlQsIGZjc2xhbnQpKQotICAgICAgICBnb3RvIGZyZWVQYXR0
ZXJuOwotICAgIGlmICghRmNQYXR0ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLCBGQ19XRUlHSFQsIGZj
d2VpZ2h0KSkKLSAgICAgICAgZ290byBmcmVlUGF0dGVybjsKLSAgICBpZiAoIUZjUGF0dGVybkFk
ZERvdWJsZShwYXR0ZXJuLCBGQ19QSVhFTF9TSVpFLCBmY3NpemUpKQotICAgICAgICBnb3RvIGZy
ZWVQYXR0ZXJuOwotCi0gICAgRmNDb25maWdTdWJzdGl0dXRlKE5VTEwsIHBhdHRlcm4sIEZjTWF0
Y2hQYXR0ZXJuKTsKLSAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOwotCi0gICAgRmNS
ZXN1bHQgZmNyZXN1bHQ7Ci0gICAgbV9wYXR0ZXJuID0gRmNGb250TWF0Y2goTlVMTCwgcGF0dGVy
biwgJmZjcmVzdWx0KTsKLSAgICAvLyBGSVhNRTogc2hvdWxkIHdlIHNldCBzb21lIGRlZmF1bHQg
Zm9udD8KLSAgICBpZiAoIW1fcGF0dGVybikKLSAgICAgICAgZ290byBmcmVlUGF0dGVybjsKLSAg
ICBtX2ZvbnRGYWNlID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihtX3Bh
dHRlcm4pOwotICAgIG1fZm9udE1hdHJpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fbWF0cml4
X3QqPihtYWxsb2Moc2l6ZW9mKGNhaXJvX21hdHJpeF90KSkpOwotICAgIGNhaXJvX21hdHJpeF90
IGN0bTsKLSAgICBjYWlyb19tYXRyaXhfaW5pdF9zY2FsZShtX2ZvbnRNYXRyaXgsIG1fZm9udERl
c2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBtX2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUo
KSk7Ci0gICAgY2Fpcm9fbWF0cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7Ci0gICAgbV9vcHRpb25z
ID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgpOwotICAgIG1fc2NhbGVkRm9udCA9IGNhaXJv
X3NjYWxlZF9mb250X2NyZWF0ZShtX2ZvbnRGYWNlLCBtX2ZvbnRNYXRyaXgsICZjdG0sIG1fb3B0
aW9ucyk7Ci0KLWZyZWVQYXR0ZXJuOgotICAgIEZjUGF0dGVybkRlc3Ryb3kocGF0dGVybik7Ci19
Ci0KLWJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpCi17Ci0gICAgc3RhdGljIEZjQm9vbCBG
Q0luaXRpYWxpemVkOwotICAgIGlmIChGQ0luaXRpYWxpemVkKQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBGQ0luaXRpYWxpemVkID0gRmNUcnVlOwotICAgIGlmICghRmNJbml0KCkpIHsKLSAg
ICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBpbml0IGZvbnQgY29uZmlnIGxpYnJhcnlcbiIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1G
b250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCi17Ci19Ci0KLWJvb2wgRm9udFBs
YXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKLXsKLSAgICBpbnQgc3BhY2luZzsKLSAgICBpZiAo
RmNQYXR0ZXJuR2V0SW50ZWdlcihtX3BhdHRlcm4sIEZDX1NQQUNJTkcsIDAsICZzcGFjaW5nKSA9
PSBGY1Jlc3VsdE1hdGNoKQotICAgICAgICByZXR1cm4gc3BhY2luZyA9PSBGQ19NT05POwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotLy8gbGVuZ3RoIGlzIGEgb3V0IHZhbHVlIGdpdmluZyB0aGUg
bGVuZ3RoIG9mIHRoZSBsaXN0Ci1jYWlyb19mb250X2ZhY2VfdCoqIEZvbnRQbGF0Zm9ybURhdGE6
Omxpc3QoRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5TmFtZSwgaW50KiBsZW5ndGgpCi17Ci0gICAgaW5pdCgpOwotCi0gICAgRmNQYXR0
ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7Ci0gICAgaWYgKCFwYXR0ZXJuKQotICAg
ICAgICByZXR1cm4gTlVMTDsKLQotICAgIEZjT2JqZWN0U2V0KiBvcyA9IEZjT2JqZWN0U2V0Q3Jl
YXRlKCk7Ci0gICAgRmNPYmplY3RTZXRBZGQob3MsIEZDX0ZBTUlMWSk7Ci0gICAgRmNPYmplY3RT
ZXRBZGQob3MsIEZDX1NUWUxFKTsKLSAgICBGY0ZvbnRTZXQqIGZzID0gRmNGb250TGlzdCgwLCBw
YXR0ZXJuLCBvcyk7Ci0gICAgaWYgKGxlbmd0aCkKLSAgICAgICAgKmxlbmd0aCA9IGZzLT5uZm9u
dDsKLSAgICBpZiAocGF0dGVybikKLSAgICAgICAgRmNQYXR0ZXJuRGVzdHJveSAocGF0dGVybik7
Ci0gICAgaWYgKG9zKQotICAgICAgICBGY09iamVjdFNldERlc3Ryb3kgKG9zKTsKLSAgICBjYWly
b19mb250X2ZhY2VfdCoqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fZm9udF9mYWNl
X3QqKj4obWFsbG9jKChmcy0+bmZvbnQgKyAxKSAqIHNpemVvZihjYWlyb19mb250X2ZhY2VfdCop
KSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcy0+bmZvbnQ7IGkrKykgewotICAgICAgICBG
Y0NoYXI4KiBmb250ID0gRmNOYW1lVW5wYXJzZShmcy0+Zm9udHNbaV0pOwotICAgICAgICBwcmlu
dGYoIiVzXG4iLCBmb250KTsKLSAgICAgICAgcmVzdWx0W2ldID0gY2Fpcm9fZnRfZm9udF9mYWNl
X2NyZWF0ZV9mb3JfcGF0dGVybihmcy0+Zm9udHNbaV0pOwotICAgIH0KLSAgICByZXN1bHRbZnMt
Pm5mb250XSA9IE5VTEw7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBGb250UGxhdGZv
cm1EYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdAotewotICAgIEFTU0VSVChtX2ZvbnRG
YWNlKTsKLSAgICBBU1NFUlQobV9mb250TWF0cml4KTsKLSAgICBBU1NFUlQobV9vcHRpb25zKTsK
LQotICAgIGNhaXJvX3NldF9mb250X2ZhY2UoY3IsIG1fZm9udEZhY2UpOwotICAgIGNhaXJvX3Nl
dF9mb250X21hdHJpeChjciwgbV9mb250TWF0cml4KTsKLSAgICBjYWlyb19zZXRfZm9udF9vcHRp
b25zKGNyLCBtX29wdGlvbnMpOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9y
PT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcGF0
dGVybiA9PSBvdGhlci5tX3BhdHRlcm4pCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICht
X3BhdHRlcm4gPT0gMCB8fCBtX3BhdHRlcm4gPT0gcmVpbnRlcnByZXRfY2FzdDxGY1BhdHRlcm4q
PigtMSkKLSAgICAgICAgICAgIHx8IG90aGVyLm1fcGF0dGVybiA9PSAwIHx8IG90aGVyLm1fcGF0
dGVybiA9PSByZWludGVycHJldF9jYXN0PEZjUGF0dGVybio+KC0xKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBGY1BhdHRlcm5FcXVhbChtX3BhdHRlcm4sIG90aGVyLm1fcGF0
dGVybik7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURh
dGFHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9y
bURhdGFHdGsuY3BwCShyZXZpc2lvbiAyNDk5MikJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
Rm9udFBsYXRmb3JtRGF0YUdkay5jcHA6MjQ5OTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9G
b250UGxhdGZvcm1EYXRhR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4OCBAQAor
LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBpbnRlcm5hbCBmb250IGltcGxlbWVudGF0
aW9uLiAgSXQgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgorICog
Rm9udE1hYy5jcHAsIEZvbnRXaW4uY3BwIGFuZCBGb250LmNwcC4KKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA3IEFs
cCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAor
ICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisKKyNpbmNsdWRlICJDU3RyaW5n
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKKyNpbmNsdWRlICJjYWlyby1mdC5oIgorI2luY2x1ZGUgImNhaXJvLmgiCisjaW5jbHVk
ZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHlOYW1lKQorICAgIDogbV9wYXR0ZXJuKDApCisgICAgLCBtX2ZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pCisgICAgLCBtX2ZvbnRNYXRyaXgoMCkKKyAgICAsIG1fZm9udEZhY2Uo
MCkKKyAgICAsIG1fb3B0aW9ucygwKQorICAgICwgbV9zY2FsZWRGb250KDApCit7CisgICAgRm9u
dFBsYXRmb3JtRGF0YTo6aW5pdCgpOworCisgICAgQ1N0cmluZyBmYW1pbHlOYW1lU3RyaW5nID0g
ZmFtaWx5TmFtZS5kb21TdHJpbmcoKS51dGY4KCk7CisgICAgY29uc3QgY2hhciogZmNmYW1pbHkg
PSBmYW1pbHlOYW1lU3RyaW5nLmRhdGEoKTsKKyAgICBpbnQgZmNzbGFudCA9IEZDX1NMQU5UX1JP
TUFOOworICAgIGludCBmY3dlaWdodCA9IEZDX1dFSUdIVF9OT1JNQUw7CisgICAgZmxvYXQgZmNz
aXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpOworICAgIGlmIChmb250RGVzY3Jp
cHRpb24uaXRhbGljKCkpCisgICAgICAgIGZjc2xhbnQgPSBGQ19TTEFOVF9JVEFMSUM7CisgICAg
aWYgKGZvbnREZXNjcmlwdGlvbi5ib2xkKCkpCisgICAgICAgIGZjd2VpZ2h0ID0gRkNfV0VJR0hU
X0JPTEQ7CisKKyAgICBpbnQgdHlwZSA9IGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCk7
CisKKyAgICBGY1BhdHRlcm4qIHBhdHRlcm4gPSBGY1BhdHRlcm5DcmVhdGUoKTsKKworICAgIGlm
ICghRmNQYXR0ZXJuQWRkU3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBGY0NoYXI4Kj4oZmNmYW1pbHkpKSkKKyAgICAgICAgZ290byBmcmVlUGF0dGVybjsK
KworICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Vy
aWZGYW1pbHk6CisgICAgICAgICAgICBmY2ZhbWlseSA9ICJzZXJpZiI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKKyAg
ICAgICAgICAgIGZjZmFtaWx5ID0gInNhbnMtc2VyaWYiOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6CisgICAgICAgICAg
ICBmY2ZhbWlseSA9ICJtb25vc3BhY2UiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRm9udERlc2NyaXB0aW9uOjpOb0ZhbWlseToKKyAgICAgICAgY2FzZSBGb250RGVzY3JpcHRp
b246OlN0YW5kYXJkRmFtaWx5OgorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZmNmYW1p
bHkgPSAic2Fucy1zZXJpZiI7CisgICAgfQorCisgICAgaWYgKCFGY1BhdHRlcm5BZGRTdHJpbmco
cGF0dGVybiwgRkNfRkFNSUxZLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihmY2Zh
bWlseSkpKQorICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOworICAgIGlmICghRmNQYXR0ZXJuQWRk
SW50ZWdlcihwYXR0ZXJuLCBGQ19TTEFOVCwgZmNzbGFudCkpCisgICAgICAgIGdvdG8gZnJlZVBh
dHRlcm47CisgICAgaWYgKCFGY1BhdHRlcm5BZGRJbnRlZ2VyKHBhdHRlcm4sIEZDX1dFSUdIVCwg
ZmN3ZWlnaHQpKQorICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOworICAgIGlmICghRmNQYXR0ZXJu
QWRkRG91YmxlKHBhdHRlcm4sIEZDX1BJWEVMX1NJWkUsIGZjc2l6ZSkpCisgICAgICAgIGdvdG8g
ZnJlZVBhdHRlcm47CisKKyAgICBGY0NvbmZpZ1N1YnN0aXR1dGUoTlVMTCwgcGF0dGVybiwgRmNN
YXRjaFBhdHRlcm4pOworICAgIEZjRGVmYXVsdFN1YnN0aXR1dGUocGF0dGVybik7CisKKyAgICBG
Y1Jlc3VsdCBmY3Jlc3VsdDsKKyAgICBtX3BhdHRlcm4gPSBGY0ZvbnRNYXRjaChOVUxMLCBwYXR0
ZXJuLCAmZmNyZXN1bHQpOworICAgIC8vIEZJWE1FOiBzaG91bGQgd2Ugc2V0IHNvbWUgZGVmYXVs
dCBmb250PworICAgIGlmICghbV9wYXR0ZXJuKQorICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOwor
ICAgIG1fZm9udEZhY2UgPSBjYWlyb19mdF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKG1f
cGF0dGVybik7CisgICAgbV9mb250TWF0cml4ID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19tYXRy
aXhfdCo+KG1hbGxvYyhzaXplb2YoY2Fpcm9fbWF0cml4X3QpKSk7CisgICAgY2Fpcm9fbWF0cml4
X3QgY3RtOworICAgIGNhaXJvX21hdHJpeF9pbml0X3NjYWxlKG1fZm9udE1hdHJpeCwgbV9mb250
RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCksIG1fZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6
ZSgpKTsKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKyAgICBtX29wdGlv
bnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7CisgICAgbV9zY2FsZWRGb250ID0gY2Fp
cm9fc2NhbGVkX2ZvbnRfY3JlYXRlKG1fZm9udEZhY2UsIG1fZm9udE1hdHJpeCwgJmN0bSwgbV9v
cHRpb25zKTsKKworZnJlZVBhdHRlcm46CisgICAgRmNQYXR0ZXJuRGVzdHJveShwYXR0ZXJuKTsK
K30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkKK3sKKyAgICBzdGF0aWMgRmNCb29s
IEZDSW5pdGlhbGl6ZWQ7CisgICAgaWYgKEZDSW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIEZDSW5pdGlhbGl6ZWQgPSBGY1RydWU7CisgICAgaWYgKCFGY0luaXQoKSkgewor
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNhbid0IGluaXQgZm9udCBjb25maWcgbGlicmFyeVxu
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKK30KKworYm9vbCBGb250
UGxhdGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQoreworICAgIGludCBzcGFjaW5nOworICAgIGlm
IChGY1BhdHRlcm5HZXRJbnRlZ2VyKG1fcGF0dGVybiwgRkNfU1BBQ0lORywgMCwgJnNwYWNpbmcp
ID09IEZjUmVzdWx0TWF0Y2gpCisgICAgICAgIHJldHVybiBzcGFjaW5nID09IEZDX01PTk87Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBsZW5ndGggaXMgYSBvdXQgdmFsdWUgZ2l2aW5nIHRo
ZSBsZW5ndGggb2YgdGhlIGxpc3QKK2NhaXJvX2ZvbnRfZmFjZV90KiogRm9udFBsYXRmb3JtRGF0
YTo6bGlzdChGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHlOYW1lLCBpbnQqIGxlbmd0aCkKK3sKKyAgICBpbml0KCk7CisKKyAgICBGY1Bh
dHRlcm4qIHBhdHRlcm4gPSBGY1BhdHRlcm5DcmVhdGUoKTsKKyAgICBpZiAoIXBhdHRlcm4pCisg
ICAgICAgIHJldHVybiBOVUxMOworCisgICAgRmNPYmplY3RTZXQqIG9zID0gRmNPYmplY3RTZXRD
cmVhdGUoKTsKKyAgICBGY09iamVjdFNldEFkZChvcywgRkNfRkFNSUxZKTsKKyAgICBGY09iamVj
dFNldEFkZChvcywgRkNfU1RZTEUpOworICAgIEZjRm9udFNldCogZnMgPSBGY0ZvbnRMaXN0KDAs
IHBhdHRlcm4sIG9zKTsKKyAgICBpZiAobGVuZ3RoKQorICAgICAgICAqbGVuZ3RoID0gZnMtPm5m
b250OworICAgIGlmIChwYXR0ZXJuKQorICAgICAgICBGY1BhdHRlcm5EZXN0cm95IChwYXR0ZXJu
KTsKKyAgICBpZiAob3MpCisgICAgICAgIEZjT2JqZWN0U2V0RGVzdHJveSAob3MpOworICAgIGNh
aXJvX2ZvbnRfZmFjZV90KiogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxjYWlyb19mb250X2Zh
Y2VfdCoqPihtYWxsb2MoKGZzLT5uZm9udCArIDEpICogc2l6ZW9mKGNhaXJvX2ZvbnRfZmFjZV90
KikpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZzLT5uZm9udDsgaSsrKSB7CisgICAgICAg
IEZjQ2hhcjgqIGZvbnQgPSBGY05hbWVVbnBhcnNlKGZzLT5mb250c1tpXSk7CisgICAgICAgIHBy
aW50ZigiJXNcbiIsIGZvbnQpOworICAgICAgICByZXN1bHRbaV0gPSBjYWlyb19mdF9mb250X2Zh
Y2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKGZzLT5mb250c1tpXSk7CisgICAgfQorICAgIHJlc3VsdFtm
cy0+bmZvbnRdID0gTlVMTDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEZvbnRQbGF0
Zm9ybURhdGE6OnNldEZvbnQoY2Fpcm9fdCogY3IpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fZm9u
dEZhY2UpOworICAgIEFTU0VSVChtX2ZvbnRNYXRyaXgpOworICAgIEFTU0VSVChtX29wdGlvbnMp
OworCisgICAgY2Fpcm9fc2V0X2ZvbnRfZmFjZShjciwgbV9mb250RmFjZSk7CisgICAgY2Fpcm9f
c2V0X2ZvbnRfbWF0cml4KGNyLCBtX2ZvbnRNYXRyaXgpOworICAgIGNhaXJvX3NldF9mb250X29w
dGlvbnMoY3IsIG1fb3B0aW9ucyk7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0
b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9w
YXR0ZXJuID09IG90aGVyLm1fcGF0dGVybikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KG1fcGF0dGVybiA9PSAwIHx8IG1fcGF0dGVybiA9PSByZWludGVycHJldF9jYXN0PEZjUGF0dGVy
bio+KC0xKQorICAgICAgICAgICAgfHwgb3RoZXIubV9wYXR0ZXJuID09IDAgfHwgb3RoZXIubV9w
YXR0ZXJuID09IHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0ZXJuKj4oLTEpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIEZjUGF0dGVybkVxdWFsKG1fcGF0dGVybiwgb3RoZXIubV9w
YXR0ZXJuKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhQYWdlVHJl
ZU5vZGVHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFn
ZVRyZWVOb2RlR2RrLmNwcAkocmV2aXNpb24gMjUwNTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2Uu
ZW1tZWxAZ21haWwuY29tIAotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRv
a2VyQGNvbGxhYm9yYS5jby51az4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCi0KLSNpbmNsdWRlICJG
b250RGF0YS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgR2x5cGhQYWdlOjpmaWxs
KFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZv
bnREYXRhKQotewotICAgIEZUX0ZhY2UgZmFjZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tf
ZmFjZShmb250RGF0YS0+bV9mb250Lm1fc2NhbGVkRm9udCk7Ci0KLSAgICBpZiAoIWZhY2UpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZm
ZXJMZW5ndGg7IGkrKykKLSAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgRmNGcmVlVHlw
ZUNoYXJJbmRleChmYWNlLCBidWZmZXJbaV0pLCBmb250RGF0YSk7Ci0KLSAgICBjYWlyb19mdF9z
Y2FsZWRfZm9udF91bmxvY2tfZmFjZShmb250RGF0YS0+bV9mb250Lm1fc2NhbGVkRm9udCk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5
cGhQYWdlVHJlZU5vZGVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0dseXBoUGFnZVRyZWVOb2RlR3RrLmNwcAkocmV2aXNpb24gMjQ5OTIpCShmcm9tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNwcDoyNDk5MikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHAudG9rZXJAY29sbGFib3JhLmNvLnVrPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKKwor
I2luY2x1ZGUgIkZvbnREYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBHbHlw
aFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBG
b250RGF0YSogZm9udERhdGEpCit7CisgICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVk
X2ZvbnRfbG9ja19mYWNlKGZvbnREYXRhLT5tX2ZvbnQubV9zY2FsZWRGb250KTsKKworICAgIGlm
ICghZmFjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGJ1ZmZlckxlbmd0aDsgaSsrKQorICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChp
LCBGY0ZyZWVUeXBlQ2hhckluZGV4KGZhY2UsIGJ1ZmZlcltpXSksIGZvbnREYXRhKTsKKworICAg
IGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKGZvbnREYXRhLT5tX2ZvbnQubV9zY2Fs
ZWRGb250KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dkay9LZXlFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvS2V5RXZlbnRHZGsuY3BwCShyZXZpc2lvbiAyNTA1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL0tleUV2ZW50R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0ODUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20gCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLQotI2luY2x1ZGUgIkRlcHJlY2F0ZWRT
dHJpbmcuaCIKLSNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCi0jaW5jbHVkZSAiVGV4dEVuY29k
aW5nLmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogVGhpcyBpcyBpbmNvbXBsZXRl
LiAgV2Ugc2hvdWxkIGNoYW5nZSB0aGlzIHRvIG1pcnJvcgotLy8gbW9yZSBsaWtlIHdoYXQgRmly
ZWZveCBkb2VzLCBhbmQgZ2VuZXJhdGUgdGhlc2Ugc3dpdGNoIHN0YXRlbWVudHMKLS8vIGF0IGJ1
aWxkIHRpbWUuCi1zdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGd1aW50
IGtleUNvZGUpCi17Ci0gICAgc3dpdGNoIChrZXlDb2RlKSB7Ci0gICAgICAgIGNhc2UgR0RLX01l
bnU6Ci0gICAgICAgIGNhc2UgR0RLX0FsdF9MOgotICAgICAgICBjYXNlIEdES19BbHRfUjoKLSAg
ICAgICAgICAgIHJldHVybiAiQWx0IjsKLSAgICAgICAgY2FzZSBHREtfQ2xlYXI6Ci0gICAgICAg
ICAgICByZXR1cm4gIkNsZWFyIjsKLSAgICAgICAgY2FzZSBHREtfRG93bjoKLSAgICAgICAgICAg
IHJldHVybiAiRG93biI7Ci0gICAgICAgICAgICAvLyAiRW5kIgotICAgICAgICBjYXNlIEdES19F
bmQ6Ci0gICAgICAgICAgICByZXR1cm4gIkVuZCI7Ci0gICAgICAgICAgICAvLyAiRW50ZXIiCi0g
ICAgICAgIGNhc2UgR0RLX0lTT19FbnRlcjoKLSAgICAgICAgY2FzZSBHREtfS1BfRW50ZXI6Ci0g
ICAgICAgICAgICByZXR1cm4gIkVudGVyIjsKLSAgICAgICAgY2FzZSBHREtfRXhlY3V0ZToKLSAg
ICAgICAgICAgIHJldHVybiAiRXhlY3V0ZSI7Ci0gICAgICAgIGNhc2UgR0RLX0YxOgotICAgICAg
ICAgICAgcmV0dXJuICJGMSI7Ci0gICAgICAgIGNhc2UgR0RLX0YyOgotICAgICAgICAgICAgcmV0
dXJuICJGMiI7Ci0gICAgICAgIGNhc2UgR0RLX0YzOgotICAgICAgICAgICAgcmV0dXJuICJGMyI7
Ci0gICAgICAgIGNhc2UgR0RLX0Y0OgotICAgICAgICAgICAgcmV0dXJuICJGNCI7Ci0gICAgICAg
IGNhc2UgR0RLX0Y1OgotICAgICAgICAgICAgcmV0dXJuICJGNSI7Ci0gICAgICAgIGNhc2UgR0RL
X0Y2OgotICAgICAgICAgICAgcmV0dXJuICJGNiI7Ci0gICAgICAgIGNhc2UgR0RLX0Y3OgotICAg
ICAgICAgICAgcmV0dXJuICJGNyI7Ci0gICAgICAgIGNhc2UgR0RLX0Y4OgotICAgICAgICAgICAg
cmV0dXJuICJGOCI7Ci0gICAgICAgIGNhc2UgR0RLX0Y5OgotICAgICAgICAgICAgcmV0dXJuICJG
OSI7Ci0gICAgICAgIGNhc2UgR0RLX0YxMDoKLSAgICAgICAgICAgIHJldHVybiAiRjEwIjsKLSAg
ICAgICAgY2FzZSBHREtfRjExOgotICAgICAgICAgICAgcmV0dXJuICJGMTEiOwotICAgICAgICBj
YXNlIEdES19GMTI6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMiI7Ci0gICAgICAgIGNhc2UgR0RL
X0YxMzoKLSAgICAgICAgICAgIHJldHVybiAiRjEzIjsKLSAgICAgICAgY2FzZSBHREtfRjE0Ogot
ICAgICAgICAgICAgcmV0dXJuICJGMTQiOwotICAgICAgICBjYXNlIEdES19GMTU6Ci0gICAgICAg
ICAgICByZXR1cm4gIkYxNSI7Ci0gICAgICAgIGNhc2UgR0RLX0YxNjoKLSAgICAgICAgICAgIHJl
dHVybiAiRjE2IjsKLSAgICAgICAgY2FzZSBHREtfRjE3OgotICAgICAgICAgICAgcmV0dXJuICJG
MTciOwotICAgICAgICBjYXNlIEdES19GMTg6Ci0gICAgICAgICAgICByZXR1cm4gIkYxOCI7Ci0g
ICAgICAgIGNhc2UgR0RLX0YxOToKLSAgICAgICAgICAgIHJldHVybiAiRjE5IjsKLSAgICAgICAg
Y2FzZSBHREtfRjIwOgotICAgICAgICAgICAgcmV0dXJuICJGMjAiOwotICAgICAgICBjYXNlIEdE
S19GMjE6Ci0gICAgICAgICAgICByZXR1cm4gIkYyMSI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMjoK
LSAgICAgICAgICAgIHJldHVybiAiRjIyIjsKLSAgICAgICAgY2FzZSBHREtfRjIzOgotICAgICAg
ICAgICAgcmV0dXJuICJGMjMiOwotICAgICAgICBjYXNlIEdES19GMjQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gIkYyNCI7Ci0gICAgICAgIGNhc2UgR0RLX0hlbHA6Ci0gICAgICAgICAgICByZXR1cm4g
IkhlbHAiOwotICAgICAgICBjYXNlIEdES19Ib21lOgotICAgICAgICAgICAgcmV0dXJuICJIb21l
IjsKLSAgICAgICAgY2FzZSBHREtfSW5zZXJ0OgotICAgICAgICAgICAgcmV0dXJuICJJbnNlcnQi
OwotICAgICAgICBjYXNlIEdES19MZWZ0OgotICAgICAgICAgICAgcmV0dXJuICJMZWZ0IjsKLSAg
ICAgICAgY2FzZSBHREtfUGFnZV9Eb3duOgotICAgICAgICAgICAgcmV0dXJuICJQYWdlRG93biI7
Ci0gICAgICAgIGNhc2UgR0RLX1BhZ2VfVXA6Ci0gICAgICAgICAgICByZXR1cm4gIlBhZ2VVcCI7
Ci0gICAgICAgIGNhc2UgR0RLX1BhdXNlOgotICAgICAgICAgICAgcmV0dXJuICJQYXVzZSI7Ci0g
ICAgICAgIGNhc2UgR0RLXzMyNzBfUHJpbnRTY3JlZW46Ci0gICAgICAgICAgICByZXR1cm4gIlBy
aW50U2NyZWVuIjsKLSAgICAgICAgY2FzZSBHREtfUmlnaHQ6Ci0gICAgICAgICAgICByZXR1cm4g
IlJpZ2h0IjsKLSAgICAgICAgY2FzZSBHREtfU2VsZWN0OgotICAgICAgICAgICAgcmV0dXJuICJT
ZWxlY3QiOwotICAgICAgICBjYXNlIEdES19VcDoKLSAgICAgICAgICAgIHJldHVybiAiVXAiOwot
ICAgICAgICAgICAgLy8gU3RhbmRhcmQgc2F5cyB0aGF0IERFTCBiZWNvbWVzIFUrMDA3Ri4KLSAg
ICAgICAgY2FzZSBHREtfRGVsZXRlOgotICAgICAgICAgICAgcmV0dXJuICJVKzAwN0YiOwotICAg
ICAgICBjYXNlIEdES19UYWI6Ci0gICAgICAgICAgICByZXR1cm4gIlUrMDAwOSI7Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlUrJTA0WCIsIGdk
a19rZXl2YWxfdG9fdW5pY29kZShnZGtfa2V5dmFsX3RvX3VwcGVyKGtleUNvZGUpKSk7Ci0gICAg
fQotfQotCi1zdGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQodW5zaWduZWQgaW50
IGtleWNvZGUpCi17Ci0gICAgc3dpdGNoIChrZXljb2RlKSB7Ci0gICAgICAgIGNhc2UgR0RLX0tQ
XzA6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEMDsvLyAoNjApIE51bWVyaWMga2V5cGFk
IDAga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzE6Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVN
UEFEMTsvLyAoNjEpIE51bWVyaWMga2V5cGFkIDEga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzI6
Ci0gICAgICAgICAgICByZXR1cm4gIFZLX05VTVBBRDI7IC8vICg2MikgTnVtZXJpYyBrZXlwYWQg
MiBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfMzoKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1Q
QUQzOyAvLyAoNjMpIE51bWVyaWMga2V5cGFkIDMga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzQ6
Ci0gICAgICAgICAgICByZXR1cm4gVktfTlVNUEFENDsgLy8gKDY0KSBOdW1lcmljIGtleXBhZCA0
IGtleQotICAgICAgICBjYXNlIEdES19LUF81OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBB
RDU7IC8vKDY1KSBOdW1lcmljIGtleXBhZCA1IGtleQotICAgICAgICBjYXNlIEdES19LUF82Ogot
ICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDY7IC8vICg2NikgTnVtZXJpYyBrZXlwYWQgNiBr
ZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNzoKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ3
OyAvLyAoNjcpIE51bWVyaWMga2V5cGFkIDcga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzg6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEODsgLy8gKDY4KSBOdW1lcmljIGtleXBhZCA4IGtl
eQotICAgICAgICBjYXNlIEdES19LUF85OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDk7
IC8vICg2OSkgTnVtZXJpYyBrZXlwYWQgOSBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfTXVsdGlw
bHk6Ci0gICAgICAgICAgICByZXR1cm4gVktfTVVMVElQTFk7IC8vICg2QSkgTXVsdGlwbHkga2V5
Ci0gICAgICAgIGNhc2UgR0RLX0tQX0FkZDoKLSAgICAgICAgICAgIHJldHVybiBWS19BREQ7IC8v
ICg2QikgQWRkIGtleQotICAgICAgICBjYXNlIEdES19LUF9TdWJ0cmFjdDoKLSAgICAgICAgICAg
IHJldHVybiBWS19TVUJUUkFDVDsgLy8gKDZEKSBTdWJ0cmFjdCBrZXkKLSAgICAgICAgY2FzZSBH
REtfS1BfRGVjaW1hbDoKLSAgICAgICAgICAgIHJldHVybiBWS19ERUNJTUFMOyAvLyAoNkUpIERl
Y2ltYWwga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0RpdmlkZToKLSAgICAgICAgICAgIHJldHVy
biBWS19ESVZJREU7IC8vICg2RikgRGl2aWRlIGtleQotCi0gICAgICAgIGNhc2UgR0RLX0JhY2tT
cGFjZToKLSAgICAgICAgICAgIHJldHVybiBWS19CQUNLOyAvLyAoMDgpIEJBQ0tTUEFDRSBrZXkK
LSAgICAgICAgY2FzZSBHREtfVGFiOgotICAgICAgICAgICAgcmV0dXJuIFZLX1RBQjsgLy8gKDA5
KSBUQUIga2V5Ci0gICAgICAgIGNhc2UgR0RLX0NsZWFyOgotICAgICAgICAgICAgcmV0dXJuIFZL
X0NMRUFSOyAvLyAoMEMpIENMRUFSIGtleQotICAgICAgICBjYXNlIEdES19SZXR1cm46Ci0gICAg
ICAgICAgICByZXR1cm4gVktfUkVUVVJOOyAvLygwRCkgUmV0dXJuIGtleQotICAgICAgICBjYXNl
IEdES19TaGlmdF9MOgotICAgICAgICBjYXNlIEdES19TaGlmdF9SOgotICAgICAgICAgICAgcmV0
dXJuIFZLX1NISUZUOyAvLyAoMTApIFNISUZUIGtleQotICAgICAgICBjYXNlIEdES19Db250cm9s
X0w6Ci0gICAgICAgIGNhc2UgR0RLX0NvbnRyb2xfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19D
T05UUk9MOyAvLyAoMTEpIENUUkwga2V5Ci0gICAgICAgIGNhc2UgR0RLX01lbnU6Ci0gICAgICAg
IGNhc2UgR0RLX0FsdF9MOgotICAgICAgICBjYXNlIEdES19BbHRfUjoKLSAgICAgICAgICAgIHJl
dHVybiBWS19NRU5VOyAvLyAoMTIpIEFMVCBrZXkKLQotICAgICAgICBjYXNlIEdES19QYXVzZToK
LSAgICAgICAgICAgIHJldHVybiBWS19QQVVTRTsgLy8gKDEzKSBQQVVTRSBrZXkKLSAgICAgICAg
Y2FzZSBHREtfQ2Fwc19Mb2NrOgotICAgICAgICAgICAgcmV0dXJuIFZLX0NBUElUQUw7IC8vICgx
NCkgQ0FQUyBMT0NLIGtleQotICAgICAgICBjYXNlIEdES19LYW5hX0xvY2s6Ci0gICAgICAgIGNh
c2UgR0RLX0thbmFfU2hpZnQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfS0FOQTsgLy8gKDE1KSBJ
bnB1dCBNZXRob2QgRWRpdG9yIChJTUUpIEthbmEgbW9kZQotICAgICAgICBjYXNlIEdES19IYW5n
dWw6Ci0gICAgICAgICAgICByZXR1cm4gVktfSEFOR1VMOyAvLyBWS19IQU5HVUwgKDE1KSBJTUUg
SGFuZ3VsIG1vZGUKLSAgICAgICAgICAgIC8vIFZLX0pVTkpBICgxNykgSU1FIEp1bmphIG1vZGUK
LSAgICAgICAgICAgIC8vIFZLX0ZJTkFMICgxOCkgSU1FIGZpbmFsIG1vZGUKLSAgICAgICAgY2Fz
ZSBHREtfSGFuZ3VsX0hhbmphOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkpBOyAvLyAoMTkp
IElNRSBIYW5qYSBtb2RlCi0gICAgICAgIGNhc2UgR0RLX0thbmppOgotICAgICAgICAgICAgcmV0
dXJuIFZLX0tBTkpJOyAvLyAoMTkpIElNRSBLYW5qaSBtb2RlCi0gICAgICAgIGNhc2UgR0RLX0Vz
Y2FwZToKLSAgICAgICAgICAgIHJldHVybiBWS19FU0NBUEU7IC8vICgxQikgRVNDIGtleQotICAg
ICAgICAgICAgLy8gVktfQ09OVkVSVCAoMUMpIElNRSBjb252ZXJ0Ci0gICAgICAgICAgICAvLyBW
S19OT05DT05WRVJUICgxRCkgSU1FIG5vbmNvbnZlcnQKLSAgICAgICAgICAgIC8vIFZLX0FDQ0VQ
VCAoMUUpIElNRSBhY2NlcHQKLSAgICAgICAgICAgIC8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUg
bW9kZSBjaGFuZ2UgcmVxdWVzdAotICAgICAgICBjYXNlIEdES19zcGFjZToKLSAgICAgICAgICAg
IHJldHVybiBWS19TUEFDRTsgLy8gKDIwKSBTUEFDRUJBUgotICAgICAgICBjYXNlIEdES19QYWdl
X1VwOgotICAgICAgICAgICAgcmV0dXJuIFZLX1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX1BhZ2VfRG93bjoKLSAgICAgICAgICAgIHJldHVybiBWS19ORVhUOyAv
LyAoMjIpIFBBR0UgRE9XTiBrZXkKLSAgICAgICAgY2FzZSBHREtfRW5kOgotICAgICAgICAgICAg
cmV0dXJuIFZLX0VORDsgLy8gKDIzKSBFTkQga2V5Ci0gICAgICAgIGNhc2UgR0RLX0hvbWU6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfSE9NRTsgLy8gKDI0KSBIT01FIGtleQotICAgICAgICBjYXNl
IEdES19MZWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJP
VyBrZXkKLSAgICAgICAgY2FzZSBHREtfVXA6Ci0gICAgICAgICAgICByZXR1cm4gVktfVVA7IC8v
ICgyNikgVVAgQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX1JpZ2h0OgotICAgICAgICAgICAg
cmV0dXJuIFZLX1JJR0hUOyAvLyAoMjcpIFJJR0hUIEFSUk9XIGtleQotICAgICAgICBjYXNlIEdE
S19Eb3duOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBr
ZXkKLSAgICAgICAgY2FzZSBHREtfU2VsZWN0OgotICAgICAgICAgICAgcmV0dXJuIFZLX1NFTEVD
VDsgLy8gKDI5KSBTRUxFQ1Qga2V5Ci0gICAgICAgIGNhc2UgR0RLX1ByaW50OgotICAgICAgICAg
ICAgcmV0dXJuIFZLX1BSSU5UOyAvLyAoMkEpIFBSSU5UIGtleQotICAgICAgICBjYXNlIEdES19F
eGVjdXRlOgotICAgICAgICAgICAgcmV0dXJuIFZLX0VYRUNVVEU7Ly8gKDJCKSBFWEVDVVRFIGtl
eQotICAgICAgICAgICAgLy9kdW5ubyBvbiB0aGlzCi0gICAgICAgICAgICAvL2Nhc2UgR0RLX1By
aW50U2NyZWVuOgotICAgICAgICAgICAgLy8gICAgICByZXR1cm4gVktfU05BUFNIT1Q7IC8vICgy
QykgUFJJTlQgU0NSRUVOIGtleQotICAgICAgICBjYXNlIEdES19JbnNlcnQ6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfSU5TRVJUOyAvLyAoMkQpIElOUyBrZXkKLSAgICAgICAgY2FzZSBHREtfRGVs
ZXRlOgotICAgICAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5Ci0gICAg
ICAgIGNhc2UgR0RLX0hlbHA6Ci0gICAgICAgICAgICByZXR1cm4gVktfSEVMUDsgLy8gKDJGKSBI
RUxQIGtleQotICAgICAgICBjYXNlIEdES18wOgotICAgICAgICBjYXNlIEdES19wYXJlbmxlZnQ6
Ci0gICAgICAgICAgICByZXR1cm4gVktfMDsgICAgLy8gICgzMCkgMCkga2V5Ci0gICAgICAgIGNh
c2UgR0RLXzE6Ci0gICAgICAgICAgICByZXR1cm4gVktfMTsgLy8gICgzMSkgMSAhIGtleQotICAg
ICAgICBjYXNlIEdES18yOgotICAgICAgICBjYXNlIEdES19hdDoKLSAgICAgICAgICAgIHJldHVy
biBWS18yOyAvLyAgKDMyKSAyICYga2V5Ci0gICAgICAgIGNhc2UgR0RLXzM6Ci0gICAgICAgIGNh
c2UgR0RLX251bWJlcnNpZ246Ci0gICAgICAgICAgICByZXR1cm4gVktfMzsgLy9jYXNlICczJzog
Y2FzZSAnIyc7Ci0gICAgICAgIGNhc2UgR0RLXzQ6Ci0gICAgICAgIGNhc2UgR0RLX2RvbGxhcjog
Ly8gICgzNCkgNCBrZXkgJyQnOwotICAgICAgICAgICAgcmV0dXJuIFZLXzQ7Ci0gICAgICAgIGNh
c2UgR0RLXzU6Ci0gICAgICAgIGNhc2UgR0RLX3BlcmNlbnQ6Ci0gICAgICAgICAgICByZXR1cm4g
VktfNTsgLy8gICgzNSkgNSBrZXkgICclJwotICAgICAgICBjYXNlIEdES182OgotICAgICAgICBj
YXNlIEdES19hc2NpaWNpcmN1bToKLSAgICAgICAgICAgIHJldHVybiBWS182OyAvLyAgKDM2KSA2
IGtleSAgJ14nCi0gICAgICAgIGNhc2UgR0RLXzc6Ci0gICAgICAgIGNhc2UgR0RLX2FtcGVyc2Fu
ZDoKLSAgICAgICAgICAgIHJldHVybiBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAnJicKLSAg
ICAgICAgY2FzZSBHREtfODoKLSAgICAgICAgY2FzZSBHREtfYXN0ZXJpc2s6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfODsgLy8gICgzOCkgOCBrZXkgICcqJwotICAgICAgICBjYXNlIEdES185Ogot
ICAgICAgICBjYXNlIEdES19wYXJlbnJpZ2h0OgotICAgICAgICAgICAgcmV0dXJuIFZLXzk7IC8v
ICAoMzkpIDkga2V5ICcoJwotICAgICAgICBjYXNlIEdES19hOgotICAgICAgICBjYXNlIEdES19B
OgotICAgICAgICAgICAgcmV0dXJuIFZLX0E7IC8vICAoNDEpIEEga2V5IGNhc2UgJ2EnOiBjYXNl
ICdBJzogcmV0dXJuIDB4NDE7Ci0gICAgICAgIGNhc2UgR0RLX2I6Ci0gICAgICAgIGNhc2UgR0RL
X0I6Ci0gICAgICAgICAgICByZXR1cm4gVktfQjsgLy8gICg0MikgQiBrZXkgY2FzZSAnYic6IGNh
c2UgJ0InOiByZXR1cm4gMHg0MjsKLSAgICAgICAgY2FzZSBHREtfYzoKLSAgICAgICAgY2FzZSBH
REtfQzoKLSAgICAgICAgICAgIHJldHVybiBWS19DOyAvLyAgKDQzKSBDIGtleSBjYXNlICdjJzog
Y2FzZSAnQyc6IHJldHVybiAweDQzOwotICAgICAgICBjYXNlIEdES19kOgotICAgICAgICBjYXNl
IEdES19EOgotICAgICAgICAgICAgcmV0dXJuIFZLX0Q7IC8vICAoNDQpIEQga2V5IGNhc2UgJ2Qn
OiBjYXNlICdEJzogcmV0dXJuIDB4NDQ7Ci0gICAgICAgIGNhc2UgR0RLX2U6Ci0gICAgICAgIGNh
c2UgR0RLX0U6Ci0gICAgICAgICAgICByZXR1cm4gVktfRTsgLy8gICg0NSkgRSBrZXkgY2FzZSAn
ZSc6IGNhc2UgJ0UnOiByZXR1cm4gMHg0NTsKLSAgICAgICAgY2FzZSBHREtfZjoKLSAgICAgICAg
Y2FzZSBHREtfRjoKLSAgICAgICAgICAgIHJldHVybiBWS19GOyAvLyAgKDQ2KSBGIGtleSBjYXNl
ICdmJzogY2FzZSAnRic6IHJldHVybiAweDQ2OwotICAgICAgICBjYXNlIEdES19nOgotICAgICAg
ICBjYXNlIEdES19HOgotICAgICAgICAgICAgcmV0dXJuIFZLX0c7IC8vICAoNDcpIEcga2V5IGNh
c2UgJ2cnOiBjYXNlICdHJzogcmV0dXJuIDB4NDc7Ci0gICAgICAgIGNhc2UgR0RLX2g6Ci0gICAg
ICAgIGNhc2UgR0RLX0g6Ci0gICAgICAgICAgICByZXR1cm4gVktfSDsgLy8gICg0OCkgSCBrZXkg
Y2FzZSAnaCc6IGNhc2UgJ0gnOiByZXR1cm4gMHg0ODsKLSAgICAgICAgY2FzZSBHREtfaToKLSAg
ICAgICAgY2FzZSBHREtfSToKLSAgICAgICAgICAgIHJldHVybiBWS19JOyAvLyAgKDQ5KSBJIGtl
eSBjYXNlICdpJzogY2FzZSAnSSc6IHJldHVybiAweDQ5OwotICAgICAgICBjYXNlIEdES19qOgot
ICAgICAgICBjYXNlIEdES19KOgotICAgICAgICAgICAgcmV0dXJuIFZLX0o7IC8vICAoNEEpIEog
a2V5IGNhc2UgJ2onOiBjYXNlICdKJzogcmV0dXJuIDB4NEE7Ci0gICAgICAgIGNhc2UgR0RLX2s6
Ci0gICAgICAgIGNhc2UgR0RLX0s6Ci0gICAgICAgICAgICByZXR1cm4gVktfSzsgLy8gICg0Qikg
SyBrZXkgY2FzZSAnayc6IGNhc2UgJ0snOiByZXR1cm4gMHg0QjsKLSAgICAgICAgY2FzZSBHREtf
bDoKLSAgICAgICAgY2FzZSBHREtfTDoKLSAgICAgICAgICAgIHJldHVybiBWS19MOyAvLyAgKDRD
KSBMIGtleSBjYXNlICdsJzogY2FzZSAnTCc6IHJldHVybiAweDRDOwotICAgICAgICBjYXNlIEdE
S19tOgotICAgICAgICBjYXNlIEdES19NOgotICAgICAgICAgICAgcmV0dXJuIFZLX007IC8vICAo
NEQpIE0ga2V5IGNhc2UgJ20nOiBjYXNlICdNJzogcmV0dXJuIDB4NEQ7Ci0gICAgICAgIGNhc2Ug
R0RLX246Ci0gICAgICAgIGNhc2UgR0RLX046Ci0gICAgICAgICAgICByZXR1cm4gVktfTjsgLy8g
ICg0RSkgTiBrZXkgY2FzZSAnbic6IGNhc2UgJ04nOiByZXR1cm4gMHg0RTsKLSAgICAgICAgY2Fz
ZSBHREtfbzoKLSAgICAgICAgY2FzZSBHREtfTzoKLSAgICAgICAgICAgIHJldHVybiBWS19POyAv
LyAgKDRGKSBPIGtleSBjYXNlICdvJzogY2FzZSAnTyc6IHJldHVybiAweDRGOwotICAgICAgICBj
YXNlIEdES19wOgotICAgICAgICBjYXNlIEdES19QOgotICAgICAgICAgICAgcmV0dXJuIFZLX1A7
IC8vICAoNTApIFAga2V5IGNhc2UgJ3AnOiBjYXNlICdQJzogcmV0dXJuIDB4NTA7Ci0gICAgICAg
IGNhc2UgR0RLX3E6Ci0gICAgICAgIGNhc2UgR0RLX1E6Ci0gICAgICAgICAgICByZXR1cm4gVktf
UTsgLy8gICg1MSkgUSBrZXkgY2FzZSAncSc6IGNhc2UgJ1EnOiByZXR1cm4gMHg1MTsKLSAgICAg
ICAgY2FzZSBHREtfcjoKLSAgICAgICAgY2FzZSBHREtfUjoKLSAgICAgICAgICAgIHJldHVybiBW
S19SOyAvLyAgKDUyKSBSIGtleSBjYXNlICdyJzogY2FzZSAnUic6IHJldHVybiAweDUyOwotICAg
ICAgICBjYXNlIEdES19zOgotICAgICAgICBjYXNlIEdES19TOgotICAgICAgICAgICAgcmV0dXJu
IFZLX1M7IC8vICAoNTMpIFMga2V5IGNhc2UgJ3MnOiBjYXNlICdTJzogcmV0dXJuIDB4NTM7Ci0g
ICAgICAgIGNhc2UgR0RLX3Q6Ci0gICAgICAgIGNhc2UgR0RLX1Q6Ci0gICAgICAgICAgICByZXR1
cm4gVktfVDsgLy8gICg1NCkgVCBrZXkgY2FzZSAndCc6IGNhc2UgJ1QnOiByZXR1cm4gMHg1NDsK
LSAgICAgICAgY2FzZSBHREtfdToKLSAgICAgICAgY2FzZSBHREtfVToKLSAgICAgICAgICAgIHJl
dHVybiBWS19VOyAvLyAgKDU1KSBVIGtleSBjYXNlICd1JzogY2FzZSAnVSc6IHJldHVybiAweDU1
OwotICAgICAgICBjYXNlIEdES192OgotICAgICAgICBjYXNlIEdES19WOgotICAgICAgICAgICAg
cmV0dXJuIFZLX1Y7IC8vICAoNTYpIFYga2V5IGNhc2UgJ3YnOiBjYXNlICdWJzogcmV0dXJuIDB4
NTY7Ci0gICAgICAgIGNhc2UgR0RLX3c6Ci0gICAgICAgIGNhc2UgR0RLX1c6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfVzsgLy8gICg1NykgVyBrZXkgY2FzZSAndyc6IGNhc2UgJ1cnOiByZXR1cm4g
MHg1NzsKLSAgICAgICAgY2FzZSBHREtfeDoKLSAgICAgICAgY2FzZSBHREtfWDoKLSAgICAgICAg
ICAgIHJldHVybiBWS19YOyAvLyAgKDU4KSBYIGtleSBjYXNlICd4JzogY2FzZSAnWCc6IHJldHVy
biAweDU4OwotICAgICAgICBjYXNlIEdES195OgotICAgICAgICBjYXNlIEdES19ZOgotICAgICAg
ICAgICAgcmV0dXJuIFZLX1k7IC8vICAoNTkpIFkga2V5IGNhc2UgJ3knOiBjYXNlICdZJzogcmV0
dXJuIDB4NTk7Ci0gICAgICAgIGNhc2UgR0RLX3o6Ci0gICAgICAgIGNhc2UgR0RLX1o6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfWjsgLy8gICg1QSkgWiBrZXkgY2FzZSAneic6IGNhc2UgJ1onOiBy
ZXR1cm4gMHg1QTsKLSAgICAgICAgY2FzZSBHREtfTWV0YV9MOgotICAgICAgICAgICAgcmV0dXJu
IFZLX0xXSU47IC8vICg1QikgTGVmdCBXaW5kb3dzIGtleSAoTWljcm9zb2Z0IE5hdHVyYWwga2V5
Ym9hcmQpCi0gICAgICAgIGNhc2UgR0RLX01ldGFfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19S
V0lOOyAvLyAoNUMpIFJpZ2h0IFdpbmRvd3Mga2V5IChOYXR1cmFsIGtleWJvYXJkKQotICAgICAg
ICAgICAgLy8gVktfQVBQUyAoNUQpIEFwcGxpY2F0aW9ucyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQp
Ci0gICAgICAgICAgICAvLyBWS19TTEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQotICAgICAg
ICAgICAgLy8gVktfU0VQQVJBVE9SICg2QykgU2VwYXJhdG9yIGtleQotICAgICAgICAgICAgLy8g
VktfU1VCVFJBQ1QgKDZEKSBTdWJ0cmFjdCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0RFQ0lNQUwg
KDZFKSBEZWNpbWFsIGtleQotICAgICAgICAgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtl
eQotICAgICAgICAgICAgLy8gaGFuZGxlZCBieSBrZXkgY29kZSBhYm92ZQotCi0gICAgICAgIGNh
c2UgR0RLX051bV9Mb2NrOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkg
TlVNIExPQ0sga2V5Ci0KLSAgICAgICAgY2FzZSBHREtfU2Nyb2xsX0xvY2s6Ci0gICAgICAgICAg
ICByZXR1cm4gVktfU0NST0xMOyAvLyAoOTEpIFNDUk9MTCBMT0NLIGtleQotCi0gICAgICAgICAg
ICAvLyBWS19MU0hJRlQgKEEwKSBMZWZ0IFNISUZUIGtleQotICAgICAgICAgICAgLy8gVktfUlNI
SUZUIChBMSkgUmlnaHQgU0hJRlQga2V5Ci0gICAgICAgICAgICAvLyBWS19MQ09OVFJPTCAoQTIp
IExlZnQgQ09OVFJPTCBrZXkKLSAgICAgICAgICAgIC8vIFZLX1JDT05UUk9MIChBMykgUmlnaHQg
Q09OVFJPTCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xNRU5VIChBNCkgTGVmdCBNRU5VIGtleQot
ICAgICAgICAgICAgLy8gVktfUk1FTlUgKEE1KSBSaWdodCBNRU5VIGtleQotICAgICAgICAgICAg
Ly8gVktfQlJPV1NFUl9CQUNLIChBNikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEJhY2sga2V5
Ci0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX0ZPUldBUkQgKEE3KSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgRm9yd2FyZCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfUkVGUkVTSCAo
QTgpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBSZWZyZXNoIGtleQotICAgICAgICAgICAgLy8g
VktfQlJPV1NFUl9TVE9QIChBOSkgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5Ci0g
ICAgICAgICAgICAvLyBWS19CUk9XU0VSX1NFQVJDSCAoQUEpIFdpbmRvd3MgMjAwMC9YUDogQnJv
d3NlciBTZWFyY2gga2V5Ci0gICAgICAgICAgICAvLyBWS19CUk9XU0VSX0ZBVk9SSVRFUyAoQUIp
IFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBGYXZvcml0ZXMga2V5Ci0gICAgICAgICAgICAvLyBW
S19CUk9XU0VSX0hPTUUgKEFDKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RhcnQgYW5kIEhv
bWUga2V5Ci0gICAgICAgICAgICAvLyBWS19WT0xVTUVfTVVURSAoQUQpIFdpbmRvd3MgMjAwMC9Y
UDogVm9sdW1lIE11dGUga2V5Ci0gICAgICAgICAgICAvLyBWS19WT0xVTUVfRE9XTiAoQUUpIFdp
bmRvd3MgMjAwMC9YUDogVm9sdW1lIERvd24ga2V5Ci0gICAgICAgICAgICAvLyBWS19WT0xVTUVf
VVAgKEFGKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBVcCBrZXkKLSAgICAgICAgICAgIC8vIFZL
X01FRElBX05FWFRfVFJBQ0sgKEIwKSBXaW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5Ci0g
ICAgICAgICAgICAvLyBWS19NRURJQV9QUkVWX1RSQUNLIChCMSkgV2luZG93cyAyMDAwL1hQOiBQ
cmV2aW91cyBUcmFjayBrZXkKLSAgICAgICAgICAgIC8vIFZLX01FRElBX1NUT1AgKEIyKSBXaW5k
b3dzIDIwMDAvWFA6IFN0b3AgTWVkaWEga2V5Ci0gICAgICAgICAgICAvLyBWS19NRURJQV9QTEFZ
X1BBVVNFIChCMykgV2luZG93cyAyMDAwL1hQOiBQbGF5L1BhdXNlIE1lZGlhIGtleQotICAgICAg
ICAgICAgLy8gVktfTEFVTkNIX01BSUwgKEI0KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IE1haWwg
a2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVOQ0hfTUVESUFfU0VMRUNUIChCNSkgV2luZG93cyAy
MDAwL1hQOiBTZWxlY3QgTWVkaWEga2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVOQ0hfQVBQMSAo
QjYpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMSBrZXkKLSAgICAgICAgICAg
IC8vIFZLX0xBVU5DSF9BUFAyIChCNykgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlv
biAyIGtleQotCi0gICAgICAgICAgICAvLyBWS19PRU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxh
bmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9Y
UDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICc7Oicga2V5Ci0gICAgICAgIGNh
c2UgR0RLX3NlbWljb2xvbjoKLSAgICAgICAgY2FzZSBHREtfY29sb246Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfT0VNXzE7IC8vY2FzZSAnOyc6IGNhc2UgJzonOiByZXR1cm4gMHhCQTsKLSAgICAg
ICAgICAgIC8vIFZLX09FTV9QTFVTIChCQikgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50
cnkvcmVnaW9uLCB0aGUgJysnIGtleQotICAgICAgICBjYXNlIEdES19wbHVzOgotICAgICAgICBj
YXNlIEdES19lcXVhbDoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fUExVUzsgLy9jYXNlICc9
JzogY2FzZSAnKyc6IHJldHVybiAweEJCOwotICAgICAgICAgICAgLy8gVktfT0VNX0NPTU1BIChC
QykgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJywnIGtleQot
ICAgICAgICBjYXNlIEdES19jb21tYToKLSAgICAgICAgY2FzZSBHREtfbGVzczoKLSAgICAgICAg
ICAgIHJldHVybiBWS19PRU1fQ09NTUE7IC8vY2FzZSAnLCc6IGNhc2UgJzwnOiByZXR1cm4gMHhC
QzsKLSAgICAgICAgICAgIC8vIFZLX09FTV9NSU5VUyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9y
IGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICctJyBrZXkKLSAgICAgICAgY2FzZSBHREtfbWludXM6
Ci0gICAgICAgIGNhc2UgR0RLX3VuZGVyc2NvcmU6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VN
X01JTlVTOyAvL2Nhc2UgJy0nOiBjYXNlICdfJzogcmV0dXJuIDB4QkQ7Ci0gICAgICAgICAgICAv
LyBWS19PRU1fUEVSSU9EIChCRSkgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVn
aW9uLCB0aGUgJy4nIGtleQotICAgICAgICBjYXNlIEdES19wZXJpb2Q6Ci0gICAgICAgIGNhc2Ug
R0RLX2dyZWF0ZXI6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNX1BFUklPRDsgLy9jYXNlICcu
JzogY2FzZSAnPic6IHJldHVybiAweEJFOwotICAgICAgICAgICAgLy8gVktfT0VNXzIgKEJGKSBV
c2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJk
LiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnLz8n
IGtleQotICAgICAgICBjYXNlIEdES19zbGFzaDoKLSAgICAgICAgY2FzZSBHREtfcXVlc3Rpb246
Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzI7IC8vY2FzZSAnLyc6IGNhc2UgJz8nOiByZXR1
cm4gMHhCRjsKLSAgICAgICAgICAgIC8vIFZLX09FTV8zIChDMCkgVXNlZCBmb3IgbWlzY2VsbGFu
ZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQ
OiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ2B+JyBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfYXNjaWl0aWxkZToKLSAgICAgICAgY2FzZSBHREtfcXVvdGVsZWZ0OgotICAgICAgICAg
ICAgcmV0dXJuIFZLX09FTV8zOyAvL2Nhc2UgJ2AnOiBjYXNlICd+JzogcmV0dXJuIDB4QzA7Ci0g
ICAgICAgICAgICAvLyBWS19PRU1fNCAoREIpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFj
dGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBV
UyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdbeycga2V5Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNr
ZXRsZWZ0OgotICAgICAgICBjYXNlIEdES19icmFjZWxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4g
VktfT0VNXzQ7IC8vY2FzZSAnWyc6IGNhc2UgJ3snOiByZXR1cm4gMHhEQjsKLSAgICAgICAgICAg
IC8vIFZLX09FTV81IChEQykgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBj
YW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJk
IGtleWJvYXJkLCB0aGUgJ1x8JyBrZXkKLSAgICAgICAgY2FzZSBHREtfYmFja3NsYXNoOgotICAg
ICAgICBjYXNlIEdES19iYXI6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNXzU7IC8vY2FzZSAn
XFwnOiBjYXNlICd8JzogcmV0dXJuIDB4REM7Ci0gICAgICAgICAgICAvLyBWS19PRU1fNiAoREQp
IFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9h
cmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdd
fScga2V5Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNrZXRyaWdodDoKLSAgICAgICAgY2FzZSBHREtf
YnJhY2VyaWdodDoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fNjsgLy8gY2FzZSAnXSc6IGNh
c2UgJ30nOiByZXR1cm4gMHhERDsKLSAgICAgICAgICAgIC8vIFZLX09FTV83IChERSkgVXNlZCBm
b3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2lu
ZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1x
dW90ZS9kb3VibGUtcXVvdGUnIGtleQotICAgICAgICBjYXNlIEdES19xdW90ZXJpZ2h0OgotICAg
ICAgICBjYXNlIEdES19xdW90ZWRibDoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fNzsgLy8g
Y2FzZSAnXCcnOiBjYXNlICciJzogcmV0dXJuIDB4REU7Ci0gICAgICAgICAgICAvLyBWS19PRU1f
OCAoREYpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkg
a2V5Ym9hcmQuCi0gICAgICAgICAgICAvLyBWS19PRU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQ
OiBFaXRoZXIgdGhlIGFuZ2xlIGJyYWNrZXQga2V5IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRo
ZSBSVCAxMDIta2V5IGtleWJvYXJkCi0gICAgICAgICAgICAvLyBWS19QUk9DRVNTS0VZIChFNSkg
V2luZG93cyA5NS85OC9NZSwgV2luZG93cyBOVCA0LjAsIFdpbmRvd3MgMjAwMC9YUDogSU1FIFBS
T0NFU1Mga2V5Ci0gICAgICAgICAgICAvLyBWS19QQUNLRVQgKEU3KSBXaW5kb3dzIDIwMDAvWFA6
IFVzZWQgdG8gcGFzcyBVbmljb2RlIGNoYXJhY3RlcnMgYXMgaWYgdGhleSB3ZXJlIGtleXN0cm9r
ZXMuIFRoZSBWS19QQUNLRVQga2V5IGlzIHRoZSBsb3cgd29yZCBvZiBhIDMyLWJpdCBWaXJ0dWFs
IEtleSB2YWx1ZSB1c2VkIGZvciBub24ta2V5Ym9hcmQgaW5wdXQgbWV0aG9kcy4gRm9yIG1vcmUg
aW5mb3JtYXRpb24sIHNlZSBSZW1hcmsgaW4gS0VZQkRJTlBVVCxTZW5kSW5wdXQsIFdNX0tFWURP
V04sIGFuZCBXTV9LRVlVUAotICAgICAgICAgICAgLy8gVktfQVRUTiAoRjYpIEF0dG4ga2V5Ci0g
ICAgICAgICAgICAvLyBWS19DUlNFTCAoRjcpIENyU2VsIGtleQotICAgICAgICAgICAgLy8gVktf
RVhTRUwgKEY4KSBFeFNlbCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0VSRU9GIChGOSkgRXJhc2Ug
RU9GIGtleQotICAgICAgICAgICAgLy8gVktfUExBWSAoRkEpIFBsYXkga2V5Ci0gICAgICAgICAg
ICAvLyBWS19aT09NIChGQikgWm9vbSBrZXkKLSAgICAgICAgICAgIC8vIFZLX05PTkFNRSAoRkMp
IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlCi0gICAgICAgICAgICAvLyBWS19QQTEgKEZEKSBQQTEg
a2V5Ci0gICAgICAgICAgICAvLyBWS19PRU1fQ0xFQVIgKEZFKSBDbGVhciBrZXkKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLQotfQotCi1zdGF0aWMgaW5s
aW5lIFN0cmluZyBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ3VpbnQgdmFsKQotewotICAgIHZhbCA9
IGdka19rZXl2YWxfdG9fdW5pY29kZSh2YWwpOwotICAgIHJldHVybiBTdHJpbmcoKFVDaGFyKikm
dmFsLCAxKTsKLX0KLQotUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZl
bnQoR2RrRXZlbnRLZXkqIGV2ZW50KQotICAgIDogbV90ZXh0KHNpbmdsZUNoYXJhY3RlclN0cmlu
ZyhldmVudC0+a2V5dmFsKSkKLSAgICAsIG1fdW5tb2RpZmllZFRleHQoc2luZ2xlQ2hhcmFjdGVy
U3RyaW5nKGV2ZW50LT5rZXl2YWwpKQotICAgICwgbV9rZXlJZGVudGlmaWVyKGtleUlkZW50aWZp
ZXJGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXl2YWwpKQotICAgICwgbV9pc0tleVVwKGV2ZW50LT50
eXBlID09IEdES19LRVlfUkVMRUFTRSkKLSAgICAsIG1fYXV0b1JlcGVhdChmYWxzZSkKLSAgICAs
IG1fV2luZG93c0tleUNvZGUod2luZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5dmFs
KSkKLSAgICAsIG1faXNLZXlwYWQoZmFsc2UpCi0gICAgLCBtX3NoaWZ0S2V5KGV2ZW50LT5zdGF0
ZSAmIEdES19TSElGVF9NQVNLICE9IDApCi0gICAgLCBtX2N0cmxLZXkoZXZlbnQtPnN0YXRlICYg
R0RLX0NPTlRST0xfTUFTSyAhPSAwKQotICAgICwgbV9hbHRLZXkoZXZlbnQtPnN0YXRlICYgR0RL
X01PRDFfTUFTSyAhPSAwKQotICAgICwgbV9tZXRhS2V5KGV2ZW50LT5zdGF0ZSAmIEdES19NT0Qy
X01BU0sgIT0gMCkKLXsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvS2V5RXZl
bnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50R3Rr
LmNwcAkocmV2aXNpb24gMjUwNTQpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50
R2RrLmNwcDoyNTA1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50R3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaCIKKworI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJL
ZXlib2FyZENvZGVzLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisKKyNpbmNsdWRlIDxn
ZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBGSVhNRTogVGhpcyBpcyBpbmNvbXBsZXRlLiAgV2Ugc2hvdWxkIGNoYW5nZSB0
aGlzIHRvIG1pcnJvcgorLy8gbW9yZSBsaWtlIHdoYXQgRmlyZWZveCBkb2VzLCBhbmQgZ2VuZXJh
dGUgdGhlc2Ugc3dpdGNoIHN0YXRlbWVudHMKKy8vIGF0IGJ1aWxkIHRpbWUuCitzdGF0aWMgU3Ry
aW5nIGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGd1aW50IGtleUNvZGUpCit7CisgICAgc3dp
dGNoIChrZXlDb2RlKSB7CisgICAgICAgIGNhc2UgR0RLX01lbnU6CisgICAgICAgIGNhc2UgR0RL
X0FsdF9MOgorICAgICAgICBjYXNlIEdES19BbHRfUjoKKyAgICAgICAgICAgIHJldHVybiAiQWx0
IjsKKyAgICAgICAgY2FzZSBHREtfQ2xlYXI6CisgICAgICAgICAgICByZXR1cm4gIkNsZWFyIjsK
KyAgICAgICAgY2FzZSBHREtfRG93bjoKKyAgICAgICAgICAgIHJldHVybiAiRG93biI7CisgICAg
ICAgICAgICAvLyAiRW5kIgorICAgICAgICBjYXNlIEdES19FbmQ6CisgICAgICAgICAgICByZXR1
cm4gIkVuZCI7CisgICAgICAgICAgICAvLyAiRW50ZXIiCisgICAgICAgIGNhc2UgR0RLX0lTT19F
bnRlcjoKKyAgICAgICAgY2FzZSBHREtfS1BfRW50ZXI6CisgICAgICAgICAgICByZXR1cm4gIkVu
dGVyIjsKKyAgICAgICAgY2FzZSBHREtfRXhlY3V0ZToKKyAgICAgICAgICAgIHJldHVybiAiRXhl
Y3V0ZSI7CisgICAgICAgIGNhc2UgR0RLX0YxOgorICAgICAgICAgICAgcmV0dXJuICJGMSI7Cisg
ICAgICAgIGNhc2UgR0RLX0YyOgorICAgICAgICAgICAgcmV0dXJuICJGMiI7CisgICAgICAgIGNh
c2UgR0RLX0YzOgorICAgICAgICAgICAgcmV0dXJuICJGMyI7CisgICAgICAgIGNhc2UgR0RLX0Y0
OgorICAgICAgICAgICAgcmV0dXJuICJGNCI7CisgICAgICAgIGNhc2UgR0RLX0Y1OgorICAgICAg
ICAgICAgcmV0dXJuICJGNSI7CisgICAgICAgIGNhc2UgR0RLX0Y2OgorICAgICAgICAgICAgcmV0
dXJuICJGNiI7CisgICAgICAgIGNhc2UgR0RLX0Y3OgorICAgICAgICAgICAgcmV0dXJuICJGNyI7
CisgICAgICAgIGNhc2UgR0RLX0Y4OgorICAgICAgICAgICAgcmV0dXJuICJGOCI7CisgICAgICAg
IGNhc2UgR0RLX0Y5OgorICAgICAgICAgICAgcmV0dXJuICJGOSI7CisgICAgICAgIGNhc2UgR0RL
X0YxMDoKKyAgICAgICAgICAgIHJldHVybiAiRjEwIjsKKyAgICAgICAgY2FzZSBHREtfRjExOgor
ICAgICAgICAgICAgcmV0dXJuICJGMTEiOworICAgICAgICBjYXNlIEdES19GMTI6CisgICAgICAg
ICAgICByZXR1cm4gIkYxMiI7CisgICAgICAgIGNhc2UgR0RLX0YxMzoKKyAgICAgICAgICAgIHJl
dHVybiAiRjEzIjsKKyAgICAgICAgY2FzZSBHREtfRjE0OgorICAgICAgICAgICAgcmV0dXJuICJG
MTQiOworICAgICAgICBjYXNlIEdES19GMTU6CisgICAgICAgICAgICByZXR1cm4gIkYxNSI7Cisg
ICAgICAgIGNhc2UgR0RLX0YxNjoKKyAgICAgICAgICAgIHJldHVybiAiRjE2IjsKKyAgICAgICAg
Y2FzZSBHREtfRjE3OgorICAgICAgICAgICAgcmV0dXJuICJGMTciOworICAgICAgICBjYXNlIEdE
S19GMTg6CisgICAgICAgICAgICByZXR1cm4gIkYxOCI7CisgICAgICAgIGNhc2UgR0RLX0YxOToK
KyAgICAgICAgICAgIHJldHVybiAiRjE5IjsKKyAgICAgICAgY2FzZSBHREtfRjIwOgorICAgICAg
ICAgICAgcmV0dXJuICJGMjAiOworICAgICAgICBjYXNlIEdES19GMjE6CisgICAgICAgICAgICBy
ZXR1cm4gIkYyMSI7CisgICAgICAgIGNhc2UgR0RLX0YyMjoKKyAgICAgICAgICAgIHJldHVybiAi
RjIyIjsKKyAgICAgICAgY2FzZSBHREtfRjIzOgorICAgICAgICAgICAgcmV0dXJuICJGMjMiOwor
ICAgICAgICBjYXNlIEdES19GMjQ6CisgICAgICAgICAgICByZXR1cm4gIkYyNCI7CisgICAgICAg
IGNhc2UgR0RLX0hlbHA6CisgICAgICAgICAgICByZXR1cm4gIkhlbHAiOworICAgICAgICBjYXNl
IEdES19Ib21lOgorICAgICAgICAgICAgcmV0dXJuICJIb21lIjsKKyAgICAgICAgY2FzZSBHREtf
SW5zZXJ0OgorICAgICAgICAgICAgcmV0dXJuICJJbnNlcnQiOworICAgICAgICBjYXNlIEdES19M
ZWZ0OgorICAgICAgICAgICAgcmV0dXJuICJMZWZ0IjsKKyAgICAgICAgY2FzZSBHREtfUGFnZV9E
b3duOgorICAgICAgICAgICAgcmV0dXJuICJQYWdlRG93biI7CisgICAgICAgIGNhc2UgR0RLX1Bh
Z2VfVXA6CisgICAgICAgICAgICByZXR1cm4gIlBhZ2VVcCI7CisgICAgICAgIGNhc2UgR0RLX1Bh
dXNlOgorICAgICAgICAgICAgcmV0dXJuICJQYXVzZSI7CisgICAgICAgIGNhc2UgR0RLXzMyNzBf
UHJpbnRTY3JlZW46CisgICAgICAgICAgICByZXR1cm4gIlByaW50U2NyZWVuIjsKKyAgICAgICAg
Y2FzZSBHREtfUmlnaHQ6CisgICAgICAgICAgICByZXR1cm4gIlJpZ2h0IjsKKyAgICAgICAgY2Fz
ZSBHREtfU2VsZWN0OgorICAgICAgICAgICAgcmV0dXJuICJTZWxlY3QiOworICAgICAgICBjYXNl
IEdES19VcDoKKyAgICAgICAgICAgIHJldHVybiAiVXAiOworICAgICAgICAgICAgLy8gU3RhbmRh
cmQgc2F5cyB0aGF0IERFTCBiZWNvbWVzIFUrMDA3Ri4KKyAgICAgICAgY2FzZSBHREtfRGVsZXRl
OgorICAgICAgICAgICAgcmV0dXJuICJVKzAwN0YiOworICAgICAgICBjYXNlIEdES19UYWI6Cisg
ICAgICAgICAgICByZXR1cm4gIlUrMDAwOSI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIlUrJTA0WCIsIGdka19rZXl2YWxfdG9fdW5pY29kZShn
ZGtfa2V5dmFsX3RvX3VwcGVyKGtleUNvZGUpKSk7CisgICAgfQorfQorCitzdGF0aWMgaW50IHdp
bmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQodW5zaWduZWQgaW50IGtleWNvZGUpCit7CisgICAgc3dp
dGNoIChrZXljb2RlKSB7CisgICAgICAgIGNhc2UgR0RLX0tQXzA6CisgICAgICAgICAgICByZXR1
cm4gVktfTlVNUEFEMDsvLyAoNjApIE51bWVyaWMga2V5cGFkIDAga2V5CisgICAgICAgIGNhc2Ug
R0RLX0tQXzE6CisgICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEMTsvLyAoNjEpIE51bWVyaWMg
a2V5cGFkIDEga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzI6CisgICAgICAgICAgICByZXR1cm4g
IFZLX05VTVBBRDI7IC8vICg2MikgTnVtZXJpYyBrZXlwYWQgMiBrZXkKKyAgICAgICAgY2FzZSBH
REtfS1BfMzoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQzOyAvLyAoNjMpIE51bWVyaWMg
a2V5cGFkIDMga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzQ6CisgICAgICAgICAgICByZXR1cm4g
VktfTlVNUEFENDsgLy8gKDY0KSBOdW1lcmljIGtleXBhZCA0IGtleQorICAgICAgICBjYXNlIEdE
S19LUF81OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDU7IC8vKDY1KSBOdW1lcmljIGtl
eXBhZCA1IGtleQorICAgICAgICBjYXNlIEdES19LUF82OgorICAgICAgICAgICAgcmV0dXJuIFZL
X05VTVBBRDY7IC8vICg2NikgTnVtZXJpYyBrZXlwYWQgNiBrZXkKKyAgICAgICAgY2FzZSBHREtf
S1BfNzoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ3OyAvLyAoNjcpIE51bWVyaWMga2V5
cGFkIDcga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzg6CisgICAgICAgICAgICByZXR1cm4gVktf
TlVNUEFEODsgLy8gKDY4KSBOdW1lcmljIGtleXBhZCA4IGtleQorICAgICAgICBjYXNlIEdES19L
UF85OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDk7IC8vICg2OSkgTnVtZXJpYyBrZXlw
YWQgOSBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfTXVsdGlwbHk6CisgICAgICAgICAgICByZXR1
cm4gVktfTVVMVElQTFk7IC8vICg2QSkgTXVsdGlwbHkga2V5CisgICAgICAgIGNhc2UgR0RLX0tQ
X0FkZDoKKyAgICAgICAgICAgIHJldHVybiBWS19BREQ7IC8vICg2QikgQWRkIGtleQorICAgICAg
ICBjYXNlIEdES19LUF9TdWJ0cmFjdDoKKyAgICAgICAgICAgIHJldHVybiBWS19TVUJUUkFDVDsg
Ly8gKDZEKSBTdWJ0cmFjdCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfRGVjaW1hbDoKKyAgICAg
ICAgICAgIHJldHVybiBWS19ERUNJTUFMOyAvLyAoNkUpIERlY2ltYWwga2V5CisgICAgICAgIGNh
c2UgR0RLX0tQX0RpdmlkZToKKyAgICAgICAgICAgIHJldHVybiBWS19ESVZJREU7IC8vICg2Rikg
RGl2aWRlIGtleQorCisgICAgICAgIGNhc2UgR0RLX0JhY2tTcGFjZToKKyAgICAgICAgICAgIHJl
dHVybiBWS19CQUNLOyAvLyAoMDgpIEJBQ0tTUEFDRSBrZXkKKyAgICAgICAgY2FzZSBHREtfVGFi
OgorICAgICAgICAgICAgcmV0dXJuIFZLX1RBQjsgLy8gKDA5KSBUQUIga2V5CisgICAgICAgIGNh
c2UgR0RLX0NsZWFyOgorICAgICAgICAgICAgcmV0dXJuIFZLX0NMRUFSOyAvLyAoMEMpIENMRUFS
IGtleQorICAgICAgICBjYXNlIEdES19SZXR1cm46CisgICAgICAgICAgICByZXR1cm4gVktfUkVU
VVJOOyAvLygwRCkgUmV0dXJuIGtleQorICAgICAgICBjYXNlIEdES19TaGlmdF9MOgorICAgICAg
ICBjYXNlIEdES19TaGlmdF9SOgorICAgICAgICAgICAgcmV0dXJuIFZLX1NISUZUOyAvLyAoMTAp
IFNISUZUIGtleQorICAgICAgICBjYXNlIEdES19Db250cm9sX0w6CisgICAgICAgIGNhc2UgR0RL
X0NvbnRyb2xfUjoKKyAgICAgICAgICAgIHJldHVybiBWS19DT05UUk9MOyAvLyAoMTEpIENUUkwg
a2V5CisgICAgICAgIGNhc2UgR0RLX01lbnU6CisgICAgICAgIGNhc2UgR0RLX0FsdF9MOgorICAg
ICAgICBjYXNlIEdES19BbHRfUjoKKyAgICAgICAgICAgIHJldHVybiBWS19NRU5VOyAvLyAoMTIp
IEFMVCBrZXkKKworICAgICAgICBjYXNlIEdES19QYXVzZToKKyAgICAgICAgICAgIHJldHVybiBW
S19QQVVTRTsgLy8gKDEzKSBQQVVTRSBrZXkKKyAgICAgICAgY2FzZSBHREtfQ2Fwc19Mb2NrOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX0NBUElUQUw7IC8vICgxNCkgQ0FQUyBMT0NLIGtleQorICAg
ICAgICBjYXNlIEdES19LYW5hX0xvY2s6CisgICAgICAgIGNhc2UgR0RLX0thbmFfU2hpZnQ6Cisg
ICAgICAgICAgICByZXR1cm4gVktfS0FOQTsgLy8gKDE1KSBJbnB1dCBNZXRob2QgRWRpdG9yIChJ
TUUpIEthbmEgbW9kZQorICAgICAgICBjYXNlIEdES19IYW5ndWw6CisgICAgICAgICAgICByZXR1
cm4gVktfSEFOR1VMOyAvLyBWS19IQU5HVUwgKDE1KSBJTUUgSGFuZ3VsIG1vZGUKKyAgICAgICAg
ICAgIC8vIFZLX0pVTkpBICgxNykgSU1FIEp1bmphIG1vZGUKKyAgICAgICAgICAgIC8vIFZLX0ZJ
TkFMICgxOCkgSU1FIGZpbmFsIG1vZGUKKyAgICAgICAgY2FzZSBHREtfSGFuZ3VsX0hhbmphOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkpBOyAvLyAoMTkpIElNRSBIYW5qYSBtb2RlCisgICAg
ICAgIGNhc2UgR0RLX0thbmppOgorICAgICAgICAgICAgcmV0dXJuIFZLX0tBTkpJOyAvLyAoMTkp
IElNRSBLYW5qaSBtb2RlCisgICAgICAgIGNhc2UgR0RLX0VzY2FwZToKKyAgICAgICAgICAgIHJl
dHVybiBWS19FU0NBUEU7IC8vICgxQikgRVNDIGtleQorICAgICAgICAgICAgLy8gVktfQ09OVkVS
VCAoMUMpIElNRSBjb252ZXJ0CisgICAgICAgICAgICAvLyBWS19OT05DT05WRVJUICgxRCkgSU1F
IG5vbmNvbnZlcnQKKyAgICAgICAgICAgIC8vIFZLX0FDQ0VQVCAoMUUpIElNRSBhY2NlcHQKKyAg
ICAgICAgICAgIC8vIFZLX01PREVDSEFOR0UgKDFGKSBJTUUgbW9kZSBjaGFuZ2UgcmVxdWVzdAor
ICAgICAgICBjYXNlIEdES19zcGFjZToKKyAgICAgICAgICAgIHJldHVybiBWS19TUEFDRTsgLy8g
KDIwKSBTUEFDRUJBUgorICAgICAgICBjYXNlIEdES19QYWdlX1VwOgorICAgICAgICAgICAgcmV0
dXJuIFZLX1BSSU9SOyAvLyAoMjEpIFBBR0UgVVAga2V5CisgICAgICAgIGNhc2UgR0RLX1BhZ2Vf
RG93bjoKKyAgICAgICAgICAgIHJldHVybiBWS19ORVhUOyAvLyAoMjIpIFBBR0UgRE9XTiBrZXkK
KyAgICAgICAgY2FzZSBHREtfRW5kOgorICAgICAgICAgICAgcmV0dXJuIFZLX0VORDsgLy8gKDIz
KSBFTkQga2V5CisgICAgICAgIGNhc2UgR0RLX0hvbWU6CisgICAgICAgICAgICByZXR1cm4gVktf
SE9NRTsgLy8gKDI0KSBIT01FIGtleQorICAgICAgICBjYXNlIEdES19MZWZ0OgorICAgICAgICAg
ICAgcmV0dXJuIFZLX0xFRlQ7IC8vICgyNSkgTEVGVCBBUlJPVyBrZXkKKyAgICAgICAgY2FzZSBH
REtfVXA6CisgICAgICAgICAgICByZXR1cm4gVktfVVA7IC8vICgyNikgVVAgQVJST1cga2V5Cisg
ICAgICAgIGNhc2UgR0RLX1JpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZLX1JJR0hUOyAvLyAo
MjcpIFJJR0hUIEFSUk9XIGtleQorICAgICAgICBjYXNlIEdES19Eb3duOgorICAgICAgICAgICAg
cmV0dXJuIFZLX0RPV047IC8vICgyOCkgRE9XTiBBUlJPVyBrZXkKKyAgICAgICAgY2FzZSBHREtf
U2VsZWN0OgorICAgICAgICAgICAgcmV0dXJuIFZLX1NFTEVDVDsgLy8gKDI5KSBTRUxFQ1Qga2V5
CisgICAgICAgIGNhc2UgR0RLX1ByaW50OgorICAgICAgICAgICAgcmV0dXJuIFZLX1BSSU5UOyAv
LyAoMkEpIFBSSU5UIGtleQorICAgICAgICBjYXNlIEdES19FeGVjdXRlOgorICAgICAgICAgICAg
cmV0dXJuIFZLX0VYRUNVVEU7Ly8gKDJCKSBFWEVDVVRFIGtleQorICAgICAgICAgICAgLy9kdW5u
byBvbiB0aGlzCisgICAgICAgICAgICAvL2Nhc2UgR0RLX1ByaW50U2NyZWVuOgorICAgICAgICAg
ICAgLy8gICAgICByZXR1cm4gVktfU05BUFNIT1Q7IC8vICgyQykgUFJJTlQgU0NSRUVOIGtleQor
ICAgICAgICBjYXNlIEdES19JbnNlcnQ6CisgICAgICAgICAgICByZXR1cm4gVktfSU5TRVJUOyAv
LyAoMkQpIElOUyBrZXkKKyAgICAgICAgY2FzZSBHREtfRGVsZXRlOgorICAgICAgICAgICAgcmV0
dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwga2V5CisgICAgICAgIGNhc2UgR0RLX0hlbHA6Cisg
ICAgICAgICAgICByZXR1cm4gVktfSEVMUDsgLy8gKDJGKSBIRUxQIGtleQorICAgICAgICBjYXNl
IEdES18wOgorICAgICAgICBjYXNlIEdES19wYXJlbmxlZnQ6CisgICAgICAgICAgICByZXR1cm4g
VktfMDsgICAgLy8gICgzMCkgMCkga2V5CisgICAgICAgIGNhc2UgR0RLXzE6CisgICAgICAgICAg
ICByZXR1cm4gVktfMTsgLy8gICgzMSkgMSAhIGtleQorICAgICAgICBjYXNlIEdES18yOgorICAg
ICAgICBjYXNlIEdES19hdDoKKyAgICAgICAgICAgIHJldHVybiBWS18yOyAvLyAgKDMyKSAyICYg
a2V5CisgICAgICAgIGNhc2UgR0RLXzM6CisgICAgICAgIGNhc2UgR0RLX251bWJlcnNpZ246Cisg
ICAgICAgICAgICByZXR1cm4gVktfMzsgLy9jYXNlICczJzogY2FzZSAnIyc7CisgICAgICAgIGNh
c2UgR0RLXzQ6CisgICAgICAgIGNhc2UgR0RLX2RvbGxhcjogLy8gICgzNCkgNCBrZXkgJyQnOwor
ICAgICAgICAgICAgcmV0dXJuIFZLXzQ7CisgICAgICAgIGNhc2UgR0RLXzU6CisgICAgICAgIGNh
c2UgR0RLX3BlcmNlbnQ6CisgICAgICAgICAgICByZXR1cm4gVktfNTsgLy8gICgzNSkgNSBrZXkg
ICclJworICAgICAgICBjYXNlIEdES182OgorICAgICAgICBjYXNlIEdES19hc2NpaWNpcmN1bToK
KyAgICAgICAgICAgIHJldHVybiBWS182OyAvLyAgKDM2KSA2IGtleSAgJ14nCisgICAgICAgIGNh
c2UgR0RLXzc6CisgICAgICAgIGNhc2UgR0RLX2FtcGVyc2FuZDoKKyAgICAgICAgICAgIHJldHVy
biBWS183OyAvLyAgKDM3KSA3IGtleSAgY2FzZSAnJicKKyAgICAgICAgY2FzZSBHREtfODoKKyAg
ICAgICAgY2FzZSBHREtfYXN0ZXJpc2s6CisgICAgICAgICAgICByZXR1cm4gVktfODsgLy8gICgz
OCkgOCBrZXkgICcqJworICAgICAgICBjYXNlIEdES185OgorICAgICAgICBjYXNlIEdES19wYXJl
bnJpZ2h0OgorICAgICAgICAgICAgcmV0dXJuIFZLXzk7IC8vICAoMzkpIDkga2V5ICcoJworICAg
ICAgICBjYXNlIEdES19hOgorICAgICAgICBjYXNlIEdES19BOgorICAgICAgICAgICAgcmV0dXJu
IFZLX0E7IC8vICAoNDEpIEEga2V5IGNhc2UgJ2EnOiBjYXNlICdBJzogcmV0dXJuIDB4NDE7Cisg
ICAgICAgIGNhc2UgR0RLX2I6CisgICAgICAgIGNhc2UgR0RLX0I6CisgICAgICAgICAgICByZXR1
cm4gVktfQjsgLy8gICg0MikgQiBrZXkgY2FzZSAnYic6IGNhc2UgJ0InOiByZXR1cm4gMHg0MjsK
KyAgICAgICAgY2FzZSBHREtfYzoKKyAgICAgICAgY2FzZSBHREtfQzoKKyAgICAgICAgICAgIHJl
dHVybiBWS19DOyAvLyAgKDQzKSBDIGtleSBjYXNlICdjJzogY2FzZSAnQyc6IHJldHVybiAweDQz
OworICAgICAgICBjYXNlIEdES19kOgorICAgICAgICBjYXNlIEdES19EOgorICAgICAgICAgICAg
cmV0dXJuIFZLX0Q7IC8vICAoNDQpIEQga2V5IGNhc2UgJ2QnOiBjYXNlICdEJzogcmV0dXJuIDB4
NDQ7CisgICAgICAgIGNhc2UgR0RLX2U6CisgICAgICAgIGNhc2UgR0RLX0U6CisgICAgICAgICAg
ICByZXR1cm4gVktfRTsgLy8gICg0NSkgRSBrZXkgY2FzZSAnZSc6IGNhc2UgJ0UnOiByZXR1cm4g
MHg0NTsKKyAgICAgICAgY2FzZSBHREtfZjoKKyAgICAgICAgY2FzZSBHREtfRjoKKyAgICAgICAg
ICAgIHJldHVybiBWS19GOyAvLyAgKDQ2KSBGIGtleSBjYXNlICdmJzogY2FzZSAnRic6IHJldHVy
biAweDQ2OworICAgICAgICBjYXNlIEdES19nOgorICAgICAgICBjYXNlIEdES19HOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0c7IC8vICAoNDcpIEcga2V5IGNhc2UgJ2cnOiBjYXNlICdHJzogcmV0
dXJuIDB4NDc7CisgICAgICAgIGNhc2UgR0RLX2g6CisgICAgICAgIGNhc2UgR0RLX0g6CisgICAg
ICAgICAgICByZXR1cm4gVktfSDsgLy8gICg0OCkgSCBrZXkgY2FzZSAnaCc6IGNhc2UgJ0gnOiBy
ZXR1cm4gMHg0ODsKKyAgICAgICAgY2FzZSBHREtfaToKKyAgICAgICAgY2FzZSBHREtfSToKKyAg
ICAgICAgICAgIHJldHVybiBWS19JOyAvLyAgKDQ5KSBJIGtleSBjYXNlICdpJzogY2FzZSAnSSc6
IHJldHVybiAweDQ5OworICAgICAgICBjYXNlIEdES19qOgorICAgICAgICBjYXNlIEdES19KOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX0o7IC8vICAoNEEpIEoga2V5IGNhc2UgJ2onOiBjYXNlICdK
JzogcmV0dXJuIDB4NEE7CisgICAgICAgIGNhc2UgR0RLX2s6CisgICAgICAgIGNhc2UgR0RLX0s6
CisgICAgICAgICAgICByZXR1cm4gVktfSzsgLy8gICg0QikgSyBrZXkgY2FzZSAnayc6IGNhc2Ug
J0snOiByZXR1cm4gMHg0QjsKKyAgICAgICAgY2FzZSBHREtfbDoKKyAgICAgICAgY2FzZSBHREtf
TDoKKyAgICAgICAgICAgIHJldHVybiBWS19MOyAvLyAgKDRDKSBMIGtleSBjYXNlICdsJzogY2Fz
ZSAnTCc6IHJldHVybiAweDRDOworICAgICAgICBjYXNlIEdES19tOgorICAgICAgICBjYXNlIEdE
S19NOgorICAgICAgICAgICAgcmV0dXJuIFZLX007IC8vICAoNEQpIE0ga2V5IGNhc2UgJ20nOiBj
YXNlICdNJzogcmV0dXJuIDB4NEQ7CisgICAgICAgIGNhc2UgR0RLX246CisgICAgICAgIGNhc2Ug
R0RLX046CisgICAgICAgICAgICByZXR1cm4gVktfTjsgLy8gICg0RSkgTiBrZXkgY2FzZSAnbic6
IGNhc2UgJ04nOiByZXR1cm4gMHg0RTsKKyAgICAgICAgY2FzZSBHREtfbzoKKyAgICAgICAgY2Fz
ZSBHREtfTzoKKyAgICAgICAgICAgIHJldHVybiBWS19POyAvLyAgKDRGKSBPIGtleSBjYXNlICdv
JzogY2FzZSAnTyc6IHJldHVybiAweDRGOworICAgICAgICBjYXNlIEdES19wOgorICAgICAgICBj
YXNlIEdES19QOgorICAgICAgICAgICAgcmV0dXJuIFZLX1A7IC8vICAoNTApIFAga2V5IGNhc2Ug
J3AnOiBjYXNlICdQJzogcmV0dXJuIDB4NTA7CisgICAgICAgIGNhc2UgR0RLX3E6CisgICAgICAg
IGNhc2UgR0RLX1E6CisgICAgICAgICAgICByZXR1cm4gVktfUTsgLy8gICg1MSkgUSBrZXkgY2Fz
ZSAncSc6IGNhc2UgJ1EnOiByZXR1cm4gMHg1MTsKKyAgICAgICAgY2FzZSBHREtfcjoKKyAgICAg
ICAgY2FzZSBHREtfUjoKKyAgICAgICAgICAgIHJldHVybiBWS19SOyAvLyAgKDUyKSBSIGtleSBj
YXNlICdyJzogY2FzZSAnUic6IHJldHVybiAweDUyOworICAgICAgICBjYXNlIEdES19zOgorICAg
ICAgICBjYXNlIEdES19TOgorICAgICAgICAgICAgcmV0dXJuIFZLX1M7IC8vICAoNTMpIFMga2V5
IGNhc2UgJ3MnOiBjYXNlICdTJzogcmV0dXJuIDB4NTM7CisgICAgICAgIGNhc2UgR0RLX3Q6Cisg
ICAgICAgIGNhc2UgR0RLX1Q6CisgICAgICAgICAgICByZXR1cm4gVktfVDsgLy8gICg1NCkgVCBr
ZXkgY2FzZSAndCc6IGNhc2UgJ1QnOiByZXR1cm4gMHg1NDsKKyAgICAgICAgY2FzZSBHREtfdToK
KyAgICAgICAgY2FzZSBHREtfVToKKyAgICAgICAgICAgIHJldHVybiBWS19VOyAvLyAgKDU1KSBV
IGtleSBjYXNlICd1JzogY2FzZSAnVSc6IHJldHVybiAweDU1OworICAgICAgICBjYXNlIEdES192
OgorICAgICAgICBjYXNlIEdES19WOgorICAgICAgICAgICAgcmV0dXJuIFZLX1Y7IC8vICAoNTYp
IFYga2V5IGNhc2UgJ3YnOiBjYXNlICdWJzogcmV0dXJuIDB4NTY7CisgICAgICAgIGNhc2UgR0RL
X3c6CisgICAgICAgIGNhc2UgR0RLX1c6CisgICAgICAgICAgICByZXR1cm4gVktfVzsgLy8gICg1
NykgVyBrZXkgY2FzZSAndyc6IGNhc2UgJ1cnOiByZXR1cm4gMHg1NzsKKyAgICAgICAgY2FzZSBH
REtfeDoKKyAgICAgICAgY2FzZSBHREtfWDoKKyAgICAgICAgICAgIHJldHVybiBWS19YOyAvLyAg
KDU4KSBYIGtleSBjYXNlICd4JzogY2FzZSAnWCc6IHJldHVybiAweDU4OworICAgICAgICBjYXNl
IEdES195OgorICAgICAgICBjYXNlIEdES19ZOgorICAgICAgICAgICAgcmV0dXJuIFZLX1k7IC8v
ICAoNTkpIFkga2V5IGNhc2UgJ3knOiBjYXNlICdZJzogcmV0dXJuIDB4NTk7CisgICAgICAgIGNh
c2UgR0RLX3o6CisgICAgICAgIGNhc2UgR0RLX1o6CisgICAgICAgICAgICByZXR1cm4gVktfWjsg
Ly8gICg1QSkgWiBrZXkgY2FzZSAneic6IGNhc2UgJ1onOiByZXR1cm4gMHg1QTsKKyAgICAgICAg
Y2FzZSBHREtfTWV0YV9MOgorICAgICAgICAgICAgcmV0dXJuIFZLX0xXSU47IC8vICg1QikgTGVm
dCBXaW5kb3dzIGtleSAoTWljcm9zb2Z0IE5hdHVyYWwga2V5Ym9hcmQpCisgICAgICAgIGNhc2Ug
R0RLX01ldGFfUjoKKyAgICAgICAgICAgIHJldHVybiBWS19SV0lOOyAvLyAoNUMpIFJpZ2h0IFdp
bmRvd3Mga2V5IChOYXR1cmFsIGtleWJvYXJkKQorICAgICAgICAgICAgLy8gVktfQVBQUyAoNUQp
IEFwcGxpY2F0aW9ucyBrZXkgKE5hdHVyYWwga2V5Ym9hcmQpCisgICAgICAgICAgICAvLyBWS19T
TEVFUCAoNUYpIENvbXB1dGVyIFNsZWVwIGtleQorICAgICAgICAgICAgLy8gVktfU0VQQVJBVE9S
ICg2QykgU2VwYXJhdG9yIGtleQorICAgICAgICAgICAgLy8gVktfU1VCVFJBQ1QgKDZEKSBTdWJ0
cmFjdCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0RFQ0lNQUwgKDZFKSBEZWNpbWFsIGtleQorICAg
ICAgICAgICAgLy8gVktfRElWSURFICg2RikgRGl2aWRlIGtleQorICAgICAgICAgICAgLy8gaGFu
ZGxlZCBieSBrZXkgY29kZSBhYm92ZQorCisgICAgICAgIGNhc2UgR0RLX051bV9Mb2NrOgorICAg
ICAgICAgICAgcmV0dXJuIFZLX05VTUxPQ0s7IC8vICg5MCkgTlVNIExPQ0sga2V5CisKKyAgICAg
ICAgY2FzZSBHREtfU2Nyb2xsX0xvY2s6CisgICAgICAgICAgICByZXR1cm4gVktfU0NST0xMOyAv
LyAoOTEpIFNDUk9MTCBMT0NLIGtleQorCisgICAgICAgICAgICAvLyBWS19MU0hJRlQgKEEwKSBM
ZWZ0IFNISUZUIGtleQorICAgICAgICAgICAgLy8gVktfUlNISUZUIChBMSkgUmlnaHQgU0hJRlQg
a2V5CisgICAgICAgICAgICAvLyBWS19MQ09OVFJPTCAoQTIpIExlZnQgQ09OVFJPTCBrZXkKKyAg
ICAgICAgICAgIC8vIFZLX1JDT05UUk9MIChBMykgUmlnaHQgQ09OVFJPTCBrZXkKKyAgICAgICAg
ICAgIC8vIFZLX0xNRU5VIChBNCkgTGVmdCBNRU5VIGtleQorICAgICAgICAgICAgLy8gVktfUk1F
TlUgKEE1KSBSaWdodCBNRU5VIGtleQorICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9CQUNLIChB
NikgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEJhY2sga2V5CisgICAgICAgICAgICAvLyBWS19C
Uk9XU0VSX0ZPUldBUkQgKEE3KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRm9yd2FyZCBrZXkK
KyAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfUkVGUkVTSCAoQTgpIFdpbmRvd3MgMjAwMC9YUDog
QnJvd3NlciBSZWZyZXNoIGtleQorICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9TVE9QIChBOSkg
V2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0b3Aga2V5CisgICAgICAgICAgICAvLyBWS19CUk9X
U0VSX1NFQVJDSCAoQUEpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTZWFyY2gga2V5CisgICAg
ICAgICAgICAvLyBWS19CUk9XU0VSX0ZBVk9SSVRFUyAoQUIpIFdpbmRvd3MgMjAwMC9YUDogQnJv
d3NlciBGYXZvcml0ZXMga2V5CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX0hPTUUgKEFDKSBX
aW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU3RhcnQgYW5kIEhvbWUga2V5CisgICAgICAgICAgICAv
LyBWS19WT0xVTUVfTVVURSAoQUQpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1lIE11dGUga2V5Cisg
ICAgICAgICAgICAvLyBWS19WT0xVTUVfRE9XTiAoQUUpIFdpbmRvd3MgMjAwMC9YUDogVm9sdW1l
IERvd24ga2V5CisgICAgICAgICAgICAvLyBWS19WT0xVTUVfVVAgKEFGKSBXaW5kb3dzIDIwMDAv
WFA6IFZvbHVtZSBVcCBrZXkKKyAgICAgICAgICAgIC8vIFZLX01FRElBX05FWFRfVFJBQ0sgKEIw
KSBXaW5kb3dzIDIwMDAvWFA6IE5leHQgVHJhY2sga2V5CisgICAgICAgICAgICAvLyBWS19NRURJ
QV9QUkVWX1RSQUNLIChCMSkgV2luZG93cyAyMDAwL1hQOiBQcmV2aW91cyBUcmFjayBrZXkKKyAg
ICAgICAgICAgIC8vIFZLX01FRElBX1NUT1AgKEIyKSBXaW5kb3dzIDIwMDAvWFA6IFN0b3AgTWVk
aWEga2V5CisgICAgICAgICAgICAvLyBWS19NRURJQV9QTEFZX1BBVVNFIChCMykgV2luZG93cyAy
MDAwL1hQOiBQbGF5L1BhdXNlIE1lZGlhIGtleQorICAgICAgICAgICAgLy8gVktfTEFVTkNIX01B
SUwgKEI0KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IE1haWwga2V5CisgICAgICAgICAgICAvLyBW
S19MQVVOQ0hfTUVESUFfU0VMRUNUIChCNSkgV2luZG93cyAyMDAwL1hQOiBTZWxlY3QgTWVkaWEg
a2V5CisgICAgICAgICAgICAvLyBWS19MQVVOQ0hfQVBQMSAoQjYpIFdpbmRvd3MgMjAwMC9YUDog
U3RhcnQgQXBwbGljYXRpb24gMSBrZXkKKyAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9BUFAyIChC
NykgV2luZG93cyAyMDAwL1hQOiBTdGFydCBBcHBsaWNhdGlvbiAyIGtleQorCisgICAgICAgICAg
ICAvLyBWS19PRU1fMSAoQkEpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQg
Y2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFy
ZCBrZXlib2FyZCwgdGhlICc7Oicga2V5CisgICAgICAgIGNhc2UgR0RLX3NlbWljb2xvbjoKKyAg
ICAgICAgY2FzZSBHREtfY29sb246CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzE7IC8vY2Fz
ZSAnOyc6IGNhc2UgJzonOiByZXR1cm4gMHhCQTsKKyAgICAgICAgICAgIC8vIFZLX09FTV9QTFVT
IChCQikgV2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJysnIGtl
eQorICAgICAgICBjYXNlIEdES19wbHVzOgorICAgICAgICBjYXNlIEdES19lcXVhbDoKKyAgICAg
ICAgICAgIHJldHVybiBWS19PRU1fUExVUzsgLy9jYXNlICc9JzogY2FzZSAnKyc6IHJldHVybiAw
eEJCOworICAgICAgICAgICAgLy8gVktfT0VNX0NPTU1BIChCQykgV2luZG93cyAyMDAwL1hQOiBG
b3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJywnIGtleQorICAgICAgICBjYXNlIEdES19jb21t
YToKKyAgICAgICAgY2FzZSBHREtfbGVzczoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fQ09N
TUE7IC8vY2FzZSAnLCc6IGNhc2UgJzwnOiByZXR1cm4gMHhCQzsKKyAgICAgICAgICAgIC8vIFZL
X09FTV9NSU5VUyAoQkQpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwg
dGhlICctJyBrZXkKKyAgICAgICAgY2FzZSBHREtfbWludXM6CisgICAgICAgIGNhc2UgR0RLX3Vu
ZGVyc2NvcmU6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNX01JTlVTOyAvL2Nhc2UgJy0nOiBj
YXNlICdfJzogcmV0dXJuIDB4QkQ7CisgICAgICAgICAgICAvLyBWS19PRU1fUEVSSU9EIChCRSkg
V2luZG93cyAyMDAwL1hQOiBGb3IgYW55IGNvdW50cnkvcmVnaW9uLCB0aGUgJy4nIGtleQorICAg
ICAgICBjYXNlIEdES19wZXJpb2Q6CisgICAgICAgIGNhc2UgR0RLX2dyZWF0ZXI6CisgICAgICAg
ICAgICByZXR1cm4gVktfT0VNX1BFUklPRDsgLy9jYXNlICcuJzogY2FzZSAnPic6IHJldHVybiAw
eEJFOworICAgICAgICAgICAgLy8gVktfT0VNXzIgKEJGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3Vz
IGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZv
ciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnLz8nIGtleQorICAgICAgICBjYXNlIEdE
S19zbGFzaDoKKyAgICAgICAgY2FzZSBHREtfcXVlc3Rpb246CisgICAgICAgICAgICByZXR1cm4g
VktfT0VNXzI7IC8vY2FzZSAnLyc6IGNhc2UgJz8nOiByZXR1cm4gMHhCRjsKKyAgICAgICAgICAg
IC8vIFZLX09FTV8zIChDMCkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBj
YW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJk
IGtleWJvYXJkLCB0aGUgJ2B+JyBrZXkKKyAgICAgICAgY2FzZSBHREtfYXNjaWl0aWxkZToKKyAg
ICAgICAgY2FzZSBHREtfcXVvdGVsZWZ0OgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV8zOyAv
L2Nhc2UgJ2AnOiBjYXNlICd+JzogcmV0dXJuIDB4QzA7CisgICAgICAgICAgICAvLyBWS19PRU1f
NCAoREIpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkg
a2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwg
dGhlICdbeycga2V5CisgICAgICAgIGNhc2UgR0RLX2JyYWNrZXRsZWZ0OgorICAgICAgICBjYXNl
IEdES19icmFjZWxlZnQ6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzQ7IC8vY2FzZSAnWyc6
IGNhc2UgJ3snOiByZXR1cm4gMHhEQjsKKyAgICAgICAgICAgIC8vIFZLX09FTV81IChEQykgVXNl
ZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4g
V2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ1x8JyBr
ZXkKKyAgICAgICAgY2FzZSBHREtfYmFja3NsYXNoOgorICAgICAgICBjYXNlIEdES19iYXI6Cisg
ICAgICAgICAgICByZXR1cm4gVktfT0VNXzU7IC8vY2FzZSAnXFwnOiBjYXNlICd8JzogcmV0dXJu
IDB4REM7CisgICAgICAgICAgICAvLyBWS19PRU1fNiAoREQpIFVzZWQgZm9yIG1pc2NlbGxhbmVv
dXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDog
Rm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICddfScga2V5CisgICAgICAgIGNhc2Ug
R0RLX2JyYWNrZXRyaWdodDoKKyAgICAgICAgY2FzZSBHREtfYnJhY2VyaWdodDoKKyAgICAgICAg
ICAgIHJldHVybiBWS19PRU1fNjsgLy8gY2FzZSAnXSc6IGNhc2UgJ30nOiByZXR1cm4gMHhERDsK
KyAgICAgICAgICAgIC8vIFZLX09FTV83IChERSkgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFy
YWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhl
IFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUgJ3NpbmdsZS1xdW90ZS9kb3VibGUtcXVvdGUnIGtl
eQorICAgICAgICBjYXNlIEdES19xdW90ZXJpZ2h0OgorICAgICAgICBjYXNlIEdES19xdW90ZWRi
bDoKKyAgICAgICAgICAgIHJldHVybiBWS19PRU1fNzsgLy8gY2FzZSAnXCcnOiBjYXNlICciJzog
cmV0dXJuIDB4REU7CisgICAgICAgICAgICAvLyBWS19PRU1fOCAoREYpIFVzZWQgZm9yIG1pc2Nl
bGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuCisgICAgICAgICAg
ICAvLyBWS19PRU1fMTAyIChFMikgV2luZG93cyAyMDAwL1hQOiBFaXRoZXIgdGhlIGFuZ2xlIGJy
YWNrZXQga2V5IG9yIHRoZSBiYWNrc2xhc2gga2V5IG9uIHRoZSBSVCAxMDIta2V5IGtleWJvYXJk
CisgICAgICAgICAgICAvLyBWS19QUk9DRVNTS0VZIChFNSkgV2luZG93cyA5NS85OC9NZSwgV2lu
ZG93cyBOVCA0LjAsIFdpbmRvd3MgMjAwMC9YUDogSU1FIFBST0NFU1Mga2V5CisgICAgICAgICAg
ICAvLyBWS19QQUNLRVQgKEU3KSBXaW5kb3dzIDIwMDAvWFA6IFVzZWQgdG8gcGFzcyBVbmljb2Rl
IGNoYXJhY3RlcnMgYXMgaWYgdGhleSB3ZXJlIGtleXN0cm9rZXMuIFRoZSBWS19QQUNLRVQga2V5
IGlzIHRoZSBsb3cgd29yZCBvZiBhIDMyLWJpdCBWaXJ0dWFsIEtleSB2YWx1ZSB1c2VkIGZvciBu
b24ta2V5Ym9hcmQgaW5wdXQgbWV0aG9kcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBSZW1h
cmsgaW4gS0VZQkRJTlBVVCxTZW5kSW5wdXQsIFdNX0tFWURPV04sIGFuZCBXTV9LRVlVUAorICAg
ICAgICAgICAgLy8gVktfQVRUTiAoRjYpIEF0dG4ga2V5CisgICAgICAgICAgICAvLyBWS19DUlNF
TCAoRjcpIENyU2VsIGtleQorICAgICAgICAgICAgLy8gVktfRVhTRUwgKEY4KSBFeFNlbCBrZXkK
KyAgICAgICAgICAgIC8vIFZLX0VSRU9GIChGOSkgRXJhc2UgRU9GIGtleQorICAgICAgICAgICAg
Ly8gVktfUExBWSAoRkEpIFBsYXkga2V5CisgICAgICAgICAgICAvLyBWS19aT09NIChGQikgWm9v
bSBrZXkKKyAgICAgICAgICAgIC8vIFZLX05PTkFNRSAoRkMpIFJlc2VydmVkIGZvciBmdXR1cmUg
dXNlCisgICAgICAgICAgICAvLyBWS19QQTEgKEZEKSBQQTEga2V5CisgICAgICAgICAgICAvLyBW
S19PRU1fQ0xFQVIgKEZFKSBDbGVhciBrZXkKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgIH0KKworfQorCitzdGF0aWMgaW5saW5lIFN0cmluZyBzaW5nbGVDaGFy
YWN0ZXJTdHJpbmcoZ3VpbnQgdmFsKQoreworICAgIHZhbCA9IGdka19rZXl2YWxfdG9fdW5pY29k
ZSh2YWwpOworICAgIHJldHVybiBTdHJpbmcoKFVDaGFyKikmdmFsLCAxKTsKK30KKworUGxhdGZv
cm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnRLZXkqIGV2ZW50
KQorICAgIDogbV90ZXh0KHNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVudC0+a2V5dmFsKSkKKyAg
ICAsIG1fdW5tb2RpZmllZFRleHQoc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGV2ZW50LT5rZXl2YWwp
KQorICAgICwgbV9rZXlJZGVudGlmaWVyKGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGV2ZW50
LT5rZXl2YWwpKQorICAgICwgbV9pc0tleVVwKGV2ZW50LT50eXBlID09IEdES19LRVlfUkVMRUFT
RSkKKyAgICAsIG1fYXV0b1JlcGVhdChmYWxzZSkKKyAgICAsIG1fV2luZG93c0tleUNvZGUod2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5dmFsKSkKKyAgICAsIG1faXNLZXlwYWQo
ZmFsc2UpCisgICAgLCBtX3NoaWZ0S2V5KGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLICE9
IDApCisgICAgLCBtX2N0cmxLZXkoZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSyAhPSAw
KQorICAgICwgbV9hbHRLZXkoZXZlbnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwKQorICAg
ICwgbV9tZXRhS2V5KGV2ZW50LT5zdGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMCkKK3sKK30KKwor
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTG9nZ2luZ0dkay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTG9nZ2luZ0dkay5jcHAJKHJldmlzaW9uIDI1MDU0KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTG9nZ2luZ0dkay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50
b2tlckBjb2xsYWJvcmEuY28udWs+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBJbml0aWFsaXpl
TG9nZ2luZ0NoYW5uZWxzSWZOZWNlc3NhcnkoKQotewotICAgIC8vIEZJWE1FOiBBZGQgYSB3YXkg
Zm9yIHRoZSB1c2VyIHRvIHNwZWNpZnkgd2hpY2gKLSAgICAvLyBsb2dzIGhlL3NoZSB3b3VsZCBs
aWtlIHR1cm5lZCBvbi4KLSAgICBMb2dOb3RZZXRJbXBsZW1lbnRlZC5zdGF0ZSA9IFdURkxvZ0No
YW5uZWxPbjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvTG9nZ2luZ0d0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvTG9nZ2luZ0d0ay5jcHAJKHJldmlzaW9uIDI0OTkyKQkoZnJvbSBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9Mb2dnaW5nR2RrLmNwcDoyNDk5MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0xvZ2dp
bmdHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJAY29sbGFib3JhLmNvLnVrPgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgSW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5KCkK
K3sKKyAgICAvLyBGSVhNRTogQWRkIGEgd2F5IGZvciB0aGUgdXNlciB0byBzcGVjaWZ5IHdoaWNo
CisgICAgLy8gbG9ncyBoZS9zaGUgd291bGQgbGlrZSB0dXJuZWQgb24uCisgICAgTG9nTm90WWV0
SW1wbGVtZW50ZWQuc3RhdGUgPSBXVEZMb2dDaGFubmVsT247Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL01JTUVUeXBlUmVnaXN0cnlHZGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL01JTUVUeXBlUmVnaXN0cnlH
ZGsuY3BwCShyZXZpc2lvbiAyNTA1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL01JTUVUeXBl
UmVnaXN0cnlHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0cnVjdCBFeHRlbnNpb25NYXAgewotICAgIGNvbnN0IGNoYXIqIGV4dGVuc2lvbjsKLSAg
ICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKLX07Ci0KLXN0YXRpYyBjb25zdCBFeHRlbnNpb25NYXAg
ZXh0ZW5zaW9uTWFwIFtdID0gewotICAgIHsgImJtcCIsICJpbWFnZS9ibXAiIH0sCi0gICAgeyAi
Z2lmIiwgImltYWdlL2dpZiIgfSwKLSAgICB7ICJodG1sIiwgInRleHQvaHRtbCIgfSwKLSAgICB7
ICJpY28iLCAiaW1hZ2UveC1pY29uIiB9LCAgIAotICAgIHsgImpwZWciLCAiaW1hZ2UvanBlZyIg
fSwKLSAgICB7ICJqcGciLCAiaW1hZ2UvanBlZyIgfSwKLSAgICB7ICJqcyIsICJhcHBsaWNhdGlv
bi94LWphdmFzY3JpcHQiIH0sCi0gICAgeyAicGRmIiwgImFwcGxpY2F0aW9uL3BkZiIgfSwKLSAg
ICB7ICJwbmciLCAiaW1hZ2UvcG5nIiB9LAotICAgIHsgInJzcyIsICJhcHBsaWNhdGlvbi9yc3Mr
eG1sIiB9LAotICAgIHsgInN2ZyIsICJpbWFnZS9zdmcreG1sIiB9LAotICAgIHsgInRleHQiLCAi
dGV4dC9wbGFpbiIgfSwKLSAgICB7ICJ0eHQiLCAidGV4dC9wbGFpbiIgfSwKLSAgICB7ICJ4Ym0i
LCAiaW1hZ2UveC14Yml0bWFwIiB9LAotICAgIHsgInhtbCIsICJ0ZXh0L3htbCIgfSwKLSAgICB7
ICJ4c2wiLCAidGV4dC94c2wiIH0sCi0gICAgeyAieGh0bWwiLCAiYXBwbGljYXRpb24veGh0bWwr
eG1sIiB9LAotICAgIHsgMCwgMCB9Ci19OwotICAgIAotU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6
OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQotewotICAgIFN0cmlu
ZyBzID0gZXh0Lmxvd2VyKCk7Ci0gICAgY29uc3QgRXh0ZW5zaW9uTWFwICplID0gZXh0ZW5zaW9u
TWFwOwotICAgIHdoaWxlIChlLT5leHRlbnNpb24pIHsKLSAgICAgICAgaWYgKHMgPT0gZS0+ZXh0
ZW5zaW9uKQotICAgICAgICAgICAgcmV0dXJuIGUtPm1pbWVUeXBlOwotICAgICAgICArK2U7Ci0g
ICAgfQotICAgIC8vIHVua25vd24sIGxldCdzIGp1c3QgYXNzdW1lIHBsYWluIHRleHQKLSAgICBy
ZXR1cm4gInRleHQvcGxhaW4iOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9N
SU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9NSU1FVHlwZVJlZ2lzdHJ5R3RrLmNwcAkocmV2aXNpb24gMjQ5OTIpCShmcm9tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL01JTUVUeXBlUmVnaXN0cnlHZGsuY3BwOjI0OTkyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEV4dGVuc2lvbk1hcCB7CisgICAgY29uc3Qg
Y2hhciogZXh0ZW5zaW9uOworICAgIGNvbnN0IGNoYXIqIG1pbWVUeXBlOworfTsKKworc3RhdGlj
IGNvbnN0IEV4dGVuc2lvbk1hcCBleHRlbnNpb25NYXAgW10gPSB7CisgICAgeyAiYm1wIiwgImlt
YWdlL2JtcCIgfSwKKyAgICB7ICJnaWYiLCAiaW1hZ2UvZ2lmIiB9LAorICAgIHsgImh0bWwiLCAi
dGV4dC9odG1sIiB9LAorICAgIHsgImljbyIsICJpbWFnZS94LWljb24iIH0sICAgCisgICAgeyAi
anBlZyIsICJpbWFnZS9qcGVnIiB9LAorICAgIHsgImpwZyIsICJpbWFnZS9qcGVnIiB9LAorICAg
IHsgImpzIiwgImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIgfSwKKyAgICB7ICJwZGYiLCAiYXBw
bGljYXRpb24vcGRmIiB9LAorICAgIHsgInBuZyIsICJpbWFnZS9wbmciIH0sCisgICAgeyAicnNz
IiwgImFwcGxpY2F0aW9uL3Jzcyt4bWwiIH0sCisgICAgeyAic3ZnIiwgImltYWdlL3N2Zyt4bWwi
IH0sCisgICAgeyAidGV4dCIsICJ0ZXh0L3BsYWluIiB9LAorICAgIHsgInR4dCIsICJ0ZXh0L3Bs
YWluIiB9LAorICAgIHsgInhibSIsICJpbWFnZS94LXhiaXRtYXAiIH0sCisgICAgeyAieG1sIiwg
InRleHQveG1sIiB9LAorICAgIHsgInhzbCIsICJ0ZXh0L3hzbCIgfSwKKyAgICB7ICJ4aHRtbCIs
ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIH0sCisgICAgeyAwLCAwIH0KK307CisgICAgCitTdHJp
bmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5n
ICZleHQpCit7CisgICAgU3RyaW5nIHMgPSBleHQubG93ZXIoKTsKKyAgICBjb25zdCBFeHRlbnNp
b25NYXAgKmUgPSBleHRlbnNpb25NYXA7CisgICAgd2hpbGUgKGUtPmV4dGVuc2lvbikgeworICAg
ICAgICBpZiAocyA9PSBlLT5leHRlbnNpb24pCisgICAgICAgICAgICByZXR1cm4gZS0+bWltZVR5
cGU7CisgICAgICAgICsrZTsKKyAgICB9CisgICAgLy8gdW5rbm93biwgbGV0J3MganVzdCBhc3N1
bWUgcGxhaW4gdGV4dAorICAgIHJldHVybiAidGV4dC9wbGFpbiI7Cit9CisKK30KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCShyZXZpc2lvbiAyNTA1NCkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEwNSArMCwwIEBACi0vKgotKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbSAKLSogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0qIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0qIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0qIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0KLSNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCi0jaW5j
bHVkZSAiQXNzZXJ0aW9ucy5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBmaWd1cmUgb3V0
IHdoaWNoIG1vZGlmaWVyIGlzIEFsdCBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyBHREtfTU9EMV9N
QVNLLgotCi1QbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudEJ1
dHRvbiogZXZlbnQpCi17Ci0gICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwotICAgIG1f
cG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54LCAoaW50KWV2ZW50LT55KTsKLSAgICBt
X2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+eF9yb290LCAoaW50KWV2ZW50
LT55X3Jvb3QpOwotICAgIG1fc2hpZnRLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFT
SzsKLSAgICBtX2N0cmxLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLOwotICAg
IG1fYWx0S2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSzsKLSAgICBtX21ldGFLZXkg
PSBldmVudC0+c3RhdGUgJiBHREtfTU9EMl9NQVNLOwotCi0gICAgc3dpdGNoIChldmVudC0+dHlw
ZSkgewotICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICBjYXNlIEdES18yQlVUVE9OX1BS
RVNTOgotICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6Ci0gICAgY2FzZSBHREtfQlVUVE9OX1JF
TEVBU0U6Ci0gICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFByZXNzZWQ7Ci0gICAgICAg
IGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JFTEVBU0UpIHsKLSAgICAgICAgICAgIG1f
ZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVhc2VkOwotICAgICAgICAgICAgbV9jbGlja0NvdW50
ID0gMDsKLSAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNT
KQotICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMTsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQt
PnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MpCi0gICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAy
OwotICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKLSAg
ICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDM7Ci0KLSAgICAgICAgaWYgKGV2ZW50LT5idXR0b24g
PT0gMSkKLSAgICAgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKLSAgICAgICAgZWxzZSBp
ZiAoZXZlbnQtPmJ1dHRvbiA9PSAyKQotICAgICAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0
b247Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMykKLSAgICAgICAgICAgIG1f
YnV0dG9uID0gUmlnaHRCdXR0b247Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfTsKLX0KLQotUGxhdGZvcm1Nb3VzZUV2
ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRNb3Rpb24qIG1vdGlvbikKLXsKLSAgICBt
X3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChp
bnQpbW90aW9uLT54LCAoaW50KW1vdGlvbi0+eSk7Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IElu
dFBvaW50KChpbnQpbW90aW9uLT54X3Jvb3QsIChpbnQpbW90aW9uLT55X3Jvb3QpOwotICAgIG1f
c2hpZnRLZXkgPSBtb3Rpb24tPnN0YXRlICYgR0RLX1NISUZUX01BU0s7Ci0gICAgbV9jdHJsS2V5
ID0gbW90aW9uLT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0s7Ci0gICAgbV9hbHRLZXkgPSBtb3Rp
b24tPnN0YXRlICYgR0RLX01PRDFfTUFTSzsKLSAgICBtX21ldGFLZXkgPSBtb3Rpb24tPnN0YXRl
ICYgR0RLX01PRDJfTUFTSzsKLQotICAgIHN3aXRjaCAobW90aW9uLT50eXBlKSB7Ci0gICAgY2Fz
ZSBHREtfTU9USU9OX05PVElGWToKLSAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50TW92
ZWQ7Ci0gICAgICAgIG1fYnV0dG9uID0gTm9CdXR0b247Ci0gICAgICAgIG1fY2xpY2tDb3VudCA9
IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIH07Ci0KLSAgICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04xX01B
U0spCi0gICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKLSAgICBlbHNlIGlmIChtb3Rpb24t
PnN0YXRlICYgR0RLX0JVVFRPTjJfTUFTSykKLSAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0
b247Ci0gICAgZWxzZSBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04zX01BU0spCi0gICAg
ICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247Ci19Ci19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9Nb3VzZUV2ZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9Nb3VzZUV2ZW50R3RrLmNwcAkocmV2aXNpb24gMjUwNTQpCShmcm9tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwOjI1MDU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
TW91c2VFdmVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAor
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFy
ZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZl
bnQuaCIKKworI2luY2x1ZGUgIlN5c3RlbVRpbWUuaCIKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgi
CisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklY
TUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbW9kaWZpZXIgaXMg
QWx0IGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIEdES19NT0QxX01BU0suCisKK1BsYXRmb3JtTW91
c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50QnV0dG9uKiBldmVudCkKK3sKKyAg
ICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9wb3NpdGlvbiA9IEludFBvaW50
KChpbnQpZXZlbnQtPngsIChpbnQpZXZlbnQtPnkpOworICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJ
bnRQb2ludCgoaW50KWV2ZW50LT54X3Jvb3QsIChpbnQpZXZlbnQtPnlfcm9vdCk7CisgICAgbV9z
aGlmdEtleSA9IGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLOworICAgIG1fY3RybEtleSA9
IGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0s7CisgICAgbV9hbHRLZXkgPSBldmVudC0+
c3RhdGUgJiBHREtfTU9EMV9NQVNLOworICAgIG1fbWV0YUtleSA9IGV2ZW50LT5zdGF0ZSAmIEdE
S19NT0QyX01BU0s7CisKKyAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7CisgICAgY2FzZSBHREtf
QlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtf
M0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES19CVVRUT05fUkVMRUFTRToKKyAgICAgICAgbV9l
dmVudFR5cGUgPSBNb3VzZUV2ZW50UHJlc3NlZDsKKyAgICAgICAgaWYgKGV2ZW50LT50eXBlID09
IEdES19CVVRUT05fUkVMRUFTRSkgeworICAgICAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2
ZW50UmVsZWFzZWQ7CisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAwOworICAgICAgICB9IGVs
c2UgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUFJFU1MpCisgICAgICAgICAgICBtX2Ns
aWNrQ291bnQgPSAxOworICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRP
Tl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDI7CisgICAgICAgIGVsc2UgaWYg
KGV2ZW50LT50eXBlID09IEdES18zQlVUVE9OX1BSRVNTKQorICAgICAgICAgICAgbV9jbGlja0Nv
dW50ID0gMzsKKworICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAxKQorICAgICAgICAgICAg
bV9idXR0b24gPSBMZWZ0QnV0dG9uOworICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uID09
IDIpCisgICAgICAgICAgICBtX2J1dHRvbiA9IE1pZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBp
ZiAoZXZlbnQtPmJ1dHRvbiA9PSAzKQorICAgICAgICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRv
bjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9OworfQorCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VF
dmVudChHZGtFdmVudE1vdGlvbiogbW90aW9uKQoreworICAgIG1fdGltZXN0YW1wID0gY3VycmVu
dFRpbWUoKTsKKyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPngsIChpbnQp
bW90aW9uLT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24t
Pnhfcm9vdCwgKGludCltb3Rpb24tPnlfcm9vdCk7CisgICAgbV9zaGlmdEtleSA9IG1vdGlvbi0+
c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKKyAgICBtX2N0cmxLZXkgPSBtb3Rpb24tPnN0YXRlICYg
R0RLX0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtleSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfTU9E
MV9NQVNLOworICAgIG1fbWV0YUtleSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfTU9EMl9NQVNLOwor
CisgICAgc3dpdGNoIChtb3Rpb24tPnR5cGUpIHsKKyAgICBjYXNlIEdES19NT1RJT05fTk9USUZZ
OgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRNb3ZlZDsKKyAgICAgICAgbV9idXR0
b24gPSBOb0J1dHRvbjsKKyAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKKwor
ICAgIGlmIChtb3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjFfTUFTSykKKyAgICAgICAgbV9idXR0
b24gPSBMZWZ0QnV0dG9uOworICAgIGVsc2UgaWYgKG1vdGlvbi0+c3RhdGUgJiBHREtfQlVUVE9O
Ml9NQVNLKQorICAgICAgICBtX2J1dHRvbiA9IE1pZGRsZUJ1dHRvbjsKKyAgICBlbHNlIGlmICht
b3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjNfTUFTSykKKyAgICAgICAgbV9idXR0b24gPSBSaWdo
dEJ1dHRvbjsKK30KK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2NyZWVu
R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVl
bkdkay5jcHAJKHJldmlzaW9uIDI1MDU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZv
cm1TY3JlZW5HZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDczICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbSAKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJXaWRnZXQuaCIKLQotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNs
dWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotaW50IHNjcmVlbkRlcHRoKFdpZGdldCogd2lkZ2V0KSAKLXsKLSAgICBBU1NF
UlQod2lkZ2V0LT5jb250YWluaW5nV2luZG93KCkgJiYgR1RLX1dJREdFVCh3aWRnZXQtPmNvbnRh
aW5pbmdXaW5kb3coKSktPndpbmRvdyk7Ci0KLSAgICBnaW50IGR1bW15LCBkZXB0aDsKLSAgICBn
ZGtfd2luZG93X2dldF9nZW9tZXRyeShHVEtfV0lER0VUKHdpZGdldC0+Y29udGFpbmluZ1dpbmRv
dygpKS0+d2luZG93LCAmZHVtbXksICZkdW1teSwgJmR1bW15LCAmZHVtbXksICZkZXB0aCk7Ci0g
ICAgcmV0dXJuIGRlcHRoOwotfQotCi1pbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0
KikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiA4OwotfQotCi1ib29sIHNj
cmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKSAKLXsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsgCi0g
ICAgcmV0dXJuIGZhbHNlOyAKLX0KLQotRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KikgCi17
IAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgpOyAKLX0KLQot
RmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KikgCi17IAotICAgIG5vdEltcGxl
bWVudGVkKCk7IAotICAgIHJldHVybiBGbG9hdFJlY3QoKTsgCi19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2NyZWVuR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVlbkd0ay5j
cHAJKHJldmlzaW9uIDI1MDU0KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNj
cmVlbkdkay5jcHA6MjUwNTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVl
bkd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIldpZGdldC5oIgorCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHN0
ZGlvLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpIAoreworICAgIEFTU0VSVCh3aWRn
ZXQtPmNvbnRhaW5pbmdXaW5kb3coKSAmJiBHVEtfV0lER0VUKHdpZGdldC0+Y29udGFpbmluZ1dp
bmRvdygpKS0+d2luZG93KTsKKworICAgIGdpbnQgZHVtbXksIGRlcHRoOworICAgIGdka193aW5k
b3dfZ2V0X2dlb21ldHJ5KEdUS19XSURHRVQod2lkZ2V0LT5jb250YWluaW5nV2luZG93KCkpLT53
aW5kb3csICZkdW1teSwgJmR1bW15LCAmZHVtbXksICZkdW1teSwgJmRlcHRoKTsKKyAgICByZXR1
cm4gZGVwdGg7Cit9CisKK2ludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDg7Cit9CisKK2Jvb2wgc2NyZWVuSXNN
b25vY2hyb21lKFdpZGdldCopIAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAKKyAgICByZXR1
cm4gZmFsc2U7IAorfQorCitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqKSAKK3sgCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7IAorfQorCitGbG9hdFJl
Y3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKSAKK3sgCisgICAgbm90SW1wbGVtZW50ZWQo
KTsgCisgICAgcmV0dXJuIEZsb2F0UmVjdCgpOyAKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNw
cAkocmV2aXNpb24gMjUwNTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9s
bEJhckdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgemVja2VA
c2VsZmlzaC5vcmcKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5oIgotI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgot
I2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7Ci0KLQotUGxhdGZvcm1TY3JvbGxiYXI6OlBsYXRmb3JtU2Nyb2xsYmFy
KFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY3JvbGxiYXJDb250cm9s
U2l6ZSBjb250cm9sU2l6ZSkKLSAgICA6IFNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9uLCBj
b250cm9sU2l6ZSkKLSAgICAsIG1fYWRqdXN0bWVudChHVEtfQURKVVNUTUVOVChndGtfYWRqdXN0
bWVudF9uZXcoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkpKQoteyAKLSAgICBHdGtTY3Jv
bGxiYXIqIHNjcm9sbEJhciA9IG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NDUk9MTEJBUig6Omd0a19oc2Nyb2xs
YmFyX25ldyhtX2FkanVzdG1lbnQpKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VEtfU0NST0xMQkFSKDo6Z3RrX3ZzY3JvbGxiYXJfbmV3KG1fYWRqdXN0bWVudCkpOwotICAgIGd0
a193aWRnZXRfc2hvdyhHVEtfV0lER0VUKHNjcm9sbEJhcikpOwotICAgIGdfb2JqZWN0X3JlZihH
X09CSkVDVChzY3JvbGxCYXIpKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKHNjcm9s
bEJhciksICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyhQbGF0Zm9ybVNjcm9sbGJhcjo6Z3Rr
VmFsdWVDaGFuZ2VkKSwgdGhpcyk7Ci0KLSAgICBzZXRHdGtXaWRnZXQoR1RLX1dJREdFVChzY3Jv
bGxCYXIpKTsKLQotICAgIC8qCi0gICAgICogYXNzaWduIGEgc2FuZSBkZWZhdWx0IHdpZHRoIGFu
ZCBoZWlnaHQgdG8gdGhlIFNjcm9sbEJhciwgb3RoZXJ3aXNlCi0gICAgICogd2Ugd2lsbCBlbmQg
dXAgd2l0aCBhIDAgd2lkdGggc2Nyb2xsYmFyLgotICAgICAqLwotICAgIHJlc2l6ZShQbGF0Zm9y
bVNjcm9sbGJhcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpLAotICAgICAgICAgICBQbGF0
Zm9ybVNjcm9sbGJhcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpKTsgICAgCi19Ci0KLVBsYXRm
b3JtU2Nyb2xsYmFyOjp+UGxhdGZvcm1TY3JvbGxiYXIoKQotewotICAgIC8qCi0gICAgICogdGhl
IFdpZGdldCBkb2VzIG5vdCB0YWtlIG92ZXIgb3duZXJzaGlwLgotICAgICAqLwotICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVChndGtXaWRnZXQoKSksIChn
cG9pbnRlcilQbGF0Zm9ybVNjcm9sbGJhcjo6Z3RrVmFsdWVDaGFuZ2VkLCB0aGlzKTsKLSAgICBn
X29iamVjdF91bnJlZihHX09CSkVDVChndGtXaWRnZXQoKSkpOwotfQotCi1pbnQgUGxhdGZvcm1T
Y3JvbGxiYXI6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV2lkZ2V0Ojp3aWR0aCgpOwot
fQotCi1pbnQgUGxhdGZvcm1TY3JvbGxiYXI6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IFdpZGdldDo6aGVpZ2h0KCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNldEVuYWJs
ZWQoYm9vbCBlbmFibGVkKQotewotICAgIFdpZGdldDo6c2V0RW5hYmxlZChlbmFibGVkKTsKLX0K
LQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCi17Ci0gICAgV2lkZ2V0OjpwYWlu
dChncmFwaGljc0NvbnRleHQsIGRhbWFnZVJlY3QpOwotfQotCi12b2lkIFBsYXRmb3JtU2Nyb2xs
YmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9uKCkKLXsgCi0gICAgaWYgKG1fYWRqdXN0bWVudC0+dmFs
dWUgIT0gbV9jdXJyZW50UG9zKSB7Ci0gICAgICAgIG1fYWRqdXN0bWVudC0+dmFsdWUgPSBtX2N1
cnJlbnRQb3M7Ci0gICAgICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQobV9hZGp1c3Rt
ZW50KTsKLSAgICB9Ci19Ci0KLXZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRodW1iUHJv
cG9ydGlvbigpCi17Ci0gICAgbV9hZGp1c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IG1fbGluZVN0
ZXA7Ci0gICAgbV9hZGp1c3RtZW50LT5wYWdlX2luY3JlbWVudCA9IG1fcGFnZVN0ZXA7Ci0gICAg
bV9hZGp1c3RtZW50LT5wYWdlX3NpemUgPSBtX3Zpc2libGVTaXplOwotICAgIG1fYWRqdXN0bWVu
dC0+dXBwZXIgPSBtX3RvdGFsU2l6ZTsKLSAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1fYWRq
dXN0bWVudCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICBzZXRGcmFtZUdlb21ldHJ5KHJlY3QpOwotICAgIGdlb21ldHJ5
Q2hhbmdlZCgpOwotfQotCi12b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZWQo
KQotewotICAgIGlmICghcGFyZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChw
YXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0
YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKLSAgICBJbnRSZWN0IHdpbmRvd1JlY3Qg
PSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9j
YXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOwotICAgIEd0a0FsbG9jYXRpb24gYWxs
b2NhdGlvbiA9IHsgd2luZG93UmVjdC54KCksIHdpbmRvd1JlY3QueSgpLCB3aW5kb3dSZWN0Lndp
ZHRoKCksIHdpbmRvd1JlY3QuaGVpZ2h0KCkgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2Nh
dGUoZ3RrV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJh
cjo6Z3RrVmFsdWVDaGFuZ2VkKEd0a0FkanVzdG1lbnQqLCBQbGF0Zm9ybVNjcm9sbGJhciogdGhh
dCkKLXsKLSAgICB0aGF0LT5zZXRWYWx1ZShndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUodGhhdC0+
bV9hZGp1c3RtZW50KSk7Ci19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNj
cm9sbEJhckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZv
cm1TY3JvbGxCYXJHdGsuY3BwCShyZXZpc2lvbiAyNDk5MikJKGZyb20gV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwOjI0OTkyKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyIHplY2tlQHNlbGZpc2gub3JnCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxjYWlyby9jYWlyby5oPgorI2luY2x1ZGUgPHN0
ZGlvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisKK1BsYXRmb3JtU2Nyb2xsYmFy
OjpQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCisgICAgOiBTY3JvbGxiYXIoY2xp
ZW50LCBvcmllbnRhdGlvbiwgY29udHJvbFNpemUpCisgICAgLCBtX2FkanVzdG1lbnQoR1RLX0FE
SlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAp
KSkKK3sgCisgICAgR3RrU2Nyb2xsYmFyKiBzY3JvbGxCYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TQ1JP
TExCQVIoOjpndGtfaHNjcm9sbGJhcl9uZXcobV9hZGp1c3RtZW50KSkgOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1RLX1NDUk9MTEJBUig6Omd0a192c2Nyb2xsYmFyX25ldyhtX2Fk
anVzdG1lbnQpKTsKKyAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChzY3JvbGxCYXIpKTsK
KyAgICBnX29iamVjdF9yZWYoR19PQkpFQ1Qoc2Nyb2xsQmFyKSk7CisgICAgZ19zaWduYWxfY29u
bmVjdChHX09CSkVDVChzY3JvbGxCYXIpLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soUGxh
dGZvcm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCksIHRoaXMpOworCisgICAgc2V0R3RrV2lk
Z2V0KEdUS19XSURHRVQoc2Nyb2xsQmFyKSk7CisKKyAgICAvKgorICAgICAqIGFzc2lnbiBhIHNh
bmUgZGVmYXVsdCB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBTY3JvbGxCYXIsIG90aGVyd2lzZQor
ICAgICAqIHdlIHdpbGwgZW5kIHVwIHdpdGggYSAwIHdpZHRoIHNjcm9sbGJhci4KKyAgICAgKi8K
KyAgICByZXNpemUoUGxhdGZvcm1TY3JvbGxiYXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQo
KSwKKyAgICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgo
KSk7ICAgIAorfQorCitQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkKK3sK
KyAgICAvKgorICAgICAqIHRoZSBXaWRnZXQgZG9lcyBub3QgdGFrZSBvdmVyIG93bmVyc2hpcC4K
KyAgICAgKi8KKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoR19PQkpF
Q1QoZ3RrV2lkZ2V0KCkpLCAoZ3BvaW50ZXIpUGxhdGZvcm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hh
bmdlZCwgdGhpcyk7CisgICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1QoZ3RrV2lkZ2V0KCkpKTsK
K30KKworaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFdpZGdldDo6d2lkdGgoKTsKK30KKworaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjpoZWlnaHQoKSBj
b25zdAoreworICAgIHJldHVybiBXaWRnZXQ6OmhlaWdodCgpOworfQorCit2b2lkIFBsYXRmb3Jt
U2Nyb2xsYmFyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBXaWRnZXQ6OnNldEVu
YWJsZWQoZW5hYmxlZCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnBhaW50KEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQor
eworICAgIFdpZGdldDo6cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBkYW1hZ2VSZWN0KTsKK30KKwor
dm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbigpCit7IAorICAgIGlm
IChtX2FkanVzdG1lbnQtPnZhbHVlICE9IG1fY3VycmVudFBvcykgeworICAgICAgICBtX2FkanVz
dG1lbnQtPnZhbHVlID0gbV9jdXJyZW50UG9zOworICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1
ZV9jaGFuZ2VkKG1fYWRqdXN0bWVudCk7CisgICAgfQorfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xs
YmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24oKQoreworICAgIG1fYWRqdXN0bWVudC0+c3RlcF9p
bmNyZW1lbnQgPSBtX2xpbmVTdGVwOworICAgIG1fYWRqdXN0bWVudC0+cGFnZV9pbmNyZW1lbnQg
PSBtX3BhZ2VTdGVwOworICAgIG1fYWRqdXN0bWVudC0+cGFnZV9zaXplID0gbV92aXNpYmxlU2l6
ZTsKKyAgICBtX2FkanVzdG1lbnQtPnVwcGVyID0gbV90b3RhbFNpemU7CisgICAgZ3RrX2FkanVz
dG1lbnRfY2hhbmdlZChtX2FkanVzdG1lbnQpOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFy
OjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgc2V0RnJhbWVHZW9tZXRyeShy
ZWN0KTsKKyAgICBnZW9tZXRyeUNoYW5nZWQoKTsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJh
cjo6Z2VvbWV0cnlDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisgICAg
SW50UmVjdCB3aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3co
ZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAg
ICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHdpbmRvd1JlY3QueCgpLCB3aW5kb3dSZWN0
LnkoKSwgd2luZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgZ3Rr
X3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7Cit9CisKK3Zv
aWQgUGxhdGZvcm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZChHdGtBZGp1c3RtZW50KiwgUGxh
dGZvcm1TY3JvbGxiYXIqIHRoYXQpCit7CisgICAgdGhhdC0+c2V0VmFsdWUoZ3RrX2FkanVzdG1l
bnRfZ2V0X3ZhbHVlKHRoYXQtPm1fYWRqdXN0bWVudCkpOworfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvUG9wdXBNZW51R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9Qb3B1cE1lbnVHZGsuY3BwCShyZXZpc2lvbiAyNTA1NCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1BvcHVwTWVudUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjQgKzAsMCBAQAot
LyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBwb3B1cCBtZW51IGltcGxlbWVudGF0aW9u
IGZvciA8c2VsZWN0PiBlbGVtZW50cyBpbiBXZWJDb3JlLgotICoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJQb3B1cE1lbnUuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLSNpbmNsdWRl
IDxzdGRpby5oPgotIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Qb3B1cE1lbnU6OlBvcHVwTWVu
dShQb3B1cE1lbnVDbGllbnQqIG1lbnVMaXN0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLVBvcHVwTWVudTo6flBvcHVwTWVudSgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYsIEZyYW1lVmlldyosIGludCkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFBvcHVwTWVudTo6aGlkZSgpCi17
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBQb3B1cE1lbnU6OnVwZGF0ZUZyb21F
bGVtZW50KCkgCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsgCi19Ci0KLWJvb2wgUG9wdXBNZW51
OjppdGVtV3JpdGluZ0RpcmVjdGlvbklzTmF0dXJhbCgpCi17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi19Ci0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BvcHVwTWVudUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUG9wdXBNZW51R3RrLmNwcAkocmV2aXNp
b24gMjQ5OTIpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BvcHVwTWVudUdkay5jcHA6MjQ5
OTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Qb3B1cE1lbnVHdGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgcG9w
dXAgbWVudSBpbXBsZW1lbnRhdGlvbiBmb3IgPHNlbGVjdD4gZWxlbWVudHMgaW4gV2ViQ29yZS4K
KyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRl
IDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUG9wdXBNZW51LmgiCisKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyAKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUG9wdXBNZW51OjpQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBtZW51TGlzdCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitQb3B1cE1lbnU6On5Qb3B1cE1lbnUoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJl
Y3QmLCBGcmFtZVZpZXcqLCBpbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBQb3B1cE1lbnU6OmhpZGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
UG9wdXBNZW51Ojp1cGRhdGVGcm9tRWxlbWVudCgpIAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
IAorfQorCitib29sIFBvcHVwTWVudTo6aXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwoKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworfQorCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9SZW5kZXJUaGVtZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
UmVuZGVyVGhlbWVHZGsuY3BwCShyZXZpc2lvbiAyNTA1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1JlbmRlclRoZW1lR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzMTIgKzAsMCBAQAot
LyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KLSAqCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENvcHlyaWdodCAoQykg
MjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAotICogQ29weXJpZ2h0IChD
KSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcg
QWxwIFRva2VyIDxhbHAudG9rZXJAY29sbGFib3JhLmNvLnVrPgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lR2RrLmgiCi0K
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgot
Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi0jZGVmaW5lIFRIRU1FX0NPTE9SIDIwNAotI2RlZmlu
ZSBUSEVNRV9GT05UICAyMTAKLQotLy8gQnV0dG9uIGNvbnN0YW50cwotI2RlZmluZSBCUF9CVVRU
T04gICAgMQotI2RlZmluZSBCUF9SQURJTyAgICAgMgotI2RlZmluZSBCUF9DSEVDS0JPWCAgMwot
Ci0vLyBUZXh0ZmllbGQgY29uc3RhbnRzCi0jZGVmaW5lIFRGUF9URVhURklFTEQgMQotI2RlZmlu
ZSBURlNfUkVBRE9OTFkgIDYKLQotLyoKLSAqIEFwcHJvYWNoIHRvIHRoZW1pbmc6Ci0gKiAgYSkg
a2VlcCBvbmUgY29weSBvZiBlYWNoIHRvIGJlIGRyYXduIHdpZGdldCwgR3RrRW50cnksIEd0a0J1
dHRvbiwgR3RrLi4uCi0gKiAgICAgKyB0aGUgYnV0dG9uIHdpbGwgbG9vayBsaWtlIHRoZSBuYXRp
dmUgY29udHJvbAotICogICAgICsgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBzdHlsZSB1
cGRhdGVzIGFuZCBsb2FkaW5nIHRoZSByaWdodCBHdGtTdHlsZQotICogICAgIC0gcmVzb3VyY2Vz
IGFyZSB3YXN0ZWQuIFRoZSBuYXRpdmUgd2luZG93cyB3aWxsIG5vdCBiZSB1c2VkLCB3ZSBtaWdo
dCBoYXZlIGlzc3VlcwotICogICAgICAgd2l0aAotICoKLSAqICBiKSBVc2UgR3RrU3R5bGUgZGly
ZWN0bHkgYW5kIGNvcHkgYW5kIHBhc3RlIEd0aysgY29kZQotICoKLSAqCi0gKiBXZSB3aWxsIG1p
eCBhIGFuZCBiCi0gKgotICogLSBDcmVhdGUgR3RrV2lkZ2V0cyB0byBob2xkIHRoZSBzdGF0ZSAo
ZGlzYWJsZWQvZW5hYmxlZCksIHNlbGVjdGVkLCBub3Qgc2VsZWN0ZWQuCi0gKiAtIFVzZSBhIEdk
a1BpeG1hcCB0byBtYWtlIHRoZSBHdGtTdHlsZSBkcmF3IHRvIGFuZCB0aGVuIHRyeSB0byBjb252
ZXJ0IHNldCBpdCB0aGUKLSAqICAgc291cmNlIG9mIHRoZSBjdXJyZW50IG9wZXJhdGlvbi4KLSAq
Ci0gKi8KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJUaGVtZSogdGhlbWUoKQotewot
ICAgIHN0YXRpYyBSZW5kZXJUaGVtZUdkayBnZGtUaGVtZTsKLSAgICByZXR1cm4gJmdka1RoZW1l
OwotfQotCi1SZW5kZXJUaGVtZUdkazo6UmVuZGVyVGhlbWVHZGsoKQotICAgIDogbV9ndGtCdXR0
b24oMCkKLSAgICAsIG1fZ3RrQ2hlY2tib3goMCkKLSAgICAsIG1fZ3RrUmFkaW9CdXR0b24oMCkK
LSAgICAsIG1fZ3RrRW50cnkoMCkKLSAgICAsIG1fZ3RrRWRpdGFibGUoMCkKLSAgICAsIG1fdW5t
YXBwZWRXaW5kb3coMCkKLSAgICAsIG1fY29udGFpbmVyKDApCi17Ci19Ci0KLXZvaWQgUmVuZGVy
VGhlbWVHZGs6OmNsb3NlKCkKLXsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUdkazo6YWRkSW50cmlu
c2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgLy8gQ3V0IG91dCB0
aGUgaW50cmluc2ljIG1hcmdpbnMgY29tcGxldGVseSBpZiB3ZSBlbmQgdXAgdXNpbmcgYSBzbWFs
bCBmb250IHNpemUKLSAgICBpZiAoc3R5bGUtPmZvbnRTaXplKCkgPCAxMSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gSW50cmluc2ljIG1hcmdpbiB2YWx1ZS4KLSAgICBjb25zdCBpbnQgbSA9
IDI7Ci0KLSAgICAvLyBGSVhNRTogVXNpbmcgd2lkdGgvaGVpZ2h0IGFsb25lIGFuZCBub3QgYWxz
byBkZWFsaW5nIHdpdGggbWluLXdpZHRoL21heC13aWR0aCBpcyBmbGF3ZWQuCi0gICAgaWYgKHN0
eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsKLSAgICAgICAgaWYgKHN0eWxlLT5t
YXJnaW5MZWZ0KCkucXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5MZWZ0KExl
bmd0aChtLCBGaXhlZCkpOwotICAgICAgICBpZiAoc3R5bGUtPm1hcmdpblJpZ2h0KCkucXVpcmso
KSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5SaWdodChMZW5ndGgobSwgRml4ZWQpKTsK
LSAgICB9Ci0KLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKSB7Ci0gICAgICAgIGlm
IChzdHlsZS0+bWFyZ2luVG9wKCkucXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJn
aW5Ub3AoTGVuZ3RoKG0sIEZpeGVkKSk7Ci0gICAgICAgIGlmIChzdHlsZS0+bWFyZ2luQm90dG9t
KCkucXVpcmsoKSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRNYXJnaW5Cb3R0b20oTGVuZ3RoKG0s
IEZpeGVkKSk7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlclRoZW1lR2RrOjpzdXBwb3J0c0ZvY3Vz
KEVBcHBlYXJhbmNlIGFwcGVhcmFuY2UpCi17Ci0gICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7Ci0g
ICAgICAgIGNhc2UgUHVzaEJ1dHRvbkFwcGVhcmFuY2U6Ci0gICAgICAgIGNhc2UgQnV0dG9uQXBw
ZWFyYW5jZToKLSAgICAgICAgY2FzZSBUZXh0RmllbGRBcHBlYXJhbmNlOgotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1HdGtTdGF0ZVR5cGUgUmVuZGVyVGhl
bWVHZGs6OmRldGVybWluZVN0YXRlKFJlbmRlck9iamVjdCogbykKLXsKLSAgICBHdGtTdGF0ZVR5
cGUgcmVzdWx0ID0gR1RLX1NUQVRFX05PUk1BTDsKLSAgICBpZiAoIWlzRW5hYmxlZChvKSkKLSAg
ICAgICAgcmVzdWx0ID0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOwotICAgIGVsc2UgaWYgKGlzUHJl
c3NlZChvKSkKLSAgICAgICAgcmVzdWx0ID0gR1RLX1NUQVRFX0FDVElWRTsKLSAgICBlbHNlIGlm
IChpc0hvdmVyZWQobykpCi0gICAgICAgIHJlc3VsdCA9IEdUS19TVEFURV9QUkVMSUdIVDsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1HdGtTaGFkb3dUeXBlIFJlbmRlclRoZW1lR2RrOjpkZXRl
cm1pbmVTaGFkb3coUmVuZGVyT2JqZWN0KiBvKQotewotICAgIHJldHVybiBpc0NoZWNrZWQobykg
PyBHVEtfU0hBRE9XX0lOIDogR1RLX1NIQURPV19PVVQ7Ci19Ci0KLVRoZW1lRGF0YSBSZW5kZXJU
aGVtZUdkazo6Z2V0VGhlbWVEYXRhKFJlbmRlck9iamVjdCogbykKLXsKLSAgICBUaGVtZURhdGEg
cmVzdWx0OwotICAgIHN3aXRjaCAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAgICAg
IGNhc2UgUHVzaEJ1dHRvbkFwcGVhcmFuY2U6Ci0gICAgICAgIGNhc2UgQnV0dG9uQXBwZWFyYW5j
ZToKLSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9CVVRUT047Ci0gICAgICAgICAgICBy
ZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ2hlY2tib3hBcHBlYXJhbmNlOgotICAgICAgICAgICAgcmVzdWx0Lm1fcGFy
dCA9IEJQX0NIRUNLQk9YOwotICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVT
dGF0ZShvKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJhZGlvQXBwZWFyYW5j
ZToKLSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9SQURJTzsKLSAgICAgICAgICAgIHJl
c3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5lU3RhdGUobyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBUZXh0RmllbGRBcHBlYXJhbmNlOgotICAgICAgICAgICAgcmVzdWx0Lm1fcGFy
dCA9IFRGUF9URVhURklFTEQ7Ci0gICAgICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWlu
ZVN0YXRlKG8pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogbXVjaCBtb3JlPwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUdkazo6c2V0Q2hlY2tib3hT
aXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgCi17IAotICAgIHNldFJhZGlvU2l6ZShzdHls
ZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwotICAgIEd0
a1dpZGdldCogY2hlY2tib3ggPSBndGtDaGVja2JveCgpOwotICAgIEludFBvaW50IHBvcyA9IGku
Y29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKLSAgICBndGtfcGFpbnRf
Y2hlY2soY2hlY2tib3gtPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxlKCksCi0gICAgICAg
ICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCi0gICAg
ICAgICAgICAgICAgICAgIE5VTEwsIGNoZWNrYm94LCAiY2hlY2tidXR0b24iLAotICAgICAgICAg
ICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkp
OwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRSYWRp
b1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdCAKLXsgCi0gICAgbm90SW1wbGVtZW50ZWQo
KTsgCi0gICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0
aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KLSAgICBpZiAoIXN0eWxlLT53aWR0aCgpLmlzSW50
cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgcmV0
dXJuOwotCi0KLSAgICAvLyBGSVhNRTogIEEgaGFyZC1jb2RlZCBzaXplIG9mIDEzIGlzIHVzZWQu
ICBUaGlzIGlzIHdyb25nIGJ1dCBuZWNlc3NhcnkgZm9yIG5vdy4gIEl0IG1hdGNoZXMgRmlyZWZv
eC4KLSAgICAvLyBBdCBkaWZmZXJlbnQgRFBJIHNldHRpbmdzIG9uIFdpbmRvd3MsIHF1ZXJ5aW5n
IHRoZSB0aGVtZSBnaXZlcyB5b3UgYSBsYXJnZXIgc2l6ZSB0aGF0IGFjY291bnRzIGZvcgotICAg
IC8vIHRoZSBoaWdoZXIgRFBJLiAgVW50aWwgb3VyIGVudGlyZSBlbmdpbmUgaG9ub3JzIGEgRFBJ
IHNldHRpbmcgb3RoZXIgdGhhbiA5Niwgd2UgY2FuJ3QgcmVseSBvbiB0aGUgdGhlbWUncwotICAg
IC8vIG1ldHJpY3MuCi0gICAgY29uc3QgaW50IGZmID0gMTM7Ci0gICAgaWYgKHN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpCi0gICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
ZmYsIEZpeGVkKSk7Ci0KLSAgICBpZiAoc3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChmZiwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZUdkazo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoteyAKLSAgICAvLyBGSVhNRTogaXMg
aXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwotICAgIEd0a1dpZGdldCogcmFkaW8gPSBndGtSYWRp
b0J1dHRvbigpOwotICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQo
cmVjdC5sb2NhdGlvbigpKTsKLSAgICBndGtfcGFpbnRfb3B0aW9uKHJhZGlvLT5zdHlsZSwgaS5j
b250ZXh0LT5nZGtEcmF3YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3Rh
dGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKLSAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHJh
ZGlvLCAicmFkaW9idXR0b24iLAotICAgICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkgCi17IAot
ICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRoZW1lLWF3YXJlIGRyYXdpbmcuIFRoaXMgc2hvdWxk
IGhvbm9yIHRoZSBzdGF0ZSBhcyB3ZWxsCi0gICAgR3RrV2lkZ2V0KiBidXR0b24gPSBndGtCdXR0
b24oKTsKLSAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3Qu
bG9jYXRpb24oKSk7Ci0gICAgZ3RrX3BhaW50X2JveChidXR0b24tPnN0eWxlLCBpLmNvbnRleHQt
Pmdka0RyYXdhYmxlKCksCi0gICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0
ZXJtaW5lU2hhZG93KG8pLAotICAgICAgICAgICAgICAgICAgTlVMTCwgYnV0dG9uLCAiYnV0dG9u
IiwKLSAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lR2Rr
OjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KiBlKSBjb25zdCAKLXsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsgCi19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVHZGs6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgLy8gRklY
TUU6IHNob3VsZCB1c2UgdGhlbWUtYXdhcmUgZHJhd2luZwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFJlbmRlclRoZW1lR2RrOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
cmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR2Rr
OjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAotewotICAgIGFkZEludHJpbnNp
Y01hcmdpbnMoc3R5bGUpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR2RrOjpzeXN0ZW1Gb250KGlu
dCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0Ci17Ci19Ci0KLUd0a1dpZGdldCogUmVu
ZGVyVGhlbWVHZGs6Omd0a0J1dHRvbigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2d0a0J1dHRvbikg
ewotICAgICAgICBtX2d0a0J1dHRvbiA9IGd0a19idXR0b25fbmV3KCk7Ci0gICAgICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZ3RrV2luZG93Q29udGFpbmVyKCkpLCBtX2d0a0J1
dHRvbik7Ci0gICAgICAgIGd0a193aWRnZXRfcmVhbGl6ZShtX2d0a0J1dHRvbik7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG1fZ3RrQnV0dG9uOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR2Rr
OjpndGtDaGVja2JveCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2d0a0NoZWNrYm94KSB7Ci0gICAg
ICAgIG1fZ3RrQ2hlY2tib3ggPSBndGtfY2hlY2tfYnV0dG9uX25ldygpOwotICAgICAgICBndGtf
Y29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGd0a1dpbmRvd0NvbnRhaW5lcigpKSwgbV9ndGtD
aGVja2JveCk7Ci0gICAgICAgIGd0a193aWRnZXRfcmVhbGl6ZShtX2d0a0NoZWNrYm94KTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gbV9ndGtDaGVja2JveDsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJU
aGVtZUdkazo6Z3RrUmFkaW9CdXR0b24oKSBjb25zdAotewotICAgIGlmICghbV9ndGtSYWRpb0J1
dHRvbikgewotICAgICAgICBtX2d0a1JhZGlvQnV0dG9uID0gZ3RrX3JhZGlvX2J1dHRvbl9uZXco
TlVMTCk7Ci0gICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoZ3RrV2luZG93
Q29udGFpbmVyKCkpLCBtX2d0a1JhZGlvQnV0dG9uKTsKLSAgICAgICAgZ3RrX3dpZGdldF9yZWFs
aXplKG1fZ3RrUmFkaW9CdXR0b24pOwotICAgIH0KLQotICAgIHJldHVybiBtX2d0a1JhZGlvQnV0
dG9uOwotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR2RrOjpndGtXaW5kb3dDb250YWluZXIo
KSBjb25zdAotewotICAgIGlmICghbV9jb250YWluZXIpIHsKLSAgICAgICAgbV91bm1hcHBlZFdp
bmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwotICAgICAgICAvLyBTb21l
IEdUSyB0aGVtZXMgKGkuZS4gQ2xlYXJsb29rcykgZHJhdyB0aGUgYnV0dG9ucyBkaWZmZXJlbnRs
eQotICAgICAgICAvLyAoaW4gcGFydGljdWxhciwgY2FsbCBndGtfc3R5bGVfYXBwbHlfZGVmYXVs
dF9iYWNrZ3JvdW5kKSBpZiB0aGV5Ci0gICAgICAgIC8vIGFyZSB1bmFsbG9jYXRlZCBhbmQgYXJl
IGNoaWxkcmVuIG9mIGEgR3RrRml4ZWQgd2lkZ2V0LCB3aGljaCBpcwotICAgICAgICAvLyBhcHBh
cmVudGx5IHdoYXQgc29tZSAibWFrZSBGaXJlZm94IGJ1dHRvbnMgbG9vayBsaWtlIEdUSyIgY29k
ZQotICAgICAgICAvLyBkb2VzLiAgVG8gYXZvaWQgdGhpcyB1Z2x5IGxvb2ssIHdlIHVzZSBhIEd0
a0hCb3ggYXMgYSBwYXJlbnQsCi0gICAgICAgIC8vIHJhdGhlciB0aGFuIGEgR3RrRml4ZWQuCi0g
ICAgICAgIG1fY29udGFpbmVyID0gZ3RrX2hib3hfbmV3KGZhbHNlLCAwKTsKLSAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihtX3VubWFwcGVkV2luZG93KSwgbV9jb250YWlu
ZXIpOwotICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUobV91bm1hcHBlZFdpbmRvdyk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1fY29udGFpbmVyOwotfQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvUmVuZGVyVGhlbWVHZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9SZW5kZXJUaGVtZUdkay5oCShyZXZpc2lvbiAyNTA1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1JlbmRlclRoZW1lR2RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA3ICswLDAgQEAKLS8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCi0gKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIENvcHlyaWdodCAoQykg
MjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqCi0gKi8KLQot
I2lmbmRlZiBSZW5kZXJUaGVtZUdka19oCi0jZGVmaW5lIFJlbmRlclRoZW1lR2RrX2gKLQotI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0KLSNp
bmNsdWRlIDxndGsvZ3RrLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IFRoZW1l
RGF0YSB7Ci0gICAgVGhlbWVEYXRhKCkgOiBtX3BhcnQoMCksIG1fc3RhdGUoMCkge30KLQotICAg
IHVuc2lnbmVkIG1fcGFydDsKLSAgICB1bnNpZ25lZCBtX3N0YXRlOwotfTsKLQotY2xhc3MgUmVu
ZGVyVGhlbWVHZGsgOiBwdWJsaWMgUmVuZGVyVGhlbWUgewotcHVibGljOgotICAgIFJlbmRlclRo
ZW1lR2RrKCk7Ci0KLSAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3MgY29udHJv
bHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgotICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi0gICAgLy8gU3lzdGVtIGZvbnRzLgotICAgIHZpcnR1YWwgdm9pZCBz
eXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OwotCi1wcm90ZWN0
ZWQ6Ci0gICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7Ci0gICAgdmly
dHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OwotCi0g
ICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7Ci0gICAgdmlydHVhbCB2b2lk
IHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2
b2lkIGFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0
KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRG
aWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotCi1w
cml2YXRlOgotICAgIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSopIGNvbnN0
OwotICAgIHZvaWQgY2xvc2UoKTsKLQotICAgIEd0a1N0YXRlVHlwZSBkZXRlcm1pbmVTdGF0ZShS
ZW5kZXJPYmplY3QqKTsKLSAgICBHdGtTaGFkb3dUeXBlIGRldGVybWluZVNoYWRvdyhSZW5kZXJP
YmplY3QqKTsKLSAgICBib29sIHN1cHBvcnRzRm9jdXMoRUFwcGVhcmFuY2UpOwotCi0gICAgVGhl
bWVEYXRhIGdldFRoZW1lRGF0YShSZW5kZXJPYmplY3QqKTsKLQotCi0gICAgLyoKLSAgICAgKiBo
b2xkIHRoZSBzdGF0ZQotICAgICAqLwotICAgIEd0a1dpZGdldCogZ3RrQnV0dG9uKCkgY29uc3Q7
Ci0gICAgR3RrV2lkZ2V0KiBndGtDaGVja2JveCgpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3Rr
UmFkaW9CdXR0b24oKSBjb25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a0VudHJ5KCkgY29uc3Q7Ci0g
ICAgR3RrV2lkZ2V0KiBndGtFZGl0YWJsZSgpIGNvbnN0OwotCi0gICAgLyoKLSAgICAgKiB1bm1h
cHBlZCBHZGtXaW5kb3cgaGF2aW5nIGEgY29udGFpbmVyLiBUaGlzIGlzIGhvbGRpbmcgYWxsCi0g
ICAgICogb3VyIGZha2Ugd2lkZ2V0cwotICAgICAqLwotICAgIEd0a1dpZGdldCogZ3RrV2luZG93
Q29udGFpbmVyKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgbXV0YWJsZSBHdGtXaWRnZXQgKm1f
Z3RrQnV0dG9uOwotICAgIG11dGFibGUgR3RrV2lkZ2V0ICptX2d0a0NoZWNrYm94OwotICAgIG11
dGFibGUgR3RrV2lkZ2V0ICptX2d0a1JhZGlvQnV0dG9uOwotICAgIG11dGFibGUgR3RrV2lkZ2V0
ICptX2d0a0VudHJ5OwotICAgIG11dGFibGUgR3RrV2lkZ2V0ICptX2d0a0VkaXRhYmxlOwotCi0g
ICAgbXV0YWJsZSBHdGtXaWRnZXQgKm1fdW5tYXBwZWRXaW5kb3c7Ci0gICAgbXV0YWJsZSBHdGtX
aWRnZXQgKm1fY29udGFpbmVyOwotfTsKLQotfQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL1JlbmRlclRoZW1lR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dkay9SZW5kZXJUaGVtZUd0ay5jcHAJKHJldmlzaW9uIDI0OTkyKQkoZnJvbSBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHA6MjQ5OTIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dkay9SZW5kZXJUaGVtZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMTIg
QEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4KKyAqIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVt
cGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUdkay5o
IgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKworI2RlZmluZSBUSEVNRV9DT0xPUiAyMDQKKyNk
ZWZpbmUgVEhFTUVfRk9OVCAgMjEwCisKKy8vIEJ1dHRvbiBjb25zdGFudHMKKyNkZWZpbmUgQlBf
QlVUVE9OICAgIDEKKyNkZWZpbmUgQlBfUkFESU8gICAgIDIKKyNkZWZpbmUgQlBfQ0hFQ0tCT1gg
IDMKKworLy8gVGV4dGZpZWxkIGNvbnN0YW50cworI2RlZmluZSBURlBfVEVYVEZJRUxEIDEKKyNk
ZWZpbmUgVEZTX1JFQURPTkxZICA2CisKKy8qCisgKiBBcHByb2FjaCB0byB0aGVtaW5nOgorICog
IGEpIGtlZXAgb25lIGNvcHkgb2YgZWFjaCB0byBiZSBkcmF3biB3aWRnZXQsIEd0a0VudHJ5LCBH
dGtCdXR0b24sIEd0ay4uLgorICogICAgICsgdGhlIGJ1dHRvbiB3aWxsIGxvb2sgbGlrZSB0aGUg
bmF0aXZlIGNvbnRyb2wKKyAqICAgICArIHdlIGRvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgc3R5
bGUgdXBkYXRlcyBhbmQgbG9hZGluZyB0aGUgcmlnaHQgR3RrU3R5bGUKKyAqICAgICAtIHJlc291
cmNlcyBhcmUgd2FzdGVkLiBUaGUgbmF0aXZlIHdpbmRvd3Mgd2lsbCBub3QgYmUgdXNlZCwgd2Ug
bWlnaHQgaGF2ZSBpc3N1ZXMKKyAqICAgICAgIHdpdGgKKyAqCisgKiAgYikgVXNlIEd0a1N0eWxl
IGRpcmVjdGx5IGFuZCBjb3B5IGFuZCBwYXN0ZSBHdGsrIGNvZGUKKyAqCisgKgorICogV2Ugd2ls
bCBtaXggYSBhbmQgYgorICoKKyAqIC0gQ3JlYXRlIEd0a1dpZGdldHMgdG8gaG9sZCB0aGUgc3Rh
dGUgKGRpc2FibGVkL2VuYWJsZWQpLCBzZWxlY3RlZCwgbm90IHNlbGVjdGVkLgorICogLSBVc2Ug
YSBHZGtQaXhtYXAgdG8gbWFrZSB0aGUgR3RrU3R5bGUgZHJhdyB0byBhbmQgdGhlbiB0cnkgdG8g
Y29udmVydCBzZXQgaXQgdGhlCisgKiAgIHNvdXJjZSBvZiB0aGUgY3VycmVudCBvcGVyYXRpb24u
CisgKgorICovCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVuZGVyVGhlbWUqIHRoZW1lKCkK
K3sKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWVHZGsgZ2RrVGhlbWU7CisgICAgcmV0dXJuICZnZGtU
aGVtZTsKK30KKworUmVuZGVyVGhlbWVHZGs6OlJlbmRlclRoZW1lR2RrKCkKKyAgICA6IG1fZ3Rr
QnV0dG9uKDApCisgICAgLCBtX2d0a0NoZWNrYm94KDApCisgICAgLCBtX2d0a1JhZGlvQnV0dG9u
KDApCisgICAgLCBtX2d0a0VudHJ5KDApCisgICAgLCBtX2d0a0VkaXRhYmxlKDApCisgICAgLCBt
X3VubWFwcGVkV2luZG93KDApCisgICAgLCBtX2NvbnRhaW5lcigwKQoreworfQorCit2b2lkIFJl
bmRlclRoZW1lR2RrOjpjbG9zZSgpCit7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHZGs6OmFkZElu
dHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8vIEN1dCBv
dXQgdGhlIGludHJpbnNpYyBtYXJnaW5zIGNvbXBsZXRlbHkgaWYgd2UgZW5kIHVwIHVzaW5nIGEg
c21hbGwgZm9udCBzaXplCisgICAgaWYgKHN0eWxlLT5mb250U2l6ZSgpIDwgMTEpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIEludHJpbnNpYyBtYXJnaW4gdmFsdWUuCisgICAgY29uc3QgaW50
IG0gPSAyOworCisgICAgLy8gRklYTUU6IFVzaW5nIHdpZHRoL2hlaWdodCBhbG9uZSBhbmQgbm90
IGFsc28gZGVhbGluZyB3aXRoIG1pbi13aWR0aC9tYXgtd2lkdGggaXMgZmxhd2VkLgorICAgIGlm
IChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKSB7CisgICAgICAgIGlmIChzdHls
ZS0+bWFyZ2luTGVmdCgpLnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luTGVm
dChMZW5ndGgobSwgRml4ZWQpKTsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5SaWdodCgpLnF1
aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luUmlnaHQoTGVuZ3RoKG0sIEZpeGVk
KSk7CisgICAgfQorCisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkgeworICAgICAg
ICBpZiAoc3R5bGUtPm1hcmdpblRvcCgpLnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0
TWFyZ2luVG9wKExlbmd0aChtLCBGaXhlZCkpOworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkJv
dHRvbSgpLnF1aXJrKCkpCisgICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luQm90dG9tKExlbmd0
aChtLCBGaXhlZCkpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJUaGVtZUdkazo6c3VwcG9ydHNG
b2N1cyhFQXBwZWFyYW5jZSBhcHBlYXJhbmNlKQoreworICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkg
eworICAgICAgICBjYXNlIFB1c2hCdXR0b25BcHBlYXJhbmNlOgorICAgICAgICBjYXNlIEJ1dHRv
bkFwcGVhcmFuY2U6CisgICAgICAgIGNhc2UgVGV4dEZpZWxkQXBwZWFyYW5jZToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworR3RrU3RhdGVUeXBlIFJlbmRl
clRoZW1lR2RrOjpkZXRlcm1pbmVTdGF0ZShSZW5kZXJPYmplY3QqIG8pCit7CisgICAgR3RrU3Rh
dGVUeXBlIHJlc3VsdCA9IEdUS19TVEFURV9OT1JNQUw7CisgICAgaWYgKCFpc0VuYWJsZWQobykp
CisgICAgICAgIHJlc3VsdCA9IEdUS19TVEFURV9JTlNFTlNJVElWRTsKKyAgICBlbHNlIGlmIChp
c1ByZXNzZWQobykpCisgICAgICAgIHJlc3VsdCA9IEdUS19TVEFURV9BQ1RJVkU7CisgICAgZWxz
ZSBpZiAoaXNIb3ZlcmVkKG8pKQorICAgICAgICByZXN1bHQgPSBHVEtfU1RBVEVfUFJFTElHSFQ7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworR3RrU2hhZG93VHlwZSBSZW5kZXJUaGVtZUdkazo6
ZGV0ZXJtaW5lU2hhZG93KFJlbmRlck9iamVjdCogbykKK3sKKyAgICByZXR1cm4gaXNDaGVja2Vk
KG8pID8gR1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VUOworfQorCitUaGVtZURhdGEgUmVu
ZGVyVGhlbWVHZGs6OmdldFRoZW1lRGF0YShSZW5kZXJPYmplY3QqIG8pCit7CisgICAgVGhlbWVE
YXRhIHJlc3VsdDsKKyAgICBzd2l0Y2ggKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkgeworICAg
ICAgICBjYXNlIFB1c2hCdXR0b25BcHBlYXJhbmNlOgorICAgICAgICBjYXNlIEJ1dHRvbkFwcGVh
cmFuY2U6CisgICAgICAgICAgICByZXN1bHQubV9wYXJ0ID0gQlBfQlVUVE9OOworICAgICAgICAg
ICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIENoZWNrYm94QXBwZWFyYW5jZToKKyAgICAgICAgICAgIHJlc3VsdC5t
X3BhcnQgPSBCUF9DSEVDS0JPWDsKKyAgICAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gZGV0ZXJt
aW5lU3RhdGUobyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSYWRpb0FwcGVh
cmFuY2U6CisgICAgICAgICAgICByZXN1bHQubV9wYXJ0ID0gQlBfUkFESU87CisgICAgICAgICAg
ICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVGV4dEZpZWxkQXBwZWFyYW5jZToKKyAgICAgICAgICAgIHJlc3VsdC5t
X3BhcnQgPSBURlBfVEVYVEZJRUxEOworICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRl
cm1pbmVTdGF0ZShvKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgLy8gRklYTUU6IG11Y2ggbW9yZT8KKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHZGs6OnNldENoZWNr
Ym94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0IAoreyAKKyAgICBzZXRSYWRpb1NpemUo
c3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lR2RrOjpwYWludENoZWNrYm94KFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8KKyAg
ICBHdGtXaWRnZXQqIGNoZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsKKyAgICBJbnRQb2ludCBwb3Mg
PSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgZ3RrX3Bh
aW50X2NoZWNrKGNoZWNrYm94LT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAorICAg
ICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAor
ICAgICAgICAgICAgICAgICAgICBOVUxMLCBjaGVja2JveCwgImNoZWNrYnV0dG9uIiwKKyAgICAg
ICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUdkazo6c2V0
UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgCit7IAorICAgIG5vdEltcGxlbWVu
dGVkKCk7IAorICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmll
ZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCFzdHlsZS0+d2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAg
IHJldHVybjsKKworCisgICAgLy8gRklYTUU6ICBBIGhhcmQtY29kZWQgc2l6ZSBvZiAxMyBpcyB1
c2VkLiAgVGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5IGZvciBub3cuICBJdCBtYXRjaGVzIEZp
cmVmb3guCisgICAgLy8gQXQgZGlmZmVyZW50IERQSSBzZXR0aW5ncyBvbiBXaW5kb3dzLCBxdWVy
eWluZyB0aGUgdGhlbWUgZ2l2ZXMgeW91IGEgbGFyZ2VyIHNpemUgdGhhdCBhY2NvdW50cyBmb3IK
KyAgICAvLyB0aGUgaGlnaGVyIERQSS4gIFVudGlsIG91ciBlbnRpcmUgZW5naW5lIGhvbm9ycyBh
IERQSSBzZXR0aW5nIG90aGVyIHRoYW4gOTYsIHdlIGNhbid0IHJlbHkgb24gdGhlIHRoZW1lJ3MK
KyAgICAvLyBtZXRyaWNzLgorICAgIGNvbnN0IGludCBmZiA9IDEzOworICAgIGlmIChzdHlsZS0+
d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQorICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKGZmLCBGaXhlZCkpOworCisgICAgaWYgKHN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZmYsIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVu
ZGVyVGhlbWVHZGs6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmpl
Y3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sgCisgICAgLy8gRklYTUU6
IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8KKyAgICBHdGtXaWRnZXQqIHJhZGlvID0gZ3Rr
UmFkaW9CdXR0b24oKTsKKyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBv
aW50KHJlY3QubG9jYXRpb24oKSk7CisgICAgZ3RrX3BhaW50X29wdGlvbihyYWRpby0+c3R5bGUs
IGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgIGRldGVybWlu
ZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCisgICAgICAgICAgICAgICAgICAgICBOVUxM
LCByYWRpbywgInJhZGlvYnV0dG9uIiwKKyAgICAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBv
cy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpIAor
eyAKKyAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVtZS1hd2FyZSBkcmF3aW5nLiBUaGlzIHNo
b3VsZCBob25vciB0aGUgc3RhdGUgYXMgd2VsbAorICAgIEd0a1dpZGdldCogYnV0dG9uID0gZ3Rr
QnV0dG9uKCk7CisgICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChy
ZWN0LmxvY2F0aW9uKCkpOworICAgIGd0a19wYWludF9ib3goYnV0dG9uLT5zdHlsZSwgaS5jb250
ZXh0LT5nZGtEcmF3YWJsZSgpLAorICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUobyks
IGRldGVybWluZVNoYWRvdyhvKSwKKyAgICAgICAgICAgICAgICAgIE5VTEwsIGJ1dHRvbiwgImJ1
dHRvbiIsCisgICAgICAgICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZUdkazo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCogZSkgY29uc3QgCit7IAorICAgIG5vdEltcGxlbWVudGVkKCk7IAorfQorCiti
b29sIFJlbmRlclRoZW1lR2RrOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIC8v
IEZJWE1FOiBzaG91bGQgdXNlIHRoZW1lLWF3YXJlIGRyYXdpbmcKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZUdkazo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRl
clN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBhZGRJbnRy
aW5zaWNNYXJnaW5zKHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZUdkazo6c3lzdGVtRm9u
dChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mKSBjb25zdAoreworfQorCitHdGtXaWRnZXQq
IFJlbmRlclRoZW1lR2RrOjpndGtCdXR0b24oKSBjb25zdAoreworICAgIGlmICghbV9ndGtCdXR0
b24pIHsKKyAgICAgICAgbV9ndGtCdXR0b24gPSBndGtfYnV0dG9uX25ldygpOworICAgICAgICBn
dGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGd0a1dpbmRvd0NvbnRhaW5lcigpKSwgbV9n
dGtCdXR0b24pOworICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtCdXR0b24pOworICAg
IH0KKworICAgIHJldHVybiBtX2d0a0J1dHRvbjsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVt
ZUdkazo6Z3RrQ2hlY2tib3goKSBjb25zdAoreworICAgIGlmICghbV9ndGtDaGVja2JveCkgewor
ICAgICAgICBtX2d0a0NoZWNrYm94ID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXcoKTsKKyAgICAgICAg
Z3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihndGtXaW5kb3dDb250YWluZXIoKSksIG1f
Z3RrQ2hlY2tib3gpOworICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtDaGVja2JveCk7
CisgICAgfQorCisgICAgcmV0dXJuIG1fZ3RrQ2hlY2tib3g7Cit9CisKK0d0a1dpZGdldCogUmVu
ZGVyVGhlbWVHZGs6Omd0a1JhZGlvQnV0dG9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fZ3RrUmFk
aW9CdXR0b24pIHsKKyAgICAgICAgbV9ndGtSYWRpb0J1dHRvbiA9IGd0a19yYWRpb19idXR0b25f
bmV3KE5VTEwpOworICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGd0a1dp
bmRvd0NvbnRhaW5lcigpKSwgbV9ndGtSYWRpb0J1dHRvbik7CisgICAgICAgIGd0a193aWRnZXRf
cmVhbGl6ZShtX2d0a1JhZGlvQnV0dG9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9ndGtSYWRp
b0J1dHRvbjsKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUdkazo6Z3RrV2luZG93Q29udGFp
bmVyKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29udGFpbmVyKSB7CisgICAgICAgIG1fdW5tYXBw
ZWRXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKTsKKyAgICAgICAgLy8g
U29tZSBHVEsgdGhlbWVzIChpLmUuIENsZWFybG9va3MpIGRyYXcgdGhlIGJ1dHRvbnMgZGlmZmVy
ZW50bHkKKyAgICAgICAgLy8gKGluIHBhcnRpY3VsYXIsIGNhbGwgZ3RrX3N0eWxlX2FwcGx5X2Rl
ZmF1bHRfYmFja2dyb3VuZCkgaWYgdGhleQorICAgICAgICAvLyBhcmUgdW5hbGxvY2F0ZWQgYW5k
IGFyZSBjaGlsZHJlbiBvZiBhIEd0a0ZpeGVkIHdpZGdldCwgd2hpY2ggaXMKKyAgICAgICAgLy8g
YXBwYXJlbnRseSB3aGF0IHNvbWUgIm1ha2UgRmlyZWZveCBidXR0b25zIGxvb2sgbGlrZSBHVEsi
IGNvZGUKKyAgICAgICAgLy8gZG9lcy4gIFRvIGF2b2lkIHRoaXMgdWdseSBsb29rLCB3ZSB1c2Ug
YSBHdGtIQm94IGFzIGEgcGFyZW50LAorICAgICAgICAvLyByYXRoZXIgdGhhbiBhIEd0a0ZpeGVk
LgorICAgICAgICBtX2NvbnRhaW5lciA9IGd0a19oYm94X25ldyhmYWxzZSwgMCk7CisgICAgICAg
IGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV91bm1hcHBlZFdpbmRvdyksIG1fY29u
dGFpbmVyKTsKKyAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXplKG1fdW5tYXBwZWRXaW5kb3cpOwor
ICAgIH0KKworICAgIHJldHVybiBtX2NvbnRhaW5lcjsKK30KK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL1JlbmRlclRoZW1lR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dkay9SZW5kZXJUaGVtZUd0ay5jcHAJKHJldmlzaW9uIDI0OTkyKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsy
NSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1l
R2RrLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVHdGsuaCIKIAogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dkay9SZW5kZXJUaGVtZUd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1JlbmRlclRoZW1lR3RrLmgJKHJldmlzaW9uIDI0OTkyKQkoZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dkay9SZW5kZXJUaGVtZUdkay5oOjI0OTkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
UmVuZGVyVGhlbWVHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaWZu
ZGVmIFJlbmRlclRoZW1lR2RrX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVHZGtfaAorCisjaW5jbHVk
ZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworI2luY2x1
ZGUgPGd0ay9ndGsuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgVGhlbWVEYXRh
IHsKKyAgICBUaGVtZURhdGEoKSA6IG1fcGFydCgwKSwgbV9zdGF0ZSgwKSB7fQorCisgICAgdW5z
aWduZWQgbV9wYXJ0OworICAgIHVuc2lnbmVkIG1fc3RhdGU7Cit9OworCitjbGFzcyBSZW5kZXJU
aGVtZUdkayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CitwdWJsaWM6CisgICAgUmVuZGVyVGhlbWVH
ZGsoKTsKKworICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgdGhlbWUncyBjb250cm9scyBh
Y3R1YWxseSBjYXJlIGFib3V0IHJlZHJhd2luZyB3aGVuIGhvdmVyZWQuCisgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICAvLyBTeXN0ZW0gZm9udHMuCisgICAgdmlydHVhbCB2b2lkIHN5c3Rl
bUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVj
dDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxk
KFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBhZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKikgY29uc3Q7Cisg
ICAgdm9pZCBjbG9zZSgpOworCisgICAgR3RrU3RhdGVUeXBlIGRldGVybWluZVN0YXRlKFJlbmRl
ck9iamVjdCopOworICAgIEd0a1NoYWRvd1R5cGUgZGV0ZXJtaW5lU2hhZG93KFJlbmRlck9iamVj
dCopOworICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhFQXBwZWFyYW5jZSk7CisKKyAgICBUaGVtZURh
dGEgZ2V0VGhlbWVEYXRhKFJlbmRlck9iamVjdCopOworCisKKyAgICAvKgorICAgICAqIGhvbGQg
dGhlIHN0YXRlCisgICAgICovCisgICAgR3RrV2lkZ2V0KiBndGtCdXR0b24oKSBjb25zdDsKKyAg
ICBHdGtXaWRnZXQqIGd0a0NoZWNrYm94KCkgY29uc3Q7CisgICAgR3RrV2lkZ2V0KiBndGtSYWRp
b0J1dHRvbigpIGNvbnN0OworICAgIEd0a1dpZGdldCogZ3RrRW50cnkoKSBjb25zdDsKKyAgICBH
dGtXaWRnZXQqIGd0a0VkaXRhYmxlKCkgY29uc3Q7CisKKyAgICAvKgorICAgICAqIHVubWFwcGVk
IEdka1dpbmRvdyBoYXZpbmcgYSBjb250YWluZXIuIFRoaXMgaXMgaG9sZGluZyBhbGwKKyAgICAg
KiBvdXIgZmFrZSB3aWRnZXRzCisgICAgICovCisgICAgR3RrV2lkZ2V0KiBndGtXaW5kb3dDb250
YWluZXIoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBtdXRhYmxlIEd0a1dpZGdldCAqbV9ndGtC
dXR0b247CisgICAgbXV0YWJsZSBHdGtXaWRnZXQgKm1fZ3RrQ2hlY2tib3g7CisgICAgbXV0YWJs
ZSBHdGtXaWRnZXQgKm1fZ3RrUmFkaW9CdXR0b247CisgICAgbXV0YWJsZSBHdGtXaWRnZXQgKm1f
Z3RrRW50cnk7CisgICAgbXV0YWJsZSBHdGtXaWRnZXQgKm1fZ3RrRWRpdGFibGU7CisKKyAgICBt
dXRhYmxlIEd0a1dpZGdldCAqbV91bm1hcHBlZFdpbmRvdzsKKyAgICBtdXRhYmxlIEd0a1dpZGdl
dCAqbV9jb250YWluZXI7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvU2Nyb2xsVmlld0dkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvU2Nyb2xsVmlld0dkay5jcHAJKHJldmlzaW9uIDI1MDU0KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvU2Nyb2xsVmlld0dkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODEyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlcgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCi0KLSNpbmNsdWRlICJGbG9h
dFJlY3QuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFy
LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCi0KLSNpbmNs
dWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi11c2luZyBuYW1lc3BhY2Ug
c3RkOwotCi1zdGF0aWMgY29uc3QgaW50IE1hZ2ljR3RrU2Nyb2xsQ29uc3RhbnQgPSAxMzsKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTY3JvbGxWaWV3U2Nyb2xsYmFyIDogcHVibGlj
IFBsYXRmb3JtU2Nyb2xsYmFyIHsKLXB1YmxpYzoKLSAgICBTY3JvbGxWaWV3U2Nyb2xsYmFyKFNj
cm9sbGJhckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6
ZSk7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIGdlb21ldHJ5Q2hhbmdlZCgpOwotfTsKLQotY2xh
c3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUgOiBwdWJsaWMgU2Nyb2xsYmFyQ2xpZW50
Ci17Ci1wdWJsaWM6Ci0gICAgU2Nyb2xsVmlld1ByaXZhdGUoU2Nyb2xsVmlldyogX3ZpZXcpCi0g
ICAgICAgIDogdmlldyhfdmlldykKLSAgICAgICAgLCBoYXNTdGF0aWNCYWNrZ3JvdW5kKGZhbHNl
KQotICAgICAgICAsIHNjcm9sbGJhcnNTdXBwcmVzc2VkKGZhbHNlKQotICAgICAgICAsIHZTY3Jv
bGxiYXJNb2RlKFNjcm9sbGJhckF1dG8pCi0gICAgICAgICwgaFNjcm9sbGJhck1vZGUoU2Nyb2xs
YmFyQXV0bykKLSAgICAgICAgLCBpblVwZGF0ZVNjcm9sbGJhcnMoZmFsc2UpCi0gICAgICAgICwg
aG9yaXpvbnRhbEFkanVzdG1lbnQoMCkKLSAgICAgICAgLCB2ZXJ0aWNhbEFkanVzdG1lbnQoMCkK
LSAgICB7fQotCi0gICAgflNjcm9sbFZpZXdQcml2YXRlKCkKLSAgICB7Ci0gICAgICAgIHNldEhh
c0hvcml6b250YWxTY3JvbGxiYXIoZmFsc2UpOwotICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9s
bGJhcihmYWxzZSk7Ci0KLSAgICAgICAgaWYgKGhvcml6b250YWxBZGp1c3RtZW50KSB7Ci0gICAg
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoR19PQkpFQ1QoaG9y
aXpvbnRhbEFkanVzdG1lbnQpLCAoZ3BvaW50ZXIpU2Nyb2xsVmlld1ByaXZhdGU6OmFkanVzdG1l
bnRDaGFuZ2VkLCB0aGlzKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGhvcml6b250YWxB
ZGp1c3RtZW50KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh2ZXJ0aWNhbEFkanVzdG1lbnQp
IHsKLSAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09C
SkVDVCh2ZXJ0aWNhbEFkanVzdG1lbnQpLCAoZ3BvaW50ZXIpU2Nyb2xsVmlld1ByaXZhdGU6OmFk
anVzdG1lbnRDaGFuZ2VkLCB0aGlzKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKHZlcnRp
Y2FsQWRqdXN0bWVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2b2lkIHNjcm9sbEJhY2tp
bmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7Ci0gCi0gICAgdm9pZCBzZXRIYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKTsKLSAgICB2b2lkIHNldEhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKGJvb2wgaGFzQmFyKTsKLQotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQo
U2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7
Ci0KLSAgICBzdGF0aWMgdm9pZCBhZGp1c3RtZW50Q2hhbmdlZChHdGtBZGp1c3RtZW50KiwgZ3Bv
aW50ZXIpOwotCi0gICAgU2Nyb2xsVmlldyogdmlldzsKLSAgICBib29sIGhhc1N0YXRpY0JhY2tn
cm91bmQ7Ci0gICAgYm9vbCBzY3JvbGxiYXJzU3VwcHJlc3NlZDsKLSAgICBTY3JvbGxiYXJNb2Rl
IHZTY3JvbGxiYXJNb2RlOwotICAgIFNjcm9sbGJhck1vZGUgaFNjcm9sbGJhck1vZGU7Ci0gICAg
UmVmUHRyPFNjcm9sbFZpZXdTY3JvbGxiYXI+IHZCYXI7Ci0gICAgUmVmUHRyPFNjcm9sbFZpZXdT
Y3JvbGxiYXI+IGhCYXI7Ci0gICAgSW50U2l6ZSBzY3JvbGxPZmZzZXQ7Ci0gICAgSW50U2l6ZSBj
b250ZW50c1NpemU7Ci0gICAgSW50U2l6ZSB2aWV3UG9ydFNpemU7Ci0gICAgYm9vbCBpblVwZGF0
ZVNjcm9sbGJhcnM7Ci0gICAgSGFzaFNldDxXaWRnZXQqPiBjaGlsZHJlbjsKLSAgICBHdGtBZGp1
c3RtZW50KiBob3Jpem9udGFsQWRqdXN0bWVudDsKLSAgICBHdGtBZGp1c3RtZW50KiB2ZXJ0aWNh
bEFkanVzdG1lbnQ7Ci19OwotCi1TY3JvbGxWaWV3U2Nyb2xsYmFyOjpTY3JvbGxWaWV3U2Nyb2xs
YmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSkKLSAgICA6IFBsYXRmb3JtU2Nyb2xsYmFy
KGNsaWVudCwgb3JpZW50YXRpb24sIHNpemUpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsVmlld1Njcm9s
bGJhcjo6Z2VvbWV0cnlDaGFuZ2VkKCkKLXsKLSAgICBpZiAoIXBhcmVudCgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOwotCi0gICAgRnJh
bWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7Ci0g
ICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnZlcnRUb0NvbnRh
aW5pbmdXaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCku
c2l6ZSgpKTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHdpbmRvd1JlY3QueCgp
LCB3aW5kb3dSZWN0LnkoKSwgd2luZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgp
IH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlv
bik7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc0hvcml6
b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCi17Ci0gICAgaWYgKFNjcm9sbGJhcjo6aGFzUGxh
dGZvcm1TY3JvbGxiYXJzKCkpIHsKLSAgICAgICAgaWYgKGhhc0JhciAmJiAhaEJhciAmJiAhaG9y
aXpvbnRhbEFkanVzdG1lbnQpIHsKLSAgICAgICAgICAgIGhCYXIgPSBuZXcgU2Nyb2xsVmlld1Nj
cm9sbGJhcih0aGlzLCBIb3Jpem9udGFsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKLSAg
ICAgICAgICAgIHZpZXctPmFkZENoaWxkKGhCYXIuZ2V0KCkpOwotICAgICAgICB9IGVsc2UgaWYg
KCFoYXNCYXIgJiYgaEJhcikgewotICAgICAgICAgICAgdmlldy0+cmVtb3ZlQ2hpbGQoaEJhci5n
ZXQoKSk7Ci0gICAgICAgICAgICBoQmFyID0gMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIo
Ym9vbCBoYXNCYXIpCi17Ci0gICAgaWYgKFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxiYXJz
KCkpIHsKLSAgICAgICAgaWYgKGhhc0JhciAmJiAhdkJhciAmJiAhdmVydGljYWxBZGp1c3RtZW50
KSB7Ci0gICAgICAgICAgICB2QmFyID0gbmV3IFNjcm9sbFZpZXdTY3JvbGxiYXIodGhpcywgVmVy
dGljYWxTY3JvbGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIpOwotICAgICAgICAgICAgdmlldy0+YWRk
Q2hpbGQodkJhci5nZXQoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWhhc0JhciAmJiB2QmFyKSB7
Ci0gICAgICAgICAgICB2aWV3LT5yZW1vdmVDaGlsZCh2QmFyLmdldCgpKTsKLSAgICAgICAgICAg
IHZCYXIgPSAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLXZvaWQgU2Nyb2xsVmlldzo6U2Ny
b2xsVmlld1ByaXZhdGU6OnNjcm9sbEJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSkKLXsKLSAgICAvLyBTaW5jZSBzY3JvbGxpbmcgaXMgZG91YmxlIGJ1ZmZlcmVkLCB3ZSB3
aWxsIGJlIGJsaXR0aW5nIHRoZSBzY3JvbGwgdmlldydzIGludGVyc2VjdGlvbgotICAgIC8vIHdp
dGggdGhlIGNsaXAgcmVjdCBldmVyeSB0aW1lIHRvIGtlZXAgaXQgc21vb3RoLgotICAgIEludFJl
Y3QgY2xpcFJlY3QgPSB2aWV3LT53aW5kb3dDbGlwUmVjdCgpOwotICAgIEludFJlY3Qgc2Nyb2xs
Vmlld1JlY3QgPSB2aWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KEludFJlY3QoMCwgMCwg
dmlldy0+dmlzaWJsZVdpZHRoKCksIHZpZXctPnZpc2libGVIZWlnaHQoKSkpOwotCi0gICAgSW50
UmVjdCB1cGRhdGVSZWN0ID0gY2xpcFJlY3Q7Ci0gICAgdXBkYXRlUmVjdC5pbnRlcnNlY3Qoc2Ny
b2xsVmlld1JlY3QpOwotCi0gICAgLy9GSVhNRSB1cGRhdGUgaGVyZT8KLQotICAgIGlmICghaGFz
U3RhdGljQmFja2dyb3VuZCkgLy8gVGhlIG1haW4gZnJhbWUgY2FuIGp1c3QgYmxpdCB0aGUgV2Vi
VmlldyB3aW5kb3cKLSAgICAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBibGl0IHN1YmZyYW1l
cyB3aXRob3V0IGJsaXR0aW5nIG92ZXJsYXBwaW5nIGNvbnRlbnQKLSAgICAgICB2aWV3LT5zY3Jv
bGxCYWNraW5nU3RvcmUoLXNjcm9sbERlbHRhLndpZHRoKCksIC1zY3JvbGxEZWx0YS5oZWlnaHQo
KSwgc2Nyb2xsVmlld1JlY3QsIGNsaXBSZWN0KTsKLSAgICBlbHNlICB7Ci0gICAgICAgLy8gV2Ug
bmVlZCB0byBnbyBhaGVhZCBhbmQgcmVwYWludCB0aGUgZW50aXJlIGJhY2tpbmcgc3RvcmUuICBE
byBpdCBub3cgYmVmb3JlIG1vdmluZyB0aGUKLSAgICAgICAvLyBwbHVnaW5zLgotICAgICAgIHZp
ZXctPmFkZFRvRGlydHlSZWdpb24odXBkYXRlUmVjdCk7Ci0gICAgICAgdmlldy0+dXBkYXRlQmFj
a2luZ1N0b3JlKCk7Ci0gICAgfQotCi0gICAgdmlldy0+Z2VvbWV0cnlDaGFuZ2VkKCk7Ci0KLSAg
ICAvLyBOb3cgdXBkYXRlIHRoZSB3aW5kb3cgKHdoaWNoIHNob3VsZCBkbyBub3RoaW5nIGJ1dCBh
IGJsaXQgb2YgdGhlIGJhY2tpbmcgc3RvcmUncyB1cGRhdGVSZWN0IGFuZCBzbyBzaG91bGQKLSAg
ICAvLyBiZSB2ZXJ5IGZhc3QpLgotICAgIHZpZXctPnVwZGF0ZSgpOwotfQotCi12b2lkIFNjcm9s
bFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hhbmdlZChHdGtBZGp1c3RtZW50
KiBhZGp1c3RtZW50LCBncG9pbnRlciBfdGhhdCkKLXsKLSAgICBTY3JvbGxWaWV3UHJpdmF0ZSog
dGhhdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlld1ByaXZhdGUqPihfdGhhdCk7Ci0KLSAg
ICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KLSAgICBJbnRTaXplIG5ld09mZnNl
dCA9IHRoYXQtPnNjcm9sbE9mZnNldDsKLSAgICBpZiAoYWRqdXN0bWVudCA9PSB0aGF0LT5ob3Jp
em9udGFsQWRqdXN0bWVudCkKLSAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKHN0YXRpY19jYXN0
PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFkanVzdG1lbnQpKSk7Ci0gICAgZWxzZSBp
ZiAoYWRqdXN0bWVudCA9PSB0aGF0LT52ZXJ0aWNhbEFkanVzdG1lbnQpCi0gICAgICAgIG5ld09m
ZnNldC5zZXRIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUo
YWRqdXN0bWVudCkpKTsKLQotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBuZXdPZmZzZXQgLSB0
aGF0LT5zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKHNjcm9sbERlbHRhID09IEludFNpemUoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHRoYXQtPnNjcm9sbE9mZnNldCA9IG5ld09mZnNldDsKLQotICAg
IGlmICh0aGF0LT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
dGhhdC0+c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKLSAgICBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPih0aGF0LT52aWV3KS0+ZnJhbWUoKS0+c2VuZFNjcm9sbEV2ZW50KCk7Ci19Ci0K
LXZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnZhbHVlQ2hhbmdlZChTY3JvbGxi
YXIqIGJhcikKLXsKLSAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KLSAgICBJ
bnRTaXplIG5ld09mZnNldCA9IHNjcm9sbE9mZnNldDsKLSAgICBpZiAoYmFyKSB7Ci0gICAgICAg
IGlmIChiYXIgPT0gaEJhcikKLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRXaWR0aChiYXItPnZh
bHVlKCkpOwotICAgICAgICBlbHNlIGlmIChiYXIgPT0gdkJhcikKLSAgICAgICAgICAgIG5ld09m
ZnNldC5zZXRIZWlnaHQoYmFyLT52YWx1ZSgpKTsKLSAgICB9Ci0gICAgSW50U2l6ZSBzY3JvbGxE
ZWx0YSA9IG5ld09mZnNldCAtIHNjcm9sbE9mZnNldDsKLSAgICBpZiAoc2Nyb2xsRGVsdGEgPT0g
SW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgc2Nyb2xsT2Zmc2V0ID0gbmV3T2Zmc2V0
OwotCi0gICAgaWYgKHNjcm9sbGJhcnNTdXBwcmVzc2VkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBzY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEpOwotICAgIHN0YXRpY19jYXN0PEZyYW1l
Vmlldyo+KHZpZXcpLT5mcmFtZSgpLT5zZW5kU2Nyb2xsRXZlbnQoKTsKLX0KLQotSW50UmVjdCBT
Y3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAotewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih2aWV3KS0+d2luZG93Q2xp
cFJlY3QoZmFsc2UpOwotfQotCi1TY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKLSAgICA6IG1fZGF0
YShuZXcgU2Nyb2xsVmlld1ByaXZhdGUodGhpcykpCi17fQotCi1TY3JvbGxWaWV3Ojp+U2Nyb2xs
VmlldygpCi17Ci0gICAgZGVsZXRlIG1fZGF0YTsKLX0KLQotLyogIAotICogVGhlIGZvbGxvd2lu
ZyBpcyBhc3N1bWVkOgotICogICAoaGFkaiAmJiB2YWRqKSB8fCAoIWhhZGogJiYgIXZhZGopCi0g
Ki8gCi12b2lkIFNjcm9sbFZpZXc6OnNldEd0a0FkanVzdG1lbnRzKEd0a0FkanVzdG1lbnQqIGhh
ZGosIEd0a0FkanVzdG1lbnQqIHZhZGopCi17Ci0gICAgQVNTRVJUKCFoYWRqID09ICF2YWRqKTsK
LQotICAgIGlmIChtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KSB7Ci0gICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVChtX2RhdGEtPmhvcml6b250
YWxBZGp1c3RtZW50KSwgKGdwb2ludGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hh
bmdlZCwgbV9kYXRhKTsKLSAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9m
dW5jKEdfT0JKRUNUKG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KSwgKGdwb2ludGVyKVNjcm9s
bFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hhbmdlZCwgbV9kYXRhKTsKLSAgICAgICAgZ19vYmpl
Y3RfdW5yZWYobV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudCk7Ci0gICAgICAgIGdfb2JqZWN0
X3VucmVmKG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKLSAgICB9Ci0KLSAgICBtX2RhdGEt
Pmhvcml6b250YWxBZGp1c3RtZW50ID0gaGFkajsKLSAgICBtX2RhdGEtPnZlcnRpY2FsQWRqdXN0
bWVudCA9IHZhZGo7Ci0KLSAgICBpZiAobV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudCkgewot
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQsICJ2
YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyhTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVudENo
YW5nZWQpLCBtX2RhdGEpOwotICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZGF0YS0+dmVydGlj
YWxBZGp1c3RtZW50LCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soU2Nyb2xsVmlld1ByaXZh
dGU6OmFkanVzdG1lbnRDaGFuZ2VkKSwgbV9kYXRhKTsKLQotICAgICAgICAvKgotICAgICAgICAg
KiBkaXNhYmxlIHRoZSBzY3JvbGxiYXJzIChpZiB3ZSBoYXZlIGFueSkgYXMgdGhlIEd0a0FkanVz
dG1lbnQgb3ZlcgotICAgICAgICAgKi8KLSAgICAgICAgbV9kYXRhLT5zZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihmYWxzZSk7Ci0gICAgICAgIG1fZGF0YS0+c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJh
cihmYWxzZSk7Ci0KLSAgICAgICAgZ19vYmplY3RfcmVmKG1fZGF0YS0+aG9yaXpvbnRhbEFkanVz
dG1lbnQpOwotICAgICAgICBndGtfb2JqZWN0X3NpbmsoR1RLX09CSkVDVChtX2RhdGEtPmhvcml6
b250YWxBZGp1c3RtZW50KSk7Ci0gICAgICAgIGdfb2JqZWN0X3JlZihtX2RhdGEtPnZlcnRpY2Fs
QWRqdXN0bWVudCk7Ci0gICAgICAgIGd0a19vYmplY3Rfc2luayhHVEtfT0JKRUNUKG1fZGF0YS0+
dmVydGljYWxBZGp1c3RtZW50KSk7Ci0gICAgfQotCi0gICAgdXBkYXRlU2Nyb2xsYmFycyhtX2Rh
dGEtPnNjcm9sbE9mZnNldCk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlQ29udGVudHMo
Y29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9vbCBub3cpCi17Ci0gICAgaWYgKHVwZGF0ZVJl
Y3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRQb2ludCB3aW5kb3dQb2lu
dCA9IGNvbnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdC5sb2NhdGlvbigpKTsKLSAgICBJbnRSZWN0
IGNvbnRhaW5pbmdXaW5kb3dSZWN0ID0gdXBkYXRlUmVjdDsKLSAgICBjb250YWluaW5nV2luZG93
UmVjdC5zZXRMb2NhdGlvbih3aW5kb3dQb2ludCk7Ci0KLSAgICBHZGtSZWN0YW5nbGUgcmVjdCA9
IHsgY29udGFpbmluZ1dpbmRvd1JlY3QueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250YWluaW5nV2luZG93UmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRh
aW5pbmdXaW5kb3dSZWN0LndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRh
aW5pbmdXaW5kb3dSZWN0LmhlaWdodCgpIH07Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBHVEtf
V0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdzsKLQotICAgIGlmICh3aW5kb3cpCi0g
ICAgICAgIGdka193aW5kb3dfaW52YWxpZGF0ZV9yZWN0KHdpbmRvdywgJnJlY3QsIHRydWUpOwot
Ci0gICAgLy8gQ2FjaGUgdGhlIGRpcnR5IHNwb3QuCi0gICAgYWRkVG9EaXJ0eVJlZ2lvbihjb250
YWluaW5nV2luZG93UmVjdCk7Ci0KLSAgICBpZiAobm93ICYmIHdpbmRvdykKLSAgICAgICAgZ2Rr
X3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMod2luZG93LCB0cnVlKTsKLX0KLQotdm9pZCBTY3JvbGxW
aWV3Ojp1cGRhdGUoKQotewotICAgIEFTU0VSVChjb250YWluaW5nV2luZG93KCkpOwotCi0gICAg
R2RrUmVjdGFuZ2xlIHJlY3QgPSB7IDAsIDAsIG1fZGF0YS0+Y29udGVudHNTaXplLndpZHRoKCks
IG1fZGF0YS0+Y29udGVudHNTaXplLmhlaWdodCgpIH07Ci0gICAgZ2RrX3dpbmRvd19pbnZhbGlk
YXRlX3JlY3QoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3csICZyZWN0LCB0
cnVlKTsKLX0KLQotaW50IFNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHdpZHRoKCkgLSAobV9kYXRhLT52QmFyID8gbV9kYXRhLT52QmFyLT53aWR0aCgpIDog
MCk7Ci19Ci0KLWludCBTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaGVpZ2h0KCkgLSAobV9kYXRhLT5oQmFyID8gbV9kYXRhLT5oQmFyLT5oZWlnaHQoKSA6
IDApOwotfQotCi0vLyBSZWdpb24gb2YgdGhlIGNvbnRlbnQgY3VycmVudGx5IHZpc2libGUgaW4g
dGhlIHZpZXdwb3J0IGluIHRoZSBjb250ZW50IHZpZXcncyBjb29yZGluYXRlIHN5c3RlbS4KLUZs
b2F0UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVudFJlY3QoKSBjb25zdAotewotICAgIHJl
dHVybiBGbG9hdFJlY3QoY29udGVudHNYKCksIGNvbnRlbnRzWSgpLCB2aXNpYmxlV2lkdGgoKSwg
dmlzaWJsZUhlaWdodCgpKTsKLX0KLQotRmxvYXRSZWN0IFNjcm9sbFZpZXc6OnZpc2libGVDb250
ZW50UmVjdENvbnNpZGVyaW5nRXh0ZXJuYWxTY3JvbGxlcnMoKSBjb25zdAotewotICAgIC8vIGV4
dGVybmFsIHNjcm9sbGVycyBub3Qgc3VwcG9ydGVkIGZvciBub3cKLSAgICByZXR1cm4gdmlzaWJs
ZUNvbnRlbnRSZWN0KCk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6c2V0Q29udGVudHNQb3MoaW50
IG5ld1gsIGludCBuZXdZKQotewotICAgIGludCBkeCA9IG5ld1ggLSBjb250ZW50c1goKTsKLSAg
ICBpbnQgZHkgPSBuZXdZIC0gY29udGVudHNZKCk7Ci0gICAgc2Nyb2xsQnkoZHgsIGR5KTsKLX0K
LQotdm9pZCBTY3JvbGxWaWV3OjpyZXNpemVDb250ZW50cyhpbnQgdywgaW50IGgpCi17Ci0gICAg
SW50U2l6ZSBuZXdTaXplKHcsIGgpOwotICAgIGlmIChtX2RhdGEtPmNvbnRlbnRzU2l6ZSA9PSBu
ZXdTaXplKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPmNvbnRlbnRzU2l6ZSA9IG5l
d1NpemU7Ci0gICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7Ci19Ci0K
LWludCBTY3JvbGxWaWV3Ojpjb250ZW50c1goKSBjb25zdAotewotICAgIHJldHVybiBzY3JvbGxP
ZmZzZXQoKS53aWR0aCgpOwotfQotCi1pbnQgU2Nyb2xsVmlldzo6Y29udGVudHNZKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0KCk7Ci19Ci0KLWludCBTY3JvbGxW
aWV3Ojpjb250ZW50c1dpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5jb250ZW50
c1NpemUud2lkdGgoKTsKLX0KLQotaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzSGVpZ2h0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5jb250ZW50c1NpemUuaGVpZ2h0KCk7Ci19Ci0KLUlu
dFNpemUgU2Nyb2xsVmlldzo6c2Nyb2xsT2Zmc2V0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9k
YXRhLT5zY3JvbGxPZmZzZXQ7Ci19Ci0KLUludFNpemUgU2Nyb2xsVmlldzo6bWF4aW11bVNjcm9s
bCgpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBkZWx0YSA9IChtX2RhdGEtPmNvbnRlbnRzU2l6ZSAt
IEludFNpemUodmlzaWJsZVdpZHRoKCksIHZpc2libGVIZWlnaHQoKSkpIC0gc2Nyb2xsT2Zmc2V0
KCk7Ci0gICAgZGVsdGEuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwotICAgIHJldHVybiBkZWx0YTsK
LX0KLQotdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxCeShpbnQgZHgsIGludCBkeSkKLXsKLSAgICBJ
bnRTaXplIHNjcm9sbE9mZnNldCA9IG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OwotICAgIEludFNpemUg
bmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0ICsgSW50U2l6ZShkeCwgZHkpLnNocnVua1Rv
KG1heGltdW1TY3JvbGwoKSk7Ci0gICAgbmV3U2Nyb2xsT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1pl
cm8oKTsKLSAKLSAgICBpZiAobmV3U2Nyb2xsT2Zmc2V0ID09IHNjcm9sbE9mZnNldCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgdXBkYXRlU2Nyb2xsYmFycyhuZXdTY3JvbGxPZmZzZXQpOwotfQot
Ci1TY3JvbGxiYXJNb2RlIFNjcm9sbFZpZXc6OmhTY3JvbGxiYXJNb2RlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9kYXRhLT5oU2Nyb2xsYmFyTW9kZTsKLX0KLQotU2Nyb2xsYmFyTW9kZSBTY3Jv
bGxWaWV3Ojp2U2Nyb2xsYmFyTW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+dlNj
cm9sbGJhck1vZGU7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6c3VwcHJlc3NTY3JvbGxiYXJzKGJv
b2wgc3VwcHJlc3NlZCwgYm9vbCByZXBhaW50T25TdXBwcmVzcykKLXsKLSAgICBtX2RhdGEtPnNj
cm9sbGJhcnNTdXBwcmVzc2VkID0gc3VwcHJlc3NlZDsKLSAgICBpZiAocmVwYWludE9uU3VwcHJl
c3MpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMobV9kYXRhLT5zY3JvbGxPZmZzZXQpOwotfQot
Ci12b2lkIFNjcm9sbFZpZXc6OnNldEhTY3JvbGxiYXJNb2RlKFNjcm9sbGJhck1vZGUgbmV3TW9k
ZSkKLXsKLSAgICBpZiAobV9kYXRhLT5oU2Nyb2xsYmFyTW9kZSAhPSBuZXdNb2RlKSB7Ci0gICAg
ICAgIG1fZGF0YS0+aFNjcm9sbGJhck1vZGUgPSBuZXdNb2RlOwotICAgICAgICB1cGRhdGVTY3Jv
bGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsVmll
dzo6c2V0VlNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSBuZXdNb2RlKQotewotICAgIGlmICht
X2RhdGEtPnZTY3JvbGxiYXJNb2RlICE9IG5ld01vZGUpIHsKLSAgICAgICAgbV9kYXRhLT52U2Ny
b2xsYmFyTW9kZSA9IG5ld01vZGU7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMobV9kYXRhLT5z
Y3JvbGxPZmZzZXQpOwotICAgIH0KLX0KLQotdm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJz
TW9kZShTY3JvbGxiYXJNb2RlIG5ld01vZGUpCi17Ci0gICAgbV9kYXRhLT5oU2Nyb2xsYmFyTW9k
ZSA9IG1fZGF0YS0+dlNjcm9sbGJhck1vZGUgPSBuZXdNb2RlOwotICAgIHVwZGF0ZVNjcm9sbGJh
cnMobV9kYXRhLT5zY3JvbGxPZmZzZXQpOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OnNldFN0YXRp
Y0JhY2tncm91bmQoYm9vbCBmbGFnKQotewotICAgIG1fZGF0YS0+aGFzU3RhdGljQmFja2dyb3Vu
ZCA9IGZsYWc7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJ
bnRSZWN0JiBuZXdHZW9tZXRyeSkKLXsKLSAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7Ci0gICAg
SW50UmVjdCBvbGRHZW9tZXRyeSA9IGZyYW1lR2VvbWV0cnkoKTsKLSAgICBXaWRnZXQ6OnNldEZy
YW1lR2VvbWV0cnkobmV3R2VvbWV0cnkpOwotCi0gICAgaWYgKG5ld0dlb21ldHJ5ID09IG9sZEdl
b21ldHJ5KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG5ld0dlb21ldHJ5LndpZHRoKCkgIT0g
b2xkR2VvbWV0cnkud2lkdGgoKSB8fCBuZXdHZW9tZXRyeS5oZWlnaHQoKSAhPSBvbGRHZW9tZXRy
eS5oZWlnaHQoKSkgewotICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zm
c2V0KTsKLSAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcyktPnNldE5lZWRzTGF5
b3V0KCk7Ci0gICAgfQotCi0gICAgZ2VvbWV0cnlDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2Nyb2xs
Vmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKLXsgCi0gICAgY2hpbGQtPnNldFBhcmVudCh0
aGlzKTsKLSAgICBjaGlsZC0+c2V0Q29udGFpbmluZ1dpbmRvdyhjb250YWluaW5nV2luZG93KCkp
OwotICAgIG1fZGF0YS0+Y2hpbGRyZW4uYWRkKGNoaWxkKTsKLQotICAgIGlmIChjaGlsZC0+Z3Rr
V2lkZ2V0KCkpCi0gICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGFp
bmluZ1dpbmRvdygpKSwgY2hpbGQtPmd0a1dpZGdldCgpKTsKLX0KLQotdm9pZCBTY3JvbGxWaWV3
OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQotewotICAgIGNoaWxkLT5zZXRQYXJlbnQoMCk7
Ci0gICAgbV9kYXRhLT5jaGlsZHJlbi5yZW1vdmUoY2hpbGQpOwotCi0gICAgaWYgKGNoaWxkLT5n
dGtXaWRnZXQoKSAmJiBHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSkgPT0gR1RLX1dJREdF
VChjaGlsZC0+Z3RrV2lkZ2V0KCkpLT5wYXJlbnQpCi0gICAgICAgIGd0a19jb250YWluZXJfcmVt
b3ZlKEdUS19DT05UQUlORVIoY29udGFpbmluZ1dpbmRvdygpKSwgY2hpbGQtPmd0a1dpZGdldCgp
KTsKLX0KLQotdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdSZWN1cnNpdmVseShj
b25zdCBJbnRSZWN0JiByKQotewotICAgIEludFBvaW50IHAobWF4KDAsIHIueCgpKSwgbWF4KDAs
IHIueSgpKSk7Ci0gICAgU2Nyb2xsVmlldyogdmlldyA9IHRoaXM7Ci0gICAgd2hpbGUgKHZpZXcp
IHsKLSAgICAgICAgdmlldy0+c2V0Q29udGVudHNQb3MocC54KCksIHAueSgpKTsKLSAgICAgICAg
cC5tb3ZlKHZpZXctPngoKSAtIHZpZXctPnNjcm9sbE9mZnNldCgpLndpZHRoKCksIHZpZXctPnko
KSAtIHZpZXctPnNjcm9sbE9mZnNldCgpLmhlaWdodCgpKTsKLSAgICAgICAgdmlldyA9IHN0YXRp
Y19jYXN0PFNjcm9sbFZpZXcqPih2aWV3LT5wYXJlbnQoKSk7Ci0gICAgfQotfQotCi1ib29sIFNj
cm9sbFZpZXc6OmluV2luZG93KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxhdGZvcm1X
aGVlbEV2ZW50JiBlKQotewotICAgIC8vIERldGVybWluZSBob3cgbXVjaCB3ZSB3YW50IHRvIHNj
cm9sbC4gIElmIHdlIGNhbiBtb3ZlIGF0IGFsbCwgd2Ugd2lsbCBhY2NlcHQgdGhlIGV2ZW50Lgot
ICAgIEludFNpemUgbWF4U2Nyb2xsRGVsdGEgPSBtYXhpbXVtU2Nyb2xsKCk7Ci0gICAgaWYgKChl
LmRlbHRhWCgpIDwgMCAmJiBtYXhTY3JvbGxEZWx0YS53aWR0aCgpID4gMCkgfHwKLSAgICAgICAg
KGUuZGVsdGFYKCkgPiAwICYmIHNjcm9sbE9mZnNldCgpLndpZHRoKCkgPiAwKSB8fAotICAgICAg
ICAoZS5kZWx0YVkoKSA8IDAgJiYgbWF4U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgPiAwKSB8fAotICAg
ICAgICAoZS5kZWx0YVkoKSA+IDAgJiYgc2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0KCkgPiAwKSkKLSAg
ICAgICAgZS5hY2NlcHQoKTsKLQotICAgIHNjcm9sbEJ5KGUuZGVsdGFYKCkgKiBMSU5FX1NURVAs
IGUuZGVsdGFZKCkgKiBMSU5FX1NURVApOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNj
cm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKLXsKLSAgICAvLyBEb24ndCBh
bGxvdyByZS1lbnRyYW5jeSBpbnRvIHRoaXMgZnVuY3Rpb24uCi0gICAgaWYgKG1fZGF0YS0+aW5V
cGRhdGVTY3JvbGxiYXJzKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBj
b2RlIGlzIGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0byBmb3JrIEZyYW1lVmlldy5oLy5jcHAuCi0g
ICAgLy8gSW4gdGhlIGVuZCwgRnJhbWVWaWV3IHNob3VsZCBqdXN0IG1lcmdlIHdpdGggU2Nyb2xs
Vmlldy4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyktPmZyYW1l
KCktPnByb2hpYml0c1Njcm9sbGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEt
PmluVXBkYXRlU2Nyb2xsYmFycyA9IHRydWU7Ci0KLSAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xs
YmFyID0gbV9kYXRhLT52QmFyOwotICAgIGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IG1f
ZGF0YS0+aEJhcjsKLSAgICBib29sIG9sZEhhc1ZlcnRpY2FsID0gaGFzVmVydGljYWxTY3JvbGxi
YXI7Ci0gICAgYm9vbCBvbGRIYXNIb3Jpem9udGFsID0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcjsK
LSAgICBTY3JvbGxiYXJNb2RlIGhTY3JvbGwgPSBtX2RhdGEtPmhTY3JvbGxiYXJNb2RlOwotICAg
IFNjcm9sbGJhck1vZGUgdlNjcm9sbCA9IG1fZGF0YS0+dlNjcm9sbGJhck1vZGU7Ci0KLSAgICBj
b25zdCBpbnQgY1ZlcnRpY2FsV2lkdGggPSBQbGF0Zm9ybVNjcm9sbGJhcjo6dmVydGljYWxTY3Jv
bGxiYXJXaWR0aCgpOwotICAgIGNvbnN0IGludCBjSG9yaXpvbnRhbEhlaWdodCA9IFBsYXRmb3Jt
U2Nyb2xsYmFyOjpob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7Ci0KLSAgICBmb3IgKGludCBw
YXNzID0gMDsgcGFzcyA8IDI7IHBhc3MrKykgewotICAgICAgICBib29sIHNjcm9sbHNWZXJ0aWNh
bGx5OwotICAgICAgICBib29sIHNjcm9sbHNIb3Jpem9udGFsbHk7Ci0KLSAgICAgICAgaWYgKCFt
X2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkICYmIChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8g
fHwgdlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSkgewotICAgICAgICAgICAgLy8gRG8gYSBsYXlv
dXQgaWYgcGVuZGluZyBiZWZvcmUgY2hlY2tpbmcgaWYgc2Nyb2xsYmFycyBhcmUgbmVlZGVkLgot
ICAgICAgICAgICAgaWYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyICE9IG9sZEhhc1ZlcnRpY2FsIHx8
IGhhc0hvcml6b250YWxTY3JvbGxiYXIgIT0gb2xkSGFzSG9yaXpvbnRhbCkKLSAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGlzKS0+bGF5b3V0KCk7Ci0gICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJh
ckFsd2F5c09uKSB8fCAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzSGVpZ2h0
KCkgPiBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAoc2Nyb2xsc1ZlcnRpY2FsbHkpCi0gICAg
ICAgICAgICAgICAgc2Nyb2xsc0hvcml6b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckFs
d2F5c09uKSB8fCAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzV2lkdGgoKSAr
IGNWZXJ0aWNhbFdpZHRoID4gd2lkdGgoKSk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlz
T24pIHx8IChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYgY29udGVudHNXaWR0aCgpID4gd2lk
dGgoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNjcm9sbHNIb3Jpem9udGFsbHkpCi0gICAgICAg
ICAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3
YXlzT24pIHx8ICh2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSAr
IGNIb3Jpem9udGFsSGVpZ2h0ID4gaGVpZ2h0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2Nyb2xsc0hvcml6b250YWxseSA9IChoU2Ny
b2xsID09IFNjcm9sbGJhckF1dG8pID8gaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA6IChoU2Nyb2xs
ID09IFNjcm9sbGJhckFsd2F5c09uKTsKLSAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0g
KHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykgPyBoYXNWZXJ0aWNhbFNjcm9sbGJhciA6ICh2U2Ny
b2xsID09IFNjcm9sbGJhckFsd2F5c09uKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
aWYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFyICE9IHNjcm9sbHNWZXJ0aWNhbGx5KSB7Ci0gICAgICAg
ICAgICBtX2RhdGEtPnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbHNWZXJ0aWNhbGx5KTsK
LSAgICAgICAgICAgIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyID0gc2Nyb2xsc1ZlcnRpY2FsbHk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoaGFzSG9yaXpvbnRhbFNjcm9sbGJhciAhPSBzY3JvbGxz
SG9yaXpvbnRhbGx5KSB7Ci0gICAgICAgICAgICBtX2RhdGEtPnNldEhhc0hvcml6b250YWxTY3Jv
bGxiYXIoc2Nyb2xsc0hvcml6b250YWxseSk7Ci0gICAgICAgICAgICBoYXNIb3Jpem9udGFsU2Ny
b2xsYmFyID0gc2Nyb2xsc0hvcml6b250YWxseTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGluZSBzdGVwKS4KLSAgICBJbnRTaXpl
IG1heFNjcm9sbFBvc2l0aW9uKGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpLCBjb250
ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKTsKLSAgICBJbnRTaXplIHNjcm9sbCA9IGRl
c2lyZWRPZmZzZXQuc2hydW5rVG8obWF4U2Nyb2xsUG9zaXRpb24pOwotICAgIHNjcm9sbC5jbGFt
cE5lZ2F0aXZlVG9aZXJvKCk7Ci0KLSAgICBpZiAobV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVu
dCkgewotICAgICAgICBtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50LT5wYWdlX3NpemUgPSB2
aXNpYmxlV2lkdGgoKTsKLSAgICAgICAgbV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudC0+c3Rl
cF9pbmNyZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OwotICAgICAgICBtX2RhdGEtPmhv
cml6b250YWxBZGp1c3RtZW50LT51cHBlciA9IGNvbnRlbnRzV2lkdGgoKTsKLSAgICAgICAgZ3Rr
X2FkanVzdG1lbnRfY2hhbmdlZChtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKLQotICAg
ICAgICBpZiAobV9kYXRhLT5zY3JvbGxPZmZzZXQud2lkdGgoKSAhPSBzY3JvbGwud2lkdGgoKSkg
ewotICAgICAgICAgICAgbV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudC0+dmFsdWUgPSBzY3Jv
bGwud2lkdGgoKTsKLSAgICAgICAgICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQobV9k
YXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudCk7Ci0gICAgICAgIH0gCi0gICAgfSBlbHNlIGlmICht
X2RhdGEtPmhCYXIpIHsKLSAgICAgICAgaW50IGNsaWVudFdpZHRoID0gdmlzaWJsZVdpZHRoKCk7
Ci0gICAgICAgIG1fZGF0YS0+aEJhci0+c2V0RW5hYmxlZChjb250ZW50c1dpZHRoKCkgPiBjbGll
bnRXaWR0aCk7Ci0gICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRXaWR0aCAtIFBBR0VfS0VF
UCk7Ci0gICAgICAgIGlmIChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0gY2xpZW50V2lkdGg7Ci0g
ICAgICAgIEludFJlY3Qgb2xkUmVjdChtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKSk7Ci0g
ICAgICAgIEludFJlY3QgaEJhclJlY3QgPSBJbnRSZWN0KDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9kYXRhLT5oQmFyLT5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIChtX2RhdGEtPnZCYXIgPyBt
X2RhdGEtPnZCYXItPndpZHRoKCkgOiAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9kYXRhLT5oQmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgIG1fZGF0YS0+aEJhci0+c2V0
UmVjdChoQmFyUmVjdCk7Ci0gICAgICAgIGlmICghbV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3Nl
ZCAmJiBvbGRSZWN0ICE9IG1fZGF0YS0+aEJhci0+ZnJhbWVHZW9tZXRyeSgpKQotICAgICAgICAg
ICAgbV9kYXRhLT5oQmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgaWYgKG1fZGF0YS0+c2Ny
b2xsYmFyc1N1cHByZXNzZWQpCi0gICAgICAgICAgICBtX2RhdGEtPmhCYXItPnNldFN1cHByZXNz
SW52YWxpZGF0aW9uKHRydWUpOwotICAgICAgICBtX2RhdGEtPmhCYXItPnNldFN0ZXBzKExJTkVf
U1RFUCwgcGFnZVN0ZXApOwotICAgICAgICBtX2RhdGEtPmhCYXItPnNldFByb3BvcnRpb24oY2xp
ZW50V2lkdGgsIGNvbnRlbnRzV2lkdGgoKSk7Ci0gICAgICAgIG1fZGF0YS0+aEJhci0+c2V0VmFs
dWUoc2Nyb2xsLndpZHRoKCkpOwotICAgICAgICBpZiAobV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJl
c3NlZCkKLSAgICAgICAgICAgIG1fZGF0YS0+aEJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24o
ZmFsc2UpOyAKLSAgICB9IAotCi0gICAgaWYgKG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KSB7
Ci0gICAgICAgIG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50LT5wYWdlX3NpemUgPSB2aXNpYmxl
SGVpZ2h0KCk7Ci0gICAgICAgIG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50LT5zdGVwX2luY3Jl
bWVudCA9IE1hZ2ljR3RrU2Nyb2xsQ29uc3RhbnQ7Ci0gICAgICAgIG1fZGF0YS0+dmVydGljYWxB
ZGp1c3RtZW50LT51cHBlciA9IGNvbnRlbnRzSGVpZ2h0KCk7Ci0gICAgICAgIGd0a19hZGp1c3Rt
ZW50X2NoYW5nZWQobV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpOwotCi0gICAgICAgIGlmICht
X2RhdGEtPnNjcm9sbE9mZnNldC5oZWlnaHQoKSAhPSBzY3JvbGwuaGVpZ2h0KCkpIHsKLSAgICAg
ICAgICAgIG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50LT52YWx1ZSA9IHNjcm9sbC5oZWlnaHQo
KTsKLSAgICAgICAgICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQobV9kYXRhLT52ZXJ0
aWNhbEFkanVzdG1lbnQpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2RhdGEtPnZCYXIp
IHsKLSAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IHZpc2libGVIZWlnaHQoKTsKLSAgICAgICAg
bV9kYXRhLT52QmFyLT5zZXRFbmFibGVkKGNvbnRlbnRzSGVpZ2h0KCkgPiBjbGllbnRIZWlnaHQp
OwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50SGVpZ2h0IC0gUEFHRV9LRUVQKTsKLSAg
ICAgICAgaWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRIZWlnaHQ7Ci0gICAgICAg
IEludFJlY3Qgb2xkUmVjdChtX2RhdGEtPnZCYXItPmZyYW1lR2VvbWV0cnkoKSk7Ci0gICAgICAg
IEludFJlY3QgdkJhclJlY3QgPSBJbnRSZWN0KHdpZHRoKCkgLSBtX2RhdGEtPnZCYXItPndpZHRo
KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEtPnZCYXItPndpZHRoKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gKG1fZGF0YS0+aEJhciA/IG1fZGF0
YS0+aEJhci0+aGVpZ2h0KCkgOiAwKSk7Ci0gICAgICAgIG1fZGF0YS0+dkJhci0+c2V0UmVjdCh2
QmFyUmVjdCk7Ci0gICAgICAgIGlmICghbV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBv
bGRSZWN0ICE9IG1fZGF0YS0+dkJhci0+ZnJhbWVHZW9tZXRyeSgpKQotICAgICAgICAgICAgbV9k
YXRhLT52QmFyLT5pbnZhbGlkYXRlKCk7Ci0KLSAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFy
c1N1cHByZXNzZWQpCi0gICAgICAgICAgICBtX2RhdGEtPnZCYXItPnNldFN1cHByZXNzSW52YWxp
ZGF0aW9uKHRydWUpOwotICAgICAgICBtX2RhdGEtPnZCYXItPnNldFN0ZXBzKExJTkVfU1RFUCwg
cGFnZVN0ZXApOwotICAgICAgICBtX2RhdGEtPnZCYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVp
Z2h0LCBjb250ZW50c0hlaWdodCgpKTsKLSAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRWYWx1ZShz
Y3JvbGwuaGVpZ2h0KCkpOwotICAgICAgICBpZiAobV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3Nl
ZCkKLSAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFs
c2UpOwotICAgIH0KLQotICAgIGlmIChvbGRIYXNWZXJ0aWNhbCAhPSAobV9kYXRhLT52QmFyICE9
IDApIHx8IG9sZEhhc0hvcml6b250YWwgIT0gKG1fZGF0YS0+aEJhciAhPSAwKSkKLSAgICAgICAg
Z2VvbWV0cnlDaGFuZ2VkKCk7Ci0KLSAgICAvLyBTZWUgaWYgb3VyIG9mZnNldCBoYXMgY2hhbmdl
ZCBpbiBhIHNpdHVhdGlvbiB3aGVyZSB3ZSBtaWdodCBub3QgaGF2ZSBzY3JvbGxiYXJzLgotICAg
IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGVkaXRpbmcgYSBib2R5IHdpdGggb3ZlcmZsb3c6aGlk
ZGVuIGFuZCBzY3JvbGxpbmcgdG8gcmV2ZWFsIHNlbGVjdGlvbi4KLSAgICAvLyBJdCBjYW4gYWxz
byBoYXBwZW4gd2hlbiBtYXhpbWl6aW5nIGEgd2luZG93IHRoYXQgaGFzIHNjcm9sbGJhcnMgKGJ1
dCB0aGUgbmV3IG1heGltaXplZCByZXN1bHQKLSAgICAvLyBkb2VzIG5vdCkuCi0gICAgSW50U2l6
ZSBzY3JvbGxEZWx0YSA9IHNjcm9sbCAtIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OwotICAgIGlmIChz
Y3JvbGxEZWx0YSAhPSBJbnRTaXplKCkpIHsKLSAgICAgICBtX2RhdGEtPnNjcm9sbE9mZnNldCA9
IHNjcm9sbDsKLSAgICAgICBtX2RhdGEtPnNjcm9sbEJhY2tpbmdTdG9yZShzY3JvbGxEZWx0YSk7
Ci0gICAgfQotIAotICAgIG1fZGF0YS0+aW5VcGRhdGVTY3JvbGxiYXJzID0gZmFsc2U7Ci19Ci0K
LUludFBvaW50IFNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHdp
bmRvd1BvaW50KSBjb25zdAoteyAKLSAgICBJbnRQb2ludCB2aWV3UG9pbnQgPSBjb252ZXJ0RnJv
bUNvbnRhaW5pbmdXaW5kb3cod2luZG93UG9pbnQpOwotICAgIHJldHVybiB2aWV3UG9pbnQgKyBz
Y3JvbGxPZmZzZXQoKTsKLX0KLQotSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRv
dyhjb25zdCBJbnRQb2ludCYgY29udGVudHNQb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCB2
aWV3UG9pbnQgPSBjb250ZW50c1BvaW50IC0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAgcmV0dXJuIGNv
bnZlcnRUb0NvbnRhaW5pbmdXaW5kb3codmlld1BvaW50KTsgIAotfQotCi1QbGF0Zm9ybVNjcm9s
bGJhciogU2Nyb2xsVmlldzo6c2Nyb2xsYmFyVW5kZXJNb3VzZShjb25zdCBQbGF0Zm9ybU1vdXNl
RXZlbnQmIG1vdXNlRXZlbnQpCi17IAotICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1dpbmRvdyhtb3VzZUV2ZW50LnBvcygpKTsKLSAgICBpZiAobV9kYXRhLT5o
QmFyICYmIG1fZGF0YS0+aEJhci0+ZnJhbWVHZW9tZXRyeSgpLmNvbnRhaW5zKHZpZXdQb2ludCkp
Ci0gICAgICAgIHJldHVybiBtX2RhdGEtPmhCYXIuZ2V0KCk7Ci0gICAgaWYgKG1fZGF0YS0+dkJh
ciAmJiBtX2RhdGEtPnZCYXItPmZyYW1lR2VvbWV0cnkoKS5jb250YWlucyh2aWV3UG9pbnQpKQot
ICAgICAgICByZXR1cm4gbV9kYXRhLT52QmFyLmdldCgpOwotICAgIHJldHVybiAwOwotfQotCi1J
bnRQb2ludCBTY3JvbGxWaWV3Ojpjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiBjaGls
ZCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIEludFBvaW50IG5ld1BvaW50
ID0gcG9pbnQ7Ci0gICAgaWYgKGNoaWxkICE9IG1fZGF0YS0+aEJhciAmJiBjaGlsZCAhPSBtX2Rh
dGEtPnZCYXIpCi0gICAgICAgIG5ld1BvaW50ID0gcG9pbnQgLSBzY3JvbGxPZmZzZXQoKTsKLSAg
ICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0Q2hpbGRUb1NlbGYoY2hpbGQsIG5ld1BvaW50KTsKLX0K
LQotSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydFNlbGZUb0NoaWxkKGNvbnN0IFdpZGdldCog
Y2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBuZXdQ
b2ludCA9IHBvaW50OwotICAgIGlmIChjaGlsZCAhPSBtX2RhdGEtPmhCYXIgJiYgY2hpbGQgIT0g
bV9kYXRhLT52QmFyKQotICAgICAgICBuZXdQb2ludCA9IHBvaW50ICsgc2Nyb2xsT2Zmc2V0KCk7
Ci0gICAgcmV0dXJuIFdpZGdldDo6Y29udmVydFNlbGZUb0NoaWxkKGNoaWxkLCBuZXdQb2ludCk7
Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgaGVyZSBz
byB3ZSBkb24ndCBoYXZlIHRvIGZvcmsgRnJhbWVWaWV3LmgvLmNwcC4KLSAgICAvLyBJbiB0aGUg
ZW5kLCBGcmFtZVZpZXcgc2hvdWxkIGp1c3QgbWVyZ2Ugd2l0aCBTY3JvbGxWaWV3LgotICAgIEFT
U0VSVChpc0ZyYW1lVmlldygpKTsKLQotICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3QgZG9jdW1lbnREaXJ0eVJlY3QgPSBy
ZWN0OwotICAgIGRvY3VtZW50RGlydHlSZWN0LmludGVyc2VjdChmcmFtZUdlb21ldHJ5KCkpOwot
Ci0gICAgY29udGV4dC0+c2F2ZSgpOwotCi0gICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgp
KTsKLSAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKC14KCksIC15KCkpOwotCi0gICAgY29udGV4
dC0+dHJhbnNsYXRlKC1jb250ZW50c1goKSwgLWNvbnRlbnRzWSgpKTsKLSAgICBkb2N1bWVudERp
cnR5UmVjdC5tb3ZlKGNvbnRlbnRzWCgpLCBjb250ZW50c1koKSk7Ci0KLSAgICBjb250ZXh0LT5j
bGlwKGVuY2xvc2luZ0ludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpKTsKLSAgICBzdGF0aWNf
Y2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKS0+ZnJhbWUoKS0+cGFpbnQoY29udGV4dCwgZG9j
dW1lbnREaXJ0eVJlY3QpOwotICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLQotICAgIC8vIE5vdyBw
YWludCB0aGUgc2Nyb2xsYmFycy4KLSAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNz
ZWQgJiYgKG1fZGF0YS0+aEJhciB8fCBtX2RhdGEtPnZCYXIpKSB7Ci0gICAgICAgIGNvbnRleHQt
PnNhdmUoKTsKLSAgICAgICAgSW50UmVjdCBzY3JvbGxWaWV3RGlydHlSZWN0ID0gcmVjdDsKLSAg
ICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVHZW9tZXRyeSgpKTsKLSAg
ICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgpKTsKLSAgICAgICAgc2Nyb2xsVmlld0Rp
cnR5UmVjdC5tb3ZlKC14KCksIC15KCkpOwotICAgICAgICBpZiAobV9kYXRhLT5oQmFyKQotICAg
ICAgICAgICAgbV9kYXRhLT5oQmFyLT5wYWludChjb250ZXh0LCBzY3JvbGxWaWV3RGlydHlSZWN0
KTsKLSAgICAgICAgaWYgKG1fZGF0YS0+dkJhcikKLSAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+
cGFpbnQoY29udGV4dCwgc2Nyb2xsVmlld0RpcnR5UmVjdCk7Ci0KLSAgICAgICAgLyoKLSAgICAg
ICAgICogRklYTUU6IFRPRE86IENoZWNrIGlmIHRoYXQgd29ya3Mgd2l0aCBSVEwKLSAgICAgICAg
ICovCi0gICAgICAgIC8vIEZpbGwgdGhlIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZS4KLSAgICAg
ICAgSW50UmVjdCBoQ29ybmVyOwotICAgICAgICBpZiAobV9kYXRhLT5oQmFyICYmIHdpZHRoKCkg
LSBtX2RhdGEtPmhCYXItPndpZHRoKCkgPiAwKSB7Ci0gICAgICAgICAgICBoQ29ybmVyID0gSW50
UmVjdChtX2RhdGEtPmhCYXItPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWlnaHQoKSAtIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3aWR0aCgpIC0gbV9kYXRhLT5oQmFyLT53aWR0aCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBp
ZiAoaENvcm5lci5pbnRlcnNlY3RzKHNjcm9sbFZpZXdEaXJ0eVJlY3QpKQotICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmZpbGxSZWN0KGhDb3JuZXIsIENvbG9yOjp3aGl0ZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobV9kYXRhLT52QmFyICYmIGhlaWdodCgpIC0gbV9kYXRhLT52QmFyLT5o
ZWlnaHQoKSA+IDApIHsKLSAgICAgICAgICAgIEludFJlY3QgdkNvcm5lcih3aWR0aCgpIC0gbV9k
YXRhLT52QmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+
dkJhci0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT52QmFy
LT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9kYXRh
LT52QmFyLT5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBpZiAodkNvcm5lciAhPSBoQ29ybmVyICYm
IHZDb3JuZXIuaW50ZXJzZWN0cyhzY3JvbGxWaWV3RGlydHlSZWN0KSkKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5maWxsUmVjdCh2Q29ybmVyLCBDb2xvcjo6d2hpdGUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwotICAgIH0KLX0KLQotLyoKLSAqIHVwZGF0ZSBj
aGlsZHJlbiBidXQgbm9yIG91ciBzY3JvbGxiYXJzLiBUaGV5IHNob3VsZCBub3Qgc2Nyb2xsIHdo
ZW4KLSAqIHdlIHNjcm9sbCBvdXIgY29udGVudC4KLSAqLwotdm9pZCBTY3JvbGxWaWV3OjpnZW9t
ZXRyeUNoYW5nZWQoKSBjb25zdAotewotICAgIEhhc2hTZXQ8V2lkZ2V0Kj46OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IG1fZGF0YS0+Y2hpbGRyZW4uZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFdpZGdl
dCo+Ojpjb25zdF9pdGVyYXRvciBjdXJyZW50ID0gbV9kYXRhLT5jaGlsZHJlbi5iZWdpbigpOyBj
dXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQotICAgICAgICAoKmN1cnJlbnQpLT5nZW9tZXRyeUNo
YW5nZWQoKTsKLX0KLQotdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRp
cmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCi17Ci0gICAgaWYgICgoZGly
ZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSAmJiBtX2RhdGEt
PnZCYXIpCi0gICAgICAgIG1fZGF0YS0+dkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJp
dHkpOwotICAgIGVsc2UgaWYgKG1fZGF0YS0+aEJhcikKLSAgICAgICAgbV9kYXRhLT5oQmFyLT5z
Y3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6YWRk
VG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0JiBjb250YWluaW5nV2luZG93UmVjdCkKLXsKLSAg
ICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7Ci0gICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKTsKLSAgICBQYWdlKiBwYWdlID0g
ZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOwotICAg
IGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHBhZ2UtPmNocm9tZSgpLT5hZGRUb0Rp
cnR5UmVnaW9uKGNvbnRhaW5pbmdXaW5kb3dSZWN0KTsKLX0KLQotdm9pZCBTY3JvbGxWaWV3Ojpz
Y3JvbGxCYWNraW5nU3RvcmUoaW50IGR4LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNjcm9sbFZp
ZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKLXsKLSAgICBBU1NFUlQoaXNGcmFtZVZp
ZXcoKSk7Ci0gICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxjb25z
dCBGcmFtZVZpZXcqPih0aGlzKTsKLSAgICBQYWdlKiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgp
ID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOwotICAgIGlmICghcGFnZSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIHBhZ2UtPmNocm9tZSgpLT5zY3JvbGxCYWNraW5nU3RvcmUoZHgsIGR5
LCBzY3JvbGxWaWV3UmVjdCwgY2xpcFJlY3QpOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OnVwZGF0
ZUJhY2tpbmdTdG9yZSgpCi17Ci0gICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOwotICAgIGNvbnN0
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhp
cyk7Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJh
bWUoKS0+cGFnZSgpIDogMDsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBw
YWdlLT5jaHJvbWUoKS0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci19Ci0KLUhhc2hTZXQ8V2lkZ2V0
Kj4qIFNjcm9sbFZpZXc6OmNoaWxkcmVuKCkgY29uc3QKLXsKLSAgICByZXR1cm4gJm1fZGF0YS0+
Y2hpbGRyZW47Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdH
dGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHdGsu
Y3BwCShyZXZpc2lvbiAyNTA1NCkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmll
d0dkay5jcHA6MjUwNTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNjcm9sbFZpZXcuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNs
dWRlIDxndGsvZ3RrLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK3N0YXRpYyBjb25zdCBp
bnQgTWFnaWNHdGtTY3JvbGxDb25zdGFudCA9IDEzOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFNjcm9sbFZpZXdTY3JvbGxiYXIgOiBwdWJsaWMgUGxhdGZvcm1TY3JvbGxiYXIgewor
cHVibGljOgorICAgIFNjcm9sbFZpZXdTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xs
YmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXplKTsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCk7Cit9OworCitjbGFzcyBTY3JvbGxWaWV3OjpTY3JvbGxW
aWV3UHJpdmF0ZSA6IHB1YmxpYyBTY3JvbGxiYXJDbGllbnQKK3sKK3B1YmxpYzoKKyAgICBTY3Jv
bGxWaWV3UHJpdmF0ZShTY3JvbGxWaWV3KiBfdmlldykKKyAgICAgICAgOiB2aWV3KF92aWV3KQor
ICAgICAgICAsIGhhc1N0YXRpY0JhY2tncm91bmQoZmFsc2UpCisgICAgICAgICwgc2Nyb2xsYmFy
c1N1cHByZXNzZWQoZmFsc2UpCisgICAgICAgICwgdlNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0
bykKKyAgICAgICAgLCBoU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQorICAgICAgICAsIGlu
VXBkYXRlU2Nyb2xsYmFycyhmYWxzZSkKKyAgICAgICAgLCBob3Jpem9udGFsQWRqdXN0bWVudCgw
KQorICAgICAgICAsIHZlcnRpY2FsQWRqdXN0bWVudCgwKQorICAgIHt9CisKKyAgICB+U2Nyb2xs
Vmlld1ByaXZhdGUoKQorICAgIHsKKyAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihm
YWxzZSk7CisgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsKKworICAgICAg
ICBpZiAoaG9yaXpvbnRhbEFkanVzdG1lbnQpIHsKKyAgICAgICAgICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVChob3Jpem9udGFsQWRqdXN0bWVudCksIChn
cG9pbnRlcilTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQsIHRoaXMpOworICAg
ICAgICAgICAgZ19vYmplY3RfdW5yZWYoaG9yaXpvbnRhbEFkanVzdG1lbnQpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKHZlcnRpY2FsQWRqdXN0bWVudCkgeworICAgICAgICAgICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKHZlcnRpY2FsQWRqdXN0bWVu
dCksIChncG9pbnRlcilTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQsIHRoaXMp
OworICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYodmVydGljYWxBZGp1c3RtZW50KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUm
IHNjcm9sbERlbHRhKTsKKyAKKyAgICB2b2lkIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9v
bCBoYXNCYXIpOworICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIp
OworCisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKKyAgICB2aXJ0
dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIGFk
anVzdG1lbnRDaGFuZ2VkKEd0a0FkanVzdG1lbnQqLCBncG9pbnRlcik7CisKKyAgICBTY3JvbGxW
aWV3KiB2aWV3OworICAgIGJvb2wgaGFzU3RhdGljQmFja2dyb3VuZDsKKyAgICBib29sIHNjcm9s
bGJhcnNTdXBwcmVzc2VkOworICAgIFNjcm9sbGJhck1vZGUgdlNjcm9sbGJhck1vZGU7CisgICAg
U2Nyb2xsYmFyTW9kZSBoU2Nyb2xsYmFyTW9kZTsKKyAgICBSZWZQdHI8U2Nyb2xsVmlld1Njcm9s
bGJhcj4gdkJhcjsKKyAgICBSZWZQdHI8U2Nyb2xsVmlld1Njcm9sbGJhcj4gaEJhcjsKKyAgICBJ
bnRTaXplIHNjcm9sbE9mZnNldDsKKyAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZTsKKyAgICBJbnRT
aXplIHZpZXdQb3J0U2l6ZTsKKyAgICBib29sIGluVXBkYXRlU2Nyb2xsYmFyczsKKyAgICBIYXNo
U2V0PFdpZGdldCo+IGNoaWxkcmVuOworICAgIEd0a0FkanVzdG1lbnQqIGhvcml6b250YWxBZGp1
c3RtZW50OworICAgIEd0a0FkanVzdG1lbnQqIHZlcnRpY2FsQWRqdXN0bWVudDsKK307CisKK1Nj
cm9sbFZpZXdTY3JvbGxiYXI6OlNjcm9sbFZpZXdTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBj
bGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZSBzaXplKQorICAgIDogUGxhdGZvcm1TY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlvbiwg
c2l6ZSkKK3sKK30KKwordm9pZCBTY3JvbGxWaWV3U2Nyb2xsYmFyOjpnZW9tZXRyeUNoYW5nZWQo
KQoreworICAgIGlmICghcGFyZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChw
YXJlbnQoKS0+aXNGcmFtZVZpZXcoKSk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0
YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKTsKKyAgICBJbnRSZWN0IHdpbmRvd1JlY3Qg
PSBJbnRSZWN0KGZyYW1lVmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhmcmFtZUdlb21l
dHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOworICAgIEd0a0FsbG9j
YXRpb24gYWxsb2NhdGlvbiA9IHsgd2luZG93UmVjdC54KCksIHdpbmRvd1JlY3QueSgpLCB3aW5k
b3dSZWN0LndpZHRoKCksIHdpbmRvd1JlY3QuaGVpZ2h0KCkgfTsKKyAgICBndGtfd2lkZ2V0X3Np
emVfYWxsb2NhdGUoZ3RrV2lkZ2V0KCksICZhbGxvY2F0aW9uKTsKK30KKwordm9pZCBTY3JvbGxW
aWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhh
c0JhcikKK3sKKyAgICBpZiAoU2Nyb2xsYmFyOjpoYXNQbGF0Zm9ybVNjcm9sbGJhcnMoKSkgewor
ICAgICAgICBpZiAoaGFzQmFyICYmICFoQmFyICYmICFob3Jpem9udGFsQWRqdXN0bWVudCkgewor
ICAgICAgICAgICAgaEJhciA9IG5ldyBTY3JvbGxWaWV3U2Nyb2xsYmFyKHRoaXMsIEhvcml6b250
YWxTY3JvbGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIpOworICAgICAgICAgICAgdmlldy0+YWRkQ2hp
bGQoaEJhci5nZXQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWhhc0JhciAmJiBoQmFyKSB7Cisg
ICAgICAgICAgICB2aWV3LT5yZW1vdmVDaGlsZChoQmFyLmdldCgpKTsKKyAgICAgICAgICAgIGhC
YXIgPSAwOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZp
ZXdQcml2YXRlOjpzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc0JhcikKK3sKKyAgICBp
ZiAoU2Nyb2xsYmFyOjpoYXNQbGF0Zm9ybVNjcm9sbGJhcnMoKSkgeworICAgICAgICBpZiAoaGFz
QmFyICYmICF2QmFyICYmICF2ZXJ0aWNhbEFkanVzdG1lbnQpIHsKKyAgICAgICAgICAgIHZCYXIg
PSBuZXcgU2Nyb2xsVmlld1Njcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgUmVndWxh
clNjcm9sbGJhcik7CisgICAgICAgICAgICB2aWV3LT5hZGRDaGlsZCh2QmFyLmdldCgpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYmIHZCYXIpIHsKKyAgICAgICAgICAgIHZpZXctPnJl
bW92ZUNoaWxkKHZCYXIuZ2V0KCkpOworICAgICAgICAgICAgdkJhciA9IDA7CisgICAgICAgIH0K
KyAgICB9Cit9CisKKwordm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2Nyb2xs
QmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIC8vIFNpbmNl
IHNjcm9sbGluZyBpcyBkb3VibGUgYnVmZmVyZWQsIHdlIHdpbGwgYmUgYmxpdHRpbmcgdGhlIHNj
cm9sbCB2aWV3J3MgaW50ZXJzZWN0aW9uCisgICAgLy8gd2l0aCB0aGUgY2xpcCByZWN0IGV2ZXJ5
IHRpbWUgdG8ga2VlcCBpdCBzbW9vdGguCisgICAgSW50UmVjdCBjbGlwUmVjdCA9IHZpZXctPndp
bmRvd0NsaXBSZWN0KCk7CisgICAgSW50UmVjdCBzY3JvbGxWaWV3UmVjdCA9IHZpZXctPmNvbnZl
cnRUb0NvbnRhaW5pbmdXaW5kb3coSW50UmVjdCgwLCAwLCB2aWV3LT52aXNpYmxlV2lkdGgoKSwg
dmlldy0+dmlzaWJsZUhlaWdodCgpKSk7CisKKyAgICBJbnRSZWN0IHVwZGF0ZVJlY3QgPSBjbGlw
UmVjdDsKKyAgICB1cGRhdGVSZWN0LmludGVyc2VjdChzY3JvbGxWaWV3UmVjdCk7CisKKyAgICAv
L0ZJWE1FIHVwZGF0ZSBoZXJlPworCisgICAgaWYgKCFoYXNTdGF0aWNCYWNrZ3JvdW5kKSAvLyBU
aGUgbWFpbiBmcmFtZSBjYW4ganVzdCBibGl0IHRoZSBXZWJWaWV3IHdpbmRvdworICAgICAgIC8v
IEZJWE1FOiBGaW5kIGEgd2F5IHRvIGJsaXQgc3ViZnJhbWVzIHdpdGhvdXQgYmxpdHRpbmcgb3Zl
cmxhcHBpbmcgY29udGVudAorICAgICAgIHZpZXctPnNjcm9sbEJhY2tpbmdTdG9yZSgtc2Nyb2xs
RGVsdGEud2lkdGgoKSwgLXNjcm9sbERlbHRhLmhlaWdodCgpLCBzY3JvbGxWaWV3UmVjdCwgY2xp
cFJlY3QpOworICAgIGVsc2UgIHsKKyAgICAgICAvLyBXZSBuZWVkIHRvIGdvIGFoZWFkIGFuZCBy
ZXBhaW50IHRoZSBlbnRpcmUgYmFja2luZyBzdG9yZS4gIERvIGl0IG5vdyBiZWZvcmUgbW92aW5n
IHRoZQorICAgICAgIC8vIHBsdWdpbnMuCisgICAgICAgdmlldy0+YWRkVG9EaXJ0eVJlZ2lvbih1
cGRhdGVSZWN0KTsKKyAgICAgICB2aWV3LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICB9CisK
KyAgICB2aWV3LT5nZW9tZXRyeUNoYW5nZWQoKTsKKworICAgIC8vIE5vdyB1cGRhdGUgdGhlIHdp
bmRvdyAod2hpY2ggc2hvdWxkIGRvIG5vdGhpbmcgYnV0IGEgYmxpdCBvZiB0aGUgYmFja2luZyBz
dG9yZSdzIHVwZGF0ZVJlY3QgYW5kIHNvIHNob3VsZAorICAgIC8vIGJlIHZlcnkgZmFzdCkuCisg
ICAgdmlldy0+dXBkYXRlKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZh
dGU6OmFkanVzdG1lbnRDaGFuZ2VkKEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQsIGdwb2ludGVy
IF90aGF0KQoreworICAgIFNjcm9sbFZpZXdQcml2YXRlKiB0aGF0ID0gcmVpbnRlcnByZXRfY2Fz
dDxTY3JvbGxWaWV3UHJpdmF0ZSo+KF90aGF0KTsKKworICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2Ug
cmVhbGx5IG1vdmVkLgorICAgIEludFNpemUgbmV3T2Zmc2V0ID0gdGhhdC0+c2Nyb2xsT2Zmc2V0
OworICAgIGlmIChhZGp1c3RtZW50ID09IHRoYXQtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAg
ICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9n
ZXRfdmFsdWUoYWRqdXN0bWVudCkpKTsKKyAgICBlbHNlIGlmIChhZGp1c3RtZW50ID09IHRoYXQt
PnZlcnRpY2FsQWRqdXN0bWVudCkKKyAgICAgICAgbmV3T2Zmc2V0LnNldEhlaWdodChzdGF0aWNf
Y2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSkpOworCisgICAg
SW50U2l6ZSBzY3JvbGxEZWx0YSA9IG5ld09mZnNldCAtIHRoYXQtPnNjcm9sbE9mZnNldDsKKyAg
ICBpZiAoc2Nyb2xsRGVsdGEgPT0gSW50U2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgdGhh
dC0+c2Nyb2xsT2Zmc2V0ID0gbmV3T2Zmc2V0OworCisgICAgaWYgKHRoYXQtPnNjcm9sbGJhcnNT
dXBwcmVzc2VkKQorICAgICAgICByZXR1cm47CisKKyAgICB0aGF0LT5zY3JvbGxCYWNraW5nU3Rv
cmUoc2Nyb2xsRGVsdGEpOworICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoYXQtPnZpZXcp
LT5mcmFtZSgpLT5zZW5kU2Nyb2xsRXZlbnQoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpTY3Jv
bGxWaWV3UHJpdmF0ZTo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogYmFyKQoreworICAgIC8vIEZp
Z3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgorICAgIEludFNpemUgbmV3T2Zmc2V0ID0gc2Ny
b2xsT2Zmc2V0OworICAgIGlmIChiYXIpIHsKKyAgICAgICAgaWYgKGJhciA9PSBoQmFyKQorICAg
ICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKGJhci0+dmFsdWUoKSk7CisgICAgICAgIGVsc2Ug
aWYgKGJhciA9PSB2QmFyKQorICAgICAgICAgICAgbmV3T2Zmc2V0LnNldEhlaWdodChiYXItPnZh
bHVlKCkpOworICAgIH0KKyAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gbmV3T2Zmc2V0IC0gc2Ny
b2xsT2Zmc2V0OworICAgIGlmIChzY3JvbGxEZWx0YSA9PSBJbnRTaXplKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBzY3JvbGxPZmZzZXQgPSBuZXdPZmZzZXQ7CisKKyAgICBpZiAoc2Nyb2xsYmFy
c1N1cHByZXNzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHNjcm9sbEJhY2tpbmdTdG9yZShz
Y3JvbGxEZWx0YSk7CisgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odmlldyktPmZyYW1lKCkt
PnNlbmRTY3JvbGxFdmVudCgpOworfQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQ
cml2YXRlOjp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEZyYW1lVmlldyo+KHZpZXcpLT53aW5kb3dDbGlwUmVjdChmYWxzZSk7Cit9CisKK1Nj
cm9sbFZpZXc6OlNjcm9sbFZpZXcoKQorICAgIDogbV9kYXRhKG5ldyBTY3JvbGxWaWV3UHJpdmF0
ZSh0aGlzKSkKK3t9CisKK1Njcm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKK3sKKyAgICBkZWxldGUg
bV9kYXRhOworfQorCisvKiAgCisgKiBUaGUgZm9sbG93aW5nIGlzIGFzc3VtZWQ6CisgKiAgICho
YWRqICYmIHZhZGopIHx8ICghaGFkaiAmJiAhdmFkaikKKyAqLyAKK3ZvaWQgU2Nyb2xsVmlldzo6
c2V0R3RrQWRqdXN0bWVudHMoR3RrQWRqdXN0bWVudCogaGFkaiwgR3RrQWRqdXN0bWVudCogdmFk
aikKK3sKKyAgICBBU1NFUlQoIWhhZGogPT0gIXZhZGopOworCisgICAgaWYgKG1fZGF0YS0+aG9y
aXpvbnRhbEFkanVzdG1lbnQpIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKEdfT0JKRUNUKG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpLCAoZ3BvaW50
ZXIpU2Nyb2xsVmlld1ByaXZhdGU6OmFkanVzdG1lbnRDaGFuZ2VkLCBtX2RhdGEpOworICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoR19PQkpFQ1QobV9kYXRhLT52
ZXJ0aWNhbEFkanVzdG1lbnQpLCAoZ3BvaW50ZXIpU2Nyb2xsVmlld1ByaXZhdGU6OmFkanVzdG1l
bnRDaGFuZ2VkLCBtX2RhdGEpOworICAgICAgICBnX29iamVjdF91bnJlZihtX2RhdGEtPmhvcml6
b250YWxBZGp1c3RtZW50KTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9kYXRhLT52ZXJ0aWNh
bEFkanVzdG1lbnQpOworICAgIH0KKworICAgIG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQg
PSBoYWRqOworICAgIG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50ID0gdmFkajsKKworICAgIGlm
IChtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KSB7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudCwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExC
QUNLKFNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hhbmdlZCksIG1fZGF0YSk7CisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQsICJ2YWx1ZS1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQp
LCBtX2RhdGEpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRpc2FibGUgdGhlIHNjcm9sbGJh
cnMgKGlmIHdlIGhhdmUgYW55KSBhcyB0aGUgR3RrQWRqdXN0bWVudCBvdmVyCisgICAgICAgICAq
LworICAgICAgICBtX2RhdGEtPnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsKKyAgICAg
ICAgbV9kYXRhLT5zZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGZhbHNlKTsKKworICAgICAgICBn
X29iamVjdF9yZWYobV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudCk7CisgICAgICAgIGd0a19v
YmplY3Rfc2luayhHVEtfT0JKRUNUKG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpKTsKKyAg
ICAgICAgZ19vYmplY3RfcmVmKG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKKyAgICAgICAg
Z3RrX29iamVjdF9zaW5rKEdUS19PQkpFQ1QobV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpKTsK
KyAgICB9CisKKyAgICB1cGRhdGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKK30K
Kwordm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiB1cGRhdGVS
ZWN0LCBib29sIG5vdykKK3sKKyAgICBpZiAodXBkYXRlUmVjdC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gY29udGVudHNUb1dpbmRvdyh1
cGRhdGVSZWN0LmxvY2F0aW9uKCkpOworICAgIEludFJlY3QgY29udGFpbmluZ1dpbmRvd1JlY3Qg
PSB1cGRhdGVSZWN0OworICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LnNldExvY2F0aW9uKHdpbmRv
d1BvaW50KTsKKworICAgIEdka1JlY3RhbmdsZSByZWN0ID0geyBjb250YWluaW5nV2luZG93UmVj
dC54KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0Lnko
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ1dpbmRvd1JlY3Qud2lkdGgo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmluZ1dpbmRvd1JlY3QuaGVpZ2h0
KCkgfTsKKyAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRv
dygpKS0+d2luZG93OworCisgICAgaWYgKHdpbmRvdykKKyAgICAgICAgZ2RrX3dpbmRvd19pbnZh
bGlkYXRlX3JlY3Qod2luZG93LCAmcmVjdCwgdHJ1ZSk7CisKKyAgICAvLyBDYWNoZSB0aGUgZGly
dHkgc3BvdC4KKyAgICBhZGRUb0RpcnR5UmVnaW9uKGNvbnRhaW5pbmdXaW5kb3dSZWN0KTsKKwor
ICAgIGlmIChub3cgJiYgd2luZG93KQorICAgICAgICBnZGtfd2luZG93X3Byb2Nlc3NfdXBkYXRl
cyh3aW5kb3csIHRydWUpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZSgpCit7CisgICAg
QVNTRVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7CisKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsg
MCwgMCwgbV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKSwgbV9kYXRhLT5jb250ZW50c1NpemUu
aGVpZ2h0KCkgfTsKKyAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdChHVEtfV0lER0VUKGNv
bnRhaW5pbmdXaW5kb3coKSktPndpbmRvdywgJnJlY3QsIHRydWUpOworfQorCitpbnQgU2Nyb2xs
Vmlldzo6dmlzaWJsZVdpZHRoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gd2lkdGgoKSAtIChtX2Rh
dGEtPnZCYXIgPyBtX2RhdGEtPnZCYXItPndpZHRoKCkgOiAwKTsKK30KKworaW50IFNjcm9sbFZp
ZXc6OnZpc2libGVIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBoZWlnaHQoKSAtIChtX2Rh
dGEtPmhCYXIgPyBtX2RhdGEtPmhCYXItPmhlaWdodCgpIDogMCk7Cit9CisKKy8vIFJlZ2lvbiBv
ZiB0aGUgY29udGVudCBjdXJyZW50bHkgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnQgaW4gdGhlIGNv
bnRlbnQgdmlldydzIGNvb3JkaW5hdGUgc3lzdGVtLgorRmxvYXRSZWN0IFNjcm9sbFZpZXc6OnZp
c2libGVDb250ZW50UmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEZsb2F0UmVjdChjb250ZW50
c1goKSwgY29udGVudHNZKCksIHZpc2libGVXaWR0aCgpLCB2aXNpYmxlSGVpZ2h0KCkpOworfQor
CitGbG9hdFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0Q29uc2lkZXJpbmdFeHRl
cm5hbFNjcm9sbGVycygpIGNvbnN0Cit7CisgICAgLy8gZXh0ZXJuYWwgc2Nyb2xsZXJzIG5vdCBz
dXBwb3J0ZWQgZm9yIG5vdworICAgIHJldHVybiB2aXNpYmxlQ29udGVudFJlY3QoKTsKK30KKwor
dm9pZCBTY3JvbGxWaWV3OjpzZXRDb250ZW50c1BvcyhpbnQgbmV3WCwgaW50IG5ld1kpCit7Cisg
ICAgaW50IGR4ID0gbmV3WCAtIGNvbnRlbnRzWCgpOworICAgIGludCBkeSA9IG5ld1kgLSBjb250
ZW50c1koKTsKKyAgICBzY3JvbGxCeShkeCwgZHkpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnJl
c2l6ZUNvbnRlbnRzKGludCB3LCBpbnQgaCkKK3sKKyAgICBJbnRTaXplIG5ld1NpemUodywgaCk7
CisgICAgaWYgKG1fZGF0YS0+Y29udGVudHNTaXplID09IG5ld1NpemUpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fZGF0YS0+Y29udGVudHNTaXplID0gbmV3U2l6ZTsKKyAgICB1cGRhdGVTY3Jv
bGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKK30KKworaW50IFNjcm9sbFZpZXc6OmNvbnRl
bnRzWCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpLndpZHRoKCk7Cit9CisK
K2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1koKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxP
ZmZzZXQoKS5oZWlnaHQoKTsKK30KKworaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzV2lkdGgoKSBj
b25zdAoreworICAgIHJldHVybiBtX2RhdGEtPmNvbnRlbnRzU2l6ZS53aWR0aCgpOworfQorCitp
bnQgU2Nyb2xsVmlldzo6Y29udGVudHNIZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2Rh
dGEtPmNvbnRlbnRzU2l6ZS5oZWlnaHQoKTsKK30KKworSW50U2l6ZSBTY3JvbGxWaWV3OjpzY3Jv
bGxPZmZzZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPnNjcm9sbE9mZnNldDsKK30K
KworSW50U2l6ZSBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsKCkgY29uc3QKK3sKKyAgICBJbnRT
aXplIGRlbHRhID0gKG1fZGF0YS0+Y29udGVudHNTaXplIC0gSW50U2l6ZSh2aXNpYmxlV2lkdGgo
KSwgdmlzaWJsZUhlaWdodCgpKSkgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICBkZWx0YS5jbGFtcE5l
Z2F0aXZlVG9aZXJvKCk7CisgICAgcmV0dXJuIGRlbHRhOworfQorCit2b2lkIFNjcm9sbFZpZXc6
OnNjcm9sbEJ5KGludCBkeCwgaW50IGR5KQoreworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0ID0g
bV9kYXRhLT5zY3JvbGxPZmZzZXQ7CisgICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQgPSBzY3Jv
bGxPZmZzZXQgKyBJbnRTaXplKGR4LCBkeSkuc2hydW5rVG8obWF4aW11bVNjcm9sbCgpKTsKKyAg
ICBuZXdTY3JvbGxPZmZzZXQuY2xhbXBOZWdhdGl2ZVRvWmVybygpOworIAorICAgIGlmIChuZXdT
Y3JvbGxPZmZzZXQgPT0gc2Nyb2xsT2Zmc2V0KQorICAgICAgICByZXR1cm47CisKKyAgICB1cGRh
dGVTY3JvbGxiYXJzKG5ld1Njcm9sbE9mZnNldCk7Cit9CisKK1Njcm9sbGJhck1vZGUgU2Nyb2xs
Vmlldzo6aFNjcm9sbGJhck1vZGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2RhdGEtPmhTY3Jv
bGxiYXJNb2RlOworfQorCitTY3JvbGxiYXJNb2RlIFNjcm9sbFZpZXc6OnZTY3JvbGxiYXJNb2Rl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT52U2Nyb2xsYmFyTW9kZTsKK30KKwordm9p
ZCBTY3JvbGxWaWV3OjpzdXBwcmVzc1Njcm9sbGJhcnMoYm9vbCBzdXBwcmVzc2VkLCBib29sIHJl
cGFpbnRPblN1cHByZXNzKQoreworICAgIG1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgPSBz
dXBwcmVzc2VkOworICAgIGlmIChyZXBhaW50T25TdXBwcmVzcykKKyAgICAgICAgdXBkYXRlU2Ny
b2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0
SFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSBuZXdNb2RlKQoreworICAgIGlmIChtX2RhdGEt
PmhTY3JvbGxiYXJNb2RlICE9IG5ld01vZGUpIHsKKyAgICAgICAgbV9kYXRhLT5oU2Nyb2xsYmFy
TW9kZSA9IG5ld01vZGU7CisgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMobV9kYXRhLT5zY3JvbGxP
ZmZzZXQpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRWU2Nyb2xsYmFyTW9kZShT
Y3JvbGxiYXJNb2RlIG5ld01vZGUpCit7CisgICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhck1vZGUg
IT0gbmV3TW9kZSkgeworICAgICAgICBtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsK
KyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisgICAgfQor
fQorCit2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbGJhcnNNb2RlKFNjcm9sbGJhck1vZGUgbmV3
TW9kZSkKK3sKKyAgICBtX2RhdGEtPmhTY3JvbGxiYXJNb2RlID0gbV9kYXRhLT52U2Nyb2xsYmFy
TW9kZSA9IG5ld01vZGU7CisgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNl
dCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0U3RhdGljQmFja2dyb3VuZChib29sIGZsYWcp
Cit7CisgICAgbV9kYXRhLT5oYXNTdGF0aWNCYWNrZ3JvdW5kID0gZmxhZzsKK30KKwordm9pZCBT
Y3JvbGxWaWV3OjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld0dlb21ldHJ5KQor
eworICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKKyAgICBJbnRSZWN0IG9sZEdlb21ldHJ5ID0g
ZnJhbWVHZW9tZXRyeSgpOworICAgIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShuZXdHZW9tZXRy
eSk7CisKKyAgICBpZiAobmV3R2VvbWV0cnkgPT0gb2xkR2VvbWV0cnkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAobmV3R2VvbWV0cnkud2lkdGgoKSAhPSBvbGRHZW9tZXRyeS53aWR0aCgpIHx8
IG5ld0dlb21ldHJ5LmhlaWdodCgpICE9IG9sZEdlb21ldHJ5LmhlaWdodCgpKSB7CisgICAgICAg
IHVwZGF0ZVNjcm9sbGJhcnMobV9kYXRhLT5zY3JvbGxPZmZzZXQpOworICAgICAgICBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPih0aGlzKS0+c2V0TmVlZHNMYXlvdXQoKTsKKyAgICB9CisKKyAgICBn
ZW9tZXRyeUNoYW5nZWQoKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjphZGRDaGlsZChXaWRnZXQq
IGNoaWxkKQoreyAKKyAgICBjaGlsZC0+c2V0UGFyZW50KHRoaXMpOworICAgIGNoaWxkLT5zZXRD
b250YWluaW5nV2luZG93KGNvbnRhaW5pbmdXaW5kb3coKSk7CisgICAgbV9kYXRhLT5jaGlsZHJl
bi5hZGQoY2hpbGQpOworCisgICAgaWYgKGNoaWxkLT5ndGtXaWRnZXQoKSkKKyAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250YWluaW5nV2luZG93KCkpLCBjaGlsZC0+
Z3RrV2lkZ2V0KCkpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnJlbW92ZUNoaWxkKFdpZGdldCog
Y2hpbGQpCit7CisgICAgY2hpbGQtPnNldFBhcmVudCgwKTsKKyAgICBtX2RhdGEtPmNoaWxkcmVu
LnJlbW92ZShjaGlsZCk7CisKKyAgICBpZiAoY2hpbGQtPmd0a1dpZGdldCgpICYmIEdUS19XSURH
RVQoY29udGFpbmluZ1dpbmRvdygpKSA9PSBHVEtfV0lER0VUKGNoaWxkLT5ndGtXaWRnZXQoKSkt
PnBhcmVudCkKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUoR1RLX0NPTlRBSU5FUihjb250
YWluaW5nV2luZG93KCkpLCBjaGlsZC0+Z3RrV2lkZ2V0KCkpOworfQorCit2b2lkIFNjcm9sbFZp
ZXc6OnNjcm9sbFJlY3RJbnRvVmlld1JlY3Vyc2l2ZWx5KGNvbnN0IEludFJlY3QmIHIpCit7Cisg
ICAgSW50UG9pbnQgcChtYXgoMCwgci54KCkpLCBtYXgoMCwgci55KCkpKTsKKyAgICBTY3JvbGxW
aWV3KiB2aWV3ID0gdGhpczsKKyAgICB3aGlsZSAodmlldykgeworICAgICAgICB2aWV3LT5zZXRD
b250ZW50c1BvcyhwLngoKSwgcC55KCkpOworICAgICAgICBwLm1vdmUodmlldy0+eCgpIC0gdmll
dy0+c2Nyb2xsT2Zmc2V0KCkud2lkdGgoKSwgdmlldy0+eSgpIC0gdmlldy0+c2Nyb2xsT2Zmc2V0
KCkuaGVpZ2h0KCkpOworICAgICAgICB2aWV3ID0gc3RhdGljX2Nhc3Q8U2Nyb2xsVmlldyo+KHZp
ZXctPnBhcmVudCgpKTsKKyAgICB9Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6aW5XaW5kb3coKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCit7CisgICAg
Ly8gRGV0ZXJtaW5lIGhvdyBtdWNoIHdlIHdhbnQgdG8gc2Nyb2xsLiAgSWYgd2UgY2FuIG1vdmUg
YXQgYWxsLCB3ZSB3aWxsIGFjY2VwdCB0aGUgZXZlbnQuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxE
ZWx0YSA9IG1heGltdW1TY3JvbGwoKTsKKyAgICBpZiAoKGUuZGVsdGFYKCkgPCAwICYmIG1heFNj
cm9sbERlbHRhLndpZHRoKCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVgoKSA+IDAgJiYgc2Ny
b2xsT2Zmc2V0KCkud2lkdGgoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpIDwgMCAmJiBt
YXhTY3JvbGxEZWx0YS5oZWlnaHQoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpID4gMCAm
JiBzY3JvbGxPZmZzZXQoKS5oZWlnaHQoKSA+IDApKQorICAgICAgICBlLmFjY2VwdCgpOworCisg
ICAgc2Nyb2xsQnkoZS5kZWx0YVgoKSAqIExJTkVfU1RFUCwgZS5kZWx0YVkoKSAqIExJTkVfU1RF
UCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCBJbnRTaXpl
JiBkZXNpcmVkT2Zmc2V0KQoreworICAgIC8vIERvbid0IGFsbG93IHJlLWVudHJhbmN5IGludG8g
dGhpcyBmdW5jdGlvbi4KKyAgICBpZiAobV9kYXRhLT5pblVwZGF0ZVNjcm9sbGJhcnMpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgaGVyZSBzbyB3ZSBkb24n
dCBoYXZlIHRvIGZvcmsgRnJhbWVWaWV3LmgvLmNwcC4KKyAgICAvLyBJbiB0aGUgZW5kLCBGcmFt
ZVZpZXcgc2hvdWxkIGp1c3QgbWVyZ2Ugd2l0aCBTY3JvbGxWaWV3LgorICAgIGlmIChzdGF0aWNf
Y2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKS0+ZnJhbWUoKS0+cHJvaGliaXRzU2Nyb2xsaW5n
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGF0YS0+aW5VcGRhdGVTY3JvbGxiYXJzID0g
dHJ1ZTsKKworICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBtX2RhdGEtPnZCYXI7Cisg
ICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gbV9kYXRhLT5oQmFyOworICAgIGJvb2wg
b2xkSGFzVmVydGljYWwgPSBoYXNWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBib29sIG9sZEhhc0hv
cml6b250YWwgPSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFNjcm9sbGJhck1vZGUgaFNj
cm9sbCA9IG1fZGF0YS0+aFNjcm9sbGJhck1vZGU7CisgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xs
ID0gbV9kYXRhLT52U2Nyb2xsYmFyTW9kZTsKKworICAgIGNvbnN0IGludCBjVmVydGljYWxXaWR0
aCA9IFBsYXRmb3JtU2Nyb2xsYmFyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgY29u
c3QgaW50IGNIb3Jpem9udGFsSGVpZ2h0ID0gUGxhdGZvcm1TY3JvbGxiYXI6Omhvcml6b250YWxT
Y3JvbGxiYXJIZWlnaHQoKTsKKworICAgIGZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFz
cysrKSB7CisgICAgICAgIGJvb2wgc2Nyb2xsc1ZlcnRpY2FsbHk7CisgICAgICAgIGJvb2wgc2Ny
b2xsc0hvcml6b250YWxseTsKKworICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHBy
ZXNzZWQgJiYgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byB8fCB2U2Nyb2xsID09IFNjcm9sbGJh
ckF1dG8pKSB7CisgICAgICAgICAgICAvLyBEbyBhIGxheW91dCBpZiBwZW5kaW5nIGJlZm9yZSBj
aGVja2luZyBpZiBzY3JvbGxiYXJzIGFyZSBuZWVkZWQuCisgICAgICAgICAgICBpZiAoaGFzVmVy
dGljYWxTY3JvbGxiYXIgIT0gb2xkSGFzVmVydGljYWwgfHwgaGFzSG9yaXpvbnRhbFNjcm9sbGJh
ciAhPSBvbGRIYXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1l
Vmlldyo+KHRoaXMpLT5sYXlvdXQoKTsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNjcm9s
bHNWZXJ0aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xs
ID09IFNjcm9sbGJhckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSA+IGhlaWdodCgpKTsKKyAgICAg
ICAgICAgIGlmIChzY3JvbGxzVmVydGljYWxseSkKKyAgICAgICAgICAgICAgICBzY3JvbGxzSG9y
aXpvbnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09
IFNjcm9sbGJhckF1dG8gJiYgY29udGVudHNXaWR0aCgpICsgY1ZlcnRpY2FsV2lkdGggPiB3aWR0
aCgpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9u
dGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKGhTY3JvbGwgPT0gU2Ny
b2xsYmFyQXV0byAmJiBjb250ZW50c1dpZHRoKCkgPiB3aWR0aCgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoc2Nyb2xsc0hvcml6b250YWxseSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc1Zl
cnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKHZTY3JvbGwgPT0g
U2Nyb2xsYmFyQXV0byAmJiBjb250ZW50c0hlaWdodCgpICsgY0hvcml6b250YWxIZWlnaHQgPiBo
ZWlnaHQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykg
PyBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyIDogKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24p
OworICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJB
dXRvKSA/IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyIDogKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlz
T24pOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxi
YXIgIT0gc2Nyb2xsc1ZlcnRpY2FsbHkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFzVmVy
dGljYWxTY3JvbGxiYXIoc2Nyb2xsc1ZlcnRpY2FsbHkpOworICAgICAgICAgICAgaGFzVmVydGlj
YWxTY3JvbGxiYXIgPSBzY3JvbGxzVmVydGljYWxseTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChoYXNIb3Jpem9udGFsU2Nyb2xsYmFyICE9IHNjcm9sbHNIb3Jpem9udGFsbHkpIHsKKyAgICAg
ICAgICAgIG1fZGF0YS0+c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxzSG9yaXpvbnRh
bGx5KTsKKyAgICAgICAgICAgIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxzSG9yaXpv
bnRhbGx5OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gU2V0IHVwIHRoZSByYW5nZSAoYW5k
IHBhZ2Ugc3RlcC9saW5lIHN0ZXApLgorICAgIEludFNpemUgbWF4U2Nyb2xsUG9zaXRpb24oY29u
dGVudHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCksIGNvbnRlbnRzSGVpZ2h0KCkgLSB2aXNpYmxl
SGVpZ2h0KCkpOworICAgIEludFNpemUgc2Nyb2xsID0gZGVzaXJlZE9mZnNldC5zaHJ1bmtUbyht
YXhTY3JvbGxQb3NpdGlvbik7CisgICAgc2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKwor
ICAgIGlmIChtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KSB7CisgICAgICAgIG1fZGF0YS0+
aG9yaXpvbnRhbEFkanVzdG1lbnQtPnBhZ2Vfc2l6ZSA9IHZpc2libGVXaWR0aCgpOworICAgICAg
ICBtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IE1hZ2ljR3Rr
U2Nyb2xsQ29uc3RhbnQ7CisgICAgICAgIG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQtPnVw
cGVyID0gY29udGVudHNXaWR0aCgpOworICAgICAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1f
ZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9s
bE9mZnNldC53aWR0aCgpICE9IHNjcm9sbC53aWR0aCgpKSB7CisgICAgICAgICAgICBtX2RhdGEt
Pmhvcml6b250YWxBZGp1c3RtZW50LT52YWx1ZSA9IHNjcm9sbC53aWR0aCgpOworICAgICAgICAg
ICAgZ3RrX2FkanVzdG1lbnRfdmFsdWVfY2hhbmdlZChtX2RhdGEtPmhvcml6b250YWxBZGp1c3Rt
ZW50KTsKKyAgICAgICAgfSAKKyAgICB9IGVsc2UgaWYgKG1fZGF0YS0+aEJhcikgeworICAgICAg
ICBpbnQgY2xpZW50V2lkdGggPSB2aXNpYmxlV2lkdGgoKTsKKyAgICAgICAgbV9kYXRhLT5oQmFy
LT5zZXRFbmFibGVkKGNvbnRlbnRzV2lkdGgoKSA+IGNsaWVudFdpZHRoKTsKKyAgICAgICAgaW50
IHBhZ2VTdGVwID0gKGNsaWVudFdpZHRoIC0gUEFHRV9LRUVQKTsKKyAgICAgICAgaWYgKHBhZ2VT
dGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRXaWR0aDsKKyAgICAgICAgSW50UmVjdCBvbGRSZWN0
KG1fZGF0YS0+aEJhci0+ZnJhbWVHZW9tZXRyeSgpKTsKKyAgICAgICAgSW50UmVjdCBoQmFyUmVj
dCA9IEludFJlY3QoMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0
KCkgLSBtX2RhdGEtPmhCYXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aWR0aCgpIC0gKG1fZGF0YS0+dkJhciA/IG1fZGF0YS0+dkJhci0+d2lkdGgoKSA6
IDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEtPmhCYXItPmhl
aWdodCgpKTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRSZWN0KGhCYXJSZWN0KTsKKyAgICAg
ICAgaWYgKCFtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0gbV9kYXRh
LT5oQmFyLT5mcmFtZUdlb21ldHJ5KCkpCisgICAgICAgICAgICBtX2RhdGEtPmhCYXItPmludmFs
aWRhdGUoKTsKKworICAgICAgICBpZiAobV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAg
ICAgICAgICAgIG1fZGF0YS0+aEJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7Cisg
ICAgICAgIG1fZGF0YS0+aEJhci0+c2V0U3RlcHMoTElORV9TVEVQLCBwYWdlU3RlcCk7CisgICAg
ICAgIG1fZGF0YS0+aEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0
aCgpKTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSk7Cisg
ICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkKQorICAgICAgICAgICAgbV9k
YXRhLT5oQmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7IAorICAgIH0gCisKKyAg
ICBpZiAobV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpIHsKKyAgICAgICAgbV9kYXRhLT52ZXJ0
aWNhbEFkanVzdG1lbnQtPnBhZ2Vfc2l6ZSA9IHZpc2libGVIZWlnaHQoKTsKKyAgICAgICAgbV9k
YXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQtPnN0ZXBfaW5jcmVtZW50ID0gTWFnaWNHdGtTY3JvbGxD
b25zdGFudDsKKyAgICAgICAgbV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQtPnVwcGVyID0gY29u
dGVudHNIZWlnaHQoKTsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZChtX2RhdGEtPnZl
cnRpY2FsQWRqdXN0bWVudCk7CisKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0Lmhl
aWdodCgpICE9IHNjcm9sbC5oZWlnaHQoKSkgeworICAgICAgICAgICAgbV9kYXRhLT52ZXJ0aWNh
bEFkanVzdG1lbnQtPnZhbHVlID0gc2Nyb2xsLmhlaWdodCgpOworICAgICAgICAgICAgZ3RrX2Fk
anVzdG1lbnRfdmFsdWVfY2hhbmdlZChtX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCk7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fZGF0YS0+dkJhcikgeworICAgICAgICBpbnQgY2xpZW50
SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgpOworICAgICAgICBtX2RhdGEtPnZCYXItPnNldEVuYWJs
ZWQoY29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdodCk7CisgICAgICAgIGludCBwYWdlU3Rl
cCA9IChjbGllbnRIZWlnaHQgLSBQQUdFX0tFRVApOworICAgICAgICBpZiAocGFnZVN0ZXAgPCAw
KSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKKyAgICAgICAgSW50UmVjdCBvbGRSZWN0KG1fZGF0
YS0+dkJhci0+ZnJhbWVHZW9tZXRyeSgpKTsKKyAgICAgICAgSW50UmVjdCB2QmFyUmVjdCA9IElu
dFJlY3Qod2lkdGgoKSAtIG1fZGF0YS0+dkJhci0+d2lkdGgoKSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZGF0YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVpZ2h0KCkgLSAobV9kYXRhLT5oQmFyID8gbV9kYXRhLT5oQmFyLT5oZWlnaHQoKSA6IDAp
KTsKKyAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRSZWN0KHZCYXJSZWN0KTsKKyAgICAgICAgaWYg
KCFtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0gbV9kYXRhLT52QmFy
LT5mcmFtZUdlb21ldHJ5KCkpCisgICAgICAgICAgICBtX2RhdGEtPnZCYXItPmludmFsaWRhdGUo
KTsKKworICAgICAgICBpZiAobV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAg
ICAgIG1fZGF0YS0+dkJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7CisgICAgICAg
IG1fZGF0YS0+dkJhci0+c2V0U3RlcHMoTElORV9TVEVQLCBwYWdlU3RlcCk7CisgICAgICAgIG1f
ZGF0YS0+dkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkp
OworICAgICAgICBtX2RhdGEtPnZCYXItPnNldFZhbHVlKHNjcm9sbC5oZWlnaHQoKSk7CisgICAg
ICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkKQorICAgICAgICAgICAgbV9kYXRh
LT52QmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7CisgICAgfQorCisgICAgaWYg
KG9sZEhhc1ZlcnRpY2FsICE9IChtX2RhdGEtPnZCYXIgIT0gMCkgfHwgb2xkSGFzSG9yaXpvbnRh
bCAhPSAobV9kYXRhLT5oQmFyICE9IDApKQorICAgICAgICBnZW9tZXRyeUNoYW5nZWQoKTsKKwor
ICAgIC8vIFNlZSBpZiBvdXIgb2Zmc2V0IGhhcyBjaGFuZ2VkIGluIGEgc2l0dWF0aW9uIHdoZXJl
IHdlIG1pZ2h0IG5vdCBoYXZlIHNjcm9sbGJhcnMuCisgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdo
ZW4gZWRpdGluZyBhIGJvZHkgd2l0aCBvdmVyZmxvdzpoaWRkZW4gYW5kIHNjcm9sbGluZyB0byBy
ZXZlYWwgc2VsZWN0aW9uLgorICAgIC8vIEl0IGNhbiBhbHNvIGhhcHBlbiB3aGVuIG1heGltaXpp
bmcgYSB3aW5kb3cgdGhhdCBoYXMgc2Nyb2xsYmFycyAoYnV0IHRoZSBuZXcgbWF4aW1pemVkIHJl
c3VsdAorICAgIC8vIGRvZXMgbm90KS4KKyAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gc2Nyb2xs
IC0gbV9kYXRhLT5zY3JvbGxPZmZzZXQ7CisgICAgaWYgKHNjcm9sbERlbHRhICE9IEludFNpemUo
KSkgeworICAgICAgIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsOworICAgICAgIG1fZGF0
YS0+c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKKyAgICB9CisgCisgICAgbV9kYXRh
LT5pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKK30KKworSW50UG9pbnQgU2Nyb2xsVmlldzo6
d2luZG93VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpIGNvbnN0Cit7IAor
ICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5k
b3dQb2ludCk7CisgICAgcmV0dXJuIHZpZXdQb2ludCArIHNjcm9sbE9mZnNldCgpOworfQorCitJ
bnRQb2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93KGNvbnN0IEludFBvaW50JiBjb250
ZW50c1BvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnRlbnRzUG9p
bnQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4gY29udmVydFRvQ29udGFpbmluZ1dpbmRv
dyh2aWV3UG9pbnQpOyAgCit9CisKK1BsYXRmb3JtU2Nyb2xsYmFyKiBTY3JvbGxWaWV3OjpzY3Jv
bGxiYXJVbmRlck1vdXNlKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKK3sg
CisgICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KG1v
dXNlRXZlbnQucG9zKCkpOworICAgIGlmIChtX2RhdGEtPmhCYXIgJiYgbV9kYXRhLT5oQmFyLT5m
cmFtZUdlb21ldHJ5KCkuY29udGFpbnModmlld1BvaW50KSkKKyAgICAgICAgcmV0dXJuIG1fZGF0
YS0+aEJhci5nZXQoKTsKKyAgICBpZiAobV9kYXRhLT52QmFyICYmIG1fZGF0YS0+dkJhci0+ZnJh
bWVHZW9tZXRyeSgpLmNvbnRhaW5zKHZpZXdQb2ludCkpCisgICAgICAgIHJldHVybiBtX2RhdGEt
PnZCYXIuZ2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OmNv
bnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgbmV3UG9pbnQgPSBwb2ludDsKKyAgICBpZiAoY2hp
bGQgIT0gbV9kYXRhLT5oQmFyICYmIGNoaWxkICE9IG1fZGF0YS0+dkJhcikKKyAgICAgICAgbmV3
UG9pbnQgPSBwb2ludCAtIHNjcm9sbE9mZnNldCgpOworICAgIHJldHVybiBXaWRnZXQ6OmNvbnZl
cnRDaGlsZFRvU2VsZihjaGlsZCwgbmV3UG9pbnQpOworfQorCitJbnRQb2ludCBTY3JvbGxWaWV3
Ojpjb252ZXJ0U2VsZlRvQ2hpbGQoY29uc3QgV2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQm
IHBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IG5ld1BvaW50ID0gcG9pbnQ7CisgICAgaWYg
KGNoaWxkICE9IG1fZGF0YS0+aEJhciAmJiBjaGlsZCAhPSBtX2RhdGEtPnZCYXIpCisgICAgICAg
IG5ld1BvaW50ID0gcG9pbnQgKyBzY3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4gV2lkZ2V0Ojpj
b252ZXJ0U2VsZlRvQ2hpbGQoY2hpbGQsIG5ld1BvaW50KTsKK30KKwordm9pZCBTY3JvbGxWaWV3
OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBpcyBoZXJlIHNvIHdlIGRvbid0IGhhdmUgdG8gZm9y
ayBGcmFtZVZpZXcuaC8uY3BwLgorICAgIC8vIEluIHRoZSBlbmQsIEZyYW1lVmlldyBzaG91bGQg
anVzdCBtZXJnZSB3aXRoIFNjcm9sbFZpZXcuCisgICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOwor
CisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgSW50UmVjdCBkb2N1bWVudERpcnR5UmVjdCA9IHJlY3Q7CisgICAgZG9jdW1lbnREaXJ0
eVJlY3QuaW50ZXJzZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisKKyAgICBjb250ZXh0LT5zYXZlKCk7
CisKKyAgICBjb250ZXh0LT50cmFuc2xhdGUoeCgpLCB5KCkpOworICAgIGRvY3VtZW50RGlydHlS
ZWN0Lm1vdmUoLXgoKSwgLXkoKSk7CisKKyAgICBjb250ZXh0LT50cmFuc2xhdGUoLWNvbnRlbnRz
WCgpLCAtY29udGVudHNZKCkpOworICAgIGRvY3VtZW50RGlydHlSZWN0Lm1vdmUoY29udGVudHNY
KCksIGNvbnRlbnRzWSgpKTsKKworICAgIGNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdCh2
aXNpYmxlQ29udGVudFJlY3QoKSkpOworICAgIHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+
KHRoaXMpLT5mcmFtZSgpLT5wYWludChjb250ZXh0LCBkb2N1bWVudERpcnR5UmVjdCk7CisgICAg
Y29udGV4dC0+cmVzdG9yZSgpOworCisgICAgLy8gTm93IHBhaW50IHRoZSBzY3JvbGxiYXJzLgor
ICAgIGlmICghbV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiAobV9kYXRhLT5oQmFyIHx8
IG1fZGF0YS0+dkJhcikpIHsKKyAgICAgICAgY29udGV4dC0+c2F2ZSgpOworICAgICAgICBJbnRS
ZWN0IHNjcm9sbFZpZXdEaXJ0eVJlY3QgPSByZWN0OworICAgICAgICBzY3JvbGxWaWV3RGlydHlS
ZWN0LmludGVyc2VjdChmcmFtZUdlb21ldHJ5KCkpOworICAgICAgICBjb250ZXh0LT50cmFuc2xh
dGUoeCgpLCB5KCkpOworICAgICAgICBzY3JvbGxWaWV3RGlydHlSZWN0Lm1vdmUoLXgoKSwgLXko
KSk7CisgICAgICAgIGlmIChtX2RhdGEtPmhCYXIpCisgICAgICAgICAgICBtX2RhdGEtPmhCYXIt
PnBhaW50KGNvbnRleHQsIHNjcm9sbFZpZXdEaXJ0eVJlY3QpOworICAgICAgICBpZiAobV9kYXRh
LT52QmFyKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5wYWludChjb250ZXh0LCBzY3JvbGxW
aWV3RGlydHlSZWN0KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBGSVhNRTogVE9ETzogQ2hl
Y2sgaWYgdGhhdCB3b3JrcyB3aXRoIFJUTAorICAgICAgICAgKi8KKyAgICAgICAgLy8gRmlsbCB0
aGUgc2Nyb2xsIGNvcm5lciB3aXRoIHdoaXRlLgorICAgICAgICBJbnRSZWN0IGhDb3JuZXI7Cisg
ICAgICAgIGlmIChtX2RhdGEtPmhCYXIgJiYgd2lkdGgoKSAtIG1fZGF0YS0+aEJhci0+d2lkdGgo
KSA+IDApIHsKKyAgICAgICAgICAgIGhDb3JuZXIgPSBJbnRSZWN0KG1fZGF0YS0+aEJhci0+d2lk
dGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9kYXRhLT5o
QmFyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSBt
X2RhdGEtPmhCYXItPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Rh
dGEtPmhCYXItPmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChoQ29ybmVyLmludGVyc2VjdHMo
c2Nyb2xsVmlld0RpcnR5UmVjdCkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3Qo
aENvcm5lciwgQ29sb3I6OndoaXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtX2RhdGEt
PnZCYXIgJiYgaGVpZ2h0KCkgLSBtX2RhdGEtPnZCYXItPmhlaWdodCgpID4gMCkgeworICAgICAg
ICAgICAgSW50UmVjdCB2Q29ybmVyKHdpZHRoKCkgLSBtX2RhdGEtPnZCYXItPndpZHRoKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5oZWlnaHQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEtPnZCYXItPndpZHRoKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX2RhdGEtPnZCYXItPmhlaWdodCgpKTsKKyAg
ICAgICAgICAgIGlmICh2Q29ybmVyICE9IGhDb3JuZXIgJiYgdkNvcm5lci5pbnRlcnNlY3RzKHNj
cm9sbFZpZXdEaXJ0eVJlY3QpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KHZD
b3JuZXIsIENvbG9yOjp3aGl0ZSk7CisgICAgICAgIH0KKworICAgICAgICBjb250ZXh0LT5yZXN0
b3JlKCk7CisgICAgfQorfQorCisvKgorICogdXBkYXRlIGNoaWxkcmVuIGJ1dCBub3Igb3VyIHNj
cm9sbGJhcnMuIFRoZXkgc2hvdWxkIG5vdCBzY3JvbGwgd2hlbgorICogd2Ugc2Nyb2xsIG91ciBj
b250ZW50LgorICovCit2b2lkIFNjcm9sbFZpZXc6Omdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0Cit7
CisgICAgSGFzaFNldDxXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9kYXRhLT5jaGls
ZHJlbi5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8V2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGN1
cnJlbnQgPSBtX2RhdGEtPmNoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJl
bnQpCisgICAgICAgICgqY3VycmVudCktPmdlb21ldHJ5Q2hhbmdlZCgpOworfQorCit2b2lkIFNj
cm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSBncmFudWxhcml0eSkKK3sKKyAgICBpZiAgKChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwg
ZGlyZWN0aW9uID09IFNjcm9sbERvd24pICYmIG1fZGF0YS0+dkJhcikKKyAgICAgICAgbV9kYXRh
LT52QmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7CisgICAgZWxzZSBpZiAobV9k
YXRhLT5oQmFyKQorICAgICAgICBtX2RhdGEtPmhCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5KTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjphZGRUb0RpcnR5UmVnaW9uKGNvbnN0IElu
dFJlY3QmIGNvbnRhaW5pbmdXaW5kb3dSZWN0KQoreworICAgIEFTU0VSVChpc0ZyYW1lVmlldygp
KTsKKyAgICBjb25zdCBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZy
YW1lVmlldyo+KHRoaXMpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBm
cmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7CisgICAgaWYgKCFwYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgcGFnZS0+Y2hyb21lKCktPmFkZFRvRGlydHlSZWdpb24oY29udGFpbmluZ1dp
bmRvd1JlY3QpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShpbnQg
ZHgsIGludCBkeSwgY29uc3QgSW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0KQoreworICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKKyAgICBjb25zdCBGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMpOwor
ICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1lKCkt
PnBhZ2UoKSA6IDA7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgcGFnZS0+
Y2hyb21lKCktPnNjcm9sbEJhY2tpbmdTdG9yZShkeCwgZHksIHNjcm9sbFZpZXdSZWN0LCBjbGlw
UmVjdCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlQmFja2luZ1N0b3JlKCkKK3sKKyAg
ICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisgICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcg
PSBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKTsKKyAgICBQYWdlKiBwYWdlID0g
ZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOworICAg
IGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhZ2UtPmNocm9tZSgpLT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKK30KKworSGFzaFNldDxXaWRnZXQqPiogU2Nyb2xsVmlldzo6Y2hpbGRy
ZW4oKSBjb25zdAoreworICAgIHJldHVybiAmbV9kYXRhLT5jaGlsZHJlbjsKK30KKworfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU291bmRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL1NvdW5kR2RrLmNwcAkocmV2aXNpb24gMjUwNTQpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9Tb3VuZEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJv
cmEuY28udWs+Ci0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpbmNsdWRlICJTb3VuZC5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgc3lzdGVtQmVlcCgpCi17Ci0gICAgZ2RrX2Jl
ZXAoKTsKLX0KLQotfQotCi0vLyB2aW06IHRzPTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvU291bmRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1NvdW5kR3RrLmNwcAkocmV2aXNpb24gMjQ5OTIpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1NvdW5kR2RrLmNwcDoyNDk5MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1NvdW5kR3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlNv
dW5kLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dm9pZCBzeXN0ZW1CZWVwKCkKK3sKKyAgICBnZGtfYmVlcCgpOworfQorCit9CisKKy8vIHZpbTog
dHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2RrLmNwcAko
cmV2aXNpb24gMjUwNTQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoR2Rr
RXZlbnRTY3JvbGwqIGV2ZW50KQotewotICAgIG1fZGVsdGFYID0gMDsKLSAgICBtX2RlbHRhWSA9
IDA7Ci0KLSAgICBpZiAoZXZlbnQtPmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1VQKQotICAgICAg
ICBtX2RlbHRhWSA9IC0xMjA7Ci0gICAgZWxzZSBpZiAoZXZlbnQtPmRpcmVjdGlvbiA9PSBHREtf
U0NST0xMX0xFRlQpCi0gICAgICAgIG1fZGVsdGFYID0gLTEyMDsKLSAgICBlbHNlIGlmIChldmVu
dC0+ZGlyZWN0aW9uID09IEdES19TQ1JPTExfUklHSFQpCi0gICAgICAgIG1fZGVsdGFYID0gMTIw
OwotICAgIGVsc2UKLSAgICAgICAgbV9kZWx0YVkgPSAxMjA7Ci0KLSAgICBtX3Bvc2l0aW9uID0g
SW50UG9pbnQoKGludClldmVudC0+eCwgKGludClldmVudC0+eSk7Ci0gICAgbV9nbG9iYWxQb3Np
dGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPnhfcm9vdCwgKGludClldmVudC0+eV9yb290KTsK
LSAgICBtX2lzQWNjZXB0ZWQgPSBmYWxzZTsKLSAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPnN0YXRl
ICYgR0RLX1NISUZUX01BU0s7Ci0gICAgbV9jdHJsS2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX0NP
TlRST0xfTUFTSzsKLSAgICBtX2FsdEtleSA9IGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0s7
Ci0gICAgbV9tZXRhS2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX01PRDJfTUFTSzsKLSAgICBtX2lz
Q29udGludW91cyA9IGZhbHNlOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9X
aGVlbEV2ZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaGVl
bEV2ZW50R3RrLmNwcAkocmV2aXNpb24gMjQ5OTIpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1doZWVsRXZlbnRHZGsuY3BwOjI0OTkyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxF
dmVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
IAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVl
bEV2ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKK3sKKyAgICBtX2RlbHRhWCA9IDA7CisgICAg
bV9kZWx0YVkgPSAwOworCisgICAgaWYgKGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9V
UCkKKyAgICAgICAgbV9kZWx0YVkgPSAtMTIwOworICAgIGVsc2UgaWYgKGV2ZW50LT5kaXJlY3Rp
b24gPT0gR0RLX1NDUk9MTF9MRUZUKQorICAgICAgICBtX2RlbHRhWCA9IC0xMjA7CisgICAgZWxz
ZSBpZiAoZXZlbnQtPmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1JJR0hUKQorICAgICAgICBtX2Rl
bHRhWCA9IDEyMDsKKyAgICBlbHNlCisgICAgICAgIG1fZGVsdGFZID0gMTIwOworCisgICAgbV9w
b3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPngsIChpbnQpZXZlbnQtPnkpOworICAgIG1f
Z2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54X3Jvb3QsIChpbnQpZXZlbnQt
Pnlfcm9vdCk7CisgICAgbV9pc0FjY2VwdGVkID0gZmFsc2U7CisgICAgbV9zaGlmdEtleSA9IGV2
ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLOworICAgIG1fY3RybEtleSA9IGV2ZW50LT5zdGF0
ZSAmIEdES19DT05UUk9MX01BU0s7CisgICAgbV9hbHRLZXkgPSBldmVudC0+c3RhdGUgJiBHREtf
TU9EMV9NQVNLOworICAgIG1fbWV0YUtleSA9IGV2ZW50LT5zdGF0ZSAmIEdES19NT0QyX01BU0s7
CisgICAgbV9pc0NvbnRpbnVvdXMgPSBmYWxzZTsKK30KKworfQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9XaWRnZXRHZGsuY3BwCShyZXZpc2lvbiAyNTA1NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1dpZGdldEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjg4ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbSAKLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldpZGdldC5oIgotCi0jaW5jbHVkZSAiQ3Vyc29yLmgiCi0jaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCi0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFdpZGdldFByaXZhdGUgewotcHVibGljOgotICAg
IEd0a1dpZGdldCogd2lkZ2V0OwotICAgIFdpZGdldENsaWVudCogY2xpZW50OwotICAgIEludFJl
Y3QgZnJhbWVSZWN0OwotCi0gICAgU2Nyb2xsVmlldyogcGFyZW50OwotICAgIEd0a0NvbnRhaW5l
ciogY29udGFpbmluZ1dpbmRvdzsKLSAgICBib29sIHN1cHByZXNzSW52YWxpZGF0aW9uOwotCi0g
ICAgR2RrRHJhd2FibGUqIGdka0RyYXdhYmxlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biB3aWRnZXQgPyB3aWRnZXQtPndpbmRvdyA6IDA7Ci0gICAgfQotfTsKLQotV2lkZ2V0OjpXaWRn
ZXQoKQotICAgIDogZGF0YShuZXcgV2lkZ2V0UHJpdmF0ZSkKLXsKLSAgICBkYXRhLT53aWRnZXQg
PSAwOwotICAgIGRhdGEtPnBhcmVudCA9IDA7Ci0gICAgZGF0YS0+Y29udGFpbmluZ1dpbmRvdyA9
IDA7Ci0gICAgZGF0YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24gPSBmYWxzZTsKLX0KLQotR3RrV2lk
Z2V0KiBXaWRnZXQ6Omd0a1dpZGdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRhdGEtPndpZGdl
dDsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEd0a1dpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKLXsK
LSAgICBkYXRhLT53aWRnZXQgPSB3aWRnZXQ7Ci19Ci0KLVdpZGdldDo6fldpZGdldCgpCi17Ci0g
ICAgZGVsZXRlIGRhdGE7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRDb250YWluaW5nV2luZG93KEd0
a0NvbnRhaW5lciogY29udGFpbmluZ1dpbmRvdykKLXsKLSAgICBkYXRhLT5jb250YWluaW5nV2lu
ZG93ID0gY29udGFpbmluZ1dpbmRvdzsKLX0KLQotR3RrQ29udGFpbmVyKiBXaWRnZXQ6OmNvbnRh
aW5pbmdXaW5kb3coKSBjb25zdAotewotICAgIHJldHVybiBkYXRhLT5jb250YWluaW5nV2luZG93
OwotfQotCi12b2lkIFdpZGdldDo6c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKLXsKLSAgICBk
YXRhLT5jbGllbnQgPSBjOwotfQotCi1XaWRnZXRDbGllbnQqIFdpZGdldDo6Y2xpZW50KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gZGF0YS0+Y2xpZW50OwotfQotCi1JbnRSZWN0IFdpZGdldDo6ZnJh
bWVHZW9tZXRyeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRhdGEtPmZyYW1lUmVjdDsKLX0KLQot
dm9pZCBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBk
YXRhLT5mcmFtZVJlY3QgPSByOwotfQotCi12b2lkIFdpZGdldDo6c2V0UGFyZW50KFNjcm9sbFZp
ZXcqIHYpCi17Ci0gICAgZGF0YS0+cGFyZW50ID0gdjsKLX0KLQotU2Nyb2xsVmlldyogV2lkZ2V0
OjpwYXJlbnQoKSBjb25zdAotewotICAgIHJldHVybiBkYXRhLT5wYXJlbnQ7Ci19Ci0gCi12b2lk
IFdpZGdldDo6c2V0Rm9jdXMoKQotewotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhndGtXaWRn
ZXQoKSA/IGd0a1dpZGdldCgpIDogR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpKTsKLX0K
LQotdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKLXsKLSAgICBH
ZGtDdXJzb3IqIHBjdXIgPSBjdXJzb3IuaW1wbCgpOwotICAgIGlmICghcGN1cikKLSAgICAgICAg
cmV0dXJuOwotICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihkYXRhLT5nZGtEcmF3YWJsZSgpID8g
R0RLX1dJTkRPVyhkYXRhLT5nZGtEcmF3YWJsZSgpKSA6IEdUS19XSURHRVQoY29udGFpbmluZ1dp
bmRvdygpKS0+d2luZG93LCBwY3VyKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNob3coKQotewotICAg
IGlmICghZ3RrV2lkZ2V0KCkpCi0gICAgICAgICByZXR1cm47Ci0gICAgZ3RrX3dpZGdldF9zaG93
KGd0a1dpZGdldCgpKTsKLX0KLQotdm9pZCBXaWRnZXQ6OmhpZGUoKQotewotICAgIGlmICghZ3Rr
V2lkZ2V0KCkpCi0gICAgICAgICByZXR1cm47Ci0gICAgZ3RrX3dpZGdldF9oaWRlKGd0a1dpZGdl
dCgpKTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi1ib29sIFdpZGdldDo6aXNFbmFibGVkKCkgY29uc3QKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXaWRnZXQ6OnJl
bW92ZUZyb21QYXJlbnQoKQotewotICAgIGlmIChwYXJlbnQoKSkKLSAgICAgICAgcGFyZW50KCkt
PnJlbW92ZUNoaWxkKHRoaXMpOwotfQotCi0vKgotICogU3RyYXRlZ3kgdG8gcGFpbnRpbmcgYSBX
aWRnZXQ6Ci0gKiAgMS4pIGRvIG5vdCBwYWludCBpZiB0aGVyZSBpcyBubyBHdGtXaWRnZXQgc2V0
Ci0gKiAgMi4pIFdlIGFzc3VtZSB0aGF0IEdUS19OT19XSU5ET1cgaXMgc2V0IGFuZCB0aGF0IGdl
b21ldHJ5Q2hhbmdlZCBwb3NpdGlvbmVkCi0gKiAgICAgIHRoZSB3aWRnZXQgY29ycmVjdGx5LiBB
VE0gd2UgZG8gbm90IGhvbm9yIHRoZSBHcmFwaGljc0NvbnRleHQgdHJhbnNsYXRpb24uCi0gKi8K
LXZvaWQgV2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmKQotewotICAgIGlmICghZ3RrV2lkZ2V0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEd0
a1dpZGdldCogd2lkZ2V0ID0gZ3RrV2lkZ2V0KCk7Ci0gICAgQVNTRVJUKEdUS19XSURHRVRfTk9f
V0lORE9XKHdpZGdldCkpOwotCi0gICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhH
REtfRVhQT1NFKTsKLSAgICBldmVudC0+ZXhwb3NlID0gKmNvbnRleHQtPmdka0V4cG9zZUV2ZW50
KCk7Ci0gICAgZXZlbnQtPmV4cG9zZS5yZWdpb24gPSBndGtfd2lkZ2V0X3JlZ2lvbl9pbnRlcnNl
Y3Qod2lkZ2V0LCBldmVudC0+ZXhwb3NlLnJlZ2lvbik7Ci0KLSAgICAvKgotICAgICAqIFRoaXMg
d2lsbCBiZSB1bnJlZidlZCBieSBnZGtfZXZlbnRfZnJlZS4KLSAgICAgKi8KLSAgICBnX29iamVj
dF9yZWYoZXZlbnQtPmV4cG9zZS53aW5kb3cpOwotCi0gICAgLyoKLSAgICAgKiBJZiB3ZSBhcmUg
Z29pbmcgdG8gcGFpbnQgZG8gdGhlIHRyYW5zbGF0aW9uIGFuZCBHdGtBbGxvY2F0aW9uIG1hbmlw
dWxhdGlvbi4KLSAgICAgKi8KLSAgICBpZiAoIWdka19yZWdpb25fZW1wdHkoZXZlbnQtPmV4cG9z
ZS5yZWdpb24pKSB7Ci0gICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9z
ZS5yZWdpb24sICZldmVudC0+ZXhwb3NlLmFyZWEpOwotICAgICAgICBndGtfd2lkZ2V0X3NlbmRf
ZXhwb3NlKHdpZGdldCwgZXZlbnQpOwotICAgIH0KLQotICAgIGdka19ldmVudF9mcmVlKGV2ZW50
KTsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCi12b2lkIFdpZGdldDo6aW52YWxpZGF0ZSgpCi17Ci0gICAgaW52YWxp
ZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpOwotfQotCi12b2lkIFdp
ZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoZGF0
YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghcGFy
ZW50KCkpIHsKLSAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChj
b250YWluaW5nV2luZG93KCkpLCByZWN0LngoKSwgcmVjdC55KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgICAg
IGlmIChpc0ZyYW1lVmlldygpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4o
dGhpcyktPmFkZFRvRGlydHlSZWdpb24ocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBHZXQgdGhlIHJvb3Qgd2lkZ2V0LgotICAgIFNjcm9sbFZpZXcqIG91dGVybW9zdFZp
ZXcgPSBwYXJlbnQoKTsKLSAgICB3aGlsZSAob3V0ZXJtb3N0VmlldyAmJiBvdXRlcm1vc3RWaWV3
LT5wYXJlbnQoKSkKLSAgICAgICAgb3V0ZXJtb3N0VmlldyA9IG91dGVybW9zdFZpZXctPnBhcmVu
dCgpOwotICAgIGlmICghb3V0ZXJtb3N0VmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50
UmVjdCB3aW5kb3dSZWN0ID0gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhyZWN0KTsKLSAgICBn
dGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSks
IHdpbmRvd1JlY3QueCgpLCB3aW5kb3dSZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3aW5kb3dSZWN0LndpZHRoKCksIHdpbmRvd1JlY3QuaGVpZ2h0KCkpOwotICAgIG91
dGVybW9zdFZpZXctPmFkZFRvRGlydHlSZWdpb24od2luZG93UmVjdCk7Ci19Ci0KLUludFBvaW50
IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQp
IGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSBwb2ludDsKLSAgICBmb3IgKGNv
bnN0IFdpZGdldCAqcGFyZW50V2lkZ2V0ID0gcGFyZW50KCksICpjaGlsZFdpZGdldCA9IHRoaXM7
Ci0gICAgICAgICBwYXJlbnRXaWRnZXQ7Ci0gICAgICAgICBjaGlsZFdpZGdldCA9IHBhcmVudFdp
ZGdldCwgcGFyZW50V2lkZ2V0ID0gcGFyZW50V2lkZ2V0LT5wYXJlbnQoKSkKLSAgICAgICAgd2lu
ZG93UG9pbnQgPSBwYXJlbnRXaWRnZXQtPmNvbnZlcnRDaGlsZFRvU2VsZihjaGlsZFdpZGdldCwg
d2luZG93UG9pbnQpOwotICAgIHJldHVybiB3aW5kb3dQb2ludDsKLX0KLQotSW50UG9pbnQgV2lk
Z2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBj
b25zdAotewotICAgIEludFBvaW50IHdpZGdldFBvaW50ID0gcG9pbnQ7Ci0gICAgZm9yIChjb25z
dCBXaWRnZXQgKnBhcmVudFdpZGdldCA9IHBhcmVudCgpLCAqY2hpbGRXaWRnZXQgPSB0aGlzOwot
ICAgICAgICAgcGFyZW50V2lkZ2V0OwotICAgICAgICAgY2hpbGRXaWRnZXQgPSBwYXJlbnRXaWRn
ZXQsIHBhcmVudFdpZGdldCA9IHBhcmVudFdpZGdldC0+cGFyZW50KCkpCi0gICAgICAgIHdpZGdl
dFBvaW50ID0gcGFyZW50V2lkZ2V0LT5jb252ZXJ0U2VsZlRvQ2hpbGQoY2hpbGRXaWRnZXQsIHdp
ZGdldFBvaW50KTsKLSAgICByZXR1cm4gd2lkZ2V0UG9pbnQ7Ci19Ci0KLUludFJlY3QgV2lkZ2V0
Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17
Ci0gICAgSW50UmVjdCBjb252ZXJ0ZWRSZWN0ID0gcmVjdDsKLSAgICBjb252ZXJ0ZWRSZWN0LnNl
dExvY2F0aW9uKGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29udmVydGVkUmVjdC5sb2NhdGlv
bigpKSk7Ci0gICAgcmV0dXJuIGNvbnZlcnRlZFJlY3Q7Ci19Ci0KLUludFBvaW50IFdpZGdldDo6
Y29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBw
b2ludCkgY29uc3QKLXsKLSAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpICsgY2hpbGQtPngo
KSwgcG9pbnQueSgpICsgY2hpbGQtPnkoKSk7Ci19Ci0gCi1JbnRQb2ludCBXaWRnZXQ6OmNvbnZl
cnRTZWxmVG9DaGlsZChjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSAtIGNoaWxkLT54KCksIHBv
aW50LnkoKSAtIGNoaWxkLT55KCkpOwotfQotCi1ib29sIFdpZGdldDo6c3VwcHJlc3NJbnZhbGlk
YXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbjsK
LX0KLQotdm9pZCBXaWRnZXQ6OnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJvb2wgc3VwcHJlc3Mp
Ci17Ci0gICAgZGF0YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24gPSBzdXBwcmVzczsKLX0KLQotdm9p
ZCBXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0Ci17Ci19Ci19CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9XaWRnZXRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1dpZGdldEd0ay5jcHAJKHJldmlzaW9uIDI1MDU0KQkoZnJvbSBXZWJDb3JlL3BsYXRm
b3JtL2dkay9XaWRnZXRHZGsuY3BwOjI1MDU0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2lk
Z2V0R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2lkZ2V0LmgiCisKKyNpbmNsdWRlICJDdXJzb3IuaCIKKyNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2lkZ2V0UHJpdmF0ZSB7CitwdWJsaWM6CisgICAgR3Rr
V2lkZ2V0KiB3aWRnZXQ7CisgICAgV2lkZ2V0Q2xpZW50KiBjbGllbnQ7CisgICAgSW50UmVjdCBm
cmFtZVJlY3Q7CisKKyAgICBTY3JvbGxWaWV3KiBwYXJlbnQ7CisgICAgR3RrQ29udGFpbmVyKiBj
b250YWluaW5nV2luZG93OworICAgIGJvb2wgc3VwcHJlc3NJbnZhbGlkYXRpb247CisKKyAgICBH
ZGtEcmF3YWJsZSogZ2RrRHJhd2FibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdp
ZGdldCA/IHdpZGdldC0+d2luZG93IDogMDsKKyAgICB9Cit9OworCitXaWRnZXQ6OldpZGdldCgp
CisgICAgOiBkYXRhKG5ldyBXaWRnZXRQcml2YXRlKQoreworICAgIGRhdGEtPndpZGdldCA9IDA7
CisgICAgZGF0YS0+cGFyZW50ID0gMDsKKyAgICBkYXRhLT5jb250YWluaW5nV2luZG93ID0gMDsK
KyAgICBkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbiA9IGZhbHNlOworfQorCitHdGtXaWRnZXQq
IFdpZGdldDo6Z3RrV2lkZ2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGF0YS0+d2lkZ2V0Owor
fQorCit2b2lkIFdpZGdldDo6c2V0R3RrV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQoreworICAg
IGRhdGEtPndpZGdldCA9IHdpZGdldDsKK30KKworV2lkZ2V0Ojp+V2lkZ2V0KCkKK3sKKyAgICBk
ZWxldGUgZGF0YTsKK30KKwordm9pZCBXaWRnZXQ6OnNldENvbnRhaW5pbmdXaW5kb3coR3RrQ29u
dGFpbmVyKiBjb250YWluaW5nV2luZG93KQoreworICAgIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3cg
PSBjb250YWluaW5nV2luZG93OworfQorCitHdGtDb250YWluZXIqIFdpZGdldDo6Y29udGFpbmlu
Z1dpbmRvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3c7Cit9
CisKK3ZvaWQgV2lkZ2V0OjpzZXRDbGllbnQoV2lkZ2V0Q2xpZW50KiBjKQoreworICAgIGRhdGEt
PmNsaWVudCA9IGM7Cit9CisKK1dpZGdldENsaWVudCogV2lkZ2V0OjpjbGllbnQoKSBjb25zdAor
eworICAgIHJldHVybiBkYXRhLT5jbGllbnQ7Cit9CisKK0ludFJlY3QgV2lkZ2V0OjpmcmFtZUdl
b21ldHJ5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGF0YS0+ZnJhbWVSZWN0OworfQorCit2b2lk
IFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQoreworICAgIGRhdGEt
PmZyYW1lUmVjdCA9IHI7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyog
dikKK3sKKyAgICBkYXRhLT5wYXJlbnQgPSB2OworfQorCitTY3JvbGxWaWV3KiBXaWRnZXQ6OnBh
cmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPnBhcmVudDsKK30KKyAKK3ZvaWQgV2lk
Z2V0OjpzZXRGb2N1cygpCit7CisgICAgZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKGd0a1dpZGdldCgp
ID8gZ3RrV2lkZ2V0KCkgOiBHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSkpOworfQorCit2
b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3Vyc29yKQoreworICAgIEdka0N1
cnNvciogcGN1ciA9IGN1cnNvci5pbXBsKCk7CisgICAgaWYgKCFwY3VyKQorICAgICAgICByZXR1
cm47CisgICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKGRhdGEtPmdka0RyYXdhYmxlKCkgPyBHREtf
V0lORE9XKGRhdGEtPmdka0RyYXdhYmxlKCkpIDogR1RLX1dJREdFVChjb250YWluaW5nV2luZG93
KCkpLT53aW5kb3csIHBjdXIpOworfQorCit2b2lkIFdpZGdldDo6c2hvdygpCit7CisgICAgaWYg
KCFndGtXaWRnZXQoKSkKKyAgICAgICAgIHJldHVybjsKKyAgICBndGtfd2lkZ2V0X3Nob3coZ3Rr
V2lkZ2V0KCkpOworfQorCit2b2lkIFdpZGdldDo6aGlkZSgpCit7CisgICAgaWYgKCFndGtXaWRn
ZXQoKSkKKyAgICAgICAgIHJldHVybjsKKyAgICBndGtfd2lkZ2V0X2hpZGUoZ3RrV2lkZ2V0KCkp
OworfQorCit2b2lkIFdpZGdldDo6c2V0RW5hYmxlZChib29sKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgV2lkZ2V0Ojppc0VuYWJsZWQoKSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdpZGdldDo6cmVtb3Zl
RnJvbVBhcmVudCgpCit7CisgICAgaWYgKHBhcmVudCgpKQorICAgICAgICBwYXJlbnQoKS0+cmVt
b3ZlQ2hpbGQodGhpcyk7Cit9CisKKy8qCisgKiBTdHJhdGVneSB0byBwYWludGluZyBhIFdpZGdl
dDoKKyAqICAxLikgZG8gbm90IHBhaW50IGlmIHRoZXJlIGlzIG5vIEd0a1dpZGdldCBzZXQKKyAq
ICAyLikgV2UgYXNzdW1lIHRoYXQgR1RLX05PX1dJTkRPVyBpcyBzZXQgYW5kIHRoYXQgZ2VvbWV0
cnlDaGFuZ2VkIHBvc2l0aW9uZWQKKyAqICAgICAgdGhlIHdpZGdldCBjb3JyZWN0bHkuIEFUTSB3
ZSBkbyBub3QgaG9ub3IgdGhlIEdyYXBoaWNzQ29udGV4dCB0cmFuc2xhdGlvbi4KKyAqLwordm9p
ZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYp
Cit7CisgICAgaWYgKCFndGtXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3RrV2lk
Z2V0KiB3aWRnZXQgPSBndGtXaWRnZXQoKTsKKyAgICBBU1NFUlQoR1RLX1dJREdFVF9OT19XSU5E
T1cod2lkZ2V0KSk7CisKKyAgICBHZGtFdmVudCogZXZlbnQgPSBnZGtfZXZlbnRfbmV3KEdES19F
WFBPU0UpOworICAgIGV2ZW50LT5leHBvc2UgPSAqY29udGV4dC0+Z2RrRXhwb3NlRXZlbnQoKTsK
KyAgICBldmVudC0+ZXhwb3NlLnJlZ2lvbiA9IGd0a193aWRnZXRfcmVnaW9uX2ludGVyc2VjdCh3
aWRnZXQsIGV2ZW50LT5leHBvc2UucmVnaW9uKTsKKworICAgIC8qCisgICAgICogVGhpcyB3aWxs
IGJlIHVucmVmJ2VkIGJ5IGdka19ldmVudF9mcmVlLgorICAgICAqLworICAgIGdfb2JqZWN0X3Jl
ZihldmVudC0+ZXhwb3NlLndpbmRvdyk7CisKKyAgICAvKgorICAgICAqIElmIHdlIGFyZSBnb2lu
ZyB0byBwYWludCBkbyB0aGUgdHJhbnNsYXRpb24gYW5kIEd0a0FsbG9jYXRpb24gbWFuaXB1bGF0
aW9uLgorICAgICAqLworICAgIGlmICghZ2RrX3JlZ2lvbl9lbXB0eShldmVudC0+ZXhwb3NlLnJl
Z2lvbikpIHsKKyAgICAgICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChldmVudC0+ZXhwb3NlLnJl
Z2lvbiwgJmV2ZW50LT5leHBvc2UuYXJlYSk7CisgICAgICAgIGd0a193aWRnZXRfc2VuZF9leHBv
c2Uod2lkZ2V0LCBldmVudCk7CisgICAgfQorCisgICAgZ2RrX2V2ZW50X2ZyZWUoZXZlbnQpOwor
fQorCit2b2lkIFdpZGdldDo6c2V0SXNTZWxlY3RlZChib29sKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlKCkKK3sKKyAgICBpbnZhbGlkYXRl
UmVjdChJbnRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSk7Cit9CisKK3ZvaWQgV2lkZ2V0
OjppbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIGlmIChkYXRhLT5z
dXBwcmVzc0ludmFsaWRhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFwYXJlbnQo
KSkgeworICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKGNvbnRh
aW5pbmdXaW5kb3coKSksIHJlY3QueCgpLCByZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgaWYg
KGlzRnJhbWVWaWV3KCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGlz
KS0+YWRkVG9EaXJ0eVJlZ2lvbihyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEdldCB0aGUgcm9vdCB3aWRnZXQuCisgICAgU2Nyb2xsVmlldyogb3V0ZXJtb3N0VmlldyA9
IHBhcmVudCgpOworICAgIHdoaWxlIChvdXRlcm1vc3RWaWV3ICYmIG91dGVybW9zdFZpZXctPnBh
cmVudCgpKQorICAgICAgICBvdXRlcm1vc3RWaWV3ID0gb3V0ZXJtb3N0Vmlldy0+cGFyZW50KCk7
CisgICAgaWYgKCFvdXRlcm1vc3RWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0
IHdpbmRvd1JlY3QgPSBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KHJlY3QpOworICAgIGd0a193
aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSwgd2lu
ZG93UmVjdC54KCksIHdpbmRvd1JlY3QueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQoKSk7CisgICAgb3V0ZXJt
b3N0Vmlldy0+YWRkVG9EaXJ0eVJlZ2lvbih3aW5kb3dSZWN0KTsKK30KKworSW50UG9pbnQgV2lk
Z2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29u
c3QKK3sKKyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IHBvaW50OworICAgIGZvciAoY29uc3Qg
V2lkZ2V0ICpwYXJlbnRXaWRnZXQgPSBwYXJlbnQoKSwgKmNoaWxkV2lkZ2V0ID0gdGhpczsKKyAg
ICAgICAgIHBhcmVudFdpZGdldDsKKyAgICAgICAgIGNoaWxkV2lkZ2V0ID0gcGFyZW50V2lkZ2V0
LCBwYXJlbnRXaWRnZXQgPSBwYXJlbnRXaWRnZXQtPnBhcmVudCgpKQorICAgICAgICB3aW5kb3dQ
b2ludCA9IHBhcmVudFdpZGdldC0+Y29udmVydENoaWxkVG9TZWxmKGNoaWxkV2lkZ2V0LCB3aW5k
b3dQb2ludCk7CisgICAgcmV0dXJuIHdpbmRvd1BvaW50OworfQorCitJbnRQb2ludCBXaWRnZXQ6
OmNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
Cit7CisgICAgSW50UG9pbnQgd2lkZ2V0UG9pbnQgPSBwb2ludDsKKyAgICBmb3IgKGNvbnN0IFdp
ZGdldCAqcGFyZW50V2lkZ2V0ID0gcGFyZW50KCksICpjaGlsZFdpZGdldCA9IHRoaXM7CisgICAg
ICAgICBwYXJlbnRXaWRnZXQ7CisgICAgICAgICBjaGlsZFdpZGdldCA9IHBhcmVudFdpZGdldCwg
cGFyZW50V2lkZ2V0ID0gcGFyZW50V2lkZ2V0LT5wYXJlbnQoKSkKKyAgICAgICAgd2lkZ2V0UG9p
bnQgPSBwYXJlbnRXaWRnZXQtPmNvbnZlcnRTZWxmVG9DaGlsZChjaGlsZFdpZGdldCwgd2lkZ2V0
UG9pbnQpOworICAgIHJldHVybiB3aWRnZXRQb2ludDsKK30KKworSW50UmVjdCBXaWRnZXQ6OmNv
bnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAg
ICBJbnRSZWN0IGNvbnZlcnRlZFJlY3QgPSByZWN0OworICAgIGNvbnZlcnRlZFJlY3Quc2V0TG9j
YXRpb24oY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb252ZXJ0ZWRSZWN0LmxvY2F0aW9uKCkp
KTsKKyAgICByZXR1cm4gY29udmVydGVkUmVjdDsKK30KKworSW50UG9pbnQgV2lkZ2V0Ojpjb252
ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAoreworICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkgKyBjaGlsZC0+eCgpLCBw
b2ludC55KCkgKyBjaGlsZC0+eSgpKTsKK30KKyAKK0ludFBvaW50IFdpZGdldDo6Y29udmVydFNl
bGZUb0NoaWxkKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29u
c3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpIC0gY2hpbGQtPngoKSwgcG9pbnQu
eSgpIC0gY2hpbGQtPnkoKSk7Cit9CisKK2Jvb2wgV2lkZ2V0OjpzdXBwcmVzc0ludmFsaWRhdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uOworfQor
Cit2b2lkIFdpZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vbCBzdXBwcmVzcykKK3sK
KyAgICBkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbiA9IHN1cHByZXNzOworfQorCit2b2lkIFdp
ZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKK30KK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ2RrL0ltYWdlR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHAJKHJldmlzaW9uIDI1MDU0KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJbWFnZS5oIgotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0gCi0vLyBUaGlzIGZ1bmN0
aW9uIGxvYWRzIHJlc291cmNlcyBmcm9tIFdlYktpdAotVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJj
ZUludG9BcnJheShjb25zdCBjaGFyKik7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBC
aXRtYXBJbWFnZTo6aW5pdFBsYXRmb3JtRGF0YSgpCi17Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6
OmludmFsaWRhdGVQbGF0Zm9ybURhdGEoKQotewotfQotCi1JbWFnZSogSW1hZ2U6OmxvYWRQbGF0
Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGFyciA9
IGxvYWRSZXNvdXJjZUludG9BcnJheShuYW1lKTsKLSAgICBCaXRtYXBJbWFnZSogaW1nID0gbmV3
IEJpdG1hcEltYWdlOwotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IG5ldyBTaGFy
ZWRCdWZmZXIoYXJyLmRhdGEoKSwgYXJyLnNpemUoKSk7Ci0gICAgaW1nLT5zZXREYXRhKGJ1ZmZl
ciwgdHJ1ZSk7Ci0gICAgcmV0dXJuIGltZzsKLX0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ2RrL0ltYWdlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dkay9JbWFnZUd0ay5jcHAJKHJldmlzaW9uIDI0OTkyKQkoZnJvbSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHA6MjQ5OTIpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dkay9JbWFnZUd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyAKKy8vIFRoaXMgZnVuY3Rpb24gbG9h
ZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0CitWZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0Fy
cmF5KGNvbnN0IGNoYXIqKTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEJpdG1hcElt
YWdlOjppbml0UGxhdGZvcm1EYXRhKCkKK3sKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6aW52YWxp
ZGF0ZVBsYXRmb3JtRGF0YSgpCit7Cit9CisKK0ltYWdlKiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVz
b3VyY2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYXJyID0gbG9hZFJl
c291cmNlSW50b0FycmF5KG5hbWUpOworICAgIEJpdG1hcEltYWdlKiBpbWcgPSBuZXcgQml0bWFw
SW1hZ2U7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gbmV3IFNoYXJlZEJ1ZmZl
cihhcnIuZGF0YSgpLCBhcnIuc2l6ZSgpKTsKKyAgICBpbWctPnNldERhdGEoYnVmZmVyLCB0cnVl
KTsKKyAgICByZXR1cm4gaW1nOworfQorfQpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjUwNTQpCisrKyBX
ZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAw
Ny0wOC0xMyAgSnVhbiBBLiBTdWFyZXogUm9tZXJvICA8amFzdWFyZXpAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCVJlbmFtZWQgZmlsZXMgZnJv
bSAqR2RrIHRvICpHdGsgKHNlZSAjMTQ3MzIpLgorCisgICAgICAgICogR2RrTGF1bmNoZXIvQmFr
ZWZpbGVzLmJrZ2VuOgorICAgICAgICAqIEdka0xhdW5jaGVyL0dka0xhdW5jaGVyLnBybzogUmVt
b3ZlZC4KKyAgICAgICAgKiBHZGtMYXVuY2hlci9HdGtMYXVuY2hlci5wcm86IENvcGllZCBmcm9t
IFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL0dka0xhdW5jaGVyLnByby4KKyAgICAgICAgKiBHZGtM
YXVuY2hlci9nZGtsYXVuY2hlci5ia2w6IFJlbW92ZWQuCisgICAgICAgICogR2RrTGF1bmNoZXIv
Z3RrbGF1bmNoZXIuYmtsOiBDb3BpZWQgZnJvbSBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9nZGts
YXVuY2hlci5ia2wuCisgICAgICAgICogR2RrTGF1bmNoZXIvbWFpbi5jcHA6CisgICAgICAgICh1
cGRhdGVXaW5kb3dUaXRsZSk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBTY3JpcHRzL3J1
bi1sYXVuY2hlcjoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdGRpcnMucG06CisKIDIwMDctMDgt
MTIgIEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIEdlbmVyYXRlIHJl
c3VsdHMgZm9yIG5ldyB0ZXN0cyBpbiBhIG1vcmUgbG9naWNhbCBsb2NhdGlvbgpJbmRleDogV2Vi
S2l0VG9vbHMvR2RrTGF1bmNoZXIvQmFrZWZpbGVzLmJrZ2VuCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dFRvb2xzL0dka0xhdW5jaGVyL0Jha2VmaWxlcy5ia2dlbgkocmV2aXNpb24gMjUwNTQpCisrKyBX
ZWJLaXRUb29scy9HZGtMYXVuY2hlci9CYWtlZmlsZXMuYmtnZW4JKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgQnVpbGQgY29uZmlndXJhdGlvbiBzY3JpcHQgZm9yIEJha2VmaWxlLgog
PGJha2VmaWxlLWdlbj4KIAogICAgIDxpbnB1dD4KLSAgICAgICAgZ2RrbGF1bmNoZXIuYmtsCisg
ICAgICAgIGd0a2xhdW5jaGVyLmJrbAogICAgIDwvaW5wdXQ+CiAKICAgICA8IS0tIExpc3Qgb2Yg
b3V0cHV0IGZvcm1hdHMgdG8gZ2VuZXJhdGU6IC0tPgpJbmRleDogV2ViS2l0VG9vbHMvR2RrTGF1
bmNoZXIvR2RrTGF1bmNoZXIucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dka0xhdW5j
aGVyL0dka0xhdW5jaGVyLnBybwkocmV2aXNpb24gMjUwNTQpCisrKyBXZWJLaXRUb29scy9HZGtM
YXVuY2hlci9HZGtMYXVuY2hlci5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEsMTAgKzAsMCBAQAot
VEVNUExBVEUgPSBhcHAKLVNPVVJDRVMgKz0gbWFpbi5jcHAKLUNPTkZJRyAtPSBhcHBfYnVuZGxl
Ci0KLUJBU0VfRElSID0gJCRQV0QvLi4vLi4KLQotaW5jbHVkZSguLi8uLi9XZWJLaXQucHJpKQot
Ci0KLVFNQUtFX1JQQVRIRElSICs9ICQkT1VUUFVUX0RJUi9saWIKSW5kZXg6IFdlYktpdFRvb2xz
L0dka0xhdW5jaGVyL0d0a0xhdW5jaGVyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9H
ZGtMYXVuY2hlci9HdGtMYXVuY2hlci5wcm8JKHJldmlzaW9uIDI0OTkyKQkoZnJvbSBXZWJLaXRU
b29scy9HZGtMYXVuY2hlci9HZGtMYXVuY2hlci5wcm86MjQ5OTIpCisrKyBXZWJLaXRUb29scy9H
ZGtMYXVuY2hlci9HdGtMYXVuY2hlci5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBA
QAorVEVNUExBVEUgPSBhcHAKK1NPVVJDRVMgKz0gbWFpbi5jcHAKK0NPTkZJRyAtPSBhcHBfYnVu
ZGxlCisKK0JBU0VfRElSID0gJCRQV0QvLi4vLi4KKworaW5jbHVkZSguLi8uLi9XZWJLaXQucHJp
KQorCisKK1FNQUtFX1JQQVRIRElSICs9ICQkT1VUUFVUX0RJUi9saWIKSW5kZXg6IFdlYktpdFRv
b2xzL0dka0xhdW5jaGVyL2dka2xhdW5jaGVyLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29s
cy9HZGtMYXVuY2hlci9nZGtsYXVuY2hlci5ia2wJKHJldmlzaW9uIDI1MDU0KQorKysgV2ViS2l0
VG9vbHMvR2RrTGF1bmNoZXIvZ2RrbGF1bmNoZXIuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg0
ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTwhLS0gZ2VuZXJhdGUgR05VbWFrZWZp
bGUgd2l0aCAnYmFrZWZpbGUgLWYgZ251IGdka2xhdW5jaGVyLmJrbCcgLS0+Ci0KLTxtYWtlZmls
ZT4KLSAgICA8aW5jbHVkZSBmaWxlPSIuLi8uLi9CYWtlZmlsZXMvcHJlc2V0cy5ia2wiIC8+Ci0K
LSAgICA8dGVtcGxhdGUgaWQ9IndlYmNvcmVfZ2RrX2xpbmsiIHRlbXBsYXRlPSJndGssZnJlZXR5
cGUsY3VybCI+Ci0gICAgICAgIDxkZWZpbmU+QVBQTEVfQ0hBTkdFUz0xPC9kZWZpbmU+Ci0gICAg
ICAgIDwhLS0gdGhpcyBHQyB2ZXJzaW9uIHJlcXVpcmVzIE1hY2gncyB0aHJlYWQgc3VzcGVuZC9y
ZXN1bWU6IC0tPgotICAgICAgICA8aWYgY29uZD0iUExBVEZPUk1fTUFDT1NYIT0nMSciPgotICAg
ICAgICAgICAgPGRlZmluZT5VU0VfQ09OU0VSVkFUSVZFX0dDPTA8L2RlZmluZT4KLSAgICAgICAg
PC9pZj4KLQotICAgICAgICA8aWYgY29uZD0iUExBVEZPUk1fTUFDT1NYPT0nMSciPgotICAgICAg
ICAgICAgPGRlZmluZT5VU0VfQ09OU0VSVkFUSVZFX0dDPTE8L2RlZmluZT4KLSAgICAgICAgPC9p
Zj4KLQotICAgICAgICA8ZGVmaW5lPkVOQUJMRV9YU0xUPTE8L2RlZmluZT4KLQotICAgICAgICA8
aWYgY29uZD0iRk9STUFUPT0nZ251JyI+Ci0gICAgICAgICAgICA8IS0tIEZJWE1FOiB3ZSBuZWVk
IHByb3BlciBjb25maWd1cmUgY2hlY2tzIC0tPgotICAgICAgICAgICAgPGRlZmluZT5IQVZFX0ZV
TkNfSVNOQU48L2RlZmluZT4KLSAgICAgICAgPC9pZj4KLQotICAgICAgICA8aWYgY29uZD0iUExB
VEZPUk1fV0lOMzI9PScxJyI+Ci0gICAgICAgICAgICA8aW5jbHVkZT4kKFNSQ0RJUikvb3Mtd2lu
MzI8L2luY2x1ZGU+Ci0gICAgICAgICAgICA8ZGVmaW5lPkhBVkVfU1lTX1RJTUVCX0g9MTwvZGVm
aW5lPgotICAgICAgICAgICAgPGRlZmluZT5IQVZFX0ZMT0FUX0g9MTwvZGVmaW5lPgotICAgICAg
ICAgICAgPGRlZmluZT5IQVZFX0ZVTkNfX0ZJTklURT0xPC9kZWZpbmU+Ci0gICAgICAgIDwvaWY+
Ci0KLSAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL0phdmFTY3JpcHRDb3JlPC9pbmNsdWRlPgot
Ci0gICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlPC9pbmNsdWRlPgotICAgICAgICA8
aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9EZXJpdmVkU291cmNlcy9XZWJDb3JlPC9pbmNsdWRl
PgotICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9iaW5kaW5ncy9qczwvaW5jbHVk
ZT4KLSAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvYnJpZGdlPC9pbmNsdWRlPgot
ICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9jc3M8L2luY2x1ZGU+Ci0gICAgICAg
IDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL2RvbTwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1
ZGU+JChUT1BESVIpL1dlYkNvcmUvZWRpdGluZzwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+
JChUT1BESVIpL1dlYkNvcmUvaGlzdG9yeTwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChU
T1BESVIpL1dlYkNvcmUvaHRtbDwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChUT1BESVIp
L1dlYkNvcmUvaW5jbHVkZTwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dl
YkNvcmUvbG9hZGVyPC9pbmNsdWRlPgotICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29y
ZS9sb2FkZXIvZ2RrPC9pbmNsdWRlPgotICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29y
ZS9wYWdlPC9pbmNsdWRlPgotICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9wYWdl
L2dkazwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGxhdGZv
cm08L2luY2x1ZGU+Ci0gICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3Jt
L2dkazwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm88L2luY2x1ZGU+Ci0gICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzPC9pbmNsdWRlPgotICAgICAgICA8aW5jbHVkZT4kKFRP
UERJUikvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWY8L2luY2x1ZGU+Ci0gICAg
ICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pw
ZWc8L2luY2x1ZGU+Ci0gICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZzwvaW5jbHVkZT4KLSAgICAgICAgPGluY2x1ZGU+JChUT1BESVIp
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYjwvaW5jbHVkZT4KLSAgICAgICAg
PGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnM8L2luY2x1
ZGU+Ci0gICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcms8
L2luY2x1ZGU+Ci0gICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvZ2RrPC9pbmNsdWRlPgotICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9y
ZW5kZXJpbmc8L2luY2x1ZGU+Ci0gICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3ht
bDwvaW5jbHVkZT4KLQotICAgICAgICA8cGljPm9uPC9waWM+Ci0gICAgICAgIDx0aHJlYWRpbmc+
bXVsdGk8L3RocmVhZGluZz4KLSAgICAgICAgPHdhcm5pbmdzPmRlZmF1bHQ8L3dhcm5pbmdzPgot
ICAgICAgICA8ZGVidWctaW5mbz5vbjwvZGVidWctaW5mbz4KLQotICAgICAgICA8ZGVmaW5lPkJV
SUxESU5HX0dES19fPC9kZWZpbmU+Ci0gICAgICAgIDxkZWZpbmU+QlVJTERJTkdfQ0FJUk9fXzwv
ZGVmaW5lPgotCi0gICA8L3RlbXBsYXRlPgotCi0gICAgPHNldCB2YXI9IlRPUERJUiI+Li4vLi48
L3NldD4KLSAgICA8ZXhlIGlkPSJnZGtsYXVuY2hlciIgdGVtcGxhdGU9IndlYmNvcmVfZ2RrX2xp
bmsiPgotICAgICAgICA8bGRmbGFncz4tTCQoVE9QRElSKS9XZWJDb3JlL1Byb2plY3RzL2dkayAt
bHdlYmNvcmUtZ2RrPC9sZGZsYWdzPgotICAgICAgICA8d2FybmluZ3M+ZGVmYXVsdDwvd2Fybmlu
Z3M+Ci0gICAgICAgIDxjeHgtcnR0aT5vZmY8L2N4eC1ydHRpPgotICAgICAgICA8Y3h4LWV4Y2Vw
dGlvbnM+b2ZmPC9jeHgtZXhjZXB0aW9ucz4KLSAgICAgICAgPGRlYnVnLWluZm8+b248L2RlYnVn
LWluZm8+Ci0gICAgICAgIDxzb3VyY2VzPgotICAgICAgICAgICAgbWFpbi5jcHAKLSAgICAgICAg
PC9zb3VyY2VzPgotICAgIDwvZXhlPgotPC9tYWtlZmlsZT4KLQpJbmRleDogV2ViS2l0VG9vbHMv
R2RrTGF1bmNoZXIvZ3RrbGF1bmNoZXIuYmtsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0dk
a0xhdW5jaGVyL2d0a2xhdW5jaGVyLmJrbAkocmV2aXNpb24gMjQ5OTIpCShmcm9tIFdlYktpdFRv
b2xzL0dka0xhdW5jaGVyL2dka2xhdW5jaGVyLmJrbDoyNDk5MikKKysrIFdlYktpdFRvb2xzL0dk
a0xhdW5jaGVyL2d0a2xhdW5jaGVyLmJrbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IS0tIGdlbmVyYXRlIEdOVW1ha2VmaWxlIHdpdGgg
J2Jha2VmaWxlIC1mIGdudSBnZGtsYXVuY2hlci5ia2wnIC0tPgorCis8bWFrZWZpbGU+CisgICAg
PGluY2x1ZGUgZmlsZT0iLi4vLi4vQmFrZWZpbGVzL3ByZXNldHMuYmtsIiAvPgorCisgICAgPHRl
bXBsYXRlIGlkPSJ3ZWJjb3JlX2dka19saW5rIiB0ZW1wbGF0ZT0iZ3RrLGZyZWV0eXBlLGN1cmwi
PgorICAgICAgICA8ZGVmaW5lPkFQUExFX0NIQU5HRVM9MTwvZGVmaW5lPgorICAgICAgICA8IS0t
IHRoaXMgR0MgdmVyc2lvbiByZXF1aXJlcyBNYWNoJ3MgdGhyZWFkIHN1c3BlbmQvcmVzdW1lOiAt
LT4KKyAgICAgICAgPGlmIGNvbmQ9IlBMQVRGT1JNX01BQ09TWCE9JzEnIj4KKyAgICAgICAgICAg
IDxkZWZpbmU+VVNFX0NPTlNFUlZBVElWRV9HQz0wPC9kZWZpbmU+CisgICAgICAgIDwvaWY+CisK
KyAgICAgICAgPGlmIGNvbmQ9IlBMQVRGT1JNX01BQ09TWD09JzEnIj4KKyAgICAgICAgICAgIDxk
ZWZpbmU+VVNFX0NPTlNFUlZBVElWRV9HQz0xPC9kZWZpbmU+CisgICAgICAgIDwvaWY+CisKKyAg
ICAgICAgPGRlZmluZT5FTkFCTEVfWFNMVD0xPC9kZWZpbmU+CisKKyAgICAgICAgPGlmIGNvbmQ9
IkZPUk1BVD09J2dudSciPgorICAgICAgICAgICAgPCEtLSBGSVhNRTogd2UgbmVlZCBwcm9wZXIg
Y29uZmlndXJlIGNoZWNrcyAtLT4KKyAgICAgICAgICAgIDxkZWZpbmU+SEFWRV9GVU5DX0lTTkFO
PC9kZWZpbmU+CisgICAgICAgIDwvaWY+CisKKyAgICAgICAgPGlmIGNvbmQ9IlBMQVRGT1JNX1dJ
TjMyPT0nMSciPgorICAgICAgICAgICAgPGluY2x1ZGU+JChTUkNESVIpL29zLXdpbjMyPC9pbmNs
dWRlPgorICAgICAgICAgICAgPGRlZmluZT5IQVZFX1NZU19USU1FQl9IPTE8L2RlZmluZT4KKyAg
ICAgICAgICAgIDxkZWZpbmU+SEFWRV9GTE9BVF9IPTE8L2RlZmluZT4KKyAgICAgICAgICAgIDxk
ZWZpbmU+SEFWRV9GVU5DX19GSU5JVEU9MTwvZGVmaW5lPgorICAgICAgICA8L2lmPgorCisgICAg
ICAgIDxpbmNsdWRlPiQoVE9QRElSKS9KYXZhU2NyaXB0Q29yZTwvaW5jbHVkZT4KKworICAgICAg
ICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZTwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+
JChUT1BESVIpL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZTwvaW5jbHVkZT4KKyAgICAg
ICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvYmluZGluZ3MvanM8L2luY2x1ZGU+CisgICAg
ICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL2JyaWRnZTwvaW5jbHVkZT4KKyAgICAgICAg
PGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvY3NzPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVk
ZT4kKFRPUERJUikvV2ViQ29yZS9kb208L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoVE9Q
RElSKS9XZWJDb3JlL2VkaXRpbmc8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoVE9QRElS
KS9XZWJDb3JlL2hpc3Rvcnk8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9X
ZWJDb3JlL2h0bWw8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3Jl
L2luY2x1ZGU8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL2xv
YWRlcjwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvbG9hZGVy
L2dkazwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGFnZTwv
aW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcGFnZS9nZGs8L2lu
Y2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtPC9pbmNs
dWRlPgorICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9nZGs8L2lu
Y2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvPC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljczwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmPC9pbmNsdWRlPgorICAgICAgICA8aW5j
bHVkZT4kKFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnPC9pbmNs
dWRlPgorICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmc8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRlPiQoVE9QRElSKS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWI8L2luY2x1ZGU+CisgICAgICAgIDxpbmNsdWRl
PiQoVE9QRElSKS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzPC9pbmNsdWRlPgorICAg
ICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrPC9pbmNsdWRl
PgorICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2dk
azwvaW5jbHVkZT4KKyAgICAgICAgPGluY2x1ZGU+JChUT1BESVIpL1dlYkNvcmUvcmVuZGVyaW5n
PC9pbmNsdWRlPgorICAgICAgICA8aW5jbHVkZT4kKFRPUERJUikvV2ViQ29yZS94bWw8L2luY2x1
ZGU+CisKKyAgICAgICAgPHBpYz5vbjwvcGljPgorICAgICAgICA8dGhyZWFkaW5nPm11bHRpPC90
aHJlYWRpbmc+CisgICAgICAgIDx3YXJuaW5ncz5kZWZhdWx0PC93YXJuaW5ncz4KKyAgICAgICAg
PGRlYnVnLWluZm8+b248L2RlYnVnLWluZm8+CisKKyAgICAgICAgPGRlZmluZT5CVUlMRElOR19H
REtfXzwvZGVmaW5lPgorICAgICAgICA8ZGVmaW5lPkJVSUxESU5HX0NBSVJPX188L2RlZmluZT4K
KworICAgPC90ZW1wbGF0ZT4KKworICAgIDxzZXQgdmFyPSJUT1BESVIiPi4uLy4uPC9zZXQ+Cisg
ICAgPGV4ZSBpZD0iZ2RrbGF1bmNoZXIiIHRlbXBsYXRlPSJ3ZWJjb3JlX2dka19saW5rIj4KKyAg
ICAgICAgPGxkZmxhZ3M+LUwkKFRPUERJUikvV2ViQ29yZS9Qcm9qZWN0cy9nZGsgLWx3ZWJjb3Jl
LWdkazwvbGRmbGFncz4KKyAgICAgICAgPHdhcm5pbmdzPmRlZmF1bHQ8L3dhcm5pbmdzPgorICAg
ICAgICA8Y3h4LXJ0dGk+b2ZmPC9jeHgtcnR0aT4KKyAgICAgICAgPGN4eC1leGNlcHRpb25zPm9m
ZjwvY3h4LWV4Y2VwdGlvbnM+CisgICAgICAgIDxkZWJ1Zy1pbmZvPm9uPC9kZWJ1Zy1pbmZvPgor
ICAgICAgICA8c291cmNlcz4KKyAgICAgICAgICAgIG1haW4uY3BwCisgICAgICAgIDwvc291cmNl
cz4KKyAgICA8L2V4ZT4KKzwvbWFrZWZpbGU+CisKSW5kZXg6IFdlYktpdFRvb2xzL0dka0xhdW5j
aGVyL2d0a2xhdW5jaGVyLmJrbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9HZGtMYXVuY2hl
ci9ndGtsYXVuY2hlci5ia2wJKHJldmlzaW9uIDI0OTkyKQorKysgV2ViS2l0VG9vbHMvR2RrTGF1
bmNoZXIvZ3RrbGF1bmNoZXIuYmtsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogPD94
bWwgdmVyc2lvbj0iMS4wIiA/PgotPCEtLSBnZW5lcmF0ZSBHTlVtYWtlZmlsZSB3aXRoICdiYWtl
ZmlsZSAtZiBnbnUgZ2RrbGF1bmNoZXIuYmtsJyAtLT4KKzwhLS0gZ2VuZXJhdGUgR05VbWFrZWZp
bGUgd2l0aCAnYmFrZWZpbGUgLWYgZ251IGd0a2xhdW5jaGVyLmJrbCcgLS0+CiAKIDxtYWtlZmls
ZT4KICAgICA8aW5jbHVkZSBmaWxlPSIuLi8uLi9CYWtlZmlsZXMvcHJlc2V0cy5ia2wiIC8+Cklu
ZGV4OiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9tYWluLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9HZGtMYXVuY2hlci9tYWluLmNwcAkocmV2aXNpb24gMjUwNTQpCisrKyBXZWJLaXRU
b29scy9HZGtMYXVuY2hlci9tYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBA
QCBzdGF0aWMgdm9pZCB1cmxCYXJFbnRlckNhbGxiYWNrKEd0a1dpZGdlCiBzdGF0aWMgdm9pZCB1
cGRhdGVXaW5kb3dUaXRsZSgpCiB7CiAgICAgR1N0cmluZyogc3RyaW5nID0gZ19zdHJpbmdfbmV3
KE5VTEwpOwotICAgIGdfc3RyaW5nX3ByaW50ZihzdHJpbmcsICJHZGtMYXVuY2hlciAlcyAgKCVk
LzEwMCkiLCBnVGl0bGUsIGdQcm9ncmVzcyk7CisgICAgZ19zdHJpbmdfcHJpbnRmKHN0cmluZywg
Ikd0a0xhdW5jaGVyICVzICAoJWQvMTAwKSIsIGdUaXRsZSwgZ1Byb2dyZXNzKTsKICAgICBnY2hh
ciogdGl0bGUgPSBnX3N0cmluZ19mcmVlKHN0cmluZywgRkFMU0UpOwogICAgIGd0a193aW5kb3df
c2V0X3RpdGxlKEdUS19XSU5ET1coZ1RvcExldmVsV2luZG93KSwgdGl0bGUpOwogICAgIGdfZnJl
ZSh0aXRsZSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFy
Z3ZbXSkgCiAKICAgICBnVG9wTGV2ZWxXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1RPUExFVkVMKTsKICAgICBndGtfd2luZG93X3NldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhn
VG9wTGV2ZWxXaW5kb3cpLCA4MDAsIDYwMCk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfbmFtZShnVG9w
TGV2ZWxXaW5kb3csICJHZGtMYXVuY2hlciIpOworICAgIGd0a193aWRnZXRfc2V0X25hbWUoZ1Rv
cExldmVsV2luZG93LCAiR3RrTGF1bmNoZXIiKTsKICAgICBHdGtXaWRnZXQqIHZib3ggPSBndGtf
dmJveF9uZXcoRkFMU0UsIDApOwogICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
Z1RvcExldmVsV2luZG93KSwgdmJveCk7CiAgICAgZ19zaWduYWxfY29ubmVjdChHX09CSkVDVChn
VG9wTGV2ZWxXaW5kb3cpLCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0soZnJhbWVEZXN0cm95Q2FsbGJh
Y2spLCBOVUxMKTsKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWxhdW5jaGVyCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWxhdW5jaGVyCShyZXZpc2lvbiAyNTA1
NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWxhdW5jaGVyCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw4ICs0OSw4IEBAIG15IEBhcmdzID0gQEFSR1Y7CiAkRU5We0xEX0xJQlJBUllfUEFUSH0g
PSAkcHJvZHVjdERpcjsKIAogaWYgKGlzR2RrKCkpIHsKLSAgJGxhdW5jaGVyUGF0aCA9ICIkbGF1
bmNoZXJQYXRoL1dlYktpdFRvb2xzL0dka0xhdW5jaGVyL0dka0xhdW5jaGVyIjsKLSAgIyBTdHJp
cCAtLWdkayBmcm9tIHRoZSBhcmctbGlzdCwgc2luY2Ugb3RoZXJ3aXNlIEdka0xhdW5jaGVyIHdp
bGwgdHJ5IHRvCisgICRsYXVuY2hlclBhdGggPSAiJGxhdW5jaGVyUGF0aC9XZWJLaXRUb29scy9H
ZGtMYXVuY2hlci9HdGtMYXVuY2hlciI7CisgICMgU3RyaXAgLS1nZGsgZnJvbSB0aGUgYXJnLWxp
c3QsIHNpbmNlIG90aGVyd2lzZSBHdGtMYXVuY2hlciB3aWxsIHRyeSB0bwogICAjIGludGVycHJl
dCBpdCBhcyBhIFVSTC4KICAgQGFyZ3MgPSBncmVwKCEvXigtLWdkaykkLywgQGFyZ3MpOwogfSBl
bHNpZiAoaXNRdCgpKSB7CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3N2bi1jcmVhdGUtcGF0
Y2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9zdm4tY3JlYXRlLXBhdGNoCShy
ZXZpc2lvbiAyNTA1NCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvc3ZuLWNyZWF0ZS1wYXRjaAko
d29ya2luZyBjb3B5KQpAQCAtMzA2LDcgKzMwNiw3IEBAIHN1YiBtYW51ZmFjdHVyZVBhdGNoRm9y
QWRkaXRpb25XaXRoSGlzdG8KICAgICAgICAgbXkgJG1pbWVUeXBlID0gZmluZE1pbWVUeXBlKCRm
aWxlLCAkc291cmNlUmV2aXNpb24pOwogICAgICAgICBwcmludCAic3ZuOm1pbWUtdHlwZSA9ICR7
bWltZVR5cGV9XG5cbiI7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnQgYHN2biBjYXQgJHtz
b3VyY2VGaWxlfSB8IGRpZmYgLXUgL2Rldi9udWxsIC0gfCB0YWlsICszYDsKKyAgICAgICAgcHJp
bnQgYHN2biBjYXQgJHtzb3VyY2VGaWxlfSB8IGRpZmYgLXUgL2Rldi9udWxsIC0gfCB0YWlsIC1u
ICszYDsKICAgICB9CiB9CiAKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5w
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdGRpcnMucG0JKHJldmlz
aW9uIDI1MDU0KQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCSh3b3JraW5n
IGNvcHkpCkBAIC00NTQsNyArNDU0LDcgQEAgc3ViIGxhdW5jaGVyUGF0aCgpCiBzdWIgbGF1bmNo
ZXJOYW1lKCkKIHsKICAgICBpZiAoaXNHZGsoKSkgewotICAgICAgICByZXR1cm4gIkdka0xhdW5j
aGVyIjsKKyAgICAgICAgcmV0dXJuICJHdGtMYXVuY2hlciI7CiAgICAgfSBlbHNpZiAoaXNRdCgp
KSB7CiAgICAgICAgIHJldHVybiAiUXRMYXVuY2hlciI7CiAgICAgfSBlbHNpZiAoaXNPU1goKSB8
fCBpc0N5Z3dpbigpKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16008</attachid>
            <date>2007-08-17 08:05:25 -0700</date>
            <delta_ts>2007-08-21 09:43:08 -0700</delta_ts>
            <desc>Rename files from *Gdk to *Gtk (first part).</desc>
            <filename>rename_gdk_to_gtk_r2.patch</filename>
            <type>text/plain</type>
            <size>5256</size>
            <attacher name="Juan A. Suarez">jasuarez</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI1MTI0KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAgQEAKKzIwMDctMDgtMTcgIEp1YW4gQS4gU3VhcmV6IFJv
bWVybyAgPGphc3VhcmV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3JlbmFtZS1nZGstdG8tZ3RrOiBBZGRlZC4g
VGhpcyBzY3JpcHQgcmVuYW1lcyBmcm9tICpHZGsgdG8KKwkqR3RrIChzZWUgYnVnICMxNDczMiku
CisKIDIwMDctMDgtMTYgIEFsaWNlIExpdSAgPGFsaWNlLmxpdUBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgTWFjaWVqLgpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy9yZW5hbWUt
Z2RrLXRvLWd0awo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3JlbmFtZS1nZGst
dG8tZ3RrCShyZXZpc2lvbiAwKQorKysgV2ViS2l0VG9vbHMvU2NyaXB0cy9yZW5hbWUtZ2RrLXRv
LWd0awkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorIyEvYmluL3NoCisKKyMgUmVuYW1l
IGZpbGVzIGZyb20gKkdkayB0byAqR3RrCisKK3N2biByZW5hbWUgLi9XZWJLaXRUb29scy9HZGtM
YXVuY2hlci9nZGtsYXVuY2hlci5ia2wgLi9XZWJLaXRUb29scy9HZGtMYXVuY2hlci9ndGtsYXVu
Y2hlci5ia2wKK3N2biByZW5hbWUgLi9XZWJLaXRUb29scy9HZGtMYXVuY2hlci9HZGtMYXVuY2hl
ci5wcm8gLi9XZWJLaXRUb29scy9HZGtMYXVuY2hlci9HdGtMYXVuY2hlci5wcm8KK3N2biByZW5h
bWUgLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHAgLi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dkay9JbWFnZUd0ay5jcHAKK3N2biByZW5hbWUgLi9XZWJDb3Jl
L3BsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcCAuL1dlYkNvcmUvcGxhdGZvcm0v
Z2RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCitzdm4gcmVuYW1lIC4vV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvRm9udENhY2hlR2RrLmNwcCAuL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRDYWNoZUd0
ay5jcHAKK3N2biByZW5hbWUgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5o
IC4vV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHdGsuaAorc3ZuIHJlbmFtZSAuL1dl
YkNvcmUvcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9D
dXJzb3JHdGsuY3BwCitzdm4gcmVuYW1lIC4vV2ViQ29yZS9wbGF0Zm9ybS9nZGsvS2V5RXZlbnRH
ZGsuY3BwIC4vV2ViQ29yZS9wbGF0Zm9ybS9nZGsvS2V5RXZlbnRHdGsuY3BwCitzdm4gcmVuYW1l
IC4vV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTG9nZ2luZ0dkay5jcHAgLi9XZWJDb3JlL3BsYXRmb3Jt
L2dkay9Mb2dnaW5nR3RrLmNwcAorc3ZuIHJlbmFtZSAuL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1dp
ZGdldEdkay5jcHAgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHdGsuY3BwCitzdm4gcmVu
YW1lIC4vV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUG9wdXBNZW51R2RrLmNwcCAuL1dlYkNvcmUvcGxh
dGZvcm0vZ2RrL1BvcHVwTWVudUd0ay5jcHAKK3N2biByZW5hbWUgLi9XZWJDb3JlL3BsYXRmb3Jt
L2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHAgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0
Zm9ybVNjcm9sbEJhckd0ay5jcHAKK3N2biByZW5hbWUgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9E
cmFnSW1hZ2VHZGsuY3BwIC4vV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRHJhZ0ltYWdlR3RrLmNwcAor
c3ZuIHJlbmFtZSAuL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwIC4vV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEd0ay5jcHAKK3N2biByZW5hbWUgLi9XZWJDb3Jl
L3BsYXRmb3JtL2dkay9NSU1FVHlwZVJlZ2lzdHJ5R2RrLmNwcCAuL1dlYkNvcmUvcGxhdGZvcm0v
Z2RrL01JTUVUeXBlUmVnaXN0cnlHdGsuY3BwCitzdm4gcmVuYW1lIC4vV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvTW91c2VFdmVudEdkay5jcHAgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9Nb3VzZUV2ZW50
R3RrLmNwcAorc3ZuIHJlbmFtZSAuL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsu
Y3BwIC4vV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0d0ay5jcHAKK3N2biByZW5hbWUg
Li9XZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAgLi9XZWJDb3Jl
L3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUd0ay5jcHAKK3N2biByZW5hbWUgLi9XZWJD
b3JlL3BsYXRmb3JtL2dkay9Db29raWVKYXJHZGsuY3BwIC4vV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
Q29va2llSmFyR3RrLmNwcAorc3ZuIHJlbmFtZSAuL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRH
ZGsuY3BwIC4vV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udEd0ay5jcHAKK3N2biByZW5hbWUgLi9X
ZWJDb3JlL3BsYXRmb3JtL2dkay9Tb3VuZEdkay5jcHAgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9T
b3VuZEd0ay5jcHAKK3N2biByZW5hbWUgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9EcmFnRGF0YUdk
ay5jcHAgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9EcmFnRGF0YUd0ay5jcHAKK3N2biByZW5hbWUg
Li9XZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVlbkdkay5jcHAgLi9XZWJDb3JlL3Bs
YXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAKK3N2biByZW5hbWUgLi9XZWJDb3JlL3Bs
YXRmb3JtL2dkay9Gb250RGF0YUdkay5jcHAgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250RGF0
YUd0ay5jcHAKK3N2biByZW5hbWUgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdk
ay5jcHAgLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUd0ay5jcHAKK3N2biByZW5h
bWUgLi9XZWJDb3JlL1Byb2plY3RzL2dkay93ZWJjb3JlLWdkay5ia2wgLi9XZWJDb3JlL1Byb2pl
Y3RzL2dkay93ZWJjb3JlLWd0ay5ia2wKK3N2biByZW5hbWUgLi9XZWJDb3JlL2xvYWRlci9nZGsv
RG9jdW1lbnRMb2FkZXJHZGsuY3BwIC4vV2ViQ29yZS9sb2FkZXIvZ2RrL0RvY3VtZW50TG9hZGVy
R3RrLmNwcAorc3ZuIHJlbmFtZSAuL1dlYkNvcmUvcGFnZS9nZGsvRXZlbnRIYW5kbGVyR2RrLmNw
cCAuL1dlYkNvcmUvcGFnZS9nZGsvRXZlbnRIYW5kbGVyR3RrLmNwcAorc3ZuIHJlbmFtZSAuL1dl
YkNvcmUvcGFnZS9nZGsvRnJhbWVHZGsuY3BwIC4vV2ViQ29yZS9wYWdlL2dkay9GcmFtZUd0ay5j
cHAKK3N2biByZW5hbWUgLi9XZWJDb3JlL3BhZ2UvZ2RrL0RyYWdDb250cm9sbGVyR2RrLmNwcCAu
L1dlYkNvcmUvcGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwCisKKyMgVXBkYXRlIHJlZmVy
ZW5jZXMgaW4gLi9XZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUd0ay5jcHAKK3NlZCAt
aSAicy9SZW5kZXJUaGVtZUdka1wuaC9SZW5kZXJUaGVtZUd0a1wuaC9nIiAuL1dlYkNvcmUvcGxh
dGZvcm0vZ2RrL1JlbmRlclRoZW1lR3RrLmNwcAorIyBVcGRhdGUgcmVmZXJlbmNlcyBpbiBXZWJL
aXQucHJvCitzZWQgLWkgInMvR2RrTGF1bmNoZXIvR2RrTGF1bmNoZXJcL0d0a0xhdW5jaGVyLnBy
by9nIiBXZWJLaXQucHJvCisKKyMgVXBkYXRlIHJlZmVyZW5jZXMgaW4gV2ViQ29yZS9XZWJDb3Jl
LnBybworc2VkIC1pICJzL0dka1wuY3BwL0d0a1wuY3BwL2ciIFdlYkNvcmUvV2ViQ29yZS5wcm8K
K3NlZCAtaSAicy9XZWJLaXRHZGsvV2ViS2l0R3RrL2ciIFdlYkNvcmUvV2ViQ29yZS5wcm8KKwor
IyBVcGRhdGUgcmVmZXJlbmNlcyBpbiBXZWJLaXQucHJpCitzZWQgLWkgInMvV2ViS2l0R2RrL1dl
YktpdEd0ay9nIiBXZWJLaXQucHJpCisKKyMgVXBkYXRlIHJlZmVyZW5jZXMgaW4gV2ViQ29yZS9X
ZWJDb3JlU291cmNlcy5ia2wKK3NlZCAtaSAicy9HZGtcLmNwcC9HdGtcLmNwcC9nIiBXZWJDb3Jl
L1dlYkNvcmVTb3VyY2VzLmJrbAorCisjIFVwZGF0ZSByZWZlcmVuY2VzIGluIFdlYkNvcmUvUHJv
amVjdHMvZ2RrL3dlYmNvcmUtZ3RrLmJrbAorc2VkIC1pICJzL0dka1wuY3BwL0d0a1wuY3BwL2ci
IFdlYkNvcmUvUHJvamVjdHMvZ2RrL3dlYmNvcmUtZ3RrLmJrbAorCisjIFVwZGF0ZSByZWZlcmVu
Y2VzIGluIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL0Jha2VmaWxlcy5ia2dlbgorc2VkIC1pICJz
L2dka2xhdW5jaGVyL2d0a2xhdW5jaGVyL2ciIFdlYktpdFRvb2xzL0dka0xhdW5jaGVyL0Jha2Vm
aWxlcy5ia2dlbgorCisjIFVwZGF0ZSByZWZlcmVuY2VzIGluIFdlYktpdFRvb2xzL0dka0xhdW5j
aGVyL2d0a2xhdW5jaGVyLmJrbAorc2VkIC1pICJzL2dka2xhdW5jaGVyXC5ia2wvZ3RrbGF1bmNo
ZXJcLmJrbC9nIiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9ndGtsYXVuY2hlci5ia2wKKworIyBV
cGRhdGUgcmVmZXJlbmNlcyBpbiBXZWJLaXRUb29scy9HZGtMYXVuY2hlci9tYWluLmNwcAorc2Vk
IC1pICJzL0dka0xhdW5jaGVyL0d0a0xhdW5jaGVyL2ciIFdlYktpdFRvb2xzL0dka0xhdW5jaGVy
L21haW4uY3BwCisKKyMgVXBkYXRlIHJlZmVyZW5jZXMgaW4gV2ViS2l0VG9vbHMvU2NyaXB0cy9y
dW4tbGF1bmNoZXIKK3NlZCAtaSAicy9HZGtMYXVuY2hlclwvR2RrTGF1bmNoZXIvR2RrTGF1bmNo
ZXJcL0d0a0xhdW5jaGVyL2ciIFdlYktpdFRvb2xzL1NjcmlwdHMvcnVuLWxhdW5jaGVyCisKKyMg
VXBkYXRlIHJlZmVyZW5jZXMgaW4gV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtCitz
ZWQgLWkgInMvR2RrTGF1bmNoZXIvR3RrTGF1bmNoZXIvZyIgV2ViS2l0VG9vbHMvU2NyaXB0cy93
ZWJraXRkaXJzLnBtCitzZWQgLWkgInMvV2ViS2l0R2RrL1dlYktpdEd0ay9nIiBXZWJLaXRUb29s
cy9TY3JpcHRzL3dlYmtpdGRpcnMucG0KKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViS2l0VG9v
bHMvU2NyaXB0cy9yZW5hbWUtZ2RrLXRvLWd0awpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpleGVjdXRh
YmxlCiAgICsgKgoK
</data>
<flag name="review"
          id="6717"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16054</attachid>
            <date>2007-08-21 09:43:08 -0700</date>
            <delta_ts>2007-09-22 13:41:22 -0700</delta_ts>
            <desc>Rename files from *Gdk to *Gtk (first part)</desc>
            <filename>rename_gdk_to_gtk_r3.patch</filename>
            <type>text/plain</type>
            <size>297963</size>
            <attacher name="Juan A. Suarez">jasuarez</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTE2OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsOTEgQEAKKzIwMDctMDgtMjEgIEp1YW4gQS4gU3VhcmV6IFJvbWVybyAgPGphc3Vh
cmV6QGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV0FSTklORzogTk8gVEVTVCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisJCisJUmVu
YW1lZCBmaWxlcyBmcm9tICpHZGsgdG8gKkd0ayAoc2VlICMxNDczMikuCisKKyAgICAgICAgKiBQ
cm9qZWN0cy9nZGsvd2ViY29yZS1nZGsuYmtsOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAg
ICAgICAqIFdlYkNvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBsb2FkZXIvZ2RrL0RvY3VtZW50
TG9hZGVyR2RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsb2FkZXIvZ2RrL0RvY3VtZW50TG9h
ZGVyR3RrLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9sb2FkZXIvZ2RrL0RvY3VtZW50TG9hZGVy
R2RrLmNwcC4KKyAgICAgICAgKiBwYWdlL2dkay9EcmFnQ29udHJvbGxlckdkay5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwOiBDb3BpZWQgZnJv
bSBXZWJDb3JlL3BhZ2UvZ2RrL0RyYWdDb250cm9sbGVyR2RrLmNwcC4KKyAgICAgICAgKiBwYWdl
L2dkay9FdmVudEhhbmRsZXJHZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvZ2RrL0V2
ZW50SGFuZGxlckd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGFnZS9nZGsvRXZlbnRIYW5k
bGVyR2RrLmNwcC4KKyAgICAgICAgKiBwYWdlL2dkay9GcmFtZUdkay5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9nZGsvRnJhbWVHdGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BhZ2Uv
Z2RrL0ZyYW1lR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvQ29va2llSmFyR3RrLmNwcDogQ29w
aWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNwcC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9nZGsvQ3Vyc29yR3RrLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ3Vy
c29yR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRHJhZ0RhdGFHZGsuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dkay9EcmFnRGF0YUd0ay5jcHA6IENvcGllZCBmcm9t
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0RyYWdEYXRhR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9nZGsvRHJhZ0ltYWdlR2RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsv
RHJhZ0ltYWdlR3RrLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRHJhZ0lt
YWdlR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udENhY2hlR2RrLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udENhY2hlR3RrLmNwcDogQ29waWVkIGZy
b20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udENhY2hlR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dk
ay9Gb250RGF0YUd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRE
YXRhR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udEdkay5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ2RrL0ZvbnRHdGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9Gb250R2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udFBs
YXRmb3JtRGF0YUdkay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2RrL0ZvbnRQ
bGF0Zm9ybURhdGFHdGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250
UGxhdGZvcm1EYXRhR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvR2x5cGhQYWdlVHJl
ZU5vZGVHZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dkay9HbHlwaFBhZ2VU
cmVlTm9kZUd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFn
ZVRyZWVOb2RlR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvS2V5RXZlbnRHZGsuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dkay9LZXlFdmVudEd0ay5jcHA6IENvcGll
ZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9nZGsvTG9nZ2luZ0dkay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z2RrL0xvZ2dpbmdHdGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Mb2dn
aW5nR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvTUlNRVR5cGVSZWdpc3RyeUdkay5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2RrL01JTUVUeXBlUmVnaXN0cnlHdGsu
Y3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9NSU1FVHlwZVJlZ2lzdHJ5R2Rr
LmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHdGsuY3BwOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9nZGsvUGxhdGZvcm1TY3JlZW5HZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dkay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1BsYXRmb3JtU2NyZWVuR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUGxhdGZv
cm1TY3JvbGxCYXJHZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dkay9QbGF0
Zm9ybVNjcm9sbEJhckd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Bs
YXRmb3JtU2Nyb2xsQmFyR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUG9wdXBNZW51
R2RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvUG9wdXBNZW51R3RrLmNw
cDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUG9wdXBNZW51R2RrLmNwcC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5oOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dkay9SZW5kZXJUaGVtZUd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnRoZW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0ayk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OmFkZEludHJpbnNpY01hcmdpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnN1cHBvcnRzRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVHdGs6OmRldGVybWluZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjpkZXRlcm1pbmVTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6Omdl
dFRoZW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2ti
b3hTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludENoZWNrYm94
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50UmFkaW8pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lR3RrOjphZGp1c3RUZXh0RmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVHdGs6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
dGs6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjpzeXN0ZW1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpndGtCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6Omd0a0NoZWNrYm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpndGtSYWRpb0J1dHRvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6Z3RrV2luZG93Q29udGFpbmVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHdGsuaDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvU2Nyb2xs
Vmlld0dkay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdH
dGsuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNw
cC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvU291bmRHZGsuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dkay9Tb3VuZEd0ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1NvdW5kR2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdk
ay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHdGsuY3Bw
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2RrLmNwcC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9nZGsvV2lkZ2V0R3RrLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvV2lkZ2V0R2RrLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VH
ZGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dkay9JbWFnZUd0
ay5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2RrL0ltYWdlR2Rr
LmNwcC4KKwogMjAwNy0wOC0yMCAgSm9obiBTdWxsaXZhbiAgPHN1bGxpdmFuQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
cHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDI1MTY5KQor
KysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtODYyLDM1ICs4NjIsMzUg
QEAgZ2RrLXBvcnQgewogICAgIFNPVVJDRVMgKz0gXAogICAgICAgICBwbGF0Zm9ybS9UZXh0Q29k
ZWNJQ1UuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwIFwK
LSAgICAgICAgcGFnZS9nZGsvRXZlbnRIYW5kbGVyR2RrLmNwcCBcCi0gICAgICAgIHBhZ2UvZ2Rr
L0ZyYW1lR2RrLmNwcCBcCi0gICAgICAgIHBhZ2UvZ2RrL0RyYWdDb250cm9sbGVyR2RrLmNwcCBc
Ci0gICAgICAgIGxvYWRlci9nZGsvRG9jdW1lbnRMb2FkZXJHZGsuY3BwIFwKLSAgICAgICAgcGxh
dGZvcm0vZ2RrL0Nvb2tpZUphckdkay5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9nZGsvQ3Vyc29y
R2RrLmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dkay9EcmFnRGF0YUdkay5jcHAgXAotICAgICAg
ICBwbGF0Zm9ybS9nZGsvRHJhZ0ltYWdlR2RrLmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dkay9G
b250Q2FjaGVHZGsuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnREYXRhR2RrLmNwcCBc
Ci0gICAgICAgIHBsYXRmb3JtL2dkay9Gb250R2RrLmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dk
ay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dkay9HbHlwaFBh
Z2VUcmVlTm9kZUdkay5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9nZGsvS2V5RXZlbnRHZGsuY3Bw
IFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL0xvZ2dpbmdHZGsuY3BwIFwKLSAgICAgICAgcGxhdGZv
cm0vZ2RrL01JTUVUeXBlUmVnaXN0cnlHZGsuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL01v
dXNlRXZlbnRHZGsuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2NyZWVuR2Rr
LmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHAgXAot
ICAgICAgICBwbGF0Zm9ybS9nZGsvUG9wdXBNZW51R2RrLmNwcCBcCi0gICAgICAgIHBsYXRmb3Jt
L2dkay9SZW5kZXJUaGVtZUdkay5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9nZGsvU2Nyb2xsVmll
d0dkay5jcHAgXAorICAgICAgICBwYWdlL2dkay9FdmVudEhhbmRsZXJHdGsuY3BwIFwKKyAgICAg
ICAgcGFnZS9nZGsvRnJhbWVHdGsuY3BwIFwKKyAgICAgICAgcGFnZS9nZGsvRHJhZ0NvbnRyb2xs
ZXJHdGsuY3BwIFwKKyAgICAgICAgbG9hZGVyL2dkay9Eb2N1bWVudExvYWRlckd0ay5jcHAgXAor
ICAgICAgICBwbGF0Zm9ybS9nZGsvQ29va2llSmFyR3RrLmNwcCBcCisgICAgICAgIHBsYXRmb3Jt
L2dkay9DdXJzb3JHdGsuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ2RrL0RyYWdEYXRhR3RrLmNw
cCBcCisgICAgICAgIHBsYXRmb3JtL2dkay9EcmFnSW1hZ2VHdGsuY3BwIFwKKyAgICAgICAgcGxh
dGZvcm0vZ2RrL0ZvbnRDYWNoZUd0ay5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udERh
dGFHdGsuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRHdGsuY3BwIFwKKyAgICAgICAg
cGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0v
Z2RrL0dseXBoUGFnZVRyZWVOb2RlR3RrLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dkay9LZXlF
dmVudEd0ay5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9nZGsvTG9nZ2luZ0d0ay5jcHAgXAorICAg
ICAgICBwbGF0Zm9ybS9nZGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAgXAorICAgICAgICBwbGF0
Zm9ybS9nZGsvTW91c2VFdmVudEd0ay5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9nZGsvUGxhdGZv
cm1TY3JlZW5HdGsuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFy
R3RrLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dkay9Qb3B1cE1lbnVHdGsuY3BwIFwKKyAgICAg
ICAgcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR3RrLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dk
ay9TY3JvbGxWaWV3R3RrLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dkay9TaGFyZWRUaW1lckxp
bnV4LmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dkay9Tb3VuZEdkay5jcHAgXAorICAgICAgICBw
bGF0Zm9ybS9nZGsvU291bmRHdGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2RrL1N5c3RlbVRp
bWVMaW51eC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNw
cCBcCi0gICAgICAgIHBsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2RrLmNwcCBcCi0gICAgICAgIHBs
YXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ2Rr
L0ltYWdlR2RrLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dkay9XaGVlbEV2ZW50R3RrLmNwcCBc
CisgICAgICAgIHBsYXRmb3JtL2dkay9XaWRnZXRHdGsuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ2RrL0ltYWdlR3RrLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9SZXNvdXJjZUhhbmRsZUN1cmwuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9BZmZpbmVUcmFuc2Zvcm1DYWlyby5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlU291
cmNlcy5ia2wKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHJldmlz
aW9uIDI1MTY5KQorKysgV2ViQ29yZS9XZWJDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkK
QEAgLTEyMyw5ICsxMjMsOSBAQAogICAgICAgICBwYWdlL01vdXNlRXZlbnRXaXRoSGl0VGVzdFJl
c3VsdHMuY3BwCiAgICAgICAgIHBhZ2UvUGFnZS5jcHAKICAgICAgICAgcGFnZS9TZXR0aW5ncy5j
cHAKLSAgICAgICAgcGFnZS9nZGsvRXZlbnRIYW5kbGVyR2RrLmNwcAorICAgICAgICBwYWdlL2dk
ay9FdmVudEhhbmRsZXJHdGsuY3BwCiAgICAgICAgIHBhZ2UvZ2RrL0NvbnRleHRNZW51Q2xpZW50
R2RrLmNwcAotICAgICAgICBwYWdlL2dkay9EcmFnQ29udHJvbGxlckdkay5jcHAKKyAgICAgICAg
cGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHdGsuY3BwCiAgICAgICAgIHBhZ2UvZ2RrL0luc3BlY3Rv
ckNsaWVudEdkay5jcHAKICAgICA8L3NldD4KIApAQCAtMTUzLDcgKzE1Myw3IEBACiAgICAgICAg
IGxvYWRlci9UZXh0RG9jdW1lbnQuY3BwCiAgICAgICAgIGxvYWRlci9UZXh0UmVzb3VyY2VEZWNv
ZGVyLmNwcAogICAgICAgICBsb2FkZXIvbG9hZGVyLmNwcAotICAgICAgICBsb2FkZXIvZ2RrL0Rv
Y3VtZW50TG9hZGVyR2RrLmNwcAorICAgICAgICBsb2FkZXIvZ2RrL0RvY3VtZW50TG9hZGVyR3Rr
LmNwcAogICAgICAgICBsb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmNwcAogICAgIDwv
c2V0PgogCkluZGV4OiBXZWJDb3JlL1Byb2plY3RzL2dkay93ZWJjb3JlLWdkay5ia2wKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9Qcm9qZWN0cy9nZGsvd2ViY29yZS1nZGsuYmtsCShyZXZpc2lvbiAy
NTE2OSkKKysrIFdlYkNvcmUvUHJvamVjdHMvZ2RrL3dlYmNvcmUtZ2RrLmJrbAkod29ya2luZyBj
b3B5KQpAQCAtNDQsMzAgKzQ0LDMwIEBACiAgICAgICAgIDxkZWZpbmU+RU5BQkxFX1hQQVRIPC9k
ZWZpbmU+CiAgCiAgICAgICAgIDxzb3VyY2VzPgotICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0Nv
b2tpZUphckdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9DdXJzb3JHZGsuY3BwCi0g
ICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRHJhZ0RhdGFHZGsuY3BwCi0gICAgICAgICAgICBwbGF0
Zm9ybS9nZGsvRHJhZ0ltYWdlR2RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0Nvb2tp
ZUphckd0ay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9DdXJzb3JHdGsuY3BwCisgICAg
ICAgICAgICBwbGF0Zm9ybS9nZGsvRHJhZ0RhdGFHdGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9y
bS9nZGsvRHJhZ0ltYWdlR3RrLmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0VkaXRvckNs
aWVudEdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250Q2FjaGVHZGsuY3BwCi0g
ICAgICAgICAgICBwbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwCi0gICAgICAgICAgICBwbGF0
Zm9ybS9nZGsvRm9udEdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250UGxhdGZv
cm1EYXRhR2RrLmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAotICAg
ICAgICAgICAgcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNwcAotICAgICAgICAg
ICAgcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2Rr
L0ZvbnRDYWNoZUd0ay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250RGF0YUd0ay5j
cHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250R3RrLmNwcAorICAgICAgICAgICAgcGxh
dGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9n
ZGsvRnJhbWVHdGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvR2x5cGhQYWdlVHJlZU5v
ZGVHdGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvS2V5RXZlbnRHdGsuY3BwCiAgICAg
ICAgICAgICBwbGF0Zm9ybS9nZGsvTWltZVR5cGVSZWdpc3RyeUdkay5jcHAKLSAgICAgICAgICAg
IHBsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2RrLmNwcAotICAgICAgICAgICAgcGxhdGZvcm0vZ2Rr
L1BvcHVwTWVudUdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdk
ay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAorICAgICAg
ICAgICAgcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHdGsuY3BwCisgICAgICAgICAgICBwbGF0Zm9y
bS9nZGsvUG9wdXBNZW51R3RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1JlbmRlclRo
ZW1lR3RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHdGsuY3BwCiAg
ICAgICAgICAgICBwbGF0Zm9ybS9nZGsvU2NyZWVuR2RrLmNwcAogICAgICAgICAgICAgcGxhdGZv
cm0vZ2RrL1NoYXJlZFRpbWVyTGludXguY3BwCiAgICAgICAgICAgICBwbGF0Zm9ybS9nZGsvU3lz
dGVtVGltZUxpbnV4LmNwcAogICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtT
dHVicy5jcHAKLSAgICAgICAgICAgIHBsYXRmb3JtL2dkay9XaGVlbEV2ZW50R2RrLmNwcAotICAg
ICAgICAgICAgcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAKLSAgICAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHAKKyAgICAgICAgICAgIHBsYXRmb3JtL2dkay9XaGVl
bEV2ZW50R3RrLmNwcAorICAgICAgICAgICAgcGxhdGZvcm0vZ2RrL1dpZGdldEd0ay5jcHAKKyAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dkay9JbWFnZUd0ay5jcHAKICAgICAgICAgICAg
IHBsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlQ3VybC5jcHAKICAgICAgICAgICAg
IHBsYXRmb3JtL25ldHdvcmsvZ2RrL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKIApJbmRleDog
V2ViQ29yZS9sb2FkZXIvZ2RrL0RvY3VtZW50TG9hZGVyR2RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9nZGsvRG9jdW1lbnRMb2FkZXJHZGsuY3BwCShyZXZpc2lvbiAyNTE2OSkK
KysrIFdlYkNvcmUvbG9hZGVyL2dkay9Eb2N1bWVudExvYWRlckdkay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2lu
IDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLQot
I2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUg
PHN0ZGlvLmg+Ci0gCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWJvb2wgRG9jdW1lbnRMb2FkZXI6
OmdldFJlc3BvbnNlTW9kaWZpZWRIZWFkZXIoU3RyaW5nJiBtb2RpZmllZCkgY29uc3QKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQotCkluZGV4OiBX
ZWJDb3JlL2xvYWRlci9nZGsvRG9jdW1lbnRMb2FkZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL2dkay9Eb2N1bWVudExvYWRlckd0ay5jcHAJKHJldmlzaW9uIDI1MTY5KQko
ZnJvbSBXZWJDb3JlL2xvYWRlci9nZGsvRG9jdW1lbnRMb2FkZXJHZGsuY3BwOjI1MTY5KQorKysg
V2ViQ29yZS9sb2FkZXIvZ2RrL0RvY3VtZW50TG9hZGVyR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHph
Y2tAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorCisjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyAKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBEb2N1bWVudExvYWRlcjo6Z2V0
UmVzcG9uc2VNb2RpZmllZEhlYWRlcihTdHJpbmcmIG1vZGlmaWVkKSBjb25zdAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisKSW5kZXg6IFdlYkNv
cmUvcGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHZGsuY3BwCShyZXZpc2lvbiAyNTE2OSkKKysrIFdlYkNv
cmUvcGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRyYWdD
b250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJEcmFnRGF0YS5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBUaGVzZSB2YWx1ZXMgYXJlIHN0cmFpZ2h0IG91dCBvZiBE
cmFnQ29udHJvbGxlck1hYywgc28gcHJvYmFibHkgaGF2ZSAKLS8vIGxpdHRsZSBjb3JyZWxhdGlv
biB3aXRoIEdkayBzdGFuZGFyZHMuLi4KLWNvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6TGlua0Ry
YWdCb3JkZXJJbnNldCA9IDI7Ci1jb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6Ok1heE9yaWdpbmFs
SW1hZ2VBcmVhID0gMTUwMCAqIDE1MDA7Ci1jb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJ
Y29uUmlnaHRJbnNldCA9IDc7Ci1jb25zdCBpbnQgRHJhZ0NvbnRyb2xsZXI6OkRyYWdJY29uQm90
dG9tSW5zZXQgPSAzOwotCi1jb25zdCBmbG9hdCBEcmFnQ29udHJvbGxlcjo6RHJhZ0ltYWdlQWxw
aGEgPSAwLjc1ZjsKLQotYm9vbCBEcmFnQ29udHJvbGxlcjo6aXNDb3B5S2V5RG93bigpCi17Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6
ZHJhZ09wZXJhdGlvbihEcmFnRGF0YSogZHJhZ0RhdGEpCi17Ci0gICAgLy9GSVhNRTogVGhpcyBs
b2dpYyBpcyBpbmNvbXBsZXRlICAgICAgICAKLSAgICAgaWYgKGRyYWdEYXRhLT5jb250YWluc1VS
TCgpKQotICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbkNvcHk7Ci0KLSAgIHJldHVybiBEcmFn
T3BlcmF0aW9uTm9uZTsKLX0KLQotY29uc3QgSW50U2l6ZSYgRHJhZ0NvbnRyb2xsZXI6Om1heERy
YWdJbWFnZVNpemUoKQotewotICAgIHN0YXRpYyBjb25zdCBJbnRTaXplIG1heERyYWdJbWFnZVNp
emUoNDAwLCA0MDApOwotICAgIAotICAgIHJldHVybiBtYXhEcmFnSW1hZ2VTaXplOwotfQotCi19
CkluZGV4OiBXZWJDb3JlL3BhZ2UvZ2RrL0RyYWdDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvZ2RrL0RyYWdDb250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMjUx
NjkpCShmcm9tIFdlYkNvcmUvcGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHZGsuY3BwOjI1MTY5KQor
KysgV2ViQ29yZS9wYWdlL2dkay9EcmFnQ29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRHJhZ0NvbnRyb2xsZXIuaCIKKworI2luY2x1ZGUgIkRyYWdEYXRhLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoZXNlIHZhbHVlcyBhcmUgc3RyYWlnaHQg
b3V0IG9mIERyYWdDb250cm9sbGVyTWFjLCBzbyBwcm9iYWJseSBoYXZlIAorLy8gbGl0dGxlIGNv
cnJlbGF0aW9uIHdpdGggR2RrIHN0YW5kYXJkcy4uLgorY29uc3QgaW50IERyYWdDb250cm9sbGVy
OjpMaW5rRHJhZ0JvcmRlckluc2V0ID0gMjsKK2NvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6TWF4
T3JpZ2luYWxJbWFnZUFyZWEgPSAxNTAwICogMTUwMDsKK2NvbnN0IGludCBEcmFnQ29udHJvbGxl
cjo6RHJhZ0ljb25SaWdodEluc2V0ID0gNzsKK2NvbnN0IGludCBEcmFnQ29udHJvbGxlcjo6RHJh
Z0ljb25Cb3R0b21JbnNldCA9IDM7CisKK2NvbnN0IGZsb2F0IERyYWdDb250cm9sbGVyOjpEcmFn
SW1hZ2VBbHBoYSA9IDAuNzVmOworCitib29sIERyYWdDb250cm9sbGVyOjppc0NvcHlLZXlEb3du
KCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisgICAgCitEcmFnT3BlcmF0aW9uIERyYWdDb250
cm9sbGVyOjpkcmFnT3BlcmF0aW9uKERyYWdEYXRhKiBkcmFnRGF0YSkKK3sKKyAgICAvL0ZJWE1F
OiBUaGlzIGxvZ2ljIGlzIGluY29tcGxldGUgICAgICAgIAorICAgICBpZiAoZHJhZ0RhdGEtPmNv
bnRhaW5zVVJMKCkpCisgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uQ29weTsKKworICAgcmV0
dXJuIERyYWdPcGVyYXRpb25Ob25lOworfQorCitjb25zdCBJbnRTaXplJiBEcmFnQ29udHJvbGxl
cjo6bWF4RHJhZ0ltYWdlU2l6ZSgpCit7CisgICAgc3RhdGljIGNvbnN0IEludFNpemUgbWF4RHJh
Z0ltYWdlU2l6ZSg0MDAsIDQwMCk7CisgICAgCisgICAgcmV0dXJuIG1heERyYWdJbWFnZVNpemU7
Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGFnZS9nZGsvRXZlbnRIYW5kbGVyR2RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ2RrL0V2ZW50SGFuZGxlckdkay5jcHAJKHJldmlzaW9u
IDI1MTY5KQorKysgV2ViQ29yZS9wYWdlL2dkay9FdmVudEhhbmRsZXJHZGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sg
UnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkV2ZW50SGFuZGxlci5oIgotCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJG
cmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIktleWJvYXJkRXZlbnQu
aCIKLSNpbmNsdWRlICJNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1T
Y3JvbGxCYXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJS
ZW5kZXJXaWRnZXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2Ug
RXZlbnROYW1lczsKLQotYm9vbCBFdmVudEhhbmRsZXI6OnRhYnNUb0FsbENvbnRyb2xzKEtleWJv
YXJkRXZlbnQqIGV2ZW50KSBjb25zdAotewotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEV2
ZW50SGFuZGxlcjo6Zm9jdXNEb2N1bWVudFZpZXcoKQotewotICAgIGlmIChQYWdlKiBwYWdlID0g
bV9mcmFtZS0+cGFnZSgpKQotICAgICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9j
dXNlZEZyYW1lKG1fZnJhbWUpOwotfQotCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1v
dXNlRG93bkV2ZW50VG9XaWRnZXQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYg
ZXZlbnQpCi17Ci0gICAgLy8gRmlndXJlIG91dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2ZW50
IHRvLgotICAgIFJlbmRlck9iamVjdCogdGFyZ2V0ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZl
bnQudGFyZ2V0Tm9kZSgpLT5yZW5kZXJlcigpIDogMDsKLSAgICBpZiAoIXRhcmdldCB8fCAhdGFy
Z2V0LT5pc1dpZGdldCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJu
IHBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHRh
cmdldCktPndpZGdldCgpKTsKLX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3Vz
ZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCogcmVuZGVyV2lkZ2V0KQotewotICAgIHJl
dHVybiBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChyZW5kZXJXaWRnZXQtPndpZGdldCgpKTsK
LX0KLQotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdl
dCogd2lkZ2V0KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIEV2ZW50SGFuZGxlcjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBsYXRmb3Jt
TW91c2VFdmVudCYpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotYm9vbCBF
dmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoUGxhdGZvcm1XaGVlbEV2ZW50Jiwg
V2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLUNsaXBib2FyZCogRXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2Fy
ZCgpIGNvbnN0IAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0K
LWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VQcmVzc0V2ZW50VG9TdWJmcmFtZShNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFtZSkKLXsKLSAgICBzdWJm
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChtZXYuZXZlbnQoKSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VNb3Zl
RXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUq
IHN1YmZyYW1lLCBIaXRUZXN0UmVzdWx0KiBob3ZlcmVkTm9kZSkKLXsKLSAgICBzdWJmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlTW92ZUV2ZW50KG1ldi5ldmVudCgpLCBob3ZlcmVk
Tm9kZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91
c2VSZWxlYXNlRXZlbnRUb1N1YmZyYW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1l
diwgRnJhbWUqIHN1YmZyYW1lKQotewotICAgIHN1YmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlTW91c2VSZWxlYXNlRXZlbnQobWV2LmV2ZW50KCkpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NFdmVudFRvU2Nyb2xsYmFyKE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmLCBQbGF0Zm9ybVNjcm9sbGJhciogc2Nyb2xsYmFyKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19CkluZGV4
OiBXZWJDb3JlL3BhZ2UvZ2RrL0V2ZW50SGFuZGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL2dkay9FdmVudEhhbmRsZXJHdGsuY3BwCShyZXZpc2lvbiAyNTE2OSkJKGZyb20g
V2ViQ29yZS9wYWdlL2dkay9FdmVudEhhbmRsZXJHZGsuY3BwOjI1MTY5KQorKysgV2ViQ29yZS9w
YWdlL2dkay9FdmVudEhhbmRsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgor
CisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNs
dWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2
ZW50V2l0aEhpdFRlc3RSZXN1bHRzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKKworYm9vbCBF
dmVudEhhbmRsZXI6OnRhYnNUb0FsbENvbnRyb2xzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEV2ZW50SGFuZGxlcjo6Zm9jdXNEb2N1
bWVudFZpZXcoKQoreworICAgIGlmIChQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpKQorICAg
ICAgICBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+c2V0Rm9jdXNlZEZyYW1lKG1fZnJhbWUpOwor
fQorCitib29sIEV2ZW50SGFuZGxlcjo6cGFzc1dpZGdldE1vdXNlRG93bkV2ZW50VG9XaWRnZXQo
Y29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgZXZlbnQpCit7CisgICAgLy8gRmln
dXJlIG91dCB3aGljaCB2aWV3IHRvIHNlbmQgdGhlIGV2ZW50IHRvLgorICAgIFJlbmRlck9iamVj
dCogdGFyZ2V0ID0gZXZlbnQudGFyZ2V0Tm9kZSgpID8gZXZlbnQudGFyZ2V0Tm9kZSgpLT5yZW5k
ZXJlcigpIDogMDsKKyAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LT5pc1dpZGdldCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHBhc3NNb3VzZURvd25FdmVudFRv
V2lkZ2V0KHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCo+KHRhcmdldCktPndpZGdldCgpKTsKK30K
KworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJl
bmRlcldpZGdldCogcmVuZGVyV2lkZ2V0KQoreworICAgIHJldHVybiBwYXNzTW91c2VEb3duRXZl
bnRUb1dpZGdldChyZW5kZXJXaWRnZXQtPndpZGdldCgpKTsKK30KKworYm9vbCBFdmVudEhhbmRs
ZXI6OnBhc3NNb3VzZURvd25FdmVudFRvV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIEV2ZW50SGFuZGxl
cjo6ZXZlbnRBY3RpdmF0ZWRWaWV3KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVl
bEV2ZW50VG9XaWRnZXQoUGxhdGZvcm1XaGVlbEV2ZW50JiwgV2lkZ2V0KiB3aWRnZXQpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NsaXBib2FyZCog
RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0IAoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpw
YXNzTW91c2VQcmVzc0V2ZW50VG9TdWJmcmFtZShNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRz
JiBtZXYsIEZyYW1lKiBzdWJmcmFtZSkKK3sKKyAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PmhhbmRsZU1vdXNlUHJlc3NFdmVudChtZXYuZXZlbnQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VNb3ZlRXZlbnRUb1N1YmZyYW1lKE1vdXNl
RXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lLCBIaXRUZXN0UmVz
dWx0KiBob3ZlcmVkTm9kZSkKK3sKKyAgICBzdWJmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRs
ZU1vdXNlTW92ZUV2ZW50KG1ldi5ldmVudCgpLCBob3ZlcmVkTm9kZSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VSZWxlYXNlRXZlbnRUb1N1YmZy
YW1lKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMmIG1ldiwgRnJhbWUqIHN1YmZyYW1lKQor
eworICAgIHN1YmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQo
bWV2LmV2ZW50KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEV2ZW50SGFuZGxlcjo6
cGFzc01vdXNlUHJlc3NFdmVudFRvU2Nyb2xsYmFyKE1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3Vs
dHMmLCBQbGF0Zm9ybVNjcm9sbGJhciogc2Nyb2xsYmFyKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BhZ2UvZ2RrL0Zy
YW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ2RrL0ZyYW1lR2RrLmNwcAko
cmV2aXNpb24gMjUxNjkpCisrKyBXZWJDb3JlL3BhZ2UvZ2RrL0ZyYW1lR2RrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZy
YW1lOjppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgRnJhbWU6OmNsZWFudXBQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2Vs
ZWN0aW9uKCkgCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQot
dm9pZCBGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLXZvaWQgRnJhbWU6OnNldE5lZWRzUmVhcHBseVN0eWxlcygpCi17Ci0gICBu
b3RJbXBsZW1lbnRlZCgpOyAKLX0KLX0KSW5kZXg6IFdlYkNvcmUvcGFnZS9nZGsvRnJhbWVHdGsu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9nZGsvRnJhbWVHdGsuY3BwCShyZXZpc2lv
biAyNTE2OSkJKGZyb20gV2ViQ29yZS9wYWdlL2dkay9GcmFtZUdkay5jcHA6MjUxNjkpCisrKyBX
ZWJDb3JlL3BhZ2UvZ2RrL0ZyYW1lR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEZyYW1lOjppc3N1ZVRyYW5zcG9zZUNv
bW1hbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWU6OmNsZWFu
dXBQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K0RyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkgCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBGcmFtZTo6ZGFzaGJvYXJk
UmVnaW9uc0NoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJh
bWU6OnNldE5lZWRzUmVhcHBseVN0eWxlcygpCit7CisgICBub3RJbXBsZW1lbnRlZCgpOyAKK30K
K30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Nvb2tpZUphckdkay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNwcAkocmV2aXNpb24gMjUx
NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Db29raWVKYXJHZGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
TWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb29raWVKYXIuaCIK
LQotI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCi0jaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSGFzaE1h
cDxTdHJpbmcsIFN0cmluZz4gY29va2llSmFyOwotCi12b2lkIHNldENvb2tpZXMoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBLVVJMJiAvKnBvbGljeVVSTCovLCBjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIGNvb2tpZUphci5zZXQodXJsLnVybCgpLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBjb29r
aWVzKGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICByZXR1cm4gY29va2llSmFyLmdldCh1cmwudXJs
KCkpOwotfQotCi1ib29sIGNvb2tpZXNFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ29va2llSmFyR3RrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Db29raWVKYXJHdGsuY3BwCShyZXZpc2lvbiAy
NTE2OSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ29va2llSmFyR2RrLmNwcDoyNTE2OSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0Nvb2tpZUphckd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvb2tpZUphci5oIgorCisj
aW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBjb29raWVKYXI7CisKK3ZvaWQgc2V0Q29va2llcyhjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIC8qcG9saWN5VVJMKi8sIGNvbnN0IFN0cmluZyYgdmFsdWUpCit7Cisg
ICAgY29va2llSmFyLnNldCh1cmwudXJsKCksIHZhbHVlKTsKK30KKworU3RyaW5nIGNvb2tpZXMo
Y29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiBjb29raWVKYXIuZ2V0KHVybC51cmwoKSk7
Cit9CisKK2Jvb2wgY29va2llc0VuYWJsZWQoKQoreworICAgIHJldHVybiB0cnVlOworfQorCit9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9DdXJzb3JHZGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0N1cnNvckdkay5jcHAJKHJldmlzaW9uIDI1MTY5KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ3Vyc29yR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwy
NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVt
bWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkN1cnNvci5oIgotCi0jaW5jbHVkZSAi
RGVwcmVjYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxz
dGRpby5oPgotIAotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DdXJzb3I6OkN1cnNvcihjb25zdCBD
dXJzb3ImIG90aGVyKQotICAgIDogbV9pbXBsKG90aGVyLm1faW1wbCkKLXsKLSAgICBpZiAobV9p
bXBsKQotICAgICAgICBnZGtfY3Vyc29yX3JlZihtX2ltcGwpOwotfQotCi1DdXJzb3I6OkN1cnNv
cihJbWFnZSosIGNvbnN0IEludFBvaW50JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQot
Ci1DdXJzb3I6On5DdXJzb3IoKQotewotICAgIGlmIChtX2ltcGwpCi0gICAgICAgIGdka19jdXJz
b3JfdW5yZWYobV9pbXBsKTsKLX0KLQotQ3Vyc29yJiBDdXJzb3I6Om9wZXJhdG9yPShjb25zdCBD
dXJzb3ImIG90aGVyKQotewotICAgIGdka19jdXJzb3JfcmVmKG90aGVyLm1faW1wbCk7Ci0gICAg
Z2RrX2N1cnNvcl91bnJlZihtX2ltcGwpOwotICAgIG1faW1wbCA9IG90aGVyLm1faW1wbDsKLSAg
ICByZXR1cm4gKnRoaXM7Ci19Ci0KLUN1cnNvcjo6Q3Vyc29yKEdka0N1cnNvciogYykKLSAgICA6
IG1faW1wbChjKQotewotICAgIG1faW1wbCA9IGM7Ci0gICAgQVNTRVJUKGMpOwotICAgIGdka19j
dXJzb3JfcmVmKGMpOwotfQotCi1jb25zdCBDdXJzb3ImIHBvaW50ZXJDdXJzb3IoKQotewotICAg
IHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19MRUZUX1BUUik7Ci0gICAgcmV0
dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgY3Jvc3NDdXJzb3IoKQotewotICAgIHN0YXRpYyBD
dXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19DUk9TUyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0K
LWNvbnN0IEN1cnNvciYgaGFuZEN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2Rr
X2N1cnNvcl9uZXcoR0RLX0hBTkQyKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29y
JiBtb3ZlQ3Vyc29yKCkgCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXco
R0RLX0ZMRVVSKTsKLSAgICByZXR1cm4gYzsgCi19Ci0KLWNvbnN0IEN1cnNvciYgaUJlYW1DdXJz
b3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19YVEVSTSk7
Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgd2FpdEN1cnNvcigpCi17Ci0gICAg
c3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1dBVENIKTsKLSAgICByZXR1cm4g
YzsKLX0KLQotY29uc3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29y
IGMgPSBnZGtfY3Vyc29yX25ldyhHREtfUVVFU1RJT05fQVJST1cpOwotICAgIHJldHVybiBjOwot
fQotCi1jb25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJz
b3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19SSUdIVF9TSURFKTsKLSAgICByZXR1cm4gYzsKLX0K
LQotY29uc3QgQ3Vyc29yJiBub3J0aFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNv
ciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9TSURFKTsKLSAgICByZXR1cm4gYzsKLX0KLQot
Y29uc3QgQ3Vyc29yJiBub3J0aEVhc3RSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJz
b3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19UT1BfUklHSFRfQ09STkVSKTsKLSAgICByZXR1cm4g
YzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RSZXNpemVDdXJzb3IoKQotewotICAgIHN0
YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19UT1BfTEVGVF9DT1JORVIpOwotICAg
IHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoUmVzaXplQ3Vyc29yKCkKLXsKLSAg
ICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfQk9UVE9NX1NJREUpOwotICAg
IHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCi17
Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9SSUdIVF9D
T1JORVIpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIHNvdXRoV2VzdFJlc2l6
ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0JP
VFRPTV9MRUZUX0NPUk5FUik7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgd2Vz
dFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXco
R0RLX0xFRlRfU0lERSk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNvbnN0IEN1cnNvciYgbm9ydGhT
b3V0aFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9u
ZXcoR0RLX1RPUF9URUUpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJzb3ImIGVhc3RX
ZXN0UmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25l
dyhHREtfTEVGVF9TSURFKTsKLSAgICByZXR1cm4gYzsKLX0KLQotY29uc3QgQ3Vyc29yJiBub3J0
aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdk
a19jdXJzb3JfbmV3KEdES19TSVpJTkcpOwotICAgIHJldHVybiBjOwotfQotCi1jb25zdCBDdXJz
b3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigpCi17Ci0gICAgc3RhdGljIEN1cnNv
ciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1NJWklORyk7Ci0gICAgcmV0dXJuIGM7Ci19Ci0KLWNv
bnN0IEN1cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKLXsKLSAgICBzdGF0aWMgQ3Vyc29yIGMg
PSBnZGtfY3Vyc29yX25ldyhHREtfRE9VQkxFX0FSUk9XKTsKLSAgICByZXR1cm4gYzsKLX0KLQot
Y29uc3QgQ3Vyc29yJiByb3dSZXNpemVDdXJzb3IoKQotewotICAgIHN0YXRpYyBDdXJzb3IgYyA9
IGdka19jdXJzb3JfbmV3KEdES19ET1VCTEVfQVJST1cpOwotICAgIHJldHVybiBjOwotfQotCi0v
LyBGSVhNRTogc2hvdWxkIGZpbmQgYmV0dGVyIEdESyBjdXJzb3JzIGZvciB0aG9zZSB0aGFuIGEg
Z2VuZXJpYyBHREtfTEVGVF9QVFIKLWNvbnN0IEN1cnNvciYgdmVydGljYWxUZXh0Q3Vyc29yKCkK
LXsKLSAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIGNlbGxD
dXJzb3IoKQotewotICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNv
ciYgY29udGV4dE1lbnVDdXJzb3IoKQotewotICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Ci19
Ci0KLWNvbnN0IEN1cnNvciYgbm9Ecm9wQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gcG9pbnRlckN1
cnNvcigpOwotfQotCi1jb25zdCBDdXJzb3ImIGNvcHlDdXJzb3IoKQotewotICAgIHJldHVybiBw
b2ludGVyQ3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgcHJvZ3Jlc3NDdXJzb3IoKQotewot
ICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYgYWxpYXNDdXJz
b3IoKQotewotICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Ci19Ci0KLWNvbnN0IEN1cnNvciYg
bm9uZUN1cnNvcigpCi17Ci0gICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKLX0KLQotY29uc3Qg
Q3Vyc29yJiBub3RBbGxvd2VkQ3Vyc29yKCkKLXsKLSAgICByZXR1cm4gcG9pbnRlckN1cnNvcigp
OwotfQotCi1jb25zdCBDdXJzb3ImIHpvb21JbkN1cnNvcigpCi17Ci0gICAgcmV0dXJuIHBvaW50
ZXJDdXJzb3IoKTsKLX0KLQotY29uc3QgQ3Vyc29yJiB6b29tT3V0Q3Vyc29yKCkKLXsKLSAgICBy
ZXR1cm4gcG9pbnRlckN1cnNvcigpOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9DdXJzb3JHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0N1cnNv
ckd0ay5jcHAJKHJldmlzaW9uIDI1MTY5KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9DdXJz
b3JHZGsuY3BwOjI1MTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvQ3Vyc29yR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkN1
cnNvci5oIgorCisjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworI2luY2x1ZGUgPGdk
ay9nZGsuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorIAorbmFtZXNwYWNlIFdlYkNvcmUgeworCitD
dXJzb3I6OkN1cnNvcihjb25zdCBDdXJzb3ImIG90aGVyKQorICAgIDogbV9pbXBsKG90aGVyLm1f
aW1wbCkKK3sKKyAgICBpZiAobV9pbXBsKQorICAgICAgICBnZGtfY3Vyc29yX3JlZihtX2ltcGwp
OworfQorCitDdXJzb3I6OkN1cnNvcihJbWFnZSosIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitDdXJzb3I6On5DdXJzb3IoKQoreworICAgIGlmIChtX2lt
cGwpCisgICAgICAgIGdka19jdXJzb3JfdW5yZWYobV9pbXBsKTsKK30KKworQ3Vyc29yJiBDdXJz
b3I6Om9wZXJhdG9yPShjb25zdCBDdXJzb3ImIG90aGVyKQoreworICAgIGdka19jdXJzb3JfcmVm
KG90aGVyLm1faW1wbCk7CisgICAgZ2RrX2N1cnNvcl91bnJlZihtX2ltcGwpOworICAgIG1faW1w
bCA9IG90aGVyLm1faW1wbDsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK0N1cnNvcjo6Q3Vyc29y
KEdka0N1cnNvciogYykKKyAgICA6IG1faW1wbChjKQoreworICAgIG1faW1wbCA9IGM7CisgICAg
QVNTRVJUKGMpOworICAgIGdka19jdXJzb3JfcmVmKGMpOworfQorCitjb25zdCBDdXJzb3ImIHBv
aW50ZXJDdXJzb3IoKQoreworICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdE
S19MRUZUX1BUUik7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgY3Jvc3NDdXJz
b3IoKQoreworICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19DUk9TUyk7
CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgaGFuZEN1cnNvcigpCit7CisgICAg
c3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0hBTkQyKTsKKyAgICByZXR1cm4g
YzsKK30KKworY29uc3QgQ3Vyc29yJiBtb3ZlQ3Vyc29yKCkgCit7CisgICAgc3RhdGljIEN1cnNv
ciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0ZMRVVSKTsKKyAgICByZXR1cm4gYzsgCit9CisKK2Nv
bnN0IEN1cnNvciYgaUJlYW1DdXJzb3IoKQoreworICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19j
dXJzb3JfbmV3KEdES19YVEVSTSk7CisgICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYg
d2FpdEN1cnNvcigpCit7CisgICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RL
X1dBVENIKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBoZWxwQ3Vyc29yKCkK
K3sKKyAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfUVVFU1RJT05fQVJS
T1cpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIGVhc3RSZXNpemVDdXJzb3Io
KQoreworICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19SSUdIVF9TSURF
KTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFJlc2l6ZUN1cnNvcigp
Cit7CisgICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9TSURFKTsK
KyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RSZXNpemVDdXJzb3Io
KQoreworICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19UT1BfUklHSFRf
Q09STkVSKTsKKyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiBub3J0aFdlc3RSZXNp
emVDdXJzb3IoKQoreworICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19U
T1BfTEVGVF9DT1JORVIpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRo
UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhH
REtfQk9UVE9NX1NJREUpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBDdXJzb3ImIHNvdXRo
RWFzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9u
ZXcoR0RLX0JPVFRPTV9SSUdIVF9DT1JORVIpOworICAgIHJldHVybiBjOworfQorCitjb25zdCBD
dXJzb3ImIHNvdXRoV2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgc3RhdGljIEN1cnNvciBjID0g
Z2RrX2N1cnNvcl9uZXcoR0RLX0JPVFRPTV9MRUZUX0NPUk5FUik7CisgICAgcmV0dXJuIGM7Cit9
CisKK2NvbnN0IEN1cnNvciYgd2VzdFJlc2l6ZUN1cnNvcigpCit7CisgICAgc3RhdGljIEN1cnNv
ciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX0xFRlRfU0lERSk7CisgICAgcmV0dXJuIGM7Cit9CisK
K2NvbnN0IEN1cnNvciYgbm9ydGhTb3V0aFJlc2l6ZUN1cnNvcigpCit7CisgICAgc3RhdGljIEN1
cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1RPUF9URUUpOworICAgIHJldHVybiBjOworfQor
Citjb25zdCBDdXJzb3ImIGVhc3RXZXN0UmVzaXplQ3Vyc29yKCkKK3sKKyAgICBzdGF0aWMgQ3Vy
c29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfTEVGVF9TSURFKTsKKyAgICByZXR1cm4gYzsKK30K
KworY29uc3QgQ3Vyc29yJiBub3J0aEVhc3RTb3V0aFdlc3RSZXNpemVDdXJzb3IoKQoreworICAg
IHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19TSVpJTkcpOworICAgIHJldHVy
biBjOworfQorCitjb25zdCBDdXJzb3ImIG5vcnRoV2VzdFNvdXRoRWFzdFJlc2l6ZUN1cnNvcigp
Cit7CisgICAgc3RhdGljIEN1cnNvciBjID0gZ2RrX2N1cnNvcl9uZXcoR0RLX1NJWklORyk7Cisg
ICAgcmV0dXJuIGM7Cit9CisKK2NvbnN0IEN1cnNvciYgY29sdW1uUmVzaXplQ3Vyc29yKCkKK3sK
KyAgICBzdGF0aWMgQ3Vyc29yIGMgPSBnZGtfY3Vyc29yX25ldyhHREtfRE9VQkxFX0FSUk9XKTsK
KyAgICByZXR1cm4gYzsKK30KKworY29uc3QgQ3Vyc29yJiByb3dSZXNpemVDdXJzb3IoKQorewor
ICAgIHN0YXRpYyBDdXJzb3IgYyA9IGdka19jdXJzb3JfbmV3KEdES19ET1VCTEVfQVJST1cpOwor
ICAgIHJldHVybiBjOworfQorCisvLyBGSVhNRTogc2hvdWxkIGZpbmQgYmV0dGVyIEdESyBjdXJz
b3JzIGZvciB0aG9zZSB0aGFuIGEgZ2VuZXJpYyBHREtfTEVGVF9QVFIKK2NvbnN0IEN1cnNvciYg
dmVydGljYWxUZXh0Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOworfQor
Citjb25zdCBDdXJzb3ImIGNlbGxDdXJzb3IoKQoreworICAgIHJldHVybiBwb2ludGVyQ3Vyc29y
KCk7Cit9CisKK2NvbnN0IEN1cnNvciYgY29udGV4dE1lbnVDdXJzb3IoKQoreworICAgIHJldHVy
biBwb2ludGVyQ3Vyc29yKCk7Cit9CisKK2NvbnN0IEN1cnNvciYgbm9Ecm9wQ3Vyc29yKCkKK3sK
KyAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOworfQorCitjb25zdCBDdXJzb3ImIGNvcHlDdXJz
b3IoKQoreworICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Cit9CisKK2NvbnN0IEN1cnNvciYg
cHJvZ3Jlc3NDdXJzb3IoKQoreworICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7Cit9CisKK2Nv
bnN0IEN1cnNvciYgYWxpYXNDdXJzb3IoKQoreworICAgIHJldHVybiBwb2ludGVyQ3Vyc29yKCk7
Cit9CisKK2NvbnN0IEN1cnNvciYgbm9uZUN1cnNvcigpCit7CisgICAgcmV0dXJuIHBvaW50ZXJD
dXJzb3IoKTsKK30KKworY29uc3QgQ3Vyc29yJiBub3RBbGxvd2VkQ3Vyc29yKCkKK3sKKyAgICBy
ZXR1cm4gcG9pbnRlckN1cnNvcigpOworfQorCitjb25zdCBDdXJzb3ImIHpvb21JbkN1cnNvcigp
Cit7CisgICAgcmV0dXJuIHBvaW50ZXJDdXJzb3IoKTsKK30KKworY29uc3QgQ3Vyc29yJiB6b29t
T3V0Q3Vyc29yKCkKK3sKKyAgICByZXR1cm4gcG9pbnRlckN1cnNvcigpOworfQorCit9CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9EcmFnRGF0YUdkay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvRHJhZ0RhdGFHZGsuY3BwCShyZXZpc2lvbiAyNTE2OSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL0RyYWdEYXRhR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw5
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFn
RGF0YS5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdt
ZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotYm9vbCBEcmFnRGF0YTo6Y2FuU21hcnRS
ZXBsYWNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0gICAgCi1ib29sIERyYWdE
YXRhOjpjb250YWluc0NvbG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJv
b2wgRHJhZ0RhdGE6OmNvbnRhaW5zRmlsZXMoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBEcmFnRGF0YTo6YXNGaWxlbmFtZXMoVmVjdG9yPFN0cmluZz4mIHJlc3VsdCkg
Y29uc3QKLXsKLX0KLQotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNQbGFpblRleHQoKSBjb25zdAot
ewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotU3RyaW5nIERyYWdEYXRhOjphc1BsYWluVGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFN0cmluZygpOwotfQotICAgIAotQ29sb3IgRHJhZ0RhdGE6
OmFzQ29sb3IoKSBjb25zdAotewotICAgIHJldHVybiBDb2xvcigpOwotfQotCi1DbGlwYm9hcmQq
IERyYWdEYXRhOjpjcmVhdGVDbGlwYm9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5KSBjb25zdAot
ewotICAgIHJldHVybiAwOwotfQotICAgIAotYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb21wYXRp
YmxlQ29udGVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotICAgIAotYm9vbCBE
cmFnRGF0YTo6Y29udGFpbnNVUkwoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSAg
ICAKLVN0cmluZyBEcmFnRGF0YTo6YXNVUkwoU3RyaW5nKiB0aXRsZSkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gU3RyaW5nKCk7Ci19Ci0gICAgCi0gICAgCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IERyYWdEYXRhOjphc0ZyYWdtZW50KERvY3VtZW50KikgY29uc3QKLXsKLSAgICByZXR1cm4g
MDsKLX0KLSAgICAKLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0RyYWdEYXRhR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9EcmFnRGF0YUd0ay5jcHAJKHJl
dmlzaW9uIDI1MTY5KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9EcmFnRGF0YUdkay5jcHA6
MjUxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9EcmFnRGF0YUd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRHJhZ0RhdGEuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RG9jdW1lbnRGcmFnbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgRHJhZ0Rh
dGE6OmNhblNtYXJ0UmVwbGFjZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorICAg
IAorYm9vbCBEcmFnRGF0YTo6Y29udGFpbnNDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIERyYWdEYXRhOjpjb250YWluc0ZpbGVzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRHJhZ0RhdGE6OmFzRmlsZW5hbWVzKFZlY3RvcjxTdHJp
bmc+JiByZXN1bHQpIGNvbnN0Cit7Cit9CisKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zUGxhaW5U
ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBEcmFnRGF0YTo6
YXNQbGFpblRleHQoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKyAgICAKK0Nv
bG9yIERyYWdEYXRhOjphc0NvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3IoKTsKK30K
KworQ2xpcGJvYXJkKiBEcmFnRGF0YTo6Y3JlYXRlQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1Bv
bGljeSkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKyAgICAKK2Jvb2wgRHJhZ0RhdGE6OmNv
bnRhaW5zQ29tcGF0aWJsZUNvbnRlbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KyAgICAKK2Jvb2wgRHJhZ0RhdGE6OmNvbnRhaW5zVVJMKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisgICAgCitTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKFN0cmluZyogdGl0bGUpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorICAgIAorICAgIAorUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBEcmFnRGF0YTo6YXNGcmFnbWVudChEb2N1bWVudCopIGNvbnN0Cit7
CisgICAgcmV0dXJuIDA7Cit9CisgICAgCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9E
cmFnSW1hZ2VHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0RyYWdJ
bWFnZUdkay5jcHAJKHJldmlzaW9uIDI1MTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRHJh
Z0ltYWdlR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKLQotI2luY2x1ZGUg
IkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1JbnRTaXplIGRyYWdJbWFnZVNpemUoRHJhZ0ltYWdlUmVmKQotewotICAgIHJldHVybiBJ
bnRTaXplKDAsIDApOwotfQotCi12b2lkIGRlbGV0ZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYpCi17
Ci19Ci0KLURyYWdJbWFnZVJlZiBzY2FsZURyYWdJbWFnZShEcmFnSW1hZ2VSZWYgaW1hZ2UsIEZs
b2F0U2l6ZSkKLXsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0gICAgCi1EcmFnSW1hZ2VSZWYgZGlz
c29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxvYXQpCi17Ci0g
ICAgcmV0dXJuIGltYWdlOwotfQotICAgICAgICAKLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1h
Z2VGcm9tSW1hZ2UoSW1hZ2UqKQotewotICAgIHJldHVybiAwOwotfQotICAgIAotRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZShDYWNoZWRJbWFnZSopCi17Ci0g
ICAgcmV0dXJuIDA7ICAgICAKLX0KLSAgICAKLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0RyYWdJbWFnZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRHJh
Z0ltYWdlR3RrLmNwcAkocmV2aXNpb24gMjUxNjkpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0RyYWdJbWFnZUdkay5jcHA6MjUxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9EcmFnSW1h
Z2VHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgorCisjaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ludFNpemUgZHJhZ0ltYWdlU2l6ZShEcmFnSW1hZ2VSZWYpCit7CisgICAgcmV0dXJuIEludFNp
emUoMCwgMCk7Cit9CisKK3ZvaWQgZGVsZXRlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZikKK3sKK30K
KworRHJhZ0ltYWdlUmVmIHNjYWxlRHJhZ0ltYWdlKERyYWdJbWFnZVJlZiBpbWFnZSwgRmxvYXRT
aXplKQoreworICAgIHJldHVybiBpbWFnZTsKK30KKyAgICAKK0RyYWdJbWFnZVJlZiBkaXNzb2x2
ZURyYWdJbWFnZVRvRnJhY3Rpb24oRHJhZ0ltYWdlUmVmIGltYWdlLCBmbG9hdCkKK3sKKyAgICBy
ZXR1cm4gaW1hZ2U7Cit9CisgICAgICAgIAorRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZy
b21JbWFnZShJbWFnZSopCit7CisgICAgcmV0dXJuIDA7Cit9CisgICAgCitEcmFnSW1hZ2VSZWYg
Y3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKK3sKKyAgICBy
ZXR1cm4gMDsgICAgIAorfQorICAgIAorfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9u
dENhY2hlR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250Q2Fj
aGVHZGsuY3BwCShyZXZpc2lvbiAyNTE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRD
YWNoZUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29t
IAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiRm9udENhY2hlLmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udERhdGEu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0
KCkKLXsKLSAgICBpZiAoIUZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKSkgewotICAgICAgICBhc3Nl
cnQoMCk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibm8gZm9udHMgZm91bmQgZXhpdGluZ1xu
Iik7Ci0gICAgICAgIGV4aXQoLTEpOwotICAgIH0KLX0KLQotY29uc3QgRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKQotewotCi0gICAgRm9udERhdGEqIGZvbnREYXRh
ID0gMDsKLSAgICBmb250RGF0YSA9IG5ldyBGb250RGF0YShGb250UGxhdGZvcm1EYXRhKGZvbnQu
Zm9udERlc2NyaXB0aW9uKCksIGZvbnQuZmFtaWx5KCkuZmFtaWx5KCkpKTsKLSAgICByZXR1cm4g
Zm9udERhdGE7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKLXsKLSAgICByZXR1cm4gbmV3IEZvbnRQ
bGF0Zm9ybURhdGEoZm9udC5mb250RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHko
KSk7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxi
YWNrRm9udChjb25zdCBGb250JiBmb250KQotewotICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVu
IGJldHRlciB0byBzb21laG93IGdldCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLgotICAg
IC8vIEZvciBub3cgd2UnbGwgcGljayB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdl
dCB3aXRob3V0IGNoYW5naW5nIGFueSBwcmVmcy4KLSAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHRp
bWVzU3RyKCJUaW1lcyBOZXcgUm9tYW4iKTsKLSAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udFBsYXRm
b3JtRGF0YShmb250LmZvbnREZXNjcmlwdGlvbigpLCB0aW1lc1N0cik7Ci19Ci0KLUZvbnRQbGF0
Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCi17
Ci0gICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5
KTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udENhY2hlR3RrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250Q2FjaGVHdGsuY3BwCShyZXZp
c2lvbiAyNTE2OSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udENhY2hlR2RrLmNwcDoy
NTE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRDYWNoZUd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisKKyNp
bmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIEZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KCkKK3sKKyAgICBpZiAoIUZvbnRQ
bGF0Zm9ybURhdGE6OmluaXQoKSkgeworICAgICAgICBhc3NlcnQoMCk7CisgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAibm8gZm9udHMgZm91bmQgZXhpdGluZ1xuIik7CisgICAgICAgIGV4aXQoLTEp
OworICAgIH0KK30KKworY29uc3QgRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoKQoreworCisgICAgRm9udERhdGEqIGZvbnREYXRhID0gMDsKKyAgICBmb250RGF0YSA9
IG5ldyBGb250RGF0YShGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCksIGZv
bnQuZmFtaWx5KCkuZmFtaWx5KCkpKTsKKyAgICByZXR1cm4gZm9udERhdGE7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3Qg
Rm9udCYgZm9udCkKK3sKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250
RGVzY3JpcHRpb24oKSwgZm9udC5mYW1pbHkoKS5mYW1pbHkoKSk7Cit9CisKK0ZvbnRQbGF0Zm9y
bURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250JiBm
b250KQoreworICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBzb21laG93IGdl
dCB0aGUgdXNlcidzIGRlZmF1bHQgZm9udCBoZXJlLgorICAgIC8vIEZvciBub3cgd2UnbGwgcGlj
ayB0aGUgZGVmYXVsdCB0aGF0IHRoZSB1c2VyIHdvdWxkIGdldCB3aXRob3V0IGNoYW5naW5nIGFu
eSBwcmVmcy4KKyAgICBzdGF0aWMgQXRvbWljU3RyaW5nIHRpbWVzU3RyKCJUaW1lcyBOZXcgUm9t
YW4iKTsKKyAgICByZXR1cm4gZ2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnREZXNj
cmlwdGlvbigpLCB0aW1lc1N0cik7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6
Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCit7CisgICAgcmV0dXJuIG5ldyBGb250
UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFtaWx5KTsKK30KKworfQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0ZvbnREYXRhR2RrLmNwcAkocmV2aXNpb24gMjUxNjkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9Gb250RGF0YUdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTM0ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBt
aWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFs
cC50b2tlckBjb2xsYWJvcmEuY28udWs+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkZvbnREYXRhLmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKLSNpbmNsdWRlIDxjYWly
by5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3Vub3Jt
Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci12b2lkIEZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQotewotICAgIGNhaXJvX2ZvbnRfZXh0ZW50
c190IGZvbnRfZXh0ZW50czsKLSAgICBjYWlyb190ZXh0X2V4dGVudHNfdCB0ZXh0X2V4dGVudHM7
Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250LCAmZm9u
dF9leHRlbnRzKTsKLSAgICBtX2FzY2VudCA9IHN0YXRpY19jYXN0PGludD4oZm9udF9leHRlbnRz
LmFzY2VudCk7Ci0gICAgbV9kZXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihmb250X2V4dGVudHMu
ZGVzY2VudCk7Ci0gICAgbV9saW5lU3BhY2luZyA9IHN0YXRpY19jYXN0PGludD4oZm9udF9leHRl
bnRzLmhlaWdodCk7Ci0gICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fZm9udC5t
X3NjYWxlZEZvbnQsICJ4IiwgJnRleHRfZXh0ZW50cyk7Ci0gICAgbV94SGVpZ2h0ID0gdGV4dF9l
eHRlbnRzLmhlaWdodDsKLSAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9mb250
Lm1fc2NhbGVkRm9udCwgIiAiLCAmdGV4dF9leHRlbnRzKTsKLSAgICBtX3NwYWNlV2lkdGggPSAg
c3RhdGljX2Nhc3Q8aW50Pih0ZXh0X2V4dGVudHMueF9hZHZhbmNlKTsKLSAgICBtX2xpbmVHYXAg
PSBtX2xpbmVTcGFjaW5nIC0gbV9hc2NlbnQgLSBtX2Rlc2NlbnQ7Ci19Ci0KLXZvaWQgRm9udERh
dGE6OnBsYXRmb3JtRGVzdHJveSgpCi17Ci0gICAgaWYgKG1fZm9udC5tX3BhdHRlcm4gJiYgKChG
Y1BhdHRlcm4qKS0xICE9IG1fZm9udC5tX3BhdHRlcm4pKQotICAgICAgICBGY1BhdHRlcm5EZXN0
cm95KG1fZm9udC5tX3BhdHRlcm4pOwotCi0gICAgaWYgKG1fZm9udC5tX2ZvbnRNYXRyaXgpCi0g
ICAgICAgIGZyZWUobV9mb250Lm1fZm9udE1hdHJpeCk7Ci0gICAgaWYgKG1fZm9udC5tX2ZvbnRG
YWNlKQotICAgICAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveShtX2ZvbnQubV9mb250RmFjZSk7
Ci0gICAgaWYgKG1fZm9udC5tX3NjYWxlZEZvbnQpCi0gICAgICAgIGNhaXJvX3NjYWxlZF9mb250
X2Rlc3Ryb3kobV9mb250Lm1fc2NhbGVkRm9udCk7Ci0gICAgaWYgKG1fZm9udC5tX29wdGlvbnMp
Ci0gICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19kZXN0cm95KG1fZm9udC5tX29wdGlvbnMpOwot
ICAgIGRlbGV0ZSBtX3NtYWxsQ2Fwc0ZvbnREYXRhOwotfQotCi1Gb250RGF0YSogRm9udERhdGE6
OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSBjb25zdAotewotICAgIGlmICghbV9zbWFsbENhcHNGb250RGF0YSkgewotICAgICAgICBGb250
RGVzY3JpcHRpb24gZGVzYyA9IEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOwotICAg
ICAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoMC43MGYqZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
U2l6ZSgpKTsKLSAgICAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogcGRhdGEgPSBuZXcgRm9u
dFBsYXRmb3JtRGF0YShkZXNjLCBkZXNjLmZhbWlseSgpLmZhbWlseSgpKTsKLSAgICAgICAgbV9z
bWFsbENhcHNGb250RGF0YSA9IG5ldyBGb250RGF0YSgqcGRhdGEpOwotICAgIH0KLSAgICByZXR1
cm4gbV9zbWFsbENhcHNGb250RGF0YTsKLX0KLQotYm9vbCBGb250RGF0YTo6Y29udGFpbnNDaGFy
YWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAotewotICAg
IEZUX0ZhY2UgZmFjZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX2ZvbnQubV9z
Y2FsZWRGb250KTsKLQotICAgIGlmICghZmFjZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIGlmIChG
Y0ZyZWVUeXBlQ2hhckluZGV4KGZhY2UsIGNoYXJhY3RlcnNbaV0pID09IDApIHsKLSAgICAgICAg
ICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKG1fZm9udC5tX3NjYWxlZEZvbnQp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2Fp
cm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UobV9mb250Lm1fc2NhbGVkRm9udCk7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQotewot
ICAgIG1fdHJlYXRBc0ZpeGVkUGl0Y2ggPSBtX2ZvbnQuaXNGaXhlZFBpdGNoKCk7Ci19Ci0KLWZs
b2F0IEZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKG1fZm9udC5tX3NjYWxlZEZvbnQpOwotCi0gICAgY2Fpcm9fZ2x5cGhfdCBj
Z2x5cGggPSB7IGdseXBoLCAwLCAwIH07Ci0gICAgY2Fpcm9fdGV4dF9leHRlbnRzX3QgZXh0ZW50
czsKLSAgICBjYWlyb19zY2FsZWRfZm9udF9nbHlwaF9leHRlbnRzKG1fZm9udC5tX3NjYWxlZEZv
bnQsICZjZ2x5cGgsIDEsICZleHRlbnRzKTsKLQotICAgIGZsb2F0IHcgPSAoZmxvYXQpbV9zcGFj
ZVdpZHRoOwotICAgIGlmIChjYWlyb19zY2FsZWRfZm9udF9zdGF0dXMobV9mb250Lm1fc2NhbGVk
Rm9udCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MgJiYgZXh0ZW50cy54X2FkdmFuY2UgIT0gMCkK
LSAgICAgICAgdyA9IChmbG9hdClleHRlbnRzLnhfYWR2YW5jZTsKLSAgICByZXR1cm4gdzsKLX0K
LQotdm9pZCBGb250RGF0YTo6c2V0Rm9udChjYWlyb190KiBjcikgY29uc3QKLXsKLSAgICBBU1NF
UlQoY3IpOwotICAgIG1fZm9udC5zZXRGb250KGNyKTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvRm9udERhdGFHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL0ZvbnREYXRhR3RrLmNwcAkocmV2aXNpb24gMjUxNjkpCShmcm9tIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0ZvbnREYXRhR2RrLmNwcDoyNTE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0ZvbnREYXRhR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21h
aWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxh
Ym9yYS5jby51az4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRm9udERhdGEuaCIKKworI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZv
bnQuaCIKKyNpbmNsdWRlICJGb250Q2FjaGUuaCIKKyNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKKyNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVk
ZSA8dW5pY29kZS91Y2hhci5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdW5vcm0uaD4KKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9udERh
dGE6OnBsYXRmb3JtSW5pdCgpCit7CisgICAgY2Fpcm9fZm9udF9leHRlbnRzX3QgZm9udF9leHRl
bnRzOworICAgIGNhaXJvX3RleHRfZXh0ZW50c190IHRleHRfZXh0ZW50czsKKyAgICBjYWlyb19z
Y2FsZWRfZm9udF9leHRlbnRzKG1fZm9udC5tX3NjYWxlZEZvbnQsICZmb250X2V4dGVudHMpOwor
ICAgIG1fYXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihmb250X2V4dGVudHMuYXNjZW50KTsKKyAg
ICBtX2Rlc2NlbnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZvbnRfZXh0ZW50cy5kZXNjZW50KTsKKyAg
ICBtX2xpbmVTcGFjaW5nID0gc3RhdGljX2Nhc3Q8aW50Pihmb250X2V4dGVudHMuaGVpZ2h0KTsK
KyAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMobV9mb250Lm1fc2NhbGVkRm9udCwg
IngiLCAmdGV4dF9leHRlbnRzKTsKKyAgICBtX3hIZWlnaHQgPSB0ZXh0X2V4dGVudHMuaGVpZ2h0
OworICAgIGNhaXJvX3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250
LCAiICIsICZ0ZXh0X2V4dGVudHMpOworICAgIG1fc3BhY2VXaWR0aCA9ICBzdGF0aWNfY2FzdDxp
bnQ+KHRleHRfZXh0ZW50cy54X2FkdmFuY2UpOworICAgIG1fbGluZUdhcCA9IG1fbGluZVNwYWNp
bmcgLSBtX2FzY2VudCAtIG1fZGVzY2VudDsKK30KKwordm9pZCBGb250RGF0YTo6cGxhdGZvcm1E
ZXN0cm95KCkKK3sKKyAgICBpZiAobV9mb250Lm1fcGF0dGVybiAmJiAoKEZjUGF0dGVybiopLTEg
IT0gbV9mb250Lm1fcGF0dGVybikpCisgICAgICAgIEZjUGF0dGVybkRlc3Ryb3kobV9mb250Lm1f
cGF0dGVybik7CisKKyAgICBpZiAobV9mb250Lm1fZm9udE1hdHJpeCkKKyAgICAgICAgZnJlZSht
X2ZvbnQubV9mb250TWF0cml4KTsKKyAgICBpZiAobV9mb250Lm1fZm9udEZhY2UpCisgICAgICAg
IGNhaXJvX2ZvbnRfZmFjZV9kZXN0cm95KG1fZm9udC5tX2ZvbnRGYWNlKTsKKyAgICBpZiAobV9m
b250Lm1fc2NhbGVkRm9udCkKKyAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX2Zv
bnQubV9zY2FsZWRGb250KTsKKyAgICBpZiAobV9mb250Lm1fb3B0aW9ucykKKyAgICAgICAgY2Fp
cm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kobV9mb250Lm1fb3B0aW9ucyk7CisgICAgZGVsZXRlIG1f
c21hbGxDYXBzRm9udERhdGE7Cit9CisKK0ZvbnREYXRhKiBGb250RGF0YTo6c21hbGxDYXBzRm9u
dERhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX3NtYWxsQ2Fwc0ZvbnREYXRhKSB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBk
ZXNjID0gRm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIGRlc2Muc2V0
U3BlY2lmaWVkU2l6ZSgwLjcwZipmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOworICAg
ICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhKiBwZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRh
KGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFtaWx5KCkpOworICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnRE
YXRhID0gbmV3IEZvbnREYXRhKCpwZGF0YSk7CisgICAgfQorICAgIHJldHVybiBtX3NtYWxsQ2Fw
c0ZvbnREYXRhOworfQorCitib29sIEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgRlRfRmFjZSBmYWNl
ID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKG1fZm9udC5tX3NjYWxlZEZvbnQpOwor
CisgICAgaWYgKCFmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKEZjRnJlZVR5cGVDaGFy
SW5kZXgoZmFjZSwgY2hhcmFjdGVyc1tpXSkgPT0gMCkgeworICAgICAgICAgICAgY2Fpcm9fZnRf
c2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UobV9mb250Lm1fc2NhbGVkRm9udCk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjYWlyb19mdF9zY2FsZWRf
Zm9udF91bmxvY2tfZmFjZShtX2ZvbnQubV9zY2FsZWRGb250KTsKKworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7CisgICAgbV90cmVhdEFz
Rml4ZWRQaXRjaCA9IG1fZm9udC5pc0ZpeGVkUGl0Y2goKTsKK30KKworZmxvYXQgRm9udERhdGE6
OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
bV9mb250Lm1fc2NhbGVkRm9udCk7CisKKyAgICBjYWlyb19nbHlwaF90IGNnbHlwaCA9IHsgZ2x5
cGgsIDAsIDAgfTsKKyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBleHRlbnRzOworICAgIGNhaXJv
X3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMobV9mb250Lm1fc2NhbGVkRm9udCwgJmNnbHlwaCwg
MSwgJmV4dGVudHMpOworCisgICAgZmxvYXQgdyA9IChmbG9hdCltX3NwYWNlV2lkdGg7CisgICAg
aWYgKGNhaXJvX3NjYWxlZF9mb250X3N0YXR1cyhtX2ZvbnQubV9zY2FsZWRGb250KSA9PSBDQUlS
T19TVEFUVVNfU1VDQ0VTUyAmJiBleHRlbnRzLnhfYWR2YW5jZSAhPSAwKQorICAgICAgICB3ID0g
KGZsb2F0KWV4dGVudHMueF9hZHZhbmNlOworICAgIHJldHVybiB3OworfQorCit2b2lkIEZvbnRE
YXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdAoreworICAgIEFTU0VSVChjcik7CisgICAg
bV9mb250LnNldEZvbnQoY3IpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9G
b250R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250R2RrLmNw
cAkocmV2aXNpb24gMjUxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250R2RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9u
dC5oIgotCi0jaW5jbHVkZSAiRm9udERhdGEuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgRm9u
dDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9u
dERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpIGNvbnN0Ci17Ci0gICAgY2Fpcm9fdCogY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7Ci0KLSAgICAvLyBTZXQgdGhlIHRleHQgY29sb3IgdG8gdXNlIGZvciBk
cmF3aW5nLgotICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgIENvbG9yIHBl
bkNvbG9yID0gZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3IoKTsKLSAgICBwZW5Db2xvci5nZXRS
R0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3JnYmEo
Y29udGV4dCwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotCi0gICAgLy8gVGhpcyB3YXMgY29t
bWVudGVkIG91dCBhcyBpdCBtYWRlICJzb21lIHRleHQgaW52aXNpYmxlIiBidXQgc2VlbXMgdG8g
d29yayBub3cuCi0gICAgZm9udC0+c2V0Rm9udChjb250ZXh0KTsKLQotICAgIEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocyA9IChHbHlwaEJ1ZmZlckdseXBoKikgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZy
b20pOwotCi0gICAgZmxvYXQgb2Zmc2V0ID0gcG9pbnQueCgpOwotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewotICAgICAgICBnbHlwaHNbaV0ueCA9IG9mZnNldDsK
LSAgICAgICAgZ2x5cGhzW2ldLnkgPSBwb2ludC55KCk7Ci0gICAgICAgIG9mZnNldCArPSBnbHlw
aEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGkpOwotICAgIH0KLSAgICBjYWlyb19zaG93X2dseXBo
cyhjb250ZXh0LCBnbHlwaHMsIG51bUdseXBocyk7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0ZvbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0ZvbnRHdGsuY3BwCShyZXZpc2lvbiAyNTE2OSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
Rm9udEdkay5jcHA6MjUxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250R3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2
IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9u
dC5oIgorCisjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgRm9u
dDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRm9u
dERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKKyAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQpIGNvbnN0Cit7CisgICAgY2Fpcm9fdCogY29udGV4dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7CisKKyAgICAvLyBTZXQgdGhlIHRleHQgY29sb3IgdG8gdXNlIGZvciBk
cmF3aW5nLgorICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOworICAgIENvbG9yIHBl
bkNvbG9yID0gZ3JhcGhpY3NDb250ZXh0LT5maWxsQ29sb3IoKTsKKyAgICBwZW5Db2xvci5nZXRS
R0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3JnYmEo
Y29udGV4dCwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworCisgICAgLy8gVGhpcyB3YXMgY29t
bWVudGVkIG91dCBhcyBpdCBtYWRlICJzb21lIHRleHQgaW52aXNpYmxlIiBidXQgc2VlbXMgdG8g
d29yayBub3cuCisgICAgZm9udC0+c2V0Rm9udChjb250ZXh0KTsKKworICAgIEdseXBoQnVmZmVy
R2x5cGgqIGdseXBocyA9IChHbHlwaEJ1ZmZlckdseXBoKikgZ2x5cGhCdWZmZXIuZ2x5cGhzKGZy
b20pOworCisgICAgZmxvYXQgb2Zmc2V0ID0gcG9pbnQueCgpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgeworICAgICAgICBnbHlwaHNbaV0ueCA9IG9mZnNldDsK
KyAgICAgICAgZ2x5cGhzW2ldLnkgPSBwb2ludC55KCk7CisgICAgICAgIG9mZnNldCArPSBnbHlw
aEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGkpOworICAgIH0KKyAgICBjYWlyb19zaG93X2dseXBo
cyhjb250ZXh0LCBnbHlwaHMsIG51bUdseXBocyk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCShyZXZpc2lvbiAyNTE2OSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE4OCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGlu
dGVybmFsIGZvbnQgaW1wbGVtZW50YXRpb24uICBJdCBzaG91bGQgbm90IGJlIGluY2x1ZGVkIGJ5
IGFueW9uZSBvdGhlciB0aGFuCi0gKiBGb250TWFjLmNwcCwgRm9udFdpbi5jcHAgYW5kIEZvbnQu
Y3BwLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgotICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1w
bGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAq
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEu
aCIKLQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
I2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgotI2luY2x1ZGUgImNhaXJvLWZ0LmgiCi0jaW5j
bHVkZSAiY2Fpcm8uaCIKLSNpbmNsdWRlIDxmb250Y29uZmlnL2ZjZnJlZXR5cGUuaD4KLSNpbmNs
dWRlIDxhc3NlcnQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Gb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUpCi0gICAgOiBtX3BhdHRlcm4oMCkKLSAg
ICAsIG1fZm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikKLSAgICAsIG1fZm9udE1hdHJp
eCgwKQotICAgICwgbV9mb250RmFjZSgwKQotICAgICwgbV9vcHRpb25zKDApCi0gICAgLCBtX3Nj
YWxlZEZvbnQoMCkKLXsKLSAgICBGb250UGxhdGZvcm1EYXRhOjppbml0KCk7Ci0KLSAgICBDU3Ry
aW5nIGZhbWlseU5hbWVTdHJpbmcgPSBmYW1pbHlOYW1lLmRvbVN0cmluZygpLnV0ZjgoKTsKLSAg
ICBjb25zdCBjaGFyKiBmY2ZhbWlseSA9IGZhbWlseU5hbWVTdHJpbmcuZGF0YSgpOwotICAgIGlu
dCBmY3NsYW50ID0gRkNfU0xBTlRfUk9NQU47Ci0gICAgaW50IGZjd2VpZ2h0ID0gRkNfV0VJR0hU
X05PUk1BTDsKLSAgICBmbG9hdCBmY3NpemUgPSBmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXpl
KCk7Ci0gICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSkKLSAgICAgICAgZmNzbGFudCA9
IEZDX1NMQU5UX0lUQUxJQzsKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLmJvbGQoKSkKLSAgICAg
ICAgZmN3ZWlnaHQgPSBGQ19XRUlHSFRfQk9MRDsKLQotICAgIGludCB0eXBlID0gZm9udERlc2Ny
aXB0aW9uLmdlbmVyaWNGYW1pbHkoKTsKLQotICAgIEZjUGF0dGVybiogcGF0dGVybiA9IEZjUGF0
dGVybkNyZWF0ZSgpOwotCi0gICAgaWYgKCFGY1BhdHRlcm5BZGRTdHJpbmcocGF0dGVybiwgRkNf
RkFNSUxZLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihmY2ZhbWlseSkpKQotICAg
ICAgICBnb3RvIGZyZWVQYXR0ZXJuOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNh
c2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKLSAgICAgICAgICAgIGZjZmFtaWx5ID0g
InNlcmlmIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlv
bjo6U2Fuc1NlcmlmRmFtaWx5OgotICAgICAgICAgICAgZmNmYW1pbHkgPSAic2Fucy1zZXJpZiI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9z
cGFjZUZhbWlseToKLSAgICAgICAgICAgIGZjZmFtaWx5ID0gIm1vbm9zcGFjZSI7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgotICAg
ICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBmY2ZhbWlseSA9ICJzYW5zLXNlcmlmIjsKLSAgICB9Ci0KLSAgICBp
ZiAoIUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLCBGQ19GQU1JTFksIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgRmNDaGFyOCo+KGZjZmFtaWx5KSkpCi0gICAgICAgIGdvdG8gZnJlZVBhdHRlcm47
Ci0gICAgaWYgKCFGY1BhdHRlcm5BZGRJbnRlZ2VyKHBhdHRlcm4sIEZDX1NMQU5ULCBmY3NsYW50
KSkKLSAgICAgICAgZ290byBmcmVlUGF0dGVybjsKLSAgICBpZiAoIUZjUGF0dGVybkFkZEludGVn
ZXIocGF0dGVybiwgRkNfV0VJR0hULCBmY3dlaWdodCkpCi0gICAgICAgIGdvdG8gZnJlZVBhdHRl
cm47Ci0gICAgaWYgKCFGY1BhdHRlcm5BZGREb3VibGUocGF0dGVybiwgRkNfUElYRUxfU0laRSwg
ZmNzaXplKSkKLSAgICAgICAgZ290byBmcmVlUGF0dGVybjsKLQotICAgIEZjQ29uZmlnU3Vic3Rp
dHV0ZShOVUxMLCBwYXR0ZXJuLCBGY01hdGNoUGF0dGVybik7Ci0gICAgRmNEZWZhdWx0U3Vic3Rp
dHV0ZShwYXR0ZXJuKTsKLQotICAgIEZjUmVzdWx0IGZjcmVzdWx0OwotICAgIG1fcGF0dGVybiA9
IEZjRm9udE1hdGNoKE5VTEwsIHBhdHRlcm4sICZmY3Jlc3VsdCk7Ci0gICAgLy8gRklYTUU6IHNo
b3VsZCB3ZSBzZXQgc29tZSBkZWZhdWx0IGZvbnQ/Ci0gICAgaWYgKCFtX3BhdHRlcm4pCi0gICAg
ICAgIGdvdG8gZnJlZVBhdHRlcm47Ci0gICAgbV9mb250RmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFj
ZV9jcmVhdGVfZm9yX3BhdHRlcm4obV9wYXR0ZXJuKTsKLSAgICBtX2ZvbnRNYXRyaXggPSByZWlu
dGVycHJldF9jYXN0PGNhaXJvX21hdHJpeF90Kj4obWFsbG9jKHNpemVvZihjYWlyb19tYXRyaXhf
dCkpKTsKLSAgICBjYWlyb19tYXRyaXhfdCBjdG07Ci0gICAgY2Fpcm9fbWF0cml4X2luaXRfc2Nh
bGUobV9mb250TWF0cml4LCBtX2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSwgbV9mb250
RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwotICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50
aXR5KCZjdG0pOwotICAgIG1fb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsK
LSAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUobV9mb250RmFjZSwg
bV9mb250TWF0cml4LCAmY3RtLCBtX29wdGlvbnMpOwotCi1mcmVlUGF0dGVybjoKLSAgICBGY1Bh
dHRlcm5EZXN0cm95KHBhdHRlcm4pOwotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQo
KQotewotICAgIHN0YXRpYyBGY0Jvb2wgRkNJbml0aWFsaXplZDsKLSAgICBpZiAoRkNJbml0aWFs
aXplZCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgRkNJbml0aWFsaXplZCA9IEZjVHJ1ZTsK
LSAgICBpZiAoIUZjSW5pdCgpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgaW5p
dCBmb250IGNvbmZpZyBsaWJyYXJ5XG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURh
dGEoKQotewotfQotCi1ib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCi17Ci0g
ICAgaW50IHNwYWNpbmc7Ci0gICAgaWYgKEZjUGF0dGVybkdldEludGVnZXIobV9wYXR0ZXJuLCBG
Q19TUEFDSU5HLCAwLCAmc3BhY2luZykgPT0gRmNSZXN1bHRNYXRjaCkKLSAgICAgICAgcmV0dXJu
IHNwYWNpbmcgPT0gRkNfTU9OTzsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIGxlbmd0aCBp
cyBhIG91dCB2YWx1ZSBnaXZpbmcgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdAotY2Fpcm9fZm9udF9m
YWNlX3QqKiBGb250UGxhdGZvcm1EYXRhOjpsaXN0KEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseU5hbWUsIGludCogbGVuZ3RoKQotewot
ICAgIGluaXQoKTsKLQotICAgIEZjUGF0dGVybiogcGF0dGVybiA9IEZjUGF0dGVybkNyZWF0ZSgp
OwotICAgIGlmICghcGF0dGVybikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBGY09iamVj
dFNldCogb3MgPSBGY09iamVjdFNldENyZWF0ZSgpOwotICAgIEZjT2JqZWN0U2V0QWRkKG9zLCBG
Q19GQU1JTFkpOwotICAgIEZjT2JqZWN0U2V0QWRkKG9zLCBGQ19TVFlMRSk7Ci0gICAgRmNGb250
U2V0KiBmcyA9IEZjRm9udExpc3QoMCwgcGF0dGVybiwgb3MpOwotICAgIGlmIChsZW5ndGgpCi0g
ICAgICAgICpsZW5ndGggPSBmcy0+bmZvbnQ7Ci0gICAgaWYgKHBhdHRlcm4pCi0gICAgICAgIEZj
UGF0dGVybkRlc3Ryb3kgKHBhdHRlcm4pOwotICAgIGlmIChvcykKLSAgICAgICAgRmNPYmplY3RT
ZXREZXN0cm95IChvcyk7Ci0gICAgY2Fpcm9fZm9udF9mYWNlX3QqKiByZXN1bHQgPSByZWludGVy
cHJldF9jYXN0PGNhaXJvX2ZvbnRfZmFjZV90Kio+KG1hbGxvYygoZnMtPm5mb250ICsgMSkgKiBz
aXplb2YoY2Fpcm9fZm9udF9mYWNlX3QqKSkpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnMt
Pm5mb250OyBpKyspIHsKLSAgICAgICAgRmNDaGFyOCogZm9udCA9IEZjTmFtZVVucGFyc2UoZnMt
PmZvbnRzW2ldKTsKLSAgICAgICAgcHJpbnRmKCIlc1xuIiwgZm9udCk7Ci0gICAgICAgIHJlc3Vs
dFtpXSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3BhdHRlcm4oZnMtPmZvbnRzW2ld
KTsKLSAgICB9Ci0gICAgcmVzdWx0W2ZzLT5uZm9udF0gPSBOVUxMOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0Rm9udChjYWlyb190KiBjcikgY29u
c3QKLXsKLSAgICBBU1NFUlQobV9mb250RmFjZSk7Ci0gICAgQVNTRVJUKG1fZm9udE1hdHJpeCk7
Ci0gICAgQVNTRVJUKG1fb3B0aW9ucyk7Ci0KLSAgICBjYWlyb19zZXRfZm9udF9mYWNlKGNyLCBt
X2ZvbnRGYWNlKTsKLSAgICBjYWlyb19zZXRfZm9udF9tYXRyaXgoY3IsIG1fZm9udE1hdHJpeCk7
Ci0gICAgY2Fpcm9fc2V0X2ZvbnRfb3B0aW9ucyhjciwgbV9vcHRpb25zKTsKLX0KLQotYm9vbCBG
b250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVy
KSBjb25zdAotewotICAgIGlmIChtX3BhdHRlcm4gPT0gb3RoZXIubV9wYXR0ZXJuKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAobV9wYXR0ZXJuID09IDAgfHwgbV9wYXR0ZXJuID09IHJl
aW50ZXJwcmV0X2Nhc3Q8RmNQYXR0ZXJuKj4oLTEpCi0gICAgICAgICAgICB8fCBvdGhlci5tX3Bh
dHRlcm4gPT0gMCB8fCBvdGhlci5tX3BhdHRlcm4gPT0gcmVpbnRlcnByZXRfY2FzdDxGY1BhdHRl
cm4qPigtMSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gRmNQYXR0ZXJuRXF1
YWwobV9wYXR0ZXJuLCBvdGhlci5tX3BhdHRlcm4pOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcAkocmV2aXNpb24gMjUxNjkpCShm
cm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsuY3BwOjI1MTY5KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YUd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
aW50ZXJuYWwgZm9udCBpbXBsZW1lbnRhdGlvbi4gIEl0IHNob3VsZCBub3QgYmUgaW5jbHVkZWQg
YnkgYW55b25lIG90aGVyIHRoYW4KKyAqIEZvbnRNYWMuY3BwLCBGb250V2luLmNwcCBhbmQgRm9u
dC5jcHAuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRl
bXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0
YS5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiY2Fpcm8tZnQuaCIKKyNp
bmNsdWRlICJjYWlyby5oIgorI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgorI2lu
Y2x1ZGUgPGFzc2VydC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKKyAgICA6IG1fcGF0dGVybigwKQor
ICAgICwgbV9mb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKQorICAgICwgbV9mb250TWF0
cml4KDApCisgICAgLCBtX2ZvbnRGYWNlKDApCisgICAgLCBtX29wdGlvbnMoMCkKKyAgICAsIG1f
c2NhbGVkRm9udCgwKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKTsKKworICAgIENT
dHJpbmcgZmFtaWx5TmFtZVN0cmluZyA9IGZhbWlseU5hbWUuZG9tU3RyaW5nKCkudXRmOCgpOwor
ICAgIGNvbnN0IGNoYXIqIGZjZmFtaWx5ID0gZmFtaWx5TmFtZVN0cmluZy5kYXRhKCk7CisgICAg
aW50IGZjc2xhbnQgPSBGQ19TTEFOVF9ST01BTjsKKyAgICBpbnQgZmN3ZWlnaHQgPSBGQ19XRUlH
SFRfTk9STUFMOworICAgIGZsb2F0IGZjc2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNp
emUoKTsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICBmY3NsYW50
ID0gRkNfU0xBTlRfSVRBTElDOworICAgIGlmIChmb250RGVzY3JpcHRpb24uYm9sZCgpKQorICAg
ICAgICBmY3dlaWdodCA9IEZDX1dFSUdIVF9CT0xEOworCisgICAgaW50IHR5cGUgPSBmb250RGVz
Y3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOworCisgICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQ
YXR0ZXJuQ3JlYXRlKCk7CisKKyAgICBpZiAoIUZjUGF0dGVybkFkZFN0cmluZyhwYXR0ZXJuLCBG
Q19GQU1JTFksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZjZmFtaWx5KSkpCisg
ICAgICAgIGdvdG8gZnJlZVBhdHRlcm47CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgorICAgICAgICAgICAgZmNmYW1pbHkg
PSAic2VyaWYiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRm9udERlc2NyaXB0
aW9uOjpTYW5zU2VyaWZGYW1pbHk6CisgICAgICAgICAgICBmY2ZhbWlseSA9ICJzYW5zLXNlcmlm
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6TW9u
b3NwYWNlRmFtaWx5OgorICAgICAgICAgICAgZmNmYW1pbHkgPSAibW9ub3NwYWNlIjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6Cisg
ICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseToKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGZjZmFtaWx5ID0gInNhbnMtc2VyaWYiOworICAgIH0KKworICAg
IGlmICghRmNQYXR0ZXJuQWRkU3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBGY0NoYXI4Kj4oZmNmYW1pbHkpKSkKKyAgICAgICAgZ290byBmcmVlUGF0dGVy
bjsKKyAgICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfU0xBTlQsIGZjc2xh
bnQpKQorICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOworICAgIGlmICghRmNQYXR0ZXJuQWRkSW50
ZWdlcihwYXR0ZXJuLCBGQ19XRUlHSFQsIGZjd2VpZ2h0KSkKKyAgICAgICAgZ290byBmcmVlUGF0
dGVybjsKKyAgICBpZiAoIUZjUGF0dGVybkFkZERvdWJsZShwYXR0ZXJuLCBGQ19QSVhFTF9TSVpF
LCBmY3NpemUpKQorICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOworCisgICAgRmNDb25maWdTdWJz
dGl0dXRlKE5VTEwsIHBhdHRlcm4sIEZjTWF0Y2hQYXR0ZXJuKTsKKyAgICBGY0RlZmF1bHRTdWJz
dGl0dXRlKHBhdHRlcm4pOworCisgICAgRmNSZXN1bHQgZmNyZXN1bHQ7CisgICAgbV9wYXR0ZXJu
ID0gRmNGb250TWF0Y2goTlVMTCwgcGF0dGVybiwgJmZjcmVzdWx0KTsKKyAgICAvLyBGSVhNRTog
c2hvdWxkIHdlIHNldCBzb21lIGRlZmF1bHQgZm9udD8KKyAgICBpZiAoIW1fcGF0dGVybikKKyAg
ICAgICAgZ290byBmcmVlUGF0dGVybjsKKyAgICBtX2ZvbnRGYWNlID0gY2Fpcm9fZnRfZm9udF9m
YWNlX2NyZWF0ZV9mb3JfcGF0dGVybihtX3BhdHRlcm4pOworICAgIG1fZm9udE1hdHJpeCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fbWF0cml4X3QqPihtYWxsb2Moc2l6ZW9mKGNhaXJvX21hdHJp
eF90KSkpOworICAgIGNhaXJvX21hdHJpeF90IGN0bTsKKyAgICBjYWlyb19tYXRyaXhfaW5pdF9z
Y2FsZShtX2ZvbnRNYXRyaXgsIG1fZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpLCBtX2Zv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7CisgICAgY2Fpcm9fbWF0cml4X2luaXRfaWRl
bnRpdHkoJmN0bSk7CisgICAgbV9vcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgp
OworICAgIG1fc2NhbGVkRm9udCA9IGNhaXJvX3NjYWxlZF9mb250X2NyZWF0ZShtX2ZvbnRGYWNl
LCBtX2ZvbnRNYXRyaXgsICZjdG0sIG1fb3B0aW9ucyk7CisKK2ZyZWVQYXR0ZXJuOgorICAgIEZj
UGF0dGVybkRlc3Ryb3kocGF0dGVybik7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aW5p
dCgpCit7CisgICAgc3RhdGljIEZjQm9vbCBGQ0luaXRpYWxpemVkOworICAgIGlmIChGQ0luaXRp
YWxpemVkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBGQ0luaXRpYWxpemVkID0gRmNUcnVl
OworICAgIGlmICghRmNJbml0KCkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBp
bml0IGZvbnQgY29uZmlnIGxpYnJhcnlcbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3Jt
RGF0YSgpCit7Cit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKK3sK
KyAgICBpbnQgc3BhY2luZzsKKyAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdlcihtX3BhdHRlcm4s
IEZDX1NQQUNJTkcsIDAsICZzcGFjaW5nKSA9PSBGY1Jlc3VsdE1hdGNoKQorICAgICAgICByZXR1
cm4gc3BhY2luZyA9PSBGQ19NT05POworICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gbGVuZ3Ro
IGlzIGEgb3V0IHZhbHVlIGdpdmluZyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0CitjYWlyb19mb250
X2ZhY2VfdCoqIEZvbnRQbGF0Zm9ybURhdGE6Omxpc3QoRm9udERlc2NyaXB0aW9uJiBmb250RGVz
Y3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgaW50KiBsZW5ndGgpCit7
CisgICAgaW5pdCgpOworCisgICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRl
KCk7CisgICAgaWYgKCFwYXR0ZXJuKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIEZjT2Jq
ZWN0U2V0KiBvcyA9IEZjT2JqZWN0U2V0Q3JlYXRlKCk7CisgICAgRmNPYmplY3RTZXRBZGQob3Ms
IEZDX0ZBTUlMWSk7CisgICAgRmNPYmplY3RTZXRBZGQob3MsIEZDX1NUWUxFKTsKKyAgICBGY0Zv
bnRTZXQqIGZzID0gRmNGb250TGlzdCgwLCBwYXR0ZXJuLCBvcyk7CisgICAgaWYgKGxlbmd0aCkK
KyAgICAgICAgKmxlbmd0aCA9IGZzLT5uZm9udDsKKyAgICBpZiAocGF0dGVybikKKyAgICAgICAg
RmNQYXR0ZXJuRGVzdHJveSAocGF0dGVybik7CisgICAgaWYgKG9zKQorICAgICAgICBGY09iamVj
dFNldERlc3Ryb3kgKG9zKTsKKyAgICBjYWlyb19mb250X2ZhY2VfdCoqIHJlc3VsdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2Fpcm9fZm9udF9mYWNlX3QqKj4obWFsbG9jKChmcy0+bmZvbnQgKyAxKSAq
IHNpemVvZihjYWlyb19mb250X2ZhY2VfdCopKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
cy0+bmZvbnQ7IGkrKykgeworICAgICAgICBGY0NoYXI4KiBmb250ID0gRmNOYW1lVW5wYXJzZShm
cy0+Zm9udHNbaV0pOworICAgICAgICBwcmludGYoIiVzXG4iLCBmb250KTsKKyAgICAgICAgcmVz
dWx0W2ldID0gY2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmcy0+Zm9udHNb
aV0pOworICAgIH0KKyAgICByZXN1bHRbZnMtPm5mb250XSA9IE5VTEw7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBj
b25zdAoreworICAgIEFTU0VSVChtX2ZvbnRGYWNlKTsKKyAgICBBU1NFUlQobV9mb250TWF0cml4
KTsKKyAgICBBU1NFUlQobV9vcHRpb25zKTsKKworICAgIGNhaXJvX3NldF9mb250X2ZhY2UoY3Is
IG1fZm9udEZhY2UpOworICAgIGNhaXJvX3NldF9mb250X21hdHJpeChjciwgbV9mb250TWF0cml4
KTsKKyAgICBjYWlyb19zZXRfZm9udF9vcHRpb25zKGNyLCBtX29wdGlvbnMpOworfQorCitib29s
IEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgaWYgKG1fcGF0dGVybiA9PSBvdGhlci5tX3BhdHRlcm4pCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX3BhdHRlcm4gPT0gMCB8fCBtX3BhdHRlcm4gPT0g
cmVpbnRlcnByZXRfY2FzdDxGY1BhdHRlcm4qPigtMSkKKyAgICAgICAgICAgIHx8IG90aGVyLm1f
cGF0dGVybiA9PSAwIHx8IG90aGVyLm1fcGF0dGVybiA9PSByZWludGVycHJldF9jYXN0PEZjUGF0
dGVybio+KC0xKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBGY1BhdHRlcm5F
cXVhbChtX3BhdHRlcm4sIG90aGVyLm1fcGF0dGVybik7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAJKHJldmlzaW9uIDI1MTY5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhQYWdlVHJlZU5vZGVHZGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+Ci0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJHbHlwaFBhZ2VU
cmVlTm9kZS5oIgotCi0jaW5jbHVkZSAiRm9udERhdGEuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1ib29sIEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJM
ZW5ndGgsIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSkKLXsKLSAgICBGVF9GYWNlIGZhY2UgPSBj
YWlyb19mdF9zY2FsZWRfZm9udF9sb2NrX2ZhY2UoZm9udERhdGEtPm1fZm9udC5tX3NjYWxlZEZv
bnQpOwotCi0gICAgaWYgKCFmYWNlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspCi0gICAgICAgIHNldEdseXBo
RGF0YUZvckluZGV4KGksIEZjRnJlZVR5cGVDaGFySW5kZXgoZmFjZSwgYnVmZmVyW2ldKSwgZm9u
dERhdGEpOwotCi0gICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UoZm9udERhdGEt
Pm1fZm9udC5tX3NjYWxlZEZvbnQpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUd0ay5jcHAJKHJldmlz
aW9uIDI1MTY5KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdk
ay5jcHA6MjUxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUd0
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4K
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5h
bWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdseXBoUGFnZVRyZWVOb2RlLmgiCisKKyNpbmNsdWRlICJGb250RGF0YS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2ln
bmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQoreworICAgIEZUX0Zh
Y2UgZmFjZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShmb250RGF0YS0+bV9mb250
Lm1fc2NhbGVkRm9udCk7CisKKyAgICBpZiAoIWZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykKKyAgICAg
ICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBidWZm
ZXJbaV0pLCBmb250RGF0YSk7CisKKyAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tfZmFj
ZShmb250RGF0YS0+bV9mb250Lm1fc2NhbGVkRm9udCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvS2V5RXZlbnRHZGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2RrLmNwcAkocmV2aXNpb24gMjUx
NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9LZXlFdmVudEdkay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNo
YWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAotICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmgi
Ci0KLSNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiS2V5Ym9hcmRDb2Rl
cy5oIgotI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgot
I2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8g
RklYTUU6IFRoaXMgaXMgaW5jb21wbGV0ZS4gIFdlIHNob3VsZCBjaGFuZ2UgdGhpcyB0byBtaXJy
b3IKLS8vIG1vcmUgbGlrZSB3aGF0IEZpcmVmb3ggZG9lcywgYW5kIGdlbmVyYXRlIHRoZXNlIHN3
aXRjaCBzdGF0ZW1lbnRzCi0vLyBhdCBidWlsZCB0aW1lLgotc3RhdGljIFN0cmluZyBrZXlJZGVu
dGlmaWVyRm9yR2RrS2V5Q29kZShndWludCBrZXlDb2RlKQotewotICAgIHN3aXRjaCAoa2V5Q29k
ZSkgewotICAgICAgICBjYXNlIEdES19NZW51OgotICAgICAgICBjYXNlIEdES19BbHRfTDoKLSAg
ICAgICAgY2FzZSBHREtfQWx0X1I6Ci0gICAgICAgICAgICByZXR1cm4gIkFsdCI7Ci0gICAgICAg
IGNhc2UgR0RLX0NsZWFyOgotICAgICAgICAgICAgcmV0dXJuICJDbGVhciI7Ci0gICAgICAgIGNh
c2UgR0RLX0Rvd246Ci0gICAgICAgICAgICByZXR1cm4gIkRvd24iOwotICAgICAgICAgICAgLy8g
IkVuZCIKLSAgICAgICAgY2FzZSBHREtfRW5kOgotICAgICAgICAgICAgcmV0dXJuICJFbmQiOwot
ICAgICAgICAgICAgLy8gIkVudGVyIgotICAgICAgICBjYXNlIEdES19JU09fRW50ZXI6Ci0gICAg
ICAgIGNhc2UgR0RLX0tQX0VudGVyOgotICAgICAgICAgICAgcmV0dXJuICJFbnRlciI7Ci0gICAg
ICAgIGNhc2UgR0RLX0V4ZWN1dGU6Ci0gICAgICAgICAgICByZXR1cm4gIkV4ZWN1dGUiOwotICAg
ICAgICBjYXNlIEdES19GMToKLSAgICAgICAgICAgIHJldHVybiAiRjEiOwotICAgICAgICBjYXNl
IEdES19GMjoKLSAgICAgICAgICAgIHJldHVybiAiRjIiOwotICAgICAgICBjYXNlIEdES19GMzoK
LSAgICAgICAgICAgIHJldHVybiAiRjMiOwotICAgICAgICBjYXNlIEdES19GNDoKLSAgICAgICAg
ICAgIHJldHVybiAiRjQiOwotICAgICAgICBjYXNlIEdES19GNToKLSAgICAgICAgICAgIHJldHVy
biAiRjUiOwotICAgICAgICBjYXNlIEdES19GNjoKLSAgICAgICAgICAgIHJldHVybiAiRjYiOwot
ICAgICAgICBjYXNlIEdES19GNzoKLSAgICAgICAgICAgIHJldHVybiAiRjciOwotICAgICAgICBj
YXNlIEdES19GODoKLSAgICAgICAgICAgIHJldHVybiAiRjgiOwotICAgICAgICBjYXNlIEdES19G
OToKLSAgICAgICAgICAgIHJldHVybiAiRjkiOwotICAgICAgICBjYXNlIEdES19GMTA6Ci0gICAg
ICAgICAgICByZXR1cm4gIkYxMCI7Ci0gICAgICAgIGNhc2UgR0RLX0YxMToKLSAgICAgICAgICAg
IHJldHVybiAiRjExIjsKLSAgICAgICAgY2FzZSBHREtfRjEyOgotICAgICAgICAgICAgcmV0dXJu
ICJGMTIiOwotICAgICAgICBjYXNlIEdES19GMTM6Ci0gICAgICAgICAgICByZXR1cm4gIkYxMyI7
Ci0gICAgICAgIGNhc2UgR0RLX0YxNDoKLSAgICAgICAgICAgIHJldHVybiAiRjE0IjsKLSAgICAg
ICAgY2FzZSBHREtfRjE1OgotICAgICAgICAgICAgcmV0dXJuICJGMTUiOwotICAgICAgICBjYXNl
IEdES19GMTY6Ci0gICAgICAgICAgICByZXR1cm4gIkYxNiI7Ci0gICAgICAgIGNhc2UgR0RLX0Yx
NzoKLSAgICAgICAgICAgIHJldHVybiAiRjE3IjsKLSAgICAgICAgY2FzZSBHREtfRjE4OgotICAg
ICAgICAgICAgcmV0dXJuICJGMTgiOwotICAgICAgICBjYXNlIEdES19GMTk6Ci0gICAgICAgICAg
ICByZXR1cm4gIkYxOSI7Ci0gICAgICAgIGNhc2UgR0RLX0YyMDoKLSAgICAgICAgICAgIHJldHVy
biAiRjIwIjsKLSAgICAgICAgY2FzZSBHREtfRjIxOgotICAgICAgICAgICAgcmV0dXJuICJGMjEi
OwotICAgICAgICBjYXNlIEdES19GMjI6Ci0gICAgICAgICAgICByZXR1cm4gIkYyMiI7Ci0gICAg
ICAgIGNhc2UgR0RLX0YyMzoKLSAgICAgICAgICAgIHJldHVybiAiRjIzIjsKLSAgICAgICAgY2Fz
ZSBHREtfRjI0OgotICAgICAgICAgICAgcmV0dXJuICJGMjQiOwotICAgICAgICBjYXNlIEdES19I
ZWxwOgotICAgICAgICAgICAgcmV0dXJuICJIZWxwIjsKLSAgICAgICAgY2FzZSBHREtfSG9tZToK
LSAgICAgICAgICAgIHJldHVybiAiSG9tZSI7Ci0gICAgICAgIGNhc2UgR0RLX0luc2VydDoKLSAg
ICAgICAgICAgIHJldHVybiAiSW5zZXJ0IjsKLSAgICAgICAgY2FzZSBHREtfTGVmdDoKLSAgICAg
ICAgICAgIHJldHVybiAiTGVmdCI7Ci0gICAgICAgIGNhc2UgR0RLX1BhZ2VfRG93bjoKLSAgICAg
ICAgICAgIHJldHVybiAiUGFnZURvd24iOwotICAgICAgICBjYXNlIEdES19QYWdlX1VwOgotICAg
ICAgICAgICAgcmV0dXJuICJQYWdlVXAiOwotICAgICAgICBjYXNlIEdES19QYXVzZToKLSAgICAg
ICAgICAgIHJldHVybiAiUGF1c2UiOwotICAgICAgICBjYXNlIEdES18zMjcwX1ByaW50U2NyZWVu
OgotICAgICAgICAgICAgcmV0dXJuICJQcmludFNjcmVlbiI7Ci0gICAgICAgIGNhc2UgR0RLX1Jp
Z2h0OgotICAgICAgICAgICAgcmV0dXJuICJSaWdodCI7Ci0gICAgICAgIGNhc2UgR0RLX1NlbGVj
dDoKLSAgICAgICAgICAgIHJldHVybiAiU2VsZWN0IjsKLSAgICAgICAgY2FzZSBHREtfVXA6Ci0g
ICAgICAgICAgICByZXR1cm4gIlVwIjsKLSAgICAgICAgICAgIC8vIFN0YW5kYXJkIHNheXMgdGhh
dCBERUwgYmVjb21lcyBVKzAwN0YuCi0gICAgICAgIGNhc2UgR0RLX0RlbGV0ZToKLSAgICAgICAg
ICAgIHJldHVybiAiVSswMDdGIjsKLSAgICAgICAgY2FzZSBHREtfVGFiOgotICAgICAgICAgICAg
cmV0dXJuICJVKzAwMDkiOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIFN0
cmluZzo6Zm9ybWF0KCJVKyUwNFgiLCBnZGtfa2V5dmFsX3RvX3VuaWNvZGUoZ2RrX2tleXZhbF90
b191cHBlcihrZXlDb2RlKSkpOwotICAgIH0KLX0KLQotc3RhdGljIGludCB3aW5kb3dzS2V5Q29k
ZUZvcktleUV2ZW50KHVuc2lnbmVkIGludCBrZXljb2RlKQotewotICAgIHN3aXRjaCAoa2V5Y29k
ZSkgewotICAgICAgICBjYXNlIEdES19LUF8wOgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBB
RDA7Ly8gKDYwKSBOdW1lcmljIGtleXBhZCAwIGtleQotICAgICAgICBjYXNlIEdES19LUF8xOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtleXBhZCAxIGtl
eQotICAgICAgICBjYXNlIEdES19LUF8yOgotICAgICAgICAgICAgcmV0dXJuICBWS19OVU1QQUQy
OyAvLyAoNjIpIE51bWVyaWMga2V5cGFkIDIga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzM6Ci0g
ICAgICAgICAgICByZXR1cm4gVktfTlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAzIGtl
eQotICAgICAgICBjYXNlIEdES19LUF80OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDQ7
IC8vICg2NCkgTnVtZXJpYyBrZXlwYWQgNCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfNToKLSAg
ICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkK
LSAgICAgICAgY2FzZSBHREtfS1BfNjoKLSAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ2OyAv
LyAoNjYpIE51bWVyaWMga2V5cGFkIDYga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQXzc6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfTlVNUEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBhZCA3IGtleQot
ICAgICAgICBjYXNlIEdES19LUF84OgotICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDg7IC8v
ICg2OCkgTnVtZXJpYyBrZXlwYWQgOCBrZXkKLSAgICAgICAgY2FzZSBHREtfS1BfOToKLSAgICAg
ICAgICAgIHJldHVybiBWS19OVU1QQUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5Ci0g
ICAgICAgIGNhc2UgR0RLX0tQX011bHRpcGx5OgotICAgICAgICAgICAgcmV0dXJuIFZLX01VTFRJ
UExZOyAvLyAoNkEpIE11bHRpcGx5IGtleQotICAgICAgICBjYXNlIEdES19LUF9BZGQ6Ci0gICAg
ICAgICAgICByZXR1cm4gVktfQUREOyAvLyAoNkIpIEFkZCBrZXkKLSAgICAgICAgY2FzZSBHREtf
S1BfU3VidHJhY3Q6Ci0gICAgICAgICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8vICg2RCkgU3Vi
dHJhY3Qga2V5Ci0gICAgICAgIGNhc2UgR0RLX0tQX0RlY2ltYWw6Ci0gICAgICAgICAgICByZXR1
cm4gVktfREVDSU1BTDsgLy8gKDZFKSBEZWNpbWFsIGtleQotICAgICAgICBjYXNlIEdES19LUF9E
aXZpZGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRElWSURFOyAvLyAoNkYpIERpdmlkZSBrZXkK
LQotICAgICAgICBjYXNlIEdES19CYWNrU3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfQkFD
SzsgLy8gKDA4KSBCQUNLU1BBQ0Uga2V5Ci0gICAgICAgIGNhc2UgR0RLX1RhYjoKLSAgICAgICAg
ICAgIHJldHVybiBWS19UQUI7IC8vICgwOSkgVEFCIGtleQotICAgICAgICBjYXNlIEdES19DbGVh
cjoKLSAgICAgICAgICAgIHJldHVybiBWS19DTEVBUjsgLy8gKDBDKSBDTEVBUiBrZXkKLSAgICAg
ICAgY2FzZSBHREtfUmV0dXJuOgotICAgICAgICAgICAgcmV0dXJuIFZLX1JFVFVSTjsgLy8oMEQp
IFJldHVybiBrZXkKLSAgICAgICAgY2FzZSBHREtfU2hpZnRfTDoKLSAgICAgICAgY2FzZSBHREtf
U2hpZnRfUjoKLSAgICAgICAgICAgIHJldHVybiBWS19TSElGVDsgLy8gKDEwKSBTSElGVCBrZXkK
LSAgICAgICAgY2FzZSBHREtfQ29udHJvbF9MOgotICAgICAgICBjYXNlIEdES19Db250cm9sX1I6
Ci0gICAgICAgICAgICByZXR1cm4gVktfQ09OVFJPTDsgLy8gKDExKSBDVFJMIGtleQotICAgICAg
ICBjYXNlIEdES19NZW51OgotICAgICAgICBjYXNlIEdES19BbHRfTDoKLSAgICAgICAgY2FzZSBH
REtfQWx0X1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfTUVOVTsgLy8gKDEyKSBBTFQga2V5Ci0K
LSAgICAgICAgY2FzZSBHREtfUGF1c2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfUEFVU0U7IC8v
ICgxMykgUEFVU0Uga2V5Ci0gICAgICAgIGNhc2UgR0RLX0NhcHNfTG9jazoKLSAgICAgICAgICAg
IHJldHVybiBWS19DQVBJVEFMOyAvLyAoMTQpIENBUFMgTE9DSyBrZXkKLSAgICAgICAgY2FzZSBH
REtfS2FuYV9Mb2NrOgotICAgICAgICBjYXNlIEdES19LYW5hX1NoaWZ0OgotICAgICAgICAgICAg
cmV0dXJuIFZLX0tBTkE7IC8vICgxNSkgSW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1v
ZGUKLSAgICAgICAgY2FzZSBHREtfSGFuZ3VsOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkdV
TDsgLy8gVktfSEFOR1VMICgxNSkgSU1FIEhhbmd1bCBtb2RlCi0gICAgICAgICAgICAvLyBWS19K
VU5KQSAoMTcpIElNRSBKdW5qYSBtb2RlCi0gICAgICAgICAgICAvLyBWS19GSU5BTCAoMTgpIElN
RSBmaW5hbCBtb2RlCi0gICAgICAgIGNhc2UgR0RLX0hhbmd1bF9IYW5qYToKLSAgICAgICAgICAg
IHJldHVybiBWS19IQU5KQTsgLy8gKDE5KSBJTUUgSGFuamEgbW9kZQotICAgICAgICBjYXNlIEdE
S19LYW5qaToKLSAgICAgICAgICAgIHJldHVybiBWS19LQU5KSTsgLy8gKDE5KSBJTUUgS2Fuamkg
bW9kZQotICAgICAgICBjYXNlIEdES19Fc2NhcGU6Ci0gICAgICAgICAgICByZXR1cm4gVktfRVND
QVBFOyAvLyAoMUIpIEVTQyBrZXkKLSAgICAgICAgICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUg
Y29udmVydAotICAgICAgICAgICAgLy8gVktfTk9OQ09OVkVSVCAoMUQpIElNRSBub25jb252ZXJ0
Ci0gICAgICAgICAgICAvLyBWS19BQ0NFUFQgKDFFKSBJTUUgYWNjZXB0Ci0gICAgICAgICAgICAv
LyBWS19NT0RFQ0hBTkdFICgxRikgSU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QKLSAgICAgICAgY2Fz
ZSBHREtfc3BhY2U6Ci0gICAgICAgICAgICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VC
QVIKLSAgICAgICAgY2FzZSBHREtfUGFnZV9VcDoKLSAgICAgICAgICAgIHJldHVybiBWS19QUklP
UjsgLy8gKDIxKSBQQUdFIFVQIGtleQotICAgICAgICBjYXNlIEdES19QYWdlX0Rvd246Ci0gICAg
ICAgICAgICByZXR1cm4gVktfTkVYVDsgLy8gKDIyKSBQQUdFIERPV04ga2V5Ci0gICAgICAgIGNh
c2UgR0RLX0VuZDoKLSAgICAgICAgICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQot
ICAgICAgICBjYXNlIEdES19Ib21lOgotICAgICAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgy
NCkgSE9NRSBrZXkKLSAgICAgICAgY2FzZSBHREtfTGVmdDoKLSAgICAgICAgICAgIHJldHVybiBW
S19MRUZUOyAvLyAoMjUpIExFRlQgQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX1VwOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX1VQOyAvLyAoMjYpIFVQIEFSUk9XIGtleQotICAgICAgICBjYXNl
IEdES19SaWdodDoKLSAgICAgICAgICAgIHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBB
UlJPVyBrZXkKLSAgICAgICAgY2FzZSBHREtfRG93bjoKLSAgICAgICAgICAgIHJldHVybiBWS19E
T1dOOyAvLyAoMjgpIERPV04gQVJST1cga2V5Ci0gICAgICAgIGNhc2UgR0RLX1NlbGVjdDoKLSAg
ICAgICAgICAgIHJldHVybiBWS19TRUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtleQotICAgICAgICBj
YXNlIEdES19QcmludDoKLSAgICAgICAgICAgIHJldHVybiBWS19QUklOVDsgLy8gKDJBKSBQUklO
VCBrZXkKLSAgICAgICAgY2FzZSBHREtfRXhlY3V0ZToKLSAgICAgICAgICAgIHJldHVybiBWS19F
WEVDVVRFOy8vICgyQikgRVhFQ1VURSBrZXkKLSAgICAgICAgICAgIC8vZHVubm8gb24gdGhpcwot
ICAgICAgICAgICAgLy9jYXNlIEdES19QcmludFNjcmVlbjoKLSAgICAgICAgICAgIC8vICAgICAg
cmV0dXJuIFZLX1NOQVBTSE9UOyAvLyAoMkMpIFBSSU5UIFNDUkVFTiBrZXkKLSAgICAgICAgY2Fz
ZSBHREtfSW5zZXJ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJTlMg
a2V5Ci0gICAgICAgIGNhc2UgR0RLX0RlbGV0ZToKLSAgICAgICAgICAgIHJldHVybiBWS19ERUxF
VEU7IC8vICgyRSkgREVMIGtleQotICAgICAgICBjYXNlIEdES19IZWxwOgotICAgICAgICAgICAg
cmV0dXJuIFZLX0hFTFA7IC8vICgyRikgSEVMUCBrZXkKLSAgICAgICAgY2FzZSBHREtfMDoKLSAg
ICAgICAgY2FzZSBHREtfcGFyZW5sZWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLXzA7ICAgIC8v
ICAoMzApIDApIGtleQotICAgICAgICBjYXNlIEdES18xOgotICAgICAgICAgICAgcmV0dXJuIFZL
XzE7IC8vICAoMzEpIDEgISBrZXkKLSAgICAgICAgY2FzZSBHREtfMjoKLSAgICAgICAgY2FzZSBH
REtfYXQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfMjsgLy8gICgzMikgMiAmIGtleQotICAgICAg
ICBjYXNlIEdES18zOgotICAgICAgICBjYXNlIEdES19udW1iZXJzaWduOgotICAgICAgICAgICAg
cmV0dXJuIFZLXzM7IC8vY2FzZSAnMyc6IGNhc2UgJyMnOwotICAgICAgICBjYXNlIEdES180Ogot
ICAgICAgICBjYXNlIEdES19kb2xsYXI6IC8vICAoMzQpIDQga2V5ICckJzsKLSAgICAgICAgICAg
IHJldHVybiBWS180OwotICAgICAgICBjYXNlIEdES181OgotICAgICAgICBjYXNlIEdES19wZXJj
ZW50OgotICAgICAgICAgICAgcmV0dXJuIFZLXzU7IC8vICAoMzUpIDUga2V5ICAnJScKLSAgICAg
ICAgY2FzZSBHREtfNjoKLSAgICAgICAgY2FzZSBHREtfYXNjaWljaXJjdW06Ci0gICAgICAgICAg
ICByZXR1cm4gVktfNjsgLy8gICgzNikgNiBrZXkgICdeJwotICAgICAgICBjYXNlIEdES183Ogot
ICAgICAgICBjYXNlIEdES19hbXBlcnNhbmQ6Ci0gICAgICAgICAgICByZXR1cm4gVktfNzsgLy8g
ICgzNykgNyBrZXkgIGNhc2UgJyYnCi0gICAgICAgIGNhc2UgR0RLXzg6Ci0gICAgICAgIGNhc2Ug
R0RLX2FzdGVyaXNrOgotICAgICAgICAgICAgcmV0dXJuIFZLXzg7IC8vICAoMzgpIDgga2V5ICAn
KicKLSAgICAgICAgY2FzZSBHREtfOToKLSAgICAgICAgY2FzZSBHREtfcGFyZW5yaWdodDoKLSAg
ICAgICAgICAgIHJldHVybiBWS185OyAvLyAgKDM5KSA5IGtleSAnKCcKLSAgICAgICAgY2FzZSBH
REtfYToKLSAgICAgICAgY2FzZSBHREtfQToKLSAgICAgICAgICAgIHJldHVybiBWS19BOyAvLyAg
KDQxKSBBIGtleSBjYXNlICdhJzogY2FzZSAnQSc6IHJldHVybiAweDQxOwotICAgICAgICBjYXNl
IEdES19iOgotICAgICAgICBjYXNlIEdES19COgotICAgICAgICAgICAgcmV0dXJuIFZLX0I7IC8v
ICAoNDIpIEIga2V5IGNhc2UgJ2InOiBjYXNlICdCJzogcmV0dXJuIDB4NDI7Ci0gICAgICAgIGNh
c2UgR0RLX2M6Ci0gICAgICAgIGNhc2UgR0RLX0M6Ci0gICAgICAgICAgICByZXR1cm4gVktfQzsg
Ly8gICg0MykgQyBrZXkgY2FzZSAnYyc6IGNhc2UgJ0MnOiByZXR1cm4gMHg0MzsKLSAgICAgICAg
Y2FzZSBHREtfZDoKLSAgICAgICAgY2FzZSBHREtfRDoKLSAgICAgICAgICAgIHJldHVybiBWS19E
OyAvLyAgKDQ0KSBEIGtleSBjYXNlICdkJzogY2FzZSAnRCc6IHJldHVybiAweDQ0OwotICAgICAg
ICBjYXNlIEdES19lOgotICAgICAgICBjYXNlIEdES19FOgotICAgICAgICAgICAgcmV0dXJuIFZL
X0U7IC8vICAoNDUpIEUga2V5IGNhc2UgJ2UnOiBjYXNlICdFJzogcmV0dXJuIDB4NDU7Ci0gICAg
ICAgIGNhc2UgR0RLX2Y6Ci0gICAgICAgIGNhc2UgR0RLX0Y6Ci0gICAgICAgICAgICByZXR1cm4g
VktfRjsgLy8gICg0NikgRiBrZXkgY2FzZSAnZic6IGNhc2UgJ0YnOiByZXR1cm4gMHg0NjsKLSAg
ICAgICAgY2FzZSBHREtfZzoKLSAgICAgICAgY2FzZSBHREtfRzoKLSAgICAgICAgICAgIHJldHVy
biBWS19HOyAvLyAgKDQ3KSBHIGtleSBjYXNlICdnJzogY2FzZSAnRyc6IHJldHVybiAweDQ3Owot
ICAgICAgICBjYXNlIEdES19oOgotICAgICAgICBjYXNlIEdES19IOgotICAgICAgICAgICAgcmV0
dXJuIFZLX0g7IC8vICAoNDgpIEgga2V5IGNhc2UgJ2gnOiBjYXNlICdIJzogcmV0dXJuIDB4NDg7
Ci0gICAgICAgIGNhc2UgR0RLX2k6Ci0gICAgICAgIGNhc2UgR0RLX0k6Ci0gICAgICAgICAgICBy
ZXR1cm4gVktfSTsgLy8gICg0OSkgSSBrZXkgY2FzZSAnaSc6IGNhc2UgJ0knOiByZXR1cm4gMHg0
OTsKLSAgICAgICAgY2FzZSBHREtfajoKLSAgICAgICAgY2FzZSBHREtfSjoKLSAgICAgICAgICAg
IHJldHVybiBWS19KOyAvLyAgKDRBKSBKIGtleSBjYXNlICdqJzogY2FzZSAnSic6IHJldHVybiAw
eDRBOwotICAgICAgICBjYXNlIEdES19rOgotICAgICAgICBjYXNlIEdES19LOgotICAgICAgICAg
ICAgcmV0dXJuIFZLX0s7IC8vICAoNEIpIEsga2V5IGNhc2UgJ2snOiBjYXNlICdLJzogcmV0dXJu
IDB4NEI7Ci0gICAgICAgIGNhc2UgR0RLX2w6Ci0gICAgICAgIGNhc2UgR0RLX0w6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfTDsgLy8gICg0QykgTCBrZXkgY2FzZSAnbCc6IGNhc2UgJ0wnOiByZXR1
cm4gMHg0QzsKLSAgICAgICAgY2FzZSBHREtfbToKLSAgICAgICAgY2FzZSBHREtfTToKLSAgICAg
ICAgICAgIHJldHVybiBWS19NOyAvLyAgKDREKSBNIGtleSBjYXNlICdtJzogY2FzZSAnTSc6IHJl
dHVybiAweDREOwotICAgICAgICBjYXNlIEdES19uOgotICAgICAgICBjYXNlIEdES19OOgotICAg
ICAgICAgICAgcmV0dXJuIFZLX047IC8vICAoNEUpIE4ga2V5IGNhc2UgJ24nOiBjYXNlICdOJzog
cmV0dXJuIDB4NEU7Ci0gICAgICAgIGNhc2UgR0RLX286Ci0gICAgICAgIGNhc2UgR0RLX086Ci0g
ICAgICAgICAgICByZXR1cm4gVktfTzsgLy8gICg0RikgTyBrZXkgY2FzZSAnbyc6IGNhc2UgJ08n
OiByZXR1cm4gMHg0RjsKLSAgICAgICAgY2FzZSBHREtfcDoKLSAgICAgICAgY2FzZSBHREtfUDoK
LSAgICAgICAgICAgIHJldHVybiBWS19QOyAvLyAgKDUwKSBQIGtleSBjYXNlICdwJzogY2FzZSAn
UCc6IHJldHVybiAweDUwOwotICAgICAgICBjYXNlIEdES19xOgotICAgICAgICBjYXNlIEdES19R
OgotICAgICAgICAgICAgcmV0dXJuIFZLX1E7IC8vICAoNTEpIFEga2V5IGNhc2UgJ3EnOiBjYXNl
ICdRJzogcmV0dXJuIDB4NTE7Ci0gICAgICAgIGNhc2UgR0RLX3I6Ci0gICAgICAgIGNhc2UgR0RL
X1I6Ci0gICAgICAgICAgICByZXR1cm4gVktfUjsgLy8gICg1MikgUiBrZXkgY2FzZSAncic6IGNh
c2UgJ1InOiByZXR1cm4gMHg1MjsKLSAgICAgICAgY2FzZSBHREtfczoKLSAgICAgICAgY2FzZSBH
REtfUzoKLSAgICAgICAgICAgIHJldHVybiBWS19TOyAvLyAgKDUzKSBTIGtleSBjYXNlICdzJzog
Y2FzZSAnUyc6IHJldHVybiAweDUzOwotICAgICAgICBjYXNlIEdES190OgotICAgICAgICBjYXNl
IEdES19UOgotICAgICAgICAgICAgcmV0dXJuIFZLX1Q7IC8vICAoNTQpIFQga2V5IGNhc2UgJ3Qn
OiBjYXNlICdUJzogcmV0dXJuIDB4NTQ7Ci0gICAgICAgIGNhc2UgR0RLX3U6Ci0gICAgICAgIGNh
c2UgR0RLX1U6Ci0gICAgICAgICAgICByZXR1cm4gVktfVTsgLy8gICg1NSkgVSBrZXkgY2FzZSAn
dSc6IGNhc2UgJ1UnOiByZXR1cm4gMHg1NTsKLSAgICAgICAgY2FzZSBHREtfdjoKLSAgICAgICAg
Y2FzZSBHREtfVjoKLSAgICAgICAgICAgIHJldHVybiBWS19WOyAvLyAgKDU2KSBWIGtleSBjYXNl
ICd2JzogY2FzZSAnVic6IHJldHVybiAweDU2OwotICAgICAgICBjYXNlIEdES193OgotICAgICAg
ICBjYXNlIEdES19XOgotICAgICAgICAgICAgcmV0dXJuIFZLX1c7IC8vICAoNTcpIFcga2V5IGNh
c2UgJ3cnOiBjYXNlICdXJzogcmV0dXJuIDB4NTc7Ci0gICAgICAgIGNhc2UgR0RLX3g6Ci0gICAg
ICAgIGNhc2UgR0RLX1g6Ci0gICAgICAgICAgICByZXR1cm4gVktfWDsgLy8gICg1OCkgWCBrZXkg
Y2FzZSAneCc6IGNhc2UgJ1gnOiByZXR1cm4gMHg1ODsKLSAgICAgICAgY2FzZSBHREtfeToKLSAg
ICAgICAgY2FzZSBHREtfWToKLSAgICAgICAgICAgIHJldHVybiBWS19ZOyAvLyAgKDU5KSBZIGtl
eSBjYXNlICd5JzogY2FzZSAnWSc6IHJldHVybiAweDU5OwotICAgICAgICBjYXNlIEdES196Ogot
ICAgICAgICBjYXNlIEdES19aOgotICAgICAgICAgICAgcmV0dXJuIFZLX1o7IC8vICAoNUEpIFog
a2V5IGNhc2UgJ3onOiBjYXNlICdaJzogcmV0dXJuIDB4NUE7Ci0gICAgICAgIGNhc2UgR0RLX01l
dGFfTDoKLSAgICAgICAgICAgIHJldHVybiBWS19MV0lOOyAvLyAoNUIpIExlZnQgV2luZG93cyBr
ZXkgKE1pY3Jvc29mdCBOYXR1cmFsIGtleWJvYXJkKQotICAgICAgICBjYXNlIEdES19NZXRhX1I6
Ci0gICAgICAgICAgICByZXR1cm4gVktfUldJTjsgLy8gKDVDKSBSaWdodCBXaW5kb3dzIGtleSAo
TmF0dXJhbCBrZXlib2FyZCkKLSAgICAgICAgICAgIC8vIFZLX0FQUFMgKDVEKSBBcHBsaWNhdGlv
bnMga2V5IChOYXR1cmFsIGtleWJvYXJkKQotICAgICAgICAgICAgLy8gVktfU0xFRVAgKDVGKSBD
b21wdXRlciBTbGVlcCBrZXkKLSAgICAgICAgICAgIC8vIFZLX1NFUEFSQVRPUiAoNkMpIFNlcGFy
YXRvciBrZXkKLSAgICAgICAgICAgIC8vIFZLX1NVQlRSQUNUICg2RCkgU3VidHJhY3Qga2V5Ci0g
ICAgICAgICAgICAvLyBWS19ERUNJTUFMICg2RSkgRGVjaW1hbCBrZXkKLSAgICAgICAgICAgIC8v
IFZLX0RJVklERSAoNkYpIERpdmlkZSBrZXkKLSAgICAgICAgICAgIC8vIGhhbmRsZWQgYnkga2V5
IGNvZGUgYWJvdmUKLQotICAgICAgICBjYXNlIEdES19OdW1fTG9jazoKLSAgICAgICAgICAgIHJl
dHVybiBWS19OVU1MT0NLOyAvLyAoOTApIE5VTSBMT0NLIGtleQotCi0gICAgICAgIGNhc2UgR0RL
X1Njcm9sbF9Mb2NrOgotICAgICAgICAgICAgcmV0dXJuIFZLX1NDUk9MTDsgLy8gKDkxKSBTQ1JP
TEwgTE9DSyBrZXkKLQotICAgICAgICAgICAgLy8gVktfTFNISUZUIChBMCkgTGVmdCBTSElGVCBr
ZXkKLSAgICAgICAgICAgIC8vIFZLX1JTSElGVCAoQTEpIFJpZ2h0IFNISUZUIGtleQotICAgICAg
ICAgICAgLy8gVktfTENPTlRST0wgKEEyKSBMZWZ0IENPTlRST0wga2V5Ci0gICAgICAgICAgICAv
LyBWS19SQ09OVFJPTCAoQTMpIFJpZ2h0IENPTlRST0wga2V5Ci0gICAgICAgICAgICAvLyBWS19M
TUVOVSAoQTQpIExlZnQgTUVOVSBrZXkKLSAgICAgICAgICAgIC8vIFZLX1JNRU5VIChBNSkgUmln
aHQgTUVOVSBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfQkFDSyAoQTYpIFdpbmRvd3Mg
MjAwMC9YUDogQnJvd3NlciBCYWNrIGtleQotICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9GT1JX
QVJEIChBNykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIEZvcndhcmQga2V5Ci0gICAgICAgICAg
ICAvLyBWS19CUk9XU0VSX1JFRlJFU0ggKEE4KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgUmVm
cmVzaCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0JST1dTRVJfU1RPUCAoQTkpIFdpbmRvd3MgMjAw
MC9YUDogQnJvd3NlciBTdG9wIGtleQotICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9TRUFSQ0gg
KEFBKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgU2VhcmNoIGtleQotICAgICAgICAgICAgLy8g
VktfQlJPV1NFUl9GQVZPUklURVMgKEFCKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRmF2b3Jp
dGVzIGtleQotICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9IT01FIChBQykgV2luZG93cyAyMDAw
L1hQOiBCcm93c2VyIFN0YXJ0IGFuZCBIb21lIGtleQotICAgICAgICAgICAgLy8gVktfVk9MVU1F
X01VVEUgKEFEKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBNdXRlIGtleQotICAgICAgICAgICAg
Ly8gVktfVk9MVU1FX0RPV04gKEFFKSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBEb3duIGtleQot
ICAgICAgICAgICAgLy8gVktfVk9MVU1FX1VQIChBRikgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUg
VXAga2V5Ci0gICAgICAgICAgICAvLyBWS19NRURJQV9ORVhUX1RSQUNLIChCMCkgV2luZG93cyAy
MDAwL1hQOiBOZXh0IFRyYWNrIGtleQotICAgICAgICAgICAgLy8gVktfTUVESUFfUFJFVl9UUkFD
SyAoQjEpIFdpbmRvd3MgMjAwMC9YUDogUHJldmlvdXMgVHJhY2sga2V5Ci0gICAgICAgICAgICAv
LyBWS19NRURJQV9TVE9QIChCMikgV2luZG93cyAyMDAwL1hQOiBTdG9wIE1lZGlhIGtleQotICAg
ICAgICAgICAgLy8gVktfTUVESUFfUExBWV9QQVVTRSAoQjMpIFdpbmRvd3MgMjAwMC9YUDogUGxh
eS9QYXVzZSBNZWRpYSBrZXkKLSAgICAgICAgICAgIC8vIFZLX0xBVU5DSF9NQUlMIChCNCkgV2lu
ZG93cyAyMDAwL1hQOiBTdGFydCBNYWlsIGtleQotICAgICAgICAgICAgLy8gVktfTEFVTkNIX01F
RElBX1NFTEVDVCAoQjUpIFdpbmRvd3MgMjAwMC9YUDogU2VsZWN0IE1lZGlhIGtleQotICAgICAg
ICAgICAgLy8gVktfTEFVTkNIX0FQUDEgKEI2KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxp
Y2F0aW9uIDEga2V5Ci0gICAgICAgICAgICAvLyBWS19MQVVOQ0hfQVBQMiAoQjcpIFdpbmRvd3Mg
MjAwMC9YUDogU3RhcnQgQXBwbGljYXRpb24gMiBrZXkKLQotICAgICAgICAgICAgLy8gVktfT0VN
XzEgKEJBKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5
IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQs
IHRoZSAnOzonIGtleQotICAgICAgICBjYXNlIEdES19zZW1pY29sb246Ci0gICAgICAgIGNhc2Ug
R0RLX2NvbG9uOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV8xOyAvL2Nhc2UgJzsnOiBjYXNl
ICc6JzogcmV0dXJuIDB4QkE7Ci0gICAgICAgICAgICAvLyBWS19PRU1fUExVUyAoQkIpIFdpbmRv
d3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcrJyBrZXkKLSAgICAgICAg
Y2FzZSBHREtfcGx1czoKLSAgICAgICAgY2FzZSBHREtfZXF1YWw6Ci0gICAgICAgICAgICByZXR1
cm4gVktfT0VNX1BMVVM7IC8vY2FzZSAnPSc6IGNhc2UgJysnOiByZXR1cm4gMHhCQjsKLSAgICAg
ICAgICAgIC8vIFZLX09FTV9DT01NQSAoQkMpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3Vu
dHJ5L3JlZ2lvbiwgdGhlICcsJyBrZXkKLSAgICAgICAgY2FzZSBHREtfY29tbWE6Ci0gICAgICAg
IGNhc2UgR0RLX2xlc3M6Ci0gICAgICAgICAgICByZXR1cm4gVktfT0VNX0NPTU1BOyAvL2Nhc2Ug
JywnOiBjYXNlICc8JzogcmV0dXJuIDB4QkM7Ci0gICAgICAgICAgICAvLyBWS19PRU1fTUlOVVMg
KEJEKSBXaW5kb3dzIDIwMDAvWFA6IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLScga2V5
Ci0gICAgICAgIGNhc2UgR0RLX21pbnVzOgotICAgICAgICBjYXNlIEdES191bmRlcnNjb3JlOgot
ICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9NSU5VUzsgLy9jYXNlICctJzogY2FzZSAnXyc6IHJl
dHVybiAweEJEOwotICAgICAgICAgICAgLy8gVktfT0VNX1BFUklPRCAoQkUpIFdpbmRvd3MgMjAw
MC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcuJyBrZXkKLSAgICAgICAgY2FzZSBH
REtfcGVyaW9kOgotICAgICAgICBjYXNlIEdES19ncmVhdGVyOgotICAgICAgICAgICAgcmV0dXJu
IFZLX09FTV9QRVJJT0Q7IC8vY2FzZSAnLic6IGNhc2UgJz4nOiByZXR1cm4gMHhCRTsKLSAgICAg
ICAgICAgIC8vIFZLX09FTV8yIChCRikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJz
OyBpdCBjYW4gdmFyeSBieSBrZXlib2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0
YW5kYXJkIGtleWJvYXJkLCB0aGUgJy8/JyBrZXkKLSAgICAgICAgY2FzZSBHREtfc2xhc2g6Ci0g
ICAgICAgIGNhc2UgR0RLX3F1ZXN0aW9uOgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV8yOyAv
L2Nhc2UgJy8nOiBjYXNlICc/JzogcmV0dXJuIDB4QkY7Ci0gICAgICAgICAgICAvLyBWS19PRU1f
MyAoQzApIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkg
a2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwg
dGhlICdgficga2V5Ci0gICAgICAgIGNhc2UgR0RLX2FzY2lpdGlsZGU6Ci0gICAgICAgIGNhc2Ug
R0RLX3F1b3RlbGVmdDoKLSAgICAgICAgICAgIHJldHVybiBWS19PRU1fMzsgLy9jYXNlICdgJzog
Y2FzZSAnfic6IHJldHVybiAweEMwOwotICAgICAgICAgICAgLy8gVktfT0VNXzQgKERCKSBVc2Vk
IGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBX
aW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnW3snIGtl
eQotICAgICAgICBjYXNlIEdES19icmFja2V0bGVmdDoKLSAgICAgICAgY2FzZSBHREtfYnJhY2Vs
ZWZ0OgotICAgICAgICAgICAgcmV0dXJuIFZLX09FTV80OyAvL2Nhc2UgJ1snOiBjYXNlICd7Jzog
cmV0dXJuIDB4REI7Ci0gICAgICAgICAgICAvLyBWS19PRU1fNSAoREMpIFVzZWQgZm9yIG1pc2Nl
bGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAw
MC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdcfCcga2V5Ci0gICAgICAg
IGNhc2UgR0RLX2JhY2tzbGFzaDoKLSAgICAgICAgY2FzZSBHREtfYmFyOgotICAgICAgICAgICAg
cmV0dXJuIFZLX09FTV81OyAvL2Nhc2UgJ1xcJzogY2FzZSAnfCc6IHJldHVybiAweERDOwotICAg
ICAgICAgICAgLy8gVktfT0VNXzYgKEREKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3Rl
cnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMg
c3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnXX0nIGtleQotICAgICAgICBjYXNlIEdES19icmFja2V0
cmlnaHQ6Ci0gICAgICAgIGNhc2UgR0RLX2JyYWNlcmlnaHQ6Ci0gICAgICAgICAgICByZXR1cm4g
VktfT0VNXzY7IC8vIGNhc2UgJ10nOiBjYXNlICd9JzogcmV0dXJuIDB4REQ7Ci0gICAgICAgICAg
ICAvLyBWS19PRU1fNyAoREUpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQg
Y2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFy
ZCBrZXlib2FyZCwgdGhlICdzaW5nbGUtcXVvdGUvZG91YmxlLXF1b3RlJyBrZXkKLSAgICAgICAg
Y2FzZSBHREtfcXVvdGVyaWdodDoKLSAgICAgICAgY2FzZSBHREtfcXVvdGVkYmw6Ci0gICAgICAg
ICAgICByZXR1cm4gVktfT0VNXzc7IC8vIGNhc2UgJ1wnJzogY2FzZSAnIic6IHJldHVybiAweERF
OwotICAgICAgICAgICAgLy8gVktfT0VNXzggKERGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNo
YXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLgotICAgICAgICAgICAgLy8gVktfT0VN
XzEwMiAoRTIpIFdpbmRvd3MgMjAwMC9YUDogRWl0aGVyIHRoZSBhbmdsZSBicmFja2V0IGtleSBv
ciB0aGUgYmFja3NsYXNoIGtleSBvbiB0aGUgUlQgMTAyLWtleSBrZXlib2FyZAotICAgICAgICAg
ICAgLy8gVktfUFJPQ0VTU0tFWSAoRTUpIFdpbmRvd3MgOTUvOTgvTWUsIFdpbmRvd3MgTlQgNC4w
LCBXaW5kb3dzIDIwMDAvWFA6IElNRSBQUk9DRVNTIGtleQotICAgICAgICAgICAgLy8gVktfUEFD
S0VUIChFNykgV2luZG93cyAyMDAwL1hQOiBVc2VkIHRvIHBhc3MgVW5pY29kZSBjaGFyYWN0ZXJz
IGFzIGlmIHRoZXkgd2VyZSBrZXlzdHJva2VzLiBUaGUgVktfUEFDS0VUIGtleSBpcyB0aGUgbG93
IHdvcmQgb2YgYSAzMi1iaXQgVmlydHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Igbm9uLWtleWJvYXJk
IGlucHV0IG1ldGhvZHMuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgUmVtYXJrIGluIEtFWUJE
SU5QVVQsU2VuZElucHV0LCBXTV9LRVlET1dOLCBhbmQgV01fS0VZVVAKLSAgICAgICAgICAgIC8v
IFZLX0FUVE4gKEY2KSBBdHRuIGtleQotICAgICAgICAgICAgLy8gVktfQ1JTRUwgKEY3KSBDclNl
bCBrZXkKLSAgICAgICAgICAgIC8vIFZLX0VYU0VMIChGOCkgRXhTZWwga2V5Ci0gICAgICAgICAg
ICAvLyBWS19FUkVPRiAoRjkpIEVyYXNlIEVPRiBrZXkKLSAgICAgICAgICAgIC8vIFZLX1BMQVkg
KEZBKSBQbGF5IGtleQotICAgICAgICAgICAgLy8gVktfWk9PTSAoRkIpIFpvb20ga2V5Ci0gICAg
ICAgICAgICAvLyBWS19OT05BTUUgKEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQotICAgICAg
ICAgICAgLy8gVktfUEExIChGRCkgUEExIGtleQotICAgICAgICAgICAgLy8gVktfT0VNX0NMRUFS
IChGRSkgQ2xlYXIga2V5Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLX0KLQotc3RhdGljIGlubGluZSBTdHJpbmcgc2luZ2xlQ2hhcmFjdGVyU3RyaW5n
KGd1aW50IHZhbCkKLXsKLSAgICB2YWwgPSBnZGtfa2V5dmFsX3RvX3VuaWNvZGUodmFsKTsKLSAg
ICByZXR1cm4gU3RyaW5nKChVQ2hhciopJnZhbCwgMSk7Ci19Ci0KLVBsYXRmb3JtS2V5Ym9hcmRF
dmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkKLSAgICA6IG1f
dGV4dChzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZXZlbnQtPmtleXZhbCkpCi0gICAgLCBtX3VubW9k
aWZpZWRUZXh0KHNpbmdsZUNoYXJhY3RlclN0cmluZyhldmVudC0+a2V5dmFsKSkKLSAgICAsIG1f
a2V5SWRlbnRpZmllcihrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkK
LSAgICAsIG1faXNLZXlVcChldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpCi0gICAgLCBt
X2F1dG9SZXBlYXQoZmFsc2UpCi0gICAgLCBtX1dpbmRvd3NLZXlDb2RlKHdpbmRvd3NLZXlDb2Rl
Rm9yS2V5RXZlbnQoZXZlbnQtPmtleXZhbCkpCi0gICAgLCBtX2lzS2V5cGFkKGZhbHNlKQotICAg
ICwgbV9zaGlmdEtleShldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSyAhPSAwKQotICAgICwg
bV9jdHJsS2V5KGV2ZW50LT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0sgIT0gMCkKLSAgICAsIG1f
YWx0S2V5KGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0sgIT0gMCkKLSAgICAsIG1fbWV0YUtl
eShldmVudC0+c3RhdGUgJiBHREtfTU9EMl9NQVNLICE9IDApCi17Ci19Ci0KLX0KSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9LZXlFdmVudEd0ay5jcHAJKHJldmlzaW9uIDI1MTY5KQkoZnJvbSBXZWJD
b3JlL3BsYXRmb3JtL2dkay9LZXlFdmVudEdkay5jcHA6MjUxNjkpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dkay9LZXlFdmVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0ODUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tIAorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisKKyNpbmNsdWRlICJEZXByZWNh
dGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgorI2luY2x1ZGUgIlRleHRF
bmNvZGluZy5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorI2luY2x1ZGUgPGdkay9nZGtrZXlz
eW1zLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IFRoaXMgaXMgaW5jb21w
bGV0ZS4gIFdlIHNob3VsZCBjaGFuZ2UgdGhpcyB0byBtaXJyb3IKKy8vIG1vcmUgbGlrZSB3aGF0
IEZpcmVmb3ggZG9lcywgYW5kIGdlbmVyYXRlIHRoZXNlIHN3aXRjaCBzdGF0ZW1lbnRzCisvLyBh
dCBidWlsZCB0aW1lLgorc3RhdGljIFN0cmluZyBrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShn
dWludCBrZXlDb2RlKQoreworICAgIHN3aXRjaCAoa2V5Q29kZSkgeworICAgICAgICBjYXNlIEdE
S19NZW51OgorICAgICAgICBjYXNlIEdES19BbHRfTDoKKyAgICAgICAgY2FzZSBHREtfQWx0X1I6
CisgICAgICAgICAgICByZXR1cm4gIkFsdCI7CisgICAgICAgIGNhc2UgR0RLX0NsZWFyOgorICAg
ICAgICAgICAgcmV0dXJuICJDbGVhciI7CisgICAgICAgIGNhc2UgR0RLX0Rvd246CisgICAgICAg
ICAgICByZXR1cm4gIkRvd24iOworICAgICAgICAgICAgLy8gIkVuZCIKKyAgICAgICAgY2FzZSBH
REtfRW5kOgorICAgICAgICAgICAgcmV0dXJuICJFbmQiOworICAgICAgICAgICAgLy8gIkVudGVy
IgorICAgICAgICBjYXNlIEdES19JU09fRW50ZXI6CisgICAgICAgIGNhc2UgR0RLX0tQX0VudGVy
OgorICAgICAgICAgICAgcmV0dXJuICJFbnRlciI7CisgICAgICAgIGNhc2UgR0RLX0V4ZWN1dGU6
CisgICAgICAgICAgICByZXR1cm4gIkV4ZWN1dGUiOworICAgICAgICBjYXNlIEdES19GMToKKyAg
ICAgICAgICAgIHJldHVybiAiRjEiOworICAgICAgICBjYXNlIEdES19GMjoKKyAgICAgICAgICAg
IHJldHVybiAiRjIiOworICAgICAgICBjYXNlIEdES19GMzoKKyAgICAgICAgICAgIHJldHVybiAi
RjMiOworICAgICAgICBjYXNlIEdES19GNDoKKyAgICAgICAgICAgIHJldHVybiAiRjQiOworICAg
ICAgICBjYXNlIEdES19GNToKKyAgICAgICAgICAgIHJldHVybiAiRjUiOworICAgICAgICBjYXNl
IEdES19GNjoKKyAgICAgICAgICAgIHJldHVybiAiRjYiOworICAgICAgICBjYXNlIEdES19GNzoK
KyAgICAgICAgICAgIHJldHVybiAiRjciOworICAgICAgICBjYXNlIEdES19GODoKKyAgICAgICAg
ICAgIHJldHVybiAiRjgiOworICAgICAgICBjYXNlIEdES19GOToKKyAgICAgICAgICAgIHJldHVy
biAiRjkiOworICAgICAgICBjYXNlIEdES19GMTA6CisgICAgICAgICAgICByZXR1cm4gIkYxMCI7
CisgICAgICAgIGNhc2UgR0RLX0YxMToKKyAgICAgICAgICAgIHJldHVybiAiRjExIjsKKyAgICAg
ICAgY2FzZSBHREtfRjEyOgorICAgICAgICAgICAgcmV0dXJuICJGMTIiOworICAgICAgICBjYXNl
IEdES19GMTM6CisgICAgICAgICAgICByZXR1cm4gIkYxMyI7CisgICAgICAgIGNhc2UgR0RLX0Yx
NDoKKyAgICAgICAgICAgIHJldHVybiAiRjE0IjsKKyAgICAgICAgY2FzZSBHREtfRjE1OgorICAg
ICAgICAgICAgcmV0dXJuICJGMTUiOworICAgICAgICBjYXNlIEdES19GMTY6CisgICAgICAgICAg
ICByZXR1cm4gIkYxNiI7CisgICAgICAgIGNhc2UgR0RLX0YxNzoKKyAgICAgICAgICAgIHJldHVy
biAiRjE3IjsKKyAgICAgICAgY2FzZSBHREtfRjE4OgorICAgICAgICAgICAgcmV0dXJuICJGMTgi
OworICAgICAgICBjYXNlIEdES19GMTk6CisgICAgICAgICAgICByZXR1cm4gIkYxOSI7CisgICAg
ICAgIGNhc2UgR0RLX0YyMDoKKyAgICAgICAgICAgIHJldHVybiAiRjIwIjsKKyAgICAgICAgY2Fz
ZSBHREtfRjIxOgorICAgICAgICAgICAgcmV0dXJuICJGMjEiOworICAgICAgICBjYXNlIEdES19G
MjI6CisgICAgICAgICAgICByZXR1cm4gIkYyMiI7CisgICAgICAgIGNhc2UgR0RLX0YyMzoKKyAg
ICAgICAgICAgIHJldHVybiAiRjIzIjsKKyAgICAgICAgY2FzZSBHREtfRjI0OgorICAgICAgICAg
ICAgcmV0dXJuICJGMjQiOworICAgICAgICBjYXNlIEdES19IZWxwOgorICAgICAgICAgICAgcmV0
dXJuICJIZWxwIjsKKyAgICAgICAgY2FzZSBHREtfSG9tZToKKyAgICAgICAgICAgIHJldHVybiAi
SG9tZSI7CisgICAgICAgIGNhc2UgR0RLX0luc2VydDoKKyAgICAgICAgICAgIHJldHVybiAiSW5z
ZXJ0IjsKKyAgICAgICAgY2FzZSBHREtfTGVmdDoKKyAgICAgICAgICAgIHJldHVybiAiTGVmdCI7
CisgICAgICAgIGNhc2UgR0RLX1BhZ2VfRG93bjoKKyAgICAgICAgICAgIHJldHVybiAiUGFnZURv
d24iOworICAgICAgICBjYXNlIEdES19QYWdlX1VwOgorICAgICAgICAgICAgcmV0dXJuICJQYWdl
VXAiOworICAgICAgICBjYXNlIEdES19QYXVzZToKKyAgICAgICAgICAgIHJldHVybiAiUGF1c2Ui
OworICAgICAgICBjYXNlIEdES18zMjcwX1ByaW50U2NyZWVuOgorICAgICAgICAgICAgcmV0dXJu
ICJQcmludFNjcmVlbiI7CisgICAgICAgIGNhc2UgR0RLX1JpZ2h0OgorICAgICAgICAgICAgcmV0
dXJuICJSaWdodCI7CisgICAgICAgIGNhc2UgR0RLX1NlbGVjdDoKKyAgICAgICAgICAgIHJldHVy
biAiU2VsZWN0IjsKKyAgICAgICAgY2FzZSBHREtfVXA6CisgICAgICAgICAgICByZXR1cm4gIlVw
IjsKKyAgICAgICAgICAgIC8vIFN0YW5kYXJkIHNheXMgdGhhdCBERUwgYmVjb21lcyBVKzAwN0Yu
CisgICAgICAgIGNhc2UgR0RLX0RlbGV0ZToKKyAgICAgICAgICAgIHJldHVybiAiVSswMDdGIjsK
KyAgICAgICAgY2FzZSBHREtfVGFiOgorICAgICAgICAgICAgcmV0dXJuICJVKzAwMDkiOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJVKyUwNFgi
LCBnZGtfa2V5dmFsX3RvX3VuaWNvZGUoZ2RrX2tleXZhbF90b191cHBlcihrZXlDb2RlKSkpOwor
ICAgIH0KK30KKworc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVuc2lnbmVk
IGludCBrZXljb2RlKQoreworICAgIHN3aXRjaCAoa2V5Y29kZSkgeworICAgICAgICBjYXNlIEdE
S19LUF8wOgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDA7Ly8gKDYwKSBOdW1lcmljIGtl
eXBhZCAwIGtleQorICAgICAgICBjYXNlIEdES19LUF8xOgorICAgICAgICAgICAgcmV0dXJuIFZL
X05VTVBBRDE7Ly8gKDYxKSBOdW1lcmljIGtleXBhZCAxIGtleQorICAgICAgICBjYXNlIEdES19L
UF8yOgorICAgICAgICAgICAgcmV0dXJuICBWS19OVU1QQUQyOyAvLyAoNjIpIE51bWVyaWMga2V5
cGFkIDIga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzM6CisgICAgICAgICAgICByZXR1cm4gVktf
TlVNUEFEMzsgLy8gKDYzKSBOdW1lcmljIGtleXBhZCAzIGtleQorICAgICAgICBjYXNlIEdES19L
UF80OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDQ7IC8vICg2NCkgTnVtZXJpYyBrZXlw
YWQgNCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfNToKKyAgICAgICAgICAgIHJldHVybiBWS19O
VU1QQUQ1OyAvLyg2NSkgTnVtZXJpYyBrZXlwYWQgNSBrZXkKKyAgICAgICAgY2FzZSBHREtfS1Bf
NjoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1QQUQ2OyAvLyAoNjYpIE51bWVyaWMga2V5cGFk
IDYga2V5CisgICAgICAgIGNhc2UgR0RLX0tQXzc6CisgICAgICAgICAgICByZXR1cm4gVktfTlVN
UEFENzsgLy8gKDY3KSBOdW1lcmljIGtleXBhZCA3IGtleQorICAgICAgICBjYXNlIEdES19LUF84
OgorICAgICAgICAgICAgcmV0dXJuIFZLX05VTVBBRDg7IC8vICg2OCkgTnVtZXJpYyBrZXlwYWQg
OCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfOToKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1Q
QUQ5OyAvLyAoNjkpIE51bWVyaWMga2V5cGFkIDkga2V5CisgICAgICAgIGNhc2UgR0RLX0tQX011
bHRpcGx5OgorICAgICAgICAgICAgcmV0dXJuIFZLX01VTFRJUExZOyAvLyAoNkEpIE11bHRpcGx5
IGtleQorICAgICAgICBjYXNlIEdES19LUF9BZGQ6CisgICAgICAgICAgICByZXR1cm4gVktfQURE
OyAvLyAoNkIpIEFkZCBrZXkKKyAgICAgICAgY2FzZSBHREtfS1BfU3VidHJhY3Q6CisgICAgICAg
ICAgICByZXR1cm4gVktfU1VCVFJBQ1Q7IC8vICg2RCkgU3VidHJhY3Qga2V5CisgICAgICAgIGNh
c2UgR0RLX0tQX0RlY2ltYWw6CisgICAgICAgICAgICByZXR1cm4gVktfREVDSU1BTDsgLy8gKDZF
KSBEZWNpbWFsIGtleQorICAgICAgICBjYXNlIEdES19LUF9EaXZpZGU6CisgICAgICAgICAgICBy
ZXR1cm4gVktfRElWSURFOyAvLyAoNkYpIERpdmlkZSBrZXkKKworICAgICAgICBjYXNlIEdES19C
YWNrU3BhY2U6CisgICAgICAgICAgICByZXR1cm4gVktfQkFDSzsgLy8gKDA4KSBCQUNLU1BBQ0Ug
a2V5CisgICAgICAgIGNhc2UgR0RLX1RhYjoKKyAgICAgICAgICAgIHJldHVybiBWS19UQUI7IC8v
ICgwOSkgVEFCIGtleQorICAgICAgICBjYXNlIEdES19DbGVhcjoKKyAgICAgICAgICAgIHJldHVy
biBWS19DTEVBUjsgLy8gKDBDKSBDTEVBUiBrZXkKKyAgICAgICAgY2FzZSBHREtfUmV0dXJuOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX1JFVFVSTjsgLy8oMEQpIFJldHVybiBrZXkKKyAgICAgICAg
Y2FzZSBHREtfU2hpZnRfTDoKKyAgICAgICAgY2FzZSBHREtfU2hpZnRfUjoKKyAgICAgICAgICAg
IHJldHVybiBWS19TSElGVDsgLy8gKDEwKSBTSElGVCBrZXkKKyAgICAgICAgY2FzZSBHREtfQ29u
dHJvbF9MOgorICAgICAgICBjYXNlIEdES19Db250cm9sX1I6CisgICAgICAgICAgICByZXR1cm4g
VktfQ09OVFJPTDsgLy8gKDExKSBDVFJMIGtleQorICAgICAgICBjYXNlIEdES19NZW51OgorICAg
ICAgICBjYXNlIEdES19BbHRfTDoKKyAgICAgICAgY2FzZSBHREtfQWx0X1I6CisgICAgICAgICAg
ICByZXR1cm4gVktfTUVOVTsgLy8gKDEyKSBBTFQga2V5CisKKyAgICAgICAgY2FzZSBHREtfUGF1
c2U6CisgICAgICAgICAgICByZXR1cm4gVktfUEFVU0U7IC8vICgxMykgUEFVU0Uga2V5CisgICAg
ICAgIGNhc2UgR0RLX0NhcHNfTG9jazoKKyAgICAgICAgICAgIHJldHVybiBWS19DQVBJVEFMOyAv
LyAoMTQpIENBUFMgTE9DSyBrZXkKKyAgICAgICAgY2FzZSBHREtfS2FuYV9Mb2NrOgorICAgICAg
ICBjYXNlIEdES19LYW5hX1NoaWZ0OgorICAgICAgICAgICAgcmV0dXJuIFZLX0tBTkE7IC8vICgx
NSkgSW5wdXQgTWV0aG9kIEVkaXRvciAoSU1FKSBLYW5hIG1vZGUKKyAgICAgICAgY2FzZSBHREtf
SGFuZ3VsOgorICAgICAgICAgICAgcmV0dXJuIFZLX0hBTkdVTDsgLy8gVktfSEFOR1VMICgxNSkg
SU1FIEhhbmd1bCBtb2RlCisgICAgICAgICAgICAvLyBWS19KVU5KQSAoMTcpIElNRSBKdW5qYSBt
b2RlCisgICAgICAgICAgICAvLyBWS19GSU5BTCAoMTgpIElNRSBmaW5hbCBtb2RlCisgICAgICAg
IGNhc2UgR0RLX0hhbmd1bF9IYW5qYToKKyAgICAgICAgICAgIHJldHVybiBWS19IQU5KQTsgLy8g
KDE5KSBJTUUgSGFuamEgbW9kZQorICAgICAgICBjYXNlIEdES19LYW5qaToKKyAgICAgICAgICAg
IHJldHVybiBWS19LQU5KSTsgLy8gKDE5KSBJTUUgS2FuamkgbW9kZQorICAgICAgICBjYXNlIEdE
S19Fc2NhcGU6CisgICAgICAgICAgICByZXR1cm4gVktfRVNDQVBFOyAvLyAoMUIpIEVTQyBrZXkK
KyAgICAgICAgICAgIC8vIFZLX0NPTlZFUlQgKDFDKSBJTUUgY29udmVydAorICAgICAgICAgICAg
Ly8gVktfTk9OQ09OVkVSVCAoMUQpIElNRSBub25jb252ZXJ0CisgICAgICAgICAgICAvLyBWS19B
Q0NFUFQgKDFFKSBJTUUgYWNjZXB0CisgICAgICAgICAgICAvLyBWS19NT0RFQ0hBTkdFICgxRikg
SU1FIG1vZGUgY2hhbmdlIHJlcXVlc3QKKyAgICAgICAgY2FzZSBHREtfc3BhY2U6CisgICAgICAg
ICAgICByZXR1cm4gVktfU1BBQ0U7IC8vICgyMCkgU1BBQ0VCQVIKKyAgICAgICAgY2FzZSBHREtf
UGFnZV9VcDoKKyAgICAgICAgICAgIHJldHVybiBWS19QUklPUjsgLy8gKDIxKSBQQUdFIFVQIGtl
eQorICAgICAgICBjYXNlIEdES19QYWdlX0Rvd246CisgICAgICAgICAgICByZXR1cm4gVktfTkVY
VDsgLy8gKDIyKSBQQUdFIERPV04ga2V5CisgICAgICAgIGNhc2UgR0RLX0VuZDoKKyAgICAgICAg
ICAgIHJldHVybiBWS19FTkQ7IC8vICgyMykgRU5EIGtleQorICAgICAgICBjYXNlIEdES19Ib21l
OgorICAgICAgICAgICAgcmV0dXJuIFZLX0hPTUU7IC8vICgyNCkgSE9NRSBrZXkKKyAgICAgICAg
Y2FzZSBHREtfTGVmdDoKKyAgICAgICAgICAgIHJldHVybiBWS19MRUZUOyAvLyAoMjUpIExFRlQg
QVJST1cga2V5CisgICAgICAgIGNhc2UgR0RLX1VwOgorICAgICAgICAgICAgcmV0dXJuIFZLX1VQ
OyAvLyAoMjYpIFVQIEFSUk9XIGtleQorICAgICAgICBjYXNlIEdES19SaWdodDoKKyAgICAgICAg
ICAgIHJldHVybiBWS19SSUdIVDsgLy8gKDI3KSBSSUdIVCBBUlJPVyBrZXkKKyAgICAgICAgY2Fz
ZSBHREtfRG93bjoKKyAgICAgICAgICAgIHJldHVybiBWS19ET1dOOyAvLyAoMjgpIERPV04gQVJS
T1cga2V5CisgICAgICAgIGNhc2UgR0RLX1NlbGVjdDoKKyAgICAgICAgICAgIHJldHVybiBWS19T
RUxFQ1Q7IC8vICgyOSkgU0VMRUNUIGtleQorICAgICAgICBjYXNlIEdES19QcmludDoKKyAgICAg
ICAgICAgIHJldHVybiBWS19QUklOVDsgLy8gKDJBKSBQUklOVCBrZXkKKyAgICAgICAgY2FzZSBH
REtfRXhlY3V0ZToKKyAgICAgICAgICAgIHJldHVybiBWS19FWEVDVVRFOy8vICgyQikgRVhFQ1VU
RSBrZXkKKyAgICAgICAgICAgIC8vZHVubm8gb24gdGhpcworICAgICAgICAgICAgLy9jYXNlIEdE
S19QcmludFNjcmVlbjoKKyAgICAgICAgICAgIC8vICAgICAgcmV0dXJuIFZLX1NOQVBTSE9UOyAv
LyAoMkMpIFBSSU5UIFNDUkVFTiBrZXkKKyAgICAgICAgY2FzZSBHREtfSW5zZXJ0OgorICAgICAg
ICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5CisgICAgICAgIGNhc2UgR0RL
X0RlbGV0ZToKKyAgICAgICAgICAgIHJldHVybiBWS19ERUxFVEU7IC8vICgyRSkgREVMIGtleQor
ICAgICAgICBjYXNlIEdES19IZWxwOgorICAgICAgICAgICAgcmV0dXJuIFZLX0hFTFA7IC8vICgy
RikgSEVMUCBrZXkKKyAgICAgICAgY2FzZSBHREtfMDoKKyAgICAgICAgY2FzZSBHREtfcGFyZW5s
ZWZ0OgorICAgICAgICAgICAgcmV0dXJuIFZLXzA7ICAgIC8vICAoMzApIDApIGtleQorICAgICAg
ICBjYXNlIEdES18xOgorICAgICAgICAgICAgcmV0dXJuIFZLXzE7IC8vICAoMzEpIDEgISBrZXkK
KyAgICAgICAgY2FzZSBHREtfMjoKKyAgICAgICAgY2FzZSBHREtfYXQ6CisgICAgICAgICAgICBy
ZXR1cm4gVktfMjsgLy8gICgzMikgMiAmIGtleQorICAgICAgICBjYXNlIEdES18zOgorICAgICAg
ICBjYXNlIEdES19udW1iZXJzaWduOgorICAgICAgICAgICAgcmV0dXJuIFZLXzM7IC8vY2FzZSAn
Myc6IGNhc2UgJyMnOworICAgICAgICBjYXNlIEdES180OgorICAgICAgICBjYXNlIEdES19kb2xs
YXI6IC8vICAoMzQpIDQga2V5ICckJzsKKyAgICAgICAgICAgIHJldHVybiBWS180OworICAgICAg
ICBjYXNlIEdES181OgorICAgICAgICBjYXNlIEdES19wZXJjZW50OgorICAgICAgICAgICAgcmV0
dXJuIFZLXzU7IC8vICAoMzUpIDUga2V5ICAnJScKKyAgICAgICAgY2FzZSBHREtfNjoKKyAgICAg
ICAgY2FzZSBHREtfYXNjaWljaXJjdW06CisgICAgICAgICAgICByZXR1cm4gVktfNjsgLy8gICgz
NikgNiBrZXkgICdeJworICAgICAgICBjYXNlIEdES183OgorICAgICAgICBjYXNlIEdES19hbXBl
cnNhbmQ6CisgICAgICAgICAgICByZXR1cm4gVktfNzsgLy8gICgzNykgNyBrZXkgIGNhc2UgJyYn
CisgICAgICAgIGNhc2UgR0RLXzg6CisgICAgICAgIGNhc2UgR0RLX2FzdGVyaXNrOgorICAgICAg
ICAgICAgcmV0dXJuIFZLXzg7IC8vICAoMzgpIDgga2V5ICAnKicKKyAgICAgICAgY2FzZSBHREtf
OToKKyAgICAgICAgY2FzZSBHREtfcGFyZW5yaWdodDoKKyAgICAgICAgICAgIHJldHVybiBWS185
OyAvLyAgKDM5KSA5IGtleSAnKCcKKyAgICAgICAgY2FzZSBHREtfYToKKyAgICAgICAgY2FzZSBH
REtfQToKKyAgICAgICAgICAgIHJldHVybiBWS19BOyAvLyAgKDQxKSBBIGtleSBjYXNlICdhJzog
Y2FzZSAnQSc6IHJldHVybiAweDQxOworICAgICAgICBjYXNlIEdES19iOgorICAgICAgICBjYXNl
IEdES19COgorICAgICAgICAgICAgcmV0dXJuIFZLX0I7IC8vICAoNDIpIEIga2V5IGNhc2UgJ2In
OiBjYXNlICdCJzogcmV0dXJuIDB4NDI7CisgICAgICAgIGNhc2UgR0RLX2M6CisgICAgICAgIGNh
c2UgR0RLX0M6CisgICAgICAgICAgICByZXR1cm4gVktfQzsgLy8gICg0MykgQyBrZXkgY2FzZSAn
Yyc6IGNhc2UgJ0MnOiByZXR1cm4gMHg0MzsKKyAgICAgICAgY2FzZSBHREtfZDoKKyAgICAgICAg
Y2FzZSBHREtfRDoKKyAgICAgICAgICAgIHJldHVybiBWS19EOyAvLyAgKDQ0KSBEIGtleSBjYXNl
ICdkJzogY2FzZSAnRCc6IHJldHVybiAweDQ0OworICAgICAgICBjYXNlIEdES19lOgorICAgICAg
ICBjYXNlIEdES19FOgorICAgICAgICAgICAgcmV0dXJuIFZLX0U7IC8vICAoNDUpIEUga2V5IGNh
c2UgJ2UnOiBjYXNlICdFJzogcmV0dXJuIDB4NDU7CisgICAgICAgIGNhc2UgR0RLX2Y6CisgICAg
ICAgIGNhc2UgR0RLX0Y6CisgICAgICAgICAgICByZXR1cm4gVktfRjsgLy8gICg0NikgRiBrZXkg
Y2FzZSAnZic6IGNhc2UgJ0YnOiByZXR1cm4gMHg0NjsKKyAgICAgICAgY2FzZSBHREtfZzoKKyAg
ICAgICAgY2FzZSBHREtfRzoKKyAgICAgICAgICAgIHJldHVybiBWS19HOyAvLyAgKDQ3KSBHIGtl
eSBjYXNlICdnJzogY2FzZSAnRyc6IHJldHVybiAweDQ3OworICAgICAgICBjYXNlIEdES19oOgor
ICAgICAgICBjYXNlIEdES19IOgorICAgICAgICAgICAgcmV0dXJuIFZLX0g7IC8vICAoNDgpIEgg
a2V5IGNhc2UgJ2gnOiBjYXNlICdIJzogcmV0dXJuIDB4NDg7CisgICAgICAgIGNhc2UgR0RLX2k6
CisgICAgICAgIGNhc2UgR0RLX0k6CisgICAgICAgICAgICByZXR1cm4gVktfSTsgLy8gICg0OSkg
SSBrZXkgY2FzZSAnaSc6IGNhc2UgJ0knOiByZXR1cm4gMHg0OTsKKyAgICAgICAgY2FzZSBHREtf
ajoKKyAgICAgICAgY2FzZSBHREtfSjoKKyAgICAgICAgICAgIHJldHVybiBWS19KOyAvLyAgKDRB
KSBKIGtleSBjYXNlICdqJzogY2FzZSAnSic6IHJldHVybiAweDRBOworICAgICAgICBjYXNlIEdE
S19rOgorICAgICAgICBjYXNlIEdES19LOgorICAgICAgICAgICAgcmV0dXJuIFZLX0s7IC8vICAo
NEIpIEsga2V5IGNhc2UgJ2snOiBjYXNlICdLJzogcmV0dXJuIDB4NEI7CisgICAgICAgIGNhc2Ug
R0RLX2w6CisgICAgICAgIGNhc2UgR0RLX0w6CisgICAgICAgICAgICByZXR1cm4gVktfTDsgLy8g
ICg0QykgTCBrZXkgY2FzZSAnbCc6IGNhc2UgJ0wnOiByZXR1cm4gMHg0QzsKKyAgICAgICAgY2Fz
ZSBHREtfbToKKyAgICAgICAgY2FzZSBHREtfTToKKyAgICAgICAgICAgIHJldHVybiBWS19NOyAv
LyAgKDREKSBNIGtleSBjYXNlICdtJzogY2FzZSAnTSc6IHJldHVybiAweDREOworICAgICAgICBj
YXNlIEdES19uOgorICAgICAgICBjYXNlIEdES19OOgorICAgICAgICAgICAgcmV0dXJuIFZLX047
IC8vICAoNEUpIE4ga2V5IGNhc2UgJ24nOiBjYXNlICdOJzogcmV0dXJuIDB4NEU7CisgICAgICAg
IGNhc2UgR0RLX286CisgICAgICAgIGNhc2UgR0RLX086CisgICAgICAgICAgICByZXR1cm4gVktf
TzsgLy8gICg0RikgTyBrZXkgY2FzZSAnbyc6IGNhc2UgJ08nOiByZXR1cm4gMHg0RjsKKyAgICAg
ICAgY2FzZSBHREtfcDoKKyAgICAgICAgY2FzZSBHREtfUDoKKyAgICAgICAgICAgIHJldHVybiBW
S19QOyAvLyAgKDUwKSBQIGtleSBjYXNlICdwJzogY2FzZSAnUCc6IHJldHVybiAweDUwOworICAg
ICAgICBjYXNlIEdES19xOgorICAgICAgICBjYXNlIEdES19ROgorICAgICAgICAgICAgcmV0dXJu
IFZLX1E7IC8vICAoNTEpIFEga2V5IGNhc2UgJ3EnOiBjYXNlICdRJzogcmV0dXJuIDB4NTE7Cisg
ICAgICAgIGNhc2UgR0RLX3I6CisgICAgICAgIGNhc2UgR0RLX1I6CisgICAgICAgICAgICByZXR1
cm4gVktfUjsgLy8gICg1MikgUiBrZXkgY2FzZSAncic6IGNhc2UgJ1InOiByZXR1cm4gMHg1MjsK
KyAgICAgICAgY2FzZSBHREtfczoKKyAgICAgICAgY2FzZSBHREtfUzoKKyAgICAgICAgICAgIHJl
dHVybiBWS19TOyAvLyAgKDUzKSBTIGtleSBjYXNlICdzJzogY2FzZSAnUyc6IHJldHVybiAweDUz
OworICAgICAgICBjYXNlIEdES190OgorICAgICAgICBjYXNlIEdES19UOgorICAgICAgICAgICAg
cmV0dXJuIFZLX1Q7IC8vICAoNTQpIFQga2V5IGNhc2UgJ3QnOiBjYXNlICdUJzogcmV0dXJuIDB4
NTQ7CisgICAgICAgIGNhc2UgR0RLX3U6CisgICAgICAgIGNhc2UgR0RLX1U6CisgICAgICAgICAg
ICByZXR1cm4gVktfVTsgLy8gICg1NSkgVSBrZXkgY2FzZSAndSc6IGNhc2UgJ1UnOiByZXR1cm4g
MHg1NTsKKyAgICAgICAgY2FzZSBHREtfdjoKKyAgICAgICAgY2FzZSBHREtfVjoKKyAgICAgICAg
ICAgIHJldHVybiBWS19WOyAvLyAgKDU2KSBWIGtleSBjYXNlICd2JzogY2FzZSAnVic6IHJldHVy
biAweDU2OworICAgICAgICBjYXNlIEdES193OgorICAgICAgICBjYXNlIEdES19XOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX1c7IC8vICAoNTcpIFcga2V5IGNhc2UgJ3cnOiBjYXNlICdXJzogcmV0
dXJuIDB4NTc7CisgICAgICAgIGNhc2UgR0RLX3g6CisgICAgICAgIGNhc2UgR0RLX1g6CisgICAg
ICAgICAgICByZXR1cm4gVktfWDsgLy8gICg1OCkgWCBrZXkgY2FzZSAneCc6IGNhc2UgJ1gnOiBy
ZXR1cm4gMHg1ODsKKyAgICAgICAgY2FzZSBHREtfeToKKyAgICAgICAgY2FzZSBHREtfWToKKyAg
ICAgICAgICAgIHJldHVybiBWS19ZOyAvLyAgKDU5KSBZIGtleSBjYXNlICd5JzogY2FzZSAnWSc6
IHJldHVybiAweDU5OworICAgICAgICBjYXNlIEdES196OgorICAgICAgICBjYXNlIEdES19aOgor
ICAgICAgICAgICAgcmV0dXJuIFZLX1o7IC8vICAoNUEpIFoga2V5IGNhc2UgJ3onOiBjYXNlICda
JzogcmV0dXJuIDB4NUE7CisgICAgICAgIGNhc2UgR0RLX01ldGFfTDoKKyAgICAgICAgICAgIHJl
dHVybiBWS19MV0lOOyAvLyAoNUIpIExlZnQgV2luZG93cyBrZXkgKE1pY3Jvc29mdCBOYXR1cmFs
IGtleWJvYXJkKQorICAgICAgICBjYXNlIEdES19NZXRhX1I6CisgICAgICAgICAgICByZXR1cm4g
VktfUldJTjsgLy8gKDVDKSBSaWdodCBXaW5kb3dzIGtleSAoTmF0dXJhbCBrZXlib2FyZCkKKyAg
ICAgICAgICAgIC8vIFZLX0FQUFMgKDVEKSBBcHBsaWNhdGlvbnMga2V5IChOYXR1cmFsIGtleWJv
YXJkKQorICAgICAgICAgICAgLy8gVktfU0xFRVAgKDVGKSBDb21wdXRlciBTbGVlcCBrZXkKKyAg
ICAgICAgICAgIC8vIFZLX1NFUEFSQVRPUiAoNkMpIFNlcGFyYXRvciBrZXkKKyAgICAgICAgICAg
IC8vIFZLX1NVQlRSQUNUICg2RCkgU3VidHJhY3Qga2V5CisgICAgICAgICAgICAvLyBWS19ERUNJ
TUFMICg2RSkgRGVjaW1hbCBrZXkKKyAgICAgICAgICAgIC8vIFZLX0RJVklERSAoNkYpIERpdmlk
ZSBrZXkKKyAgICAgICAgICAgIC8vIGhhbmRsZWQgYnkga2V5IGNvZGUgYWJvdmUKKworICAgICAg
ICBjYXNlIEdES19OdW1fTG9jazoKKyAgICAgICAgICAgIHJldHVybiBWS19OVU1MT0NLOyAvLyAo
OTApIE5VTSBMT0NLIGtleQorCisgICAgICAgIGNhc2UgR0RLX1Njcm9sbF9Mb2NrOgorICAgICAg
ICAgICAgcmV0dXJuIFZLX1NDUk9MTDsgLy8gKDkxKSBTQ1JPTEwgTE9DSyBrZXkKKworICAgICAg
ICAgICAgLy8gVktfTFNISUZUIChBMCkgTGVmdCBTSElGVCBrZXkKKyAgICAgICAgICAgIC8vIFZL
X1JTSElGVCAoQTEpIFJpZ2h0IFNISUZUIGtleQorICAgICAgICAgICAgLy8gVktfTENPTlRST0wg
KEEyKSBMZWZ0IENPTlRST0wga2V5CisgICAgICAgICAgICAvLyBWS19SQ09OVFJPTCAoQTMpIFJp
Z2h0IENPTlRST0wga2V5CisgICAgICAgICAgICAvLyBWS19MTUVOVSAoQTQpIExlZnQgTUVOVSBr
ZXkKKyAgICAgICAgICAgIC8vIFZLX1JNRU5VIChBNSkgUmlnaHQgTUVOVSBrZXkKKyAgICAgICAg
ICAgIC8vIFZLX0JST1dTRVJfQkFDSyAoQTYpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBCYWNr
IGtleQorICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9GT1JXQVJEIChBNykgV2luZG93cyAyMDAw
L1hQOiBCcm93c2VyIEZvcndhcmQga2V5CisgICAgICAgICAgICAvLyBWS19CUk9XU0VSX1JFRlJF
U0ggKEE4KSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgUmVmcmVzaCBrZXkKKyAgICAgICAgICAg
IC8vIFZLX0JST1dTRVJfU1RPUCAoQTkpIFdpbmRvd3MgMjAwMC9YUDogQnJvd3NlciBTdG9wIGtl
eQorICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9TRUFSQ0ggKEFBKSBXaW5kb3dzIDIwMDAvWFA6
IEJyb3dzZXIgU2VhcmNoIGtleQorICAgICAgICAgICAgLy8gVktfQlJPV1NFUl9GQVZPUklURVMg
KEFCKSBXaW5kb3dzIDIwMDAvWFA6IEJyb3dzZXIgRmF2b3JpdGVzIGtleQorICAgICAgICAgICAg
Ly8gVktfQlJPV1NFUl9IT01FIChBQykgV2luZG93cyAyMDAwL1hQOiBCcm93c2VyIFN0YXJ0IGFu
ZCBIb21lIGtleQorICAgICAgICAgICAgLy8gVktfVk9MVU1FX01VVEUgKEFEKSBXaW5kb3dzIDIw
MDAvWFA6IFZvbHVtZSBNdXRlIGtleQorICAgICAgICAgICAgLy8gVktfVk9MVU1FX0RPV04gKEFF
KSBXaW5kb3dzIDIwMDAvWFA6IFZvbHVtZSBEb3duIGtleQorICAgICAgICAgICAgLy8gVktfVk9M
VU1FX1VQIChBRikgV2luZG93cyAyMDAwL1hQOiBWb2x1bWUgVXAga2V5CisgICAgICAgICAgICAv
LyBWS19NRURJQV9ORVhUX1RSQUNLIChCMCkgV2luZG93cyAyMDAwL1hQOiBOZXh0IFRyYWNrIGtl
eQorICAgICAgICAgICAgLy8gVktfTUVESUFfUFJFVl9UUkFDSyAoQjEpIFdpbmRvd3MgMjAwMC9Y
UDogUHJldmlvdXMgVHJhY2sga2V5CisgICAgICAgICAgICAvLyBWS19NRURJQV9TVE9QIChCMikg
V2luZG93cyAyMDAwL1hQOiBTdG9wIE1lZGlhIGtleQorICAgICAgICAgICAgLy8gVktfTUVESUFf
UExBWV9QQVVTRSAoQjMpIFdpbmRvd3MgMjAwMC9YUDogUGxheS9QYXVzZSBNZWRpYSBrZXkKKyAg
ICAgICAgICAgIC8vIFZLX0xBVU5DSF9NQUlMIChCNCkgV2luZG93cyAyMDAwL1hQOiBTdGFydCBN
YWlsIGtleQorICAgICAgICAgICAgLy8gVktfTEFVTkNIX01FRElBX1NFTEVDVCAoQjUpIFdpbmRv
d3MgMjAwMC9YUDogU2VsZWN0IE1lZGlhIGtleQorICAgICAgICAgICAgLy8gVktfTEFVTkNIX0FQ
UDEgKEI2KSBXaW5kb3dzIDIwMDAvWFA6IFN0YXJ0IEFwcGxpY2F0aW9uIDEga2V5CisgICAgICAg
ICAgICAvLyBWS19MQVVOQ0hfQVBQMiAoQjcpIFdpbmRvd3MgMjAwMC9YUDogU3RhcnQgQXBwbGlj
YXRpb24gMiBrZXkKKworICAgICAgICAgICAgLy8gVktfT0VNXzEgKEJBKSBVc2VkIGZvciBtaXNj
ZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIw
MDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnOzonIGtleQorICAgICAg
ICBjYXNlIEdES19zZW1pY29sb246CisgICAgICAgIGNhc2UgR0RLX2NvbG9uOgorICAgICAgICAg
ICAgcmV0dXJuIFZLX09FTV8xOyAvL2Nhc2UgJzsnOiBjYXNlICc6JzogcmV0dXJuIDB4QkE7Cisg
ICAgICAgICAgICAvLyBWS19PRU1fUExVUyAoQkIpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBj
b3VudHJ5L3JlZ2lvbiwgdGhlICcrJyBrZXkKKyAgICAgICAgY2FzZSBHREtfcGx1czoKKyAgICAg
ICAgY2FzZSBHREtfZXF1YWw6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNX1BMVVM7IC8vY2Fz
ZSAnPSc6IGNhc2UgJysnOiByZXR1cm4gMHhCQjsKKyAgICAgICAgICAgIC8vIFZLX09FTV9DT01N
QSAoQkMpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5L3JlZ2lvbiwgdGhlICcsJyBr
ZXkKKyAgICAgICAgY2FzZSBHREtfY29tbWE6CisgICAgICAgIGNhc2UgR0RLX2xlc3M6CisgICAg
ICAgICAgICByZXR1cm4gVktfT0VNX0NPTU1BOyAvL2Nhc2UgJywnOiBjYXNlICc8JzogcmV0dXJu
IDB4QkM7CisgICAgICAgICAgICAvLyBWS19PRU1fTUlOVVMgKEJEKSBXaW5kb3dzIDIwMDAvWFA6
IEZvciBhbnkgY291bnRyeS9yZWdpb24sIHRoZSAnLScga2V5CisgICAgICAgIGNhc2UgR0RLX21p
bnVzOgorICAgICAgICBjYXNlIEdES191bmRlcnNjb3JlOgorICAgICAgICAgICAgcmV0dXJuIFZL
X09FTV9NSU5VUzsgLy9jYXNlICctJzogY2FzZSAnXyc6IHJldHVybiAweEJEOworICAgICAgICAg
ICAgLy8gVktfT0VNX1BFUklPRCAoQkUpIFdpbmRvd3MgMjAwMC9YUDogRm9yIGFueSBjb3VudHJ5
L3JlZ2lvbiwgdGhlICcuJyBrZXkKKyAgICAgICAgY2FzZSBHREtfcGVyaW9kOgorICAgICAgICBj
YXNlIEdES19ncmVhdGVyOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV9QRVJJT0Q7IC8vY2Fz
ZSAnLic6IGNhc2UgJz4nOiByZXR1cm4gMHhCRTsKKyAgICAgICAgICAgIC8vIFZLX09FTV8yIChC
RikgVXNlZCBmb3IgbWlzY2VsbGFuZW91cyBjaGFyYWN0ZXJzOyBpdCBjYW4gdmFyeSBieSBrZXli
b2FyZC4gV2luZG93cyAyMDAwL1hQOiBGb3IgdGhlIFVTIHN0YW5kYXJkIGtleWJvYXJkLCB0aGUg
Jy8/JyBrZXkKKyAgICAgICAgY2FzZSBHREtfc2xhc2g6CisgICAgICAgIGNhc2UgR0RLX3F1ZXN0
aW9uOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV8yOyAvL2Nhc2UgJy8nOiBjYXNlICc/Jzog
cmV0dXJuIDB4QkY7CisgICAgICAgICAgICAvLyBWS19PRU1fMyAoQzApIFVzZWQgZm9yIG1pc2Nl
bGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAw
MC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdgficga2V5CisgICAgICAg
IGNhc2UgR0RLX2FzY2lpdGlsZGU6CisgICAgICAgIGNhc2UgR0RLX3F1b3RlbGVmdDoKKyAgICAg
ICAgICAgIHJldHVybiBWS19PRU1fMzsgLy9jYXNlICdgJzogY2FzZSAnfic6IHJldHVybiAweEMw
OworICAgICAgICAgICAgLy8gVktfT0VNXzQgKERCKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNo
YXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtleWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0
aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRoZSAnW3snIGtleQorICAgICAgICBjYXNlIEdES19i
cmFja2V0bGVmdDoKKyAgICAgICAgY2FzZSBHREtfYnJhY2VsZWZ0OgorICAgICAgICAgICAgcmV0
dXJuIFZLX09FTV80OyAvL2Nhc2UgJ1snOiBjYXNlICd7JzogcmV0dXJuIDB4REI7CisgICAgICAg
ICAgICAvLyBWS19PRU1fNSAoREMpIFVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsg
aXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQuIFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFu
ZGFyZCBrZXlib2FyZCwgdGhlICdcfCcga2V5CisgICAgICAgIGNhc2UgR0RLX2JhY2tzbGFzaDoK
KyAgICAgICAgY2FzZSBHREtfYmFyOgorICAgICAgICAgICAgcmV0dXJuIFZLX09FTV81OyAvL2Nh
c2UgJ1xcJzogY2FzZSAnfCc6IHJldHVybiAweERDOworICAgICAgICAgICAgLy8gVktfT0VNXzYg
KEREKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5IGJ5IGtl
eWJvYXJkLiBXaW5kb3dzIDIwMDAvWFA6IEZvciB0aGUgVVMgc3RhbmRhcmQga2V5Ym9hcmQsIHRo
ZSAnXX0nIGtleQorICAgICAgICBjYXNlIEdES19icmFja2V0cmlnaHQ6CisgICAgICAgIGNhc2Ug
R0RLX2JyYWNlcmlnaHQ6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzY7IC8vIGNhc2UgJ10n
OiBjYXNlICd9JzogcmV0dXJuIDB4REQ7CisgICAgICAgICAgICAvLyBWS19PRU1fNyAoREUpIFVz
ZWQgZm9yIG1pc2NlbGxhbmVvdXMgY2hhcmFjdGVyczsgaXQgY2FuIHZhcnkgYnkga2V5Ym9hcmQu
IFdpbmRvd3MgMjAwMC9YUDogRm9yIHRoZSBVUyBzdGFuZGFyZCBrZXlib2FyZCwgdGhlICdzaW5n
bGUtcXVvdGUvZG91YmxlLXF1b3RlJyBrZXkKKyAgICAgICAgY2FzZSBHREtfcXVvdGVyaWdodDoK
KyAgICAgICAgY2FzZSBHREtfcXVvdGVkYmw6CisgICAgICAgICAgICByZXR1cm4gVktfT0VNXzc7
IC8vIGNhc2UgJ1wnJzogY2FzZSAnIic6IHJldHVybiAweERFOworICAgICAgICAgICAgLy8gVktf
T0VNXzggKERGKSBVc2VkIGZvciBtaXNjZWxsYW5lb3VzIGNoYXJhY3RlcnM7IGl0IGNhbiB2YXJ5
IGJ5IGtleWJvYXJkLgorICAgICAgICAgICAgLy8gVktfT0VNXzEwMiAoRTIpIFdpbmRvd3MgMjAw
MC9YUDogRWl0aGVyIHRoZSBhbmdsZSBicmFja2V0IGtleSBvciB0aGUgYmFja3NsYXNoIGtleSBv
biB0aGUgUlQgMTAyLWtleSBrZXlib2FyZAorICAgICAgICAgICAgLy8gVktfUFJPQ0VTU0tFWSAo
RTUpIFdpbmRvd3MgOTUvOTgvTWUsIFdpbmRvd3MgTlQgNC4wLCBXaW5kb3dzIDIwMDAvWFA6IElN
RSBQUk9DRVNTIGtleQorICAgICAgICAgICAgLy8gVktfUEFDS0VUIChFNykgV2luZG93cyAyMDAw
L1hQOiBVc2VkIHRvIHBhc3MgVW5pY29kZSBjaGFyYWN0ZXJzIGFzIGlmIHRoZXkgd2VyZSBrZXlz
dHJva2VzLiBUaGUgVktfUEFDS0VUIGtleSBpcyB0aGUgbG93IHdvcmQgb2YgYSAzMi1iaXQgVmly
dHVhbCBLZXkgdmFsdWUgdXNlZCBmb3Igbm9uLWtleWJvYXJkIGlucHV0IG1ldGhvZHMuIEZvciBt
b3JlIGluZm9ybWF0aW9uLCBzZWUgUmVtYXJrIGluIEtFWUJESU5QVVQsU2VuZElucHV0LCBXTV9L
RVlET1dOLCBhbmQgV01fS0VZVVAKKyAgICAgICAgICAgIC8vIFZLX0FUVE4gKEY2KSBBdHRuIGtl
eQorICAgICAgICAgICAgLy8gVktfQ1JTRUwgKEY3KSBDclNlbCBrZXkKKyAgICAgICAgICAgIC8v
IFZLX0VYU0VMIChGOCkgRXhTZWwga2V5CisgICAgICAgICAgICAvLyBWS19FUkVPRiAoRjkpIEVy
YXNlIEVPRiBrZXkKKyAgICAgICAgICAgIC8vIFZLX1BMQVkgKEZBKSBQbGF5IGtleQorICAgICAg
ICAgICAgLy8gVktfWk9PTSAoRkIpIFpvb20ga2V5CisgICAgICAgICAgICAvLyBWS19OT05BTUUg
KEZDKSBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorICAgICAgICAgICAgLy8gVktfUEExIChGRCkg
UEExIGtleQorICAgICAgICAgICAgLy8gVktfT0VNX0NMRUFSIChGRSkgQ2xlYXIga2V5CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKK30KKworc3RhdGlj
IGlubGluZSBTdHJpbmcgc2luZ2xlQ2hhcmFjdGVyU3RyaW5nKGd1aW50IHZhbCkKK3sKKyAgICB2
YWwgPSBnZGtfa2V5dmFsX3RvX3VuaWNvZGUodmFsKTsKKyAgICByZXR1cm4gU3RyaW5nKChVQ2hh
ciopJnZhbCwgMSk7Cit9CisKK1BsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2Fy
ZEV2ZW50KEdka0V2ZW50S2V5KiBldmVudCkKKyAgICA6IG1fdGV4dChzaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoZXZlbnQtPmtleXZhbCkpCisgICAgLCBtX3VubW9kaWZpZWRUZXh0KHNpbmdsZUNoYXJh
Y3RlclN0cmluZyhldmVudC0+a2V5dmFsKSkKKyAgICAsIG1fa2V5SWRlbnRpZmllcihrZXlJZGVu
dGlmaWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKSkKKyAgICAsIG1faXNLZXlVcChldmVu
dC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0UpCisgICAgLCBtX2F1dG9SZXBlYXQoZmFsc2UpCisg
ICAgLCBtX1dpbmRvd3NLZXlDb2RlKHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoZXZlbnQtPmtl
eXZhbCkpCisgICAgLCBtX2lzS2V5cGFkKGZhbHNlKQorICAgICwgbV9zaGlmdEtleShldmVudC0+
c3RhdGUgJiBHREtfU0hJRlRfTUFTSyAhPSAwKQorICAgICwgbV9jdHJsS2V5KGV2ZW50LT5zdGF0
ZSAmIEdES19DT05UUk9MX01BU0sgIT0gMCkKKyAgICAsIG1fYWx0S2V5KGV2ZW50LT5zdGF0ZSAm
IEdES19NT0QxX01BU0sgIT0gMCkKKyAgICAsIG1fbWV0YUtleShldmVudC0+c3RhdGUgJiBHREtf
TU9EMl9NQVNLICE9IDApCit7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0xv
Z2dpbmdHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0xvZ2dpbmdH
ZGsuY3BwCShyZXZpc2lvbiAyNTE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0xvZ2dpbmdH
ZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJAY29sbGFib3JhLmNvLnVrPgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXZvaWQgSW5pdGlhbGl6ZUxvZ2dpbmdDaGFubmVsc0lmTmVjZXNzYXJ5KCkKLXsK
LSAgICAvLyBGSVhNRTogQWRkIGEgd2F5IGZvciB0aGUgdXNlciB0byBzcGVjaWZ5IHdoaWNoCi0g
ICAgLy8gbG9ncyBoZS9zaGUgd291bGQgbGlrZSB0dXJuZWQgb24uCi0gICAgTG9nTm90WWV0SW1w
bGVtZW50ZWQuc3RhdGUgPSBXVEZMb2dDaGFubmVsT247Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0xvZ2dpbmdHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0xvZ2dpbmdHdGsuY3BwCShyZXZpc2lvbiAyNTE2
OSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTG9nZ2luZ0dkay5jcHA6MjUxNjkpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9Mb2dnaW5nR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2Vy
QGNvbGxhYm9yYS5jby51az4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEluaXRpYWxpemVMb2dn
aW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpCit7CisgICAgLy8gRklYTUU6IEFkZCBhIHdheSBmb3Ig
dGhlIHVzZXIgdG8gc3BlY2lmeSB3aGljaAorICAgIC8vIGxvZ3MgaGUvc2hlIHdvdWxkIGxpa2Ug
dHVybmVkIG9uLgorICAgIExvZ05vdFlldEltcGxlbWVudGVkLnN0YXRlID0gV1RGTG9nQ2hhbm5l
bE9uOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9NSU1FVHlwZVJlZ2lzdHJ5R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dkay9NSU1FVHlwZVJlZ2lzdHJ5R2RrLmNwcAkocmV2aXNpb24gMjUxNjkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dkay9NSU1FVHlwZVJlZ2lzdHJ5R2RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHph
Y2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNB
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBV
VEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdHJ1Y3QgRXh0ZW5zaW9uTWFwIHsKLSAgICBj
b25zdCBjaGFyKiBleHRlbnNpb247Ci0gICAgY29uc3QgY2hhciogbWltZVR5cGU7Ci19OwotCi1z
dGF0aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9IHsKLSAgICB7ICJibXAi
LCAiaW1hZ2UvYm1wIiB9LAotICAgIHsgImdpZiIsICJpbWFnZS9naWYiIH0sCi0gICAgeyAiaHRt
bCIsICJ0ZXh0L2h0bWwiIH0sCi0gICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwgICAKLSAg
ICB7ICJqcGVnIiwgImltYWdlL2pwZWciIH0sCi0gICAgeyAianBnIiwgImltYWdlL2pwZWciIH0s
Ci0gICAgeyAianMiLCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAotICAgIHsgInBkZiIs
ICJhcHBsaWNhdGlvbi9wZGYiIH0sCi0gICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKLSAgICB7
ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKLSAgICB7ICJzdmciLCAiaW1hZ2Uvc3Zn
K3htbCIgfSwKLSAgICB7ICJ0ZXh0IiwgInRleHQvcGxhaW4iIH0sCi0gICAgeyAidHh0IiwgInRl
eHQvcGxhaW4iIH0sCi0gICAgeyAieGJtIiwgImltYWdlL3gteGJpdG1hcCIgfSwKLSAgICB7ICJ4
bWwiLCAidGV4dC94bWwiIH0sCi0gICAgeyAieHNsIiwgInRleHQveHNsIiB9LAotICAgIHsgInho
dG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKLSAgICB7IDAsIDAgfQotfTsKLSAgICAK
LVN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihjb25zdCBT
dHJpbmcgJmV4dCkKLXsKLSAgICBTdHJpbmcgcyA9IGV4dC5sb3dlcigpOwotICAgIGNvbnN0IEV4
dGVuc2lvbk1hcCAqZSA9IGV4dGVuc2lvbk1hcDsKLSAgICB3aGlsZSAoZS0+ZXh0ZW5zaW9uKSB7
Ci0gICAgICAgIGlmIChzID09IGUtPmV4dGVuc2lvbikKLSAgICAgICAgICAgIHJldHVybiBlLT5t
aW1lVHlwZTsKLSAgICAgICAgKytlOwotICAgIH0KLSAgICAvLyB1bmtub3duLCBsZXQncyBqdXN0
IGFzc3VtZSBwbGFpbiB0ZXh0Ci0gICAgcmV0dXJuICJ0ZXh0L3BsYWluIjsKLX0KLQotfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTUlNRVR5cGVSZWdpc3RyeUd0ay5jcHAJKHJldmlz
aW9uIDI1MTY5KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9NSU1FVHlwZVJlZ2lzdHJ5R2Rr
LmNwcDoyNTE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL01JTUVUeXBlUmVnaXN0cnlHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFw
cGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBF
eHRlbnNpb25NYXAgeworICAgIGNvbnN0IGNoYXIqIGV4dGVuc2lvbjsKKyAgICBjb25zdCBjaGFy
KiBtaW1lVHlwZTsKK307CisKK3N0YXRpYyBjb25zdCBFeHRlbnNpb25NYXAgZXh0ZW5zaW9uTWFw
IFtdID0geworICAgIHsgImJtcCIsICJpbWFnZS9ibXAiIH0sCisgICAgeyAiZ2lmIiwgImltYWdl
L2dpZiIgfSwKKyAgICB7ICJodG1sIiwgInRleHQvaHRtbCIgfSwKKyAgICB7ICJpY28iLCAiaW1h
Z2UveC1pY29uIiB9LCAgIAorICAgIHsgImpwZWciLCAiaW1hZ2UvanBlZyIgfSwKKyAgICB7ICJq
cGciLCAiaW1hZ2UvanBlZyIgfSwKKyAgICB7ICJqcyIsICJhcHBsaWNhdGlvbi94LWphdmFzY3Jp
cHQiIH0sCisgICAgeyAicGRmIiwgImFwcGxpY2F0aW9uL3BkZiIgfSwKKyAgICB7ICJwbmciLCAi
aW1hZ2UvcG5nIiB9LAorICAgIHsgInJzcyIsICJhcHBsaWNhdGlvbi9yc3MreG1sIiB9LAorICAg
IHsgInN2ZyIsICJpbWFnZS9zdmcreG1sIiB9LAorICAgIHsgInRleHQiLCAidGV4dC9wbGFpbiIg
fSwKKyAgICB7ICJ0eHQiLCAidGV4dC9wbGFpbiIgfSwKKyAgICB7ICJ4Ym0iLCAiaW1hZ2UveC14
Yml0bWFwIiB9LAorICAgIHsgInhtbCIsICJ0ZXh0L3htbCIgfSwKKyAgICB7ICJ4c2wiLCAidGV4
dC94c2wiIH0sCisgICAgeyAieGh0bWwiLCAiYXBwbGljYXRpb24veGh0bWwreG1sIiB9LAorICAg
IHsgMCwgMCB9Cit9OworICAgIAorU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBl
Rm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQoreworICAgIFN0cmluZyBzID0gZXh0Lmxv
d2VyKCk7CisgICAgY29uc3QgRXh0ZW5zaW9uTWFwICplID0gZXh0ZW5zaW9uTWFwOworICAgIHdo
aWxlIChlLT5leHRlbnNpb24pIHsKKyAgICAgICAgaWYgKHMgPT0gZS0+ZXh0ZW5zaW9uKQorICAg
ICAgICAgICAgcmV0dXJuIGUtPm1pbWVUeXBlOworICAgICAgICArK2U7CisgICAgfQorICAgIC8v
IHVua25vd24sIGxldCdzIGp1c3QgYXNzdW1lIHBsYWluIHRleHQKKyAgICByZXR1cm4gInRleHQv
cGxhaW4iOworfQorCit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2RrLmNw
cAkocmV2aXNpb24gMjUxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDUgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChD
KSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0qIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0qIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotCi0jaW5j
bHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKLQotI2luY2x1ZGUg
PGdkay9nZGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBGSVhNRTogV291bGQgYmUg
ZXZlbiBiZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBtb2RpZmllciBpcyBBbHQgaW5zdGVhZCBv
ZiBhbHdheXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KLQotUGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0
Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRCdXR0b24qIGV2ZW50KQotewotICAgIG1fdGltZXN0YW1w
ID0gY3VycmVudFRpbWUoKTsKLSAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+
eCwgKGludClldmVudC0+eSk7Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQp
ZXZlbnQtPnhfcm9vdCwgKGludClldmVudC0+eV9yb290KTsKLSAgICBtX3NoaWZ0S2V5ID0gZXZl
bnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0s7Ci0gICAgbV9jdHJsS2V5ID0gZXZlbnQtPnN0YXRl
ICYgR0RLX0NPTlRST0xfTUFTSzsKLSAgICBtX2FsdEtleSA9IGV2ZW50LT5zdGF0ZSAmIEdES19N
T0QxX01BU0s7Ci0gICAgbV9tZXRhS2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX01PRDJfTUFTSzsK
LQotICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKLSAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6
Ci0gICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoKLSAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNT
OgotICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxFQVNFOgotICAgICAgICBtX2V2ZW50VHlwZSA9IE1v
dXNlRXZlbnRQcmVzc2VkOwotICAgICAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9S
RUxFQVNFKSB7Ci0gICAgICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRSZWxlYXNlZDsK
LSAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQt
PnR5cGUgPT0gR0RLX0JVVFRPTl9QUkVTUykKLSAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDE7
Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKQotICAg
ICAgICAgICAgbV9jbGlja0NvdW50ID0gMjsKLSAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5cGUg
PT0gR0RLXzNCVVRUT05fUFJFU1MpCi0gICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAzOwotCi0g
ICAgICAgIGlmIChldmVudC0+YnV0dG9uID09IDEpCi0gICAgICAgICAgICBtX2J1dHRvbiA9IExl
ZnRCdXR0b247Ci0gICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMikKLSAgICAgICAg
ICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwotICAgICAgICBlbHNlIGlmIChldmVudC0+YnV0
dG9uID09IDMpCi0gICAgICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9uOwotICAgICAgICBi
cmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IH07Ci19Ci0KLVBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50
TW90aW9uKiBtb3Rpb24pCi17Ci0gICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwotICAg
IG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KW1vdGlvbi0+eCwgKGludCltb3Rpb24tPnkpOwot
ICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludCgoaW50KW1vdGlvbi0+eF9yb290LCAoaW50
KW1vdGlvbi0+eV9yb290KTsKLSAgICBtX3NoaWZ0S2V5ID0gbW90aW9uLT5zdGF0ZSAmIEdES19T
SElGVF9NQVNLOwotICAgIG1fY3RybEtleSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfQ09OVFJPTF9N
QVNLOwotICAgIG1fYWx0S2V5ID0gbW90aW9uLT5zdGF0ZSAmIEdES19NT0QxX01BU0s7Ci0gICAg
bV9tZXRhS2V5ID0gbW90aW9uLT5zdGF0ZSAmIEdES19NT0QyX01BU0s7Ci0KLSAgICBzd2l0Y2gg
KG1vdGlvbi0+dHlwZSkgewotICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6Ci0gICAgICAgIG1f
ZXZlbnRUeXBlID0gTW91c2VFdmVudE1vdmVkOwotICAgICAgICBtX2J1dHRvbiA9IE5vQnV0dG9u
OwotICAgICAgICBtX2NsaWNrQ291bnQgPSAwOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9OwotCi0gICAgaWYgKG1vdGlv
bi0+c3RhdGUgJiBHREtfQlVUVE9OMV9NQVNLKQotICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0
b247Ci0gICAgZWxzZSBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04yX01BU0spCi0gICAg
ICAgIG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwotICAgIGVsc2UgaWYgKG1vdGlvbi0+c3RhdGUg
JiBHREtfQlVUVE9OM19NQVNLKQotICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9uOwotfQot
fQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEd0ay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEd0ay5jcHAJKHJldmlzaW9uIDI1
MTY5KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9Nb3VzZUV2ZW50R2RrLmNwcDoyNTE2OSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHdGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTA1IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisKKyNpbmNsdWRlICJTeXN0ZW1UaW1lLmgi
CisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBXb3VsZCBiZSBldmVuIGJldHRlciB0byBmaWd1
cmUgb3V0IHdoaWNoIG1vZGlmaWVyIGlzIEFsdCBpbnN0ZWFkIG9mIGFsd2F5cyB1c2luZyBHREtf
TU9EMV9NQVNLLgorCitQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChHZGtF
dmVudEJ1dHRvbiogZXZlbnQpCit7CisgICAgbV90aW1lc3RhbXAgPSBjdXJyZW50VGltZSgpOwor
ICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54LCAoaW50KWV2ZW50LT55KTsK
KyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+eF9yb290LCAoaW50
KWV2ZW50LT55X3Jvb3QpOworICAgIG1fc2hpZnRLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfU0hJ
RlRfTUFTSzsKKyAgICBtX2N0cmxLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNL
OworICAgIG1fYWx0S2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSzsKKyAgICBtX21l
dGFLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfTU9EMl9NQVNLOworCisgICAgc3dpdGNoIChldmVu
dC0+dHlwZSkgeworICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18yQlVU
VE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6CisgICAgY2FzZSBHREtfQlVU
VE9OX1JFTEVBU0U6CisgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFByZXNzZWQ7Cisg
ICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JFTEVBU0UpIHsKKyAgICAgICAg
ICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVhc2VkOworICAgICAgICAgICAgbV9jbGlj
a0NvdW50ID0gMDsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9O
X1BSRVNTKQorICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMTsKKyAgICAgICAgZWxzZSBpZiAo
ZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291
bnQgPSAyOworICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVT
UykKKyAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDM7CisKKyAgICAgICAgaWYgKGV2ZW50LT5i
dXR0b24gPT0gMSkKKyAgICAgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKKyAgICAgICAg
ZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAyKQorICAgICAgICAgICAgbV9idXR0b24gPSBNaWRk
bGVCdXR0b247CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMykKKyAgICAgICAg
ICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKK30KKworUGxhdGZvcm1N
b3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRNb3Rpb24qIG1vdGlvbikKK3sK
KyAgICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9wb3NpdGlvbiA9IEludFBv
aW50KChpbnQpbW90aW9uLT54LCAoaW50KW1vdGlvbi0+eSk7CisgICAgbV9nbG9iYWxQb3NpdGlv
biA9IEludFBvaW50KChpbnQpbW90aW9uLT54X3Jvb3QsIChpbnQpbW90aW9uLT55X3Jvb3QpOwor
ICAgIG1fc2hpZnRLZXkgPSBtb3Rpb24tPnN0YXRlICYgR0RLX1NISUZUX01BU0s7CisgICAgbV9j
dHJsS2V5ID0gbW90aW9uLT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0s7CisgICAgbV9hbHRLZXkg
PSBtb3Rpb24tPnN0YXRlICYgR0RLX01PRDFfTUFTSzsKKyAgICBtX21ldGFLZXkgPSBtb3Rpb24t
PnN0YXRlICYgR0RLX01PRDJfTUFTSzsKKworICAgIHN3aXRjaCAobW90aW9uLT50eXBlKSB7Cisg
ICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKKyAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2
ZW50TW92ZWQ7CisgICAgICAgIG1fYnV0dG9uID0gTm9CdXR0b247CisgICAgICAgIG1fY2xpY2tD
b3VudCA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH07CisKKyAgICBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRU
T04xX01BU0spCisgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKKyAgICBlbHNlIGlmICht
b3Rpb24tPnN0YXRlICYgR0RLX0JVVFRPTjJfTUFTSykKKyAgICAgICAgbV9idXR0b24gPSBNaWRk
bGVCdXR0b247CisgICAgZWxzZSBpZiAobW90aW9uLT5zdGF0ZSAmIEdES19CVVRUT04zX01BU0sp
CisgICAgICAgIG1fYnV0dG9uID0gUmlnaHRCdXR0b247Cit9Cit9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVlbkdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JlZW5HZGsuY3BwCShyZXZpc2lvbiAyNTE2OSkKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2NyZWVuR2RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hh
ZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIK
LQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiV2lkZ2V0LmgiCi0KLSNp
bmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWludCBzY3JlZW5EZXB0aChXaWRn
ZXQqIHdpZGdldCkgCi17Ci0gICAgQVNTRVJUKHdpZGdldC0+Y29udGFpbmluZ1dpbmRvdygpICYm
IEdUS19XSURHRVQod2lkZ2V0LT5jb250YWluaW5nV2luZG93KCkpLT53aW5kb3cpOwotCi0gICAg
Z2ludCBkdW1teSwgZGVwdGg7Ci0gICAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkoR1RLX1dJREdF
VCh3aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdywgJmR1bW15LCAmZHVtbXksICZk
dW1teSwgJmR1bW15LCAmZGVwdGgpOwotICAgIHJldHVybiBkZXB0aDsKLX0KLQotaW50IHNjcmVl
bkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gODsKLX0KLQotYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KikgCi17IAot
ICAgIG5vdEltcGxlbWVudGVkKCk7IAotICAgIHJldHVybiBmYWxzZTsgCi19Ci0KLUZsb2F0UmVj
dCBzY3JlZW5SZWN0KFdpZGdldCopIAoteyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBGbG9hdFJlY3QoKTsgCi19Ci0KLUZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdp
ZGdldCopIAoteyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOyAKLSAgICByZXR1cm4gRmxvYXRSZWN0
KCk7IAotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9QbGF0Zm9ybVNjcmVlbkd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCShyZXZpc2lvbiAyNTE2OSkJKGZyb20gV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JlZW5HZGsuY3BwOjI1MTY5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JlZW5HdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKworI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworaW50IHNjcmVlbkRlcHRoKFdpZGdldCogd2lk
Z2V0KSAKK3sKKyAgICBBU1NFUlQod2lkZ2V0LT5jb250YWluaW5nV2luZG93KCkgJiYgR1RLX1dJ
REdFVCh3aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKSktPndpbmRvdyk7CisKKyAgICBnaW50IGR1
bW15LCBkZXB0aDsKKyAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeShHVEtfV0lER0VUKHdpZGdl
dC0+Y29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93LCAmZHVtbXksICZkdW1teSwgJmR1bW15LCAm
ZHVtbXksICZkZXB0aCk7CisgICAgcmV0dXJuIGRlcHRoOworfQorCitpbnQgc2NyZWVuRGVwdGhQ
ZXJDb21wb25lbnQoV2lkZ2V0KikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biA4OworfQorCitib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKSAKK3sgCisgICAgbm90
SW1wbGVtZW50ZWQoKTsgCisgICAgcmV0dXJuIGZhbHNlOyAKK30KKworRmxvYXRSZWN0IHNjcmVl
blJlY3QoV2lkZ2V0KikgCit7IAorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOyAKK30KKworRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kikg
Cit7IAorICAgIG5vdEltcGxlbWVudGVkKCk7IAorICAgIHJldHVybiBGbG9hdFJlY3QoKTsgCit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Bs
YXRmb3JtU2Nyb2xsQmFyR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHAJKHJldmlzaW9uIDI1MTY5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyIHplY2tlQHNlbGZpc2gub3JnCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TY3Jv
bGxCYXIuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxjYWlyby9jYWlyby5oPgotI2luY2x1
ZGUgPHN0ZGlvLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi0KLVBsYXRmb3JtU2Ny
b2xsYmFyOjpQbGF0Zm9ybVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCi0gICAgOiBTY3JvbGxi
YXIoY2xpZW50LCBvcmllbnRhdGlvbiwgY29udHJvbFNpemUpCi0gICAgLCBtX2FkanVzdG1lbnQo
R1RLX0FESlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4w
LCAwLjApKSkKLXsgCi0gICAgR3RrU2Nyb2xsYmFyKiBzY3JvbGxCYXIgPSBvcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19TQ1JPTExCQVIoOjpndGtfaHNjcm9sbGJhcl9uZXcobV9hZGp1c3RtZW50KSkgOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NDUk9MTEJBUig6Omd0a192c2Nyb2xsYmFyX25l
dyhtX2FkanVzdG1lbnQpKTsKLSAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChzY3JvbGxC
YXIpKTsKLSAgICBnX29iamVjdF9yZWYoR19PQkpFQ1Qoc2Nyb2xsQmFyKSk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdChHX09CSkVDVChzY3JvbGxCYXIpLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJB
Q0soUGxhdGZvcm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCksIHRoaXMpOwotCi0gICAgc2V0
R3RrV2lkZ2V0KEdUS19XSURHRVQoc2Nyb2xsQmFyKSk7Ci0KLSAgICAvKgotICAgICAqIGFzc2ln
biBhIHNhbmUgZGVmYXVsdCB3aWR0aCBhbmQgaGVpZ2h0IHRvIHRoZSBTY3JvbGxCYXIsIG90aGVy
d2lzZQotICAgICAqIHdlIHdpbGwgZW5kIHVwIHdpdGggYSAwIHdpZHRoIHNjcm9sbGJhci4KLSAg
ICAgKi8KLSAgICByZXNpemUoUGxhdGZvcm1TY3JvbGxiYXI6Omhvcml6b250YWxTY3JvbGxiYXJI
ZWlnaHQoKSwKLSAgICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Nyb2xsYmFy
V2lkdGgoKSk7ICAgIAotfQotCi1QbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFy
KCkKLXsKLSAgICAvKgotICAgICAqIHRoZSBXaWRnZXQgZG9lcyBub3QgdGFrZSBvdmVyIG93bmVy
c2hpcC4KLSAgICAgKi8KLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMo
R19PQkpFQ1QoZ3RrV2lkZ2V0KCkpLCAoZ3BvaW50ZXIpUGxhdGZvcm1TY3JvbGxiYXI6Omd0a1Zh
bHVlQ2hhbmdlZCwgdGhpcyk7Ci0gICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1QoZ3RrV2lkZ2V0
KCkpKTsKLX0KLQotaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjp3aWR0aCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIFdpZGdldDo6d2lkdGgoKTsKLX0KLQotaW50IFBsYXRmb3JtU2Nyb2xsYmFyOjpoZWln
aHQoKSBjb25zdAotewotICAgIHJldHVybiBXaWRnZXQ6OmhlaWdodCgpOwotfQotCi12b2lkIFBs
YXRmb3JtU2Nyb2xsYmFyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBXaWRnZXQ6
OnNldEVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnBhaW50
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0KQotewotICAgIFdpZGdldDo6cGFpbnQoZ3JhcGhpY3NDb250ZXh0LCBkYW1hZ2VSZWN0KTsK
LX0KLQotdm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQb3NpdGlvbigpCi17IAot
ICAgIGlmIChtX2FkanVzdG1lbnQtPnZhbHVlICE9IG1fY3VycmVudFBvcykgewotICAgICAgICBt
X2FkanVzdG1lbnQtPnZhbHVlID0gbV9jdXJyZW50UG9zOwotICAgICAgICBndGtfYWRqdXN0bWVu
dF92YWx1ZV9jaGFuZ2VkKG1fYWRqdXN0bWVudCk7Ci0gICAgfQotfQotCi12b2lkIFBsYXRmb3Jt
U2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24oKQotewotICAgIG1fYWRqdXN0bWVudC0+
c3RlcF9pbmNyZW1lbnQgPSBtX2xpbmVTdGVwOwotICAgIG1fYWRqdXN0bWVudC0+cGFnZV9pbmNy
ZW1lbnQgPSBtX3BhZ2VTdGVwOwotICAgIG1fYWRqdXN0bWVudC0+cGFnZV9zaXplID0gbV92aXNp
YmxlU2l6ZTsKLSAgICBtX2FkanVzdG1lbnQtPnVwcGVyID0gbV90b3RhbFNpemU7Ci0gICAgZ3Rr
X2FkanVzdG1lbnRfY2hhbmdlZChtX2FkanVzdG1lbnQpOwotfQotCi12b2lkIFBsYXRmb3JtU2Ny
b2xsYmFyOjpzZXRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgc2V0RnJhbWVHZW9t
ZXRyeShyZWN0KTsKLSAgICBnZW9tZXRyeUNoYW5nZWQoKTsKLX0KLQotdm9pZCBQbGF0Zm9ybVNj
cm9sbGJhcjo6Z2VvbWV0cnlDaGFuZ2VkKCkKLXsKLSAgICBpZiAoIXBhcmVudCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBBU1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOwotCi0gICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7
Ci0gICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gSW50UmVjdChmcmFtZVZpZXctPmNvbnRlbnRzVG9X
aW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgp
KTsKLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHdpbmRvd1JlY3QueCgpLCB3aW5k
b3dSZWN0LnkoKSwgd2luZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgpIH07Ci0g
ICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7Ci19
Ci0KLXZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZChHdGtBZGp1c3RtZW50
KiwgUGxhdGZvcm1TY3JvbGxiYXIqIHRoYXQpCi17Ci0gICAgdGhhdC0+c2V0VmFsdWUoZ3RrX2Fk
anVzdG1lbnRfZ2V0X3ZhbHVlKHRoYXQtPm1fYWRqdXN0bWVudCkpOwotfQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR3RrLmNwcAkocmV2aXNpb24gMjUx
NjkpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcDoy
NTE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciB6ZWNrZUBzZWxmaXNoLm9yZwor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8Y2Fp
cm8vY2Fpcm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworCitQbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xp
ZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xT
aXplKQorICAgIDogU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIGNvbnRyb2xTaXplKQor
ICAgICwgbV9hZGp1c3RtZW50KEdUS19BREpVU1RNRU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAs
IDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKSkpCit7IAorICAgIEd0a1Njcm9sbGJhciogc2Nyb2xs
QmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHVEtfU0NST0xMQkFSKDo6Z3RrX2hzY3JvbGxiYXJfbmV3KG1fYWRq
dXN0bWVudCkpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TQ1JPTExCQVIo
OjpndGtfdnNjcm9sbGJhcl9uZXcobV9hZGp1c3RtZW50KSk7CisgICAgZ3RrX3dpZGdldF9zaG93
KEdUS19XSURHRVQoc2Nyb2xsQmFyKSk7CisgICAgZ19vYmplY3RfcmVmKEdfT0JKRUNUKHNjcm9s
bEJhcikpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1Qoc2Nyb2xsQmFyKSwgInZhbHVl
LWNoYW5nZWQiLCBHX0NBTExCQUNLKFBsYXRmb3JtU2Nyb2xsYmFyOjpndGtWYWx1ZUNoYW5nZWQp
LCB0aGlzKTsKKworICAgIHNldEd0a1dpZGdldChHVEtfV0lER0VUKHNjcm9sbEJhcikpOworCisg
ICAgLyoKKyAgICAgKiBhc3NpZ24gYSBzYW5lIGRlZmF1bHQgd2lkdGggYW5kIGhlaWdodCB0byB0
aGUgU2Nyb2xsQmFyLCBvdGhlcndpc2UKKyAgICAgKiB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgMCB3
aWR0aCBzY3JvbGxiYXIuCisgICAgICovCisgICAgcmVzaXplKFBsYXRmb3JtU2Nyb2xsYmFyOjpo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCksCisgICAgICAgICAgIFBsYXRmb3JtU2Nyb2xsYmFy
Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkpOyAgICAKK30KKworUGxhdGZvcm1TY3JvbGxiYXI6
On5QbGF0Zm9ybVNjcm9sbGJhcigpCit7CisgICAgLyoKKyAgICAgKiB0aGUgV2lkZ2V0IGRvZXMg
bm90IHRha2Ugb3ZlciBvd25lcnNoaXAuCisgICAgICovCisgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKGd0a1dpZGdldCgpKSwgKGdwb2ludGVyKVBsYXRm
b3JtU2Nyb2xsYmFyOjpndGtWYWx1ZUNoYW5nZWQsIHRoaXMpOworICAgIGdfb2JqZWN0X3VucmVm
KEdfT0JKRUNUKGd0a1dpZGdldCgpKSk7Cit9CisKK2ludCBQbGF0Zm9ybVNjcm9sbGJhcjo6d2lk
dGgoKSBjb25zdAoreworICAgIHJldHVybiBXaWRnZXQ6OndpZHRoKCk7Cit9CisKK2ludCBQbGF0
Zm9ybVNjcm9sbGJhcjo6aGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gV2lkZ2V0OjpoZWln
aHQoKTsKK30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0RW5hYmxlZChib29sIGVuYWJs
ZWQpCit7CisgICAgV2lkZ2V0OjpzZXRFbmFibGVkKGVuYWJsZWQpOworfQorCit2b2lkIFBsYXRm
b3JtU2Nyb2xsYmFyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29u
c3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKK3sKKyAgICBXaWRnZXQ6OnBhaW50KGdyYXBoaWNzQ29u
dGV4dCwgZGFtYWdlUmVjdCk7Cit9CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRo
dW1iUG9zaXRpb24oKQoreyAKKyAgICBpZiAobV9hZGp1c3RtZW50LT52YWx1ZSAhPSBtX2N1cnJl
bnRQb3MpIHsKKyAgICAgICAgbV9hZGp1c3RtZW50LT52YWx1ZSA9IG1fY3VycmVudFBvczsKKyAg
ICAgICAgZ3RrX2FkanVzdG1lbnRfdmFsdWVfY2hhbmdlZChtX2FkanVzdG1lbnQpOworICAgIH0K
K30KKwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6dXBkYXRlVGh1bWJQcm9wb3J0aW9uKCkKK3sK
KyAgICBtX2FkanVzdG1lbnQtPnN0ZXBfaW5jcmVtZW50ID0gbV9saW5lU3RlcDsKKyAgICBtX2Fk
anVzdG1lbnQtPnBhZ2VfaW5jcmVtZW50ID0gbV9wYWdlU3RlcDsKKyAgICBtX2FkanVzdG1lbnQt
PnBhZ2Vfc2l6ZSA9IG1fdmlzaWJsZVNpemU7CisgICAgbV9hZGp1c3RtZW50LT51cHBlciA9IG1f
dG90YWxTaXplOworICAgIGd0a19hZGp1c3RtZW50X2NoYW5nZWQobV9hZGp1c3RtZW50KTsKK30K
Kwordm9pZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIHNldEZyYW1lR2VvbWV0cnkocmVjdCk7CisgICAgZ2VvbWV0cnlDaGFuZ2VkKCk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6Omdlb21ldHJ5Q2hhbmdlZCgpCit7CisgICAgaWYg
KCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHBhcmVudCgpLT5pc0Zy
YW1lVmlldygpKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4ocGFyZW50KCkpOworICAgIEludFJlY3Qgd2luZG93UmVjdCA9IEludFJlY3QoZnJh
bWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJh
bWVHZW9tZXRyeSgpLnNpemUoKSk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3
aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93
UmVjdC5oZWlnaHQoKSB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQo
KSwgJmFsbG9jYXRpb24pOworfQorCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpndGtWYWx1ZUNo
YW5nZWQoR3RrQWRqdXN0bWVudCosIFBsYXRmb3JtU2Nyb2xsYmFyKiB0aGF0KQoreworICAgIHRo
YXQtPnNldFZhbHVlKGd0a19hZGp1c3RtZW50X2dldF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQp
KTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BvcHVwTWVudUdkay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUG9wdXBNZW51R2RrLmNwcAkocmV2aXNpb24g
MjUxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Qb3B1cE1lbnVHZGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
cG9wdXAgbWVudSBpbXBsZW1lbnRhdGlvbiBmb3IgPHNlbGVjdD4gZWxlbWVudHMgaW4gV2ViQ29y
ZS4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KLSAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAotICoK
LSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1
aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUG9wdXBNZW51LmgiCi0KLSNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSAKLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotUG9wdXBNZW51OjpQb3B1cE1lbnUoUG9wdXBNZW51Q2xpZW50KiBtZW51TGlzdCkKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1Qb3B1cE1lbnU6On5Qb3B1cE1lbnUoKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUG9wdXBNZW51OjpzaG93KGNvbnN0IElu
dFJlY3QmLCBGcmFtZVZpZXcqLCBpbnQpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBQb3B1cE1lbnU6OmhpZGUoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgUG9wdXBNZW51Ojp1cGRhdGVGcm9tRWxlbWVudCgpIAotewotICAgIG5vdEltcGxlbWVudGVk
KCk7IAotfQotCi1ib29sIFBvcHVwTWVudTo6aXRlbVdyaXRpbmdEaXJlY3Rpb25Jc05hdHVyYWwo
KQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfQotCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9Qb3B1cE1lbnVHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1BvcHVwTWVudUd0ay5jcHAJKHJldmlzaW9uIDI1MTY5KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9Qb3B1cE1lbnVHZGsuY3BwOjI1MTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUG9w
dXBNZW51R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogVGhp
cyBmaWxlIGlzIHBhcnQgb2YgdGhlIHBvcHVwIG1lbnUgaW1wbGVtZW50YXRpb24gZm9yIDxzZWxl
Y3Q+IGVsZW1lbnRzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbSAKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcs
IFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBvcHVwTWVu
dS5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+
CisgCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BvcHVwTWVudTo6UG9wdXBNZW51KFBvcHVwTWVu
dUNsaWVudCogbWVudUxpc3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUG9wdXBN
ZW51Ojp+UG9wdXBNZW51KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBv
cHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0JiwgRnJhbWVWaWV3KiwgaW50KQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUG9wdXBNZW51OjpoaWRlKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIFBvcHVwTWVudTo6dXBkYXRlRnJvbUVsZW1lbnQoKSAK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAKK30KKworYm9vbCBQb3B1cE1lbnU6Oml0ZW1Xcml0
aW5nRGlyZWN0aW9uSXNOYXR1cmFsKCkKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30KKwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAkocmV2aXNpb24gMjUx
NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMzEyICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
V2ViS2l0IHByb2plY3QuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVy
LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdt
YWlsLmNvbSAKLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
cgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5j
by51az4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBN
QSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJSZW5kZXJUaGVtZUdkay5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQotI2RlZmlu
ZSBUSEVNRV9DT0xPUiAyMDQKLSNkZWZpbmUgVEhFTUVfRk9OVCAgMjEwCi0KLS8vIEJ1dHRvbiBj
b25zdGFudHMKLSNkZWZpbmUgQlBfQlVUVE9OICAgIDEKLSNkZWZpbmUgQlBfUkFESU8gICAgIDIK
LSNkZWZpbmUgQlBfQ0hFQ0tCT1ggIDMKLQotLy8gVGV4dGZpZWxkIGNvbnN0YW50cwotI2RlZmlu
ZSBURlBfVEVYVEZJRUxEIDEKLSNkZWZpbmUgVEZTX1JFQURPTkxZICA2Ci0KLS8qCi0gKiBBcHBy
b2FjaCB0byB0aGVtaW5nOgotICogIGEpIGtlZXAgb25lIGNvcHkgb2YgZWFjaCB0byBiZSBkcmF3
biB3aWRnZXQsIEd0a0VudHJ5LCBHdGtCdXR0b24sIEd0ay4uLgotICogICAgICsgdGhlIGJ1dHRv
biB3aWxsIGxvb2sgbGlrZSB0aGUgbmF0aXZlIGNvbnRyb2wKLSAqICAgICArIHdlIGRvbid0IG5l
ZWQgdG8gd29ycnkgYWJvdXQgc3R5bGUgdXBkYXRlcyBhbmQgbG9hZGluZyB0aGUgcmlnaHQgR3Rr
U3R5bGUKLSAqICAgICAtIHJlc291cmNlcyBhcmUgd2FzdGVkLiBUaGUgbmF0aXZlIHdpbmRvd3Mg
d2lsbCBub3QgYmUgdXNlZCwgd2UgbWlnaHQgaGF2ZSBpc3N1ZXMKLSAqICAgICAgIHdpdGgKLSAq
Ci0gKiAgYikgVXNlIEd0a1N0eWxlIGRpcmVjdGx5IGFuZCBjb3B5IGFuZCBwYXN0ZSBHdGsrIGNv
ZGUKLSAqCi0gKgotICogV2Ugd2lsbCBtaXggYSBhbmQgYgotICoKLSAqIC0gQ3JlYXRlIEd0a1dp
ZGdldHMgdG8gaG9sZCB0aGUgc3RhdGUgKGRpc2FibGVkL2VuYWJsZWQpLCBzZWxlY3RlZCwgbm90
IHNlbGVjdGVkLgotICogLSBVc2UgYSBHZGtQaXhtYXAgdG8gbWFrZSB0aGUgR3RrU3R5bGUgZHJh
dyB0byBhbmQgdGhlbiB0cnkgdG8gY29udmVydCBzZXQgaXQgdGhlCi0gKiAgIHNvdXJjZSBvZiB0
aGUgY3VycmVudCBvcGVyYXRpb24uCi0gKgotICovCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
UmVuZGVyVGhlbWUqIHRoZW1lKCkKLXsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWVHZGsgZ2RrVGhl
bWU7Ci0gICAgcmV0dXJuICZnZGtUaGVtZTsKLX0KLQotUmVuZGVyVGhlbWVHZGs6OlJlbmRlclRo
ZW1lR2RrKCkKLSAgICA6IG1fZ3RrQnV0dG9uKDApCi0gICAgLCBtX2d0a0NoZWNrYm94KDApCi0g
ICAgLCBtX2d0a1JhZGlvQnV0dG9uKDApCi0gICAgLCBtX2d0a0VudHJ5KDApCi0gICAgLCBtX2d0
a0VkaXRhYmxlKDApCi0gICAgLCBtX3VubWFwcGVkV2luZG93KDApCi0gICAgLCBtX2NvbnRhaW5l
cigwKQotewotfQotCi12b2lkIFJlbmRlclRoZW1lR2RrOjpjbG9zZSgpCi17Ci19Ci0KLXZvaWQg
UmVuZGVyVGhlbWVHZGs6OmFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAotewotICAgIC8vIEN1dCBvdXQgdGhlIGludHJpbnNpYyBtYXJnaW5zIGNvbXBsZXRlbHkg
aWYgd2UgZW5kIHVwIHVzaW5nIGEgc21hbGwgZm9udCBzaXplCi0gICAgaWYgKHN0eWxlLT5mb250
U2l6ZSgpIDwgMTEpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEludHJpbnNpYyBtYXJnaW4g
dmFsdWUuCi0gICAgY29uc3QgaW50IG0gPSAyOwotCi0gICAgLy8gRklYTUU6IFVzaW5nIHdpZHRo
L2hlaWdodCBhbG9uZSBhbmQgbm90IGFsc28gZGVhbGluZyB3aXRoIG1pbi13aWR0aC9tYXgtd2lk
dGggaXMgZmxhd2VkLgotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
KSB7Ci0gICAgICAgIGlmIChzdHlsZS0+bWFyZ2luTGVmdCgpLnF1aXJrKCkpCi0gICAgICAgICAg
ICBzdHlsZS0+c2V0TWFyZ2luTGVmdChMZW5ndGgobSwgRml4ZWQpKTsKLSAgICAgICAgaWYgKHN0
eWxlLT5tYXJnaW5SaWdodCgpLnF1aXJrKCkpCi0gICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2lu
UmlnaHQoTGVuZ3RoKG0sIEZpeGVkKSk7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlLT5oZWlnaHQo
KS5pc0F1dG8oKSkgewotICAgICAgICBpZiAoc3R5bGUtPm1hcmdpblRvcCgpLnF1aXJrKCkpCi0g
ICAgICAgICAgICBzdHlsZS0+c2V0TWFyZ2luVG9wKExlbmd0aChtLCBGaXhlZCkpOwotICAgICAg
ICBpZiAoc3R5bGUtPm1hcmdpbkJvdHRvbSgpLnF1aXJrKCkpCi0gICAgICAgICAgICBzdHlsZS0+
c2V0TWFyZ2luQm90dG9tKExlbmd0aChtLCBGaXhlZCkpOwotICAgIH0KLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZUdkazo6c3VwcG9ydHNGb2N1cyhFQXBwZWFyYW5jZSBhcHBlYXJhbmNlKQotewotICAg
IHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgICAgICBjYXNlIFB1c2hCdXR0b25BcHBlYXJhbmNl
OgotICAgICAgICBjYXNlIEJ1dHRvbkFwcGVhcmFuY2U6Ci0gICAgICAgIGNhc2UgVGV4dEZpZWxk
QXBwZWFyYW5jZToKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotR3RrU3RhdGVUeXBlIFJlbmRlclRoZW1lR2RrOjpkZXRlcm1pbmVTdGF0ZShSZW5kZXJPYmpl
Y3QqIG8pCi17Ci0gICAgR3RrU3RhdGVUeXBlIHJlc3VsdCA9IEdUS19TVEFURV9OT1JNQUw7Ci0g
ICAgaWYgKCFpc0VuYWJsZWQobykpCi0gICAgICAgIHJlc3VsdCA9IEdUS19TVEFURV9JTlNFTlNJ
VElWRTsKLSAgICBlbHNlIGlmIChpc1ByZXNzZWQobykpCi0gICAgICAgIHJlc3VsdCA9IEdUS19T
VEFURV9BQ1RJVkU7Ci0gICAgZWxzZSBpZiAoaXNIb3ZlcmVkKG8pKQotICAgICAgICByZXN1bHQg
PSBHVEtfU1RBVEVfUFJFTElHSFQ7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotR3RrU2hhZG93
VHlwZSBSZW5kZXJUaGVtZUdkazo6ZGV0ZXJtaW5lU2hhZG93KFJlbmRlck9iamVjdCogbykKLXsK
LSAgICByZXR1cm4gaXNDaGVja2VkKG8pID8gR1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VU
OwotfQotCi1UaGVtZURhdGEgUmVuZGVyVGhlbWVHZGs6OmdldFRoZW1lRGF0YShSZW5kZXJPYmpl
Y3QqIG8pCi17Ci0gICAgVGhlbWVEYXRhIHJlc3VsdDsKLSAgICBzd2l0Y2ggKG8tPnN0eWxlKCkt
PmFwcGVhcmFuY2UoKSkgewotICAgICAgICBjYXNlIFB1c2hCdXR0b25BcHBlYXJhbmNlOgotICAg
ICAgICBjYXNlIEJ1dHRvbkFwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXN1bHQubV9wYXJ0ID0g
QlBfQlVUVE9OOwotICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShv
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENoZWNrYm94QXBwZWFyYW5jZToK
LSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBCUF9DSEVDS0JPWDsKLSAgICAgICAgICAgIHJl
c3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5lU3RhdGUobyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBSYWRpb0FwcGVhcmFuY2U6Ci0gICAgICAgICAgICByZXN1bHQubV9wYXJ0ID0g
QlBfUkFESU87Ci0gICAgICAgICAgICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8p
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVGV4dEZpZWxkQXBwZWFyYW5jZToK
LSAgICAgICAgICAgIHJlc3VsdC5tX3BhcnQgPSBURlBfVEVYVEZJRUxEOwotICAgICAgICAgICAg
cmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0ZShvKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8gRklYTUU6IG11Y2ggbW9yZT8KLSAgICAg
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVHZGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0IAot
eyAKLSAgICBzZXRSYWRpb1NpemUoc3R5bGUpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR2RrOjpw
YWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludElu
Zm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgLy8gRklYTUU6IGlzIGl0IHRoZSBy
aWdodCB0aGluZyB0byBkbz8KLSAgICBHdGtXaWRnZXQqIGNoZWNrYm94ID0gZ3RrQ2hlY2tib3go
KTsKLSAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9j
YXRpb24oKSk7Ci0gICAgZ3RrX3BhaW50X2NoZWNrKGNoZWNrYm94LT5zdHlsZSwgaS5jb250ZXh0
LT5nZGtEcmF3YWJsZSgpLAotICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwg
ZGV0ZXJtaW5lU2hhZG93KG8pLAotICAgICAgICAgICAgICAgICAgICBOVUxMLCBjaGVja2JveCwg
ImNoZWNrYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVj
dC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9p
ZCBSZW5kZXJUaGVtZUdkazo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Qg
Ci17IAotICAgIG5vdEltcGxlbWVudGVkKCk7IAotICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVp
Z2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCi0gICAg
aWYgKCFzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS0+aGVpZ2h0
KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQotCi0gICAgLy8gRklYTUU6ICBBIGhhcmQt
Y29kZWQgc2l6ZSBvZiAxMyBpcyB1c2VkLiAgVGhpcyBpcyB3cm9uZyBidXQgbmVjZXNzYXJ5IGZv
ciBub3cuICBJdCBtYXRjaGVzIEZpcmVmb3guCi0gICAgLy8gQXQgZGlmZmVyZW50IERQSSBzZXR0
aW5ncyBvbiBXaW5kb3dzLCBxdWVyeWluZyB0aGUgdGhlbWUgZ2l2ZXMgeW91IGEgbGFyZ2VyIHNp
emUgdGhhdCBhY2NvdW50cyBmb3IKLSAgICAvLyB0aGUgaGlnaGVyIERQSS4gIFVudGlsIG91ciBl
bnRpcmUgZW5naW5lIGhvbm9ycyBhIERQSSBzZXR0aW5nIG90aGVyIHRoYW4gOTYsIHdlIGNhbid0
IHJlbHkgb24gdGhlIHRoZW1lJ3MKLSAgICAvLyBtZXRyaWNzLgotICAgIGNvbnN0IGludCBmZiA9
IDEzOwotICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQotICAgICAg
ICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGZmLCBGaXhlZCkpOwotCi0gICAgaWYgKHN0eWxlLT5o
ZWlnaHQoKS5pc0F1dG8oKSkKLSAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoZmYsIEZp
eGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsgCi0gICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8KLSAgICBH
dGtXaWRnZXQqIHJhZGlvID0gZ3RrUmFkaW9CdXR0b24oKTsKLSAgICBJbnRQb2ludCBwb3MgPSBp
LmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7Ci0gICAgZ3RrX3BhaW50
X29wdGlvbihyYWRpby0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCi0gICAg
ICAgICAgICAgICAgICAgICBOVUxMLCByYWRpbywgInJhZGlvYnV0dG9uIiwKLSAgICAgICAgICAg
ICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHJlY3QpIAoteyAKLSAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVtZS1h
d2FyZSBkcmF3aW5nLiBUaGlzIHNob3VsZCBob25vciB0aGUgc3RhdGUgYXMgd2VsbAotICAgIEd0
a1dpZGdldCogYnV0dG9uID0gZ3RrQnV0dG9uKCk7Ci0gICAgSW50UG9pbnQgcG9zID0gaS5jb250
ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOwotICAgIGd0a19wYWludF9ib3go
YnV0dG9uLT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAotICAgICAgICAgICAgICAg
ICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKLSAgICAgICAgICAgICAg
ICAgIE5VTEwsIGJ1dHRvbiwgImJ1dHRvbiIsCi0gICAgICAgICAgICAgICAgICBwb3MueCgpLCBw
b3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotdm9pZCBSZW5kZXJUaGVtZUdkazo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCogZSkgY29uc3QgCi17IAotICAgIG5vdElt
cGxlbWVudGVkKCk7IAotfQotCi1ib29sIFJlbmRlclRoZW1lR2RrOjpwYWludFRleHRGaWVsZChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJ
bnRSZWN0JiByKQotewotICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRoZW1lLWF3YXJlIGRyYXdp
bmcKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRUZXh0
QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsK
LX0KLQotdm9pZCBSZW5kZXJUaGVtZUdkazo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgV2ViQ29yZTo6RWxlbWVudCogZSkg
Y29uc3QKLXsKLSAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlKTsKLX0KLQotdm9pZCBSZW5k
ZXJUaGVtZUdkazo6c3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mKSBjb25z
dAotewotfQotCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR2RrOjpndGtCdXR0b24oKSBjb25zdAot
ewotICAgIGlmICghbV9ndGtCdXR0b24pIHsKLSAgICAgICAgbV9ndGtCdXR0b24gPSBndGtfYnV0
dG9uX25ldygpOwotICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGd0a1dp
bmRvd0NvbnRhaW5lcigpKSwgbV9ndGtCdXR0b24pOwotICAgICAgICBndGtfd2lkZ2V0X3JlYWxp
emUobV9ndGtCdXR0b24pOwotICAgIH0KLQotICAgIHJldHVybiBtX2d0a0J1dHRvbjsKLX0KLQot
R3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUdkazo6Z3RrQ2hlY2tib3goKSBjb25zdAotewotICAgIGlm
ICghbV9ndGtDaGVja2JveCkgewotICAgICAgICBtX2d0a0NoZWNrYm94ID0gZ3RrX2NoZWNrX2J1
dHRvbl9uZXcoKTsKLSAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihndGtX
aW5kb3dDb250YWluZXIoKSksIG1fZ3RrQ2hlY2tib3gpOwotICAgICAgICBndGtfd2lkZ2V0X3Jl
YWxpemUobV9ndGtDaGVja2JveCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fZ3RrQ2hlY2tib3g7
Ci19Ci0KLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHZGs6Omd0a1JhZGlvQnV0dG9uKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1fZ3RrUmFkaW9CdXR0b24pIHsKLSAgICAgICAgbV9ndGtSYWRpb0J1dHRv
biA9IGd0a19yYWRpb19idXR0b25fbmV3KE5VTEwpOwotICAgICAgICBndGtfY29udGFpbmVyX2Fk
ZChHVEtfQ09OVEFJTkVSKGd0a1dpbmRvd0NvbnRhaW5lcigpKSwgbV9ndGtSYWRpb0J1dHRvbik7
Ci0gICAgICAgIGd0a193aWRnZXRfcmVhbGl6ZShtX2d0a1JhZGlvQnV0dG9uKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbV9ndGtSYWRpb0J1dHRvbjsKLX0KLQotR3RrV2lkZ2V0KiBSZW5kZXJUaGVt
ZUdkazo6Z3RrV2luZG93Q29udGFpbmVyKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fY29udGFpbmVy
KSB7Ci0gICAgICAgIG1fdW5tYXBwZWRXaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtfV0lORE9X
X1BPUFVQKTsKLSAgICAgICAgLy8gU29tZSBHVEsgdGhlbWVzIChpLmUuIENsZWFybG9va3MpIGRy
YXcgdGhlIGJ1dHRvbnMgZGlmZmVyZW50bHkKLSAgICAgICAgLy8gKGluIHBhcnRpY3VsYXIsIGNh
bGwgZ3RrX3N0eWxlX2FwcGx5X2RlZmF1bHRfYmFja2dyb3VuZCkgaWYgdGhleQotICAgICAgICAv
LyBhcmUgdW5hbGxvY2F0ZWQgYW5kIGFyZSBjaGlsZHJlbiBvZiBhIEd0a0ZpeGVkIHdpZGdldCwg
d2hpY2ggaXMKLSAgICAgICAgLy8gYXBwYXJlbnRseSB3aGF0IHNvbWUgIm1ha2UgRmlyZWZveCBi
dXR0b25zIGxvb2sgbGlrZSBHVEsiIGNvZGUKLSAgICAgICAgLy8gZG9lcy4gIFRvIGF2b2lkIHRo
aXMgdWdseSBsb29rLCB3ZSB1c2UgYSBHdGtIQm94IGFzIGEgcGFyZW50LAotICAgICAgICAvLyBy
YXRoZXIgdGhhbiBhIEd0a0ZpeGVkLgotICAgICAgICBtX2NvbnRhaW5lciA9IGd0a19oYm94X25l
dyhmYWxzZSwgMCk7Ci0gICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV91
bm1hcHBlZFdpbmRvdyksIG1fY29udGFpbmVyKTsKLSAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXpl
KG1fdW5tYXBwZWRXaW5kb3cpOwotICAgIH0KLQotICAgIHJldHVybiBtX2NvbnRhaW5lcjsKLX0K
LX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuaAkocmV2aXNpb24gMjUx
NjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDEwNyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdl
YktpdCBwcm9qZWN0LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFp
bC5jb20gCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
LSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCi0gKgotICovCi0KLSNpZm5kZWYgUmVuZGVyVGhlbWVHZGtfaAotI2RlZmlu
ZSBSZW5kZXJUaGVtZUdka19oCi0KLSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXN0cnVjdCBUaGVtZURhdGEgewotICAgIFRoZW1lRGF0YSgpIDogbV9wYXJ0
KDApLCBtX3N0YXRlKDApIHt9Ci0KLSAgICB1bnNpZ25lZCBtX3BhcnQ7Ci0gICAgdW5zaWduZWQg
bV9zdGF0ZTsKLX07Ci0KLWNsYXNzIFJlbmRlclRoZW1lR2RrIDogcHVibGljIFJlbmRlclRoZW1l
IHsKLXB1YmxpYzoKLSAgICBSZW5kZXJUaGVtZUdkaygpOwotCi0gICAgLy8gQSBtZXRob2QgYXNr
aW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5n
IHdoZW4gaG92ZXJlZC4KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIC8vIFN5c3RlbSBm
b250cy4KLSAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3Jp
cHRpb24mKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNr
Ym94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVy
T2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGFkZEludHJpbnNpY01h
cmdpbnMoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICBHdGtT
dGF0ZVR5cGUgZGV0ZXJtaW5lU3RhdGUoUmVuZGVyT2JqZWN0Kik7Ci0gICAgR3RrU2hhZG93VHlw
ZSBkZXRlcm1pbmVTaGFkb3coUmVuZGVyT2JqZWN0Kik7Ci0gICAgYm9vbCBzdXBwb3J0c0ZvY3Vz
KEVBcHBlYXJhbmNlKTsKLQotICAgIFRoZW1lRGF0YSBnZXRUaGVtZURhdGEoUmVuZGVyT2JqZWN0
Kik7Ci0KLQotICAgIC8qCi0gICAgICogaG9sZCB0aGUgc3RhdGUKLSAgICAgKi8KLSAgICBHdGtX
aWRnZXQqIGd0a0J1dHRvbigpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrQ2hlY2tib3goKSBj
b25zdDsKLSAgICBHdGtXaWRnZXQqIGd0a1JhZGlvQnV0dG9uKCkgY29uc3Q7Ci0gICAgR3RrV2lk
Z2V0KiBndGtFbnRyeSgpIGNvbnN0OwotICAgIEd0a1dpZGdldCogZ3RrRWRpdGFibGUoKSBjb25z
dDsKLQotICAgIC8qCi0gICAgICogdW5tYXBwZWQgR2RrV2luZG93IGhhdmluZyBhIGNvbnRhaW5l
ci4gVGhpcyBpcyBob2xkaW5nIGFsbAotICAgICAqIG91ciBmYWtlIHdpZGdldHMKLSAgICAgKi8K
LSAgICBHdGtXaWRnZXQqIGd0a1dpbmRvd0NvbnRhaW5lcigpIGNvbnN0OwotCi1wcml2YXRlOgot
ICAgIG11dGFibGUgR3RrV2lkZ2V0ICptX2d0a0J1dHRvbjsKLSAgICBtdXRhYmxlIEd0a1dpZGdl
dCAqbV9ndGtDaGVja2JveDsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCAqbV9ndGtSYWRpb0J1dHRv
bjsKLSAgICBtdXRhYmxlIEd0a1dpZGdldCAqbV9ndGtFbnRyeTsKLSAgICBtdXRhYmxlIEd0a1dp
ZGdldCAqbV9ndGtFZGl0YWJsZTsKLQotICAgIG11dGFibGUgR3RrV2lkZ2V0ICptX3VubWFwcGVk
V2luZG93OwotICAgIG11dGFibGUgR3RrV2lkZ2V0ICptX2NvbnRhaW5lcjsKLX07Ci0KLX0KLQot
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHdGsuY3BwCShyZXZp
c2lvbiAyNTE2OSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3Bw
OjI1MTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1l
bEBnbWFpbC5jb20gCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJv
cmEuY28udWs+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3Rv
biwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUmVuZGVyVGhlbWVHZGsuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKKyNk
ZWZpbmUgVEhFTUVfQ09MT1IgMjA0CisjZGVmaW5lIFRIRU1FX0ZPTlQgIDIxMAorCisvLyBCdXR0
b24gY29uc3RhbnRzCisjZGVmaW5lIEJQX0JVVFRPTiAgICAxCisjZGVmaW5lIEJQX1JBRElPICAg
ICAyCisjZGVmaW5lIEJQX0NIRUNLQk9YICAzCisKKy8vIFRleHRmaWVsZCBjb25zdGFudHMKKyNk
ZWZpbmUgVEZQX1RFWFRGSUVMRCAxCisjZGVmaW5lIFRGU19SRUFET05MWSAgNgorCisvKgorICog
QXBwcm9hY2ggdG8gdGhlbWluZzoKKyAqICBhKSBrZWVwIG9uZSBjb3B5IG9mIGVhY2ggdG8gYmUg
ZHJhd24gd2lkZ2V0LCBHdGtFbnRyeSwgR3RrQnV0dG9uLCBHdGsuLi4KKyAqICAgICArIHRoZSBi
dXR0b24gd2lsbCBsb29rIGxpa2UgdGhlIG5hdGl2ZSBjb250cm9sCisgKiAgICAgKyB3ZSBkb24n
dCBuZWVkIHRvIHdvcnJ5IGFib3V0IHN0eWxlIHVwZGF0ZXMgYW5kIGxvYWRpbmcgdGhlIHJpZ2h0
IEd0a1N0eWxlCisgKiAgICAgLSByZXNvdXJjZXMgYXJlIHdhc3RlZC4gVGhlIG5hdGl2ZSB3aW5k
b3dzIHdpbGwgbm90IGJlIHVzZWQsIHdlIG1pZ2h0IGhhdmUgaXNzdWVzCisgKiAgICAgICB3aXRo
CisgKgorICogIGIpIFVzZSBHdGtTdHlsZSBkaXJlY3RseSBhbmQgY29weSBhbmQgcGFzdGUgR3Rr
KyBjb2RlCisgKgorICoKKyAqIFdlIHdpbGwgbWl4IGEgYW5kIGIKKyAqCisgKiAtIENyZWF0ZSBH
dGtXaWRnZXRzIHRvIGhvbGQgdGhlIHN0YXRlIChkaXNhYmxlZC9lbmFibGVkKSwgc2VsZWN0ZWQs
IG5vdCBzZWxlY3RlZC4KKyAqIC0gVXNlIGEgR2RrUGl4bWFwIHRvIG1ha2UgdGhlIEd0a1N0eWxl
IGRyYXcgdG8gYW5kIHRoZW4gdHJ5IHRvIGNvbnZlcnQgc2V0IGl0IHRoZQorICogICBzb3VyY2Ug
b2YgdGhlIGN1cnJlbnQgb3BlcmF0aW9uLgorICoKKyAqLworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlbmRlclRoZW1lKiB0aGVtZSgpCit7CisgICAgc3RhdGljIFJlbmRlclRoZW1lR2RrIGdk
a1RoZW1lOworICAgIHJldHVybiAmZ2RrVGhlbWU7Cit9CisKK1JlbmRlclRoZW1lR2RrOjpSZW5k
ZXJUaGVtZUdkaygpCisgICAgOiBtX2d0a0J1dHRvbigwKQorICAgICwgbV9ndGtDaGVja2JveCgw
KQorICAgICwgbV9ndGtSYWRpb0J1dHRvbigwKQorICAgICwgbV9ndGtFbnRyeSgwKQorICAgICwg
bV9ndGtFZGl0YWJsZSgwKQorICAgICwgbV91bm1hcHBlZFdpbmRvdygwKQorICAgICwgbV9jb250
YWluZXIoMCkKK3sKK30KKwordm9pZCBSZW5kZXJUaGVtZUdkazo6Y2xvc2UoKQoreworfQorCit2
b2lkIFJlbmRlclRoZW1lR2RrOjphZGRJbnRyaW5zaWNNYXJnaW5zKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK3sKKyAgICAvLyBDdXQgb3V0IHRoZSBpbnRyaW5zaWMgbWFyZ2lucyBjb21wbGV0
ZWx5IGlmIHdlIGVuZCB1cCB1c2luZyBhIHNtYWxsIGZvbnQgc2l6ZQorICAgIGlmIChzdHlsZS0+
Zm9udFNpemUoKSA8IDExKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJbnRyaW5zaWMgbWFy
Z2luIHZhbHVlLgorICAgIGNvbnN0IGludCBtID0gMjsKKworICAgIC8vIEZJWE1FOiBVc2luZyB3
aWR0aC9oZWlnaHQgYWxvbmUgYW5kIG5vdCBhbHNvIGRlYWxpbmcgd2l0aCBtaW4td2lkdGgvbWF4
LXdpZHRoIGlzIGZsYXdlZC4KKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1
dG8oKSkgeworICAgICAgICBpZiAoc3R5bGUtPm1hcmdpbkxlZnQoKS5xdWlyaygpKQorICAgICAg
ICAgICAgc3R5bGUtPnNldE1hcmdpbkxlZnQoTGVuZ3RoKG0sIEZpeGVkKSk7CisgICAgICAgIGlm
IChzdHlsZS0+bWFyZ2luUmlnaHQoKS5xdWlyaygpKQorICAgICAgICAgICAgc3R5bGUtPnNldE1h
cmdpblJpZ2h0KExlbmd0aChtLCBGaXhlZCkpOworICAgIH0KKworICAgIGlmIChzdHlsZS0+aGVp
Z2h0KCkuaXNBdXRvKCkpIHsKKyAgICAgICAgaWYgKHN0eWxlLT5tYXJnaW5Ub3AoKS5xdWlyaygp
KQorICAgICAgICAgICAgc3R5bGUtPnNldE1hcmdpblRvcChMZW5ndGgobSwgRml4ZWQpKTsKKyAg
ICAgICAgaWYgKHN0eWxlLT5tYXJnaW5Cb3R0b20oKS5xdWlyaygpKQorICAgICAgICAgICAgc3R5
bGUtPnNldE1hcmdpbkJvdHRvbShMZW5ndGgobSwgRml4ZWQpKTsKKyAgICB9Cit9CisKK2Jvb2wg
UmVuZGVyVGhlbWVHZGs6OnN1cHBvcnRzRm9jdXMoRUFwcGVhcmFuY2UgYXBwZWFyYW5jZSkKK3sK
KyAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uQXBwZWFy
YW5jZToKKyAgICAgICAgY2FzZSBCdXR0b25BcHBlYXJhbmNlOgorICAgICAgICBjYXNlIFRleHRG
aWVsZEFwcGVhcmFuY2U6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK0d0a1N0YXRlVHlwZSBSZW5kZXJUaGVtZUdkazo6ZGV0ZXJtaW5lU3RhdGUoUmVuZGVy
T2JqZWN0KiBvKQoreworICAgIEd0a1N0YXRlVHlwZSByZXN1bHQgPSBHVEtfU1RBVEVfTk9STUFM
OworICAgIGlmICghaXNFbmFibGVkKG8pKQorICAgICAgICByZXN1bHQgPSBHVEtfU1RBVEVfSU5T
RU5TSVRJVkU7CisgICAgZWxzZSBpZiAoaXNQcmVzc2VkKG8pKQorICAgICAgICByZXN1bHQgPSBH
VEtfU1RBVEVfQUNUSVZFOworICAgIGVsc2UgaWYgKGlzSG92ZXJlZChvKSkKKyAgICAgICAgcmVz
dWx0ID0gR1RLX1NUQVRFX1BSRUxJR0hUOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0d0a1No
YWRvd1R5cGUgUmVuZGVyVGhlbWVHZGs6OmRldGVybWluZVNoYWRvdyhSZW5kZXJPYmplY3QqIG8p
Cit7CisgICAgcmV0dXJuIGlzQ2hlY2tlZChvKSA/IEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9X
X09VVDsKK30KKworVGhlbWVEYXRhIFJlbmRlclRoZW1lR2RrOjpnZXRUaGVtZURhdGEoUmVuZGVy
T2JqZWN0KiBvKQoreworICAgIFRoZW1lRGF0YSByZXN1bHQ7CisgICAgc3dpdGNoIChvLT5zdHls
ZSgpLT5hcHBlYXJhbmNlKCkpIHsKKyAgICAgICAgY2FzZSBQdXNoQnV0dG9uQXBwZWFyYW5jZToK
KyAgICAgICAgY2FzZSBCdXR0b25BcHBlYXJhbmNlOgorICAgICAgICAgICAgcmVzdWx0Lm1fcGFy
dCA9IEJQX0JVVFRPTjsKKyAgICAgICAgICAgIHJlc3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5lU3Rh
dGUobyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDaGVja2JveEFwcGVhcmFu
Y2U6CisgICAgICAgICAgICByZXN1bHQubV9wYXJ0ID0gQlBfQ0hFQ0tCT1g7CisgICAgICAgICAg
ICByZXN1bHQubV9zdGF0ZSA9IGRldGVybWluZVN0YXRlKG8pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUmFkaW9BcHBlYXJhbmNlOgorICAgICAgICAgICAgcmVzdWx0Lm1fcGFy
dCA9IEJQX1JBRElPOworICAgICAgICAgICAgcmVzdWx0Lm1fc3RhdGUgPSBkZXRlcm1pbmVTdGF0
ZShvKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRleHRGaWVsZEFwcGVhcmFu
Y2U6CisgICAgICAgICAgICByZXN1bHQubV9wYXJ0ID0gVEZQX1RFWFRGSUVMRDsKKyAgICAgICAg
ICAgIHJlc3VsdC5tX3N0YXRlID0gZGV0ZXJtaW5lU3RhdGUobyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBtdWNoIG1vcmU/Cisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IFJlbmRlclRoZW1lR2RrOjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dCAKK3sgCisgICAgc2V0UmFkaW9TaXplKHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZUdk
azo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIC8vIEZJWE1FOiBpcyBpdCB0
aGUgcmlnaHQgdGhpbmcgdG8gZG8/CisgICAgR3RrV2lkZ2V0KiBjaGVja2JveCA9IGd0a0NoZWNr
Ym94KCk7CisgICAgSW50UG9pbnQgcG9zID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0
LmxvY2F0aW9uKCkpOworICAgIGd0a19wYWludF9jaGVjayhjaGVja2JveC0+c3R5bGUsIGkuY29u
dGV4dC0+Z2RrRHJhd2FibGUoKSwKKyAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUo
byksIGRldGVybWluZVNoYWRvdyhvKSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCwgY2hlY2ti
b3gsICJjaGVja2J1dHRvbiIsCisgICAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVHZGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0IAoreyAKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAKKyAgICAvLyBJZiB0aGUgd2lkdGggYW5k
IGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgor
ICAgIGlmICghc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhc3R5bGUtPmhl
aWdodCgpLmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKworICAgIC8vIEZJWE1FOiAgQSBo
YXJkLWNvZGVkIHNpemUgb2YgMTMgaXMgdXNlZC4gIFRoaXMgaXMgd3JvbmcgYnV0IG5lY2Vzc2Fy
eSBmb3Igbm93LiAgSXQgbWF0Y2hlcyBGaXJlZm94LgorICAgIC8vIEF0IGRpZmZlcmVudCBEUEkg
c2V0dGluZ3Mgb24gV2luZG93cywgcXVlcnlpbmcgdGhlIHRoZW1lIGdpdmVzIHlvdSBhIGxhcmdl
ciBzaXplIHRoYXQgYWNjb3VudHMgZm9yCisgICAgLy8gdGhlIGhpZ2hlciBEUEkuICBVbnRpbCBv
dXIgZW50aXJlIGVuZ2luZSBob25vcnMgYSBEUEkgc2V0dGluZyBvdGhlciB0aGFuIDk2LCB3ZSBj
YW4ndCByZWx5IG9uIHRoZSB0aGVtZSdzCisgICAgLy8gbWV0cmljcy4KKyAgICBjb25zdCBpbnQg
ZmYgPSAxMzsKKyAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkKKyAg
ICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChmZiwgRml4ZWQpKTsKKworICAgIGlmIChzdHls
ZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGZm
LCBGaXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1lR2RrOjpwYWludFJhZGlvKFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7IAorICAgIC8vIEZJWE1FOiBpcyBpdCB0aGUgcmlnaHQgdGhpbmcgdG8gZG8/Cisg
ICAgR3RrV2lkZ2V0KiByYWRpbyA9IGd0a1JhZGlvQnV0dG9uKCk7CisgICAgSW50UG9pbnQgcG9z
ID0gaS5jb250ZXh0LT50cmFuc2xhdGVQb2ludChyZWN0LmxvY2F0aW9uKCkpOworICAgIGd0a19w
YWludF9vcHRpb24ocmFkaW8tPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxlKCksCisgICAg
ICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAor
ICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcmFkaW8sICJyYWRpb2J1dHRvbiIsCisgICAgICAg
ICAgICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lR2RrOjpwYWlu
dEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByZWN0KSAKK3sgCisgICAgLy8gRklYTUU6IHNob3VsZCB1c2UgdGhl
bWUtYXdhcmUgZHJhd2luZy4gVGhpcyBzaG91bGQgaG9ub3IgdGhlIHN0YXRlIGFzIHdlbGwKKyAg
ICBHdGtXaWRnZXQqIGJ1dHRvbiA9IGd0a0J1dHRvbigpOworICAgIEludFBvaW50IHBvcyA9IGku
Y29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKKyAgICBndGtfcGFpbnRf
Ym94KGJ1dHRvbi0+c3R5bGUsIGkuY29udGV4dC0+Z2RrRHJhd2FibGUoKSwKKyAgICAgICAgICAg
ICAgICAgIGRldGVybWluZVN0YXRlKG8pLCBkZXRlcm1pbmVTaGFkb3cobyksCisgICAgICAgICAg
ICAgICAgICBOVUxMLCBidXR0b24sICJidXR0b24iLAorICAgICAgICAgICAgICAgICAgcG9zLngo
KSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHZGs6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqIGUpIGNvbnN0IAoreyAKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOyAKK30KKworYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRUZXh0Rmll
bGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKK3sKKyAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVtZS1hd2FyZSBk
cmF3aW5nCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50
VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwg
cik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVHZGs6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQq
IGUpIGNvbnN0Cit7CisgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSk7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVHZGs6OnN5c3RlbUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikg
Y29uc3QKK3sKK30KKworR3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUdkazo6Z3RrQnV0dG9uKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fZ3RrQnV0dG9uKSB7CisgICAgICAgIG1fZ3RrQnV0dG9uID0gZ3Rr
X2J1dHRvbl9uZXcoKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihn
dGtXaW5kb3dDb250YWluZXIoKSksIG1fZ3RrQnV0dG9uKTsKKyAgICAgICAgZ3RrX3dpZGdldF9y
ZWFsaXplKG1fZ3RrQnV0dG9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9ndGtCdXR0b247Cit9
CisKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHZGs6Omd0a0NoZWNrYm94KCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fZ3RrQ2hlY2tib3gpIHsKKyAgICAgICAgbV9ndGtDaGVja2JveCA9IGd0a19jaGVj
a19idXR0b25fbmV3KCk7CisgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIo
Z3RrV2luZG93Q29udGFpbmVyKCkpLCBtX2d0a0NoZWNrYm94KTsKKyAgICAgICAgZ3RrX3dpZGdl
dF9yZWFsaXplKG1fZ3RrQ2hlY2tib3gpOworICAgIH0KKworICAgIHJldHVybiBtX2d0a0NoZWNr
Ym94OworfQorCitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR2RrOjpndGtSYWRpb0J1dHRvbigpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2d0a1JhZGlvQnV0dG9uKSB7CisgICAgICAgIG1fZ3RrUmFkaW9C
dXR0b24gPSBndGtfcmFkaW9fYnV0dG9uX25ldyhOVUxMKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUihndGtXaW5kb3dDb250YWluZXIoKSksIG1fZ3RrUmFkaW9CdXR0
b24pOworICAgICAgICBndGtfd2lkZ2V0X3JlYWxpemUobV9ndGtSYWRpb0J1dHRvbik7CisgICAg
fQorCisgICAgcmV0dXJuIG1fZ3RrUmFkaW9CdXR0b247Cit9CisKK0d0a1dpZGdldCogUmVuZGVy
VGhlbWVHZGs6Omd0a1dpbmRvd0NvbnRhaW5lcigpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbnRh
aW5lcikgeworICAgICAgICBtX3VubWFwcGVkV2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19QT1BVUCk7CisgICAgICAgIC8vIFNvbWUgR1RLIHRoZW1lcyAoaS5lLiBDbGVhcmxvb2tz
KSBkcmF3IHRoZSBidXR0b25zIGRpZmZlcmVudGx5CisgICAgICAgIC8vIChpbiBwYXJ0aWN1bGFy
LCBjYWxsIGd0a19zdHlsZV9hcHBseV9kZWZhdWx0X2JhY2tncm91bmQpIGlmIHRoZXkKKyAgICAg
ICAgLy8gYXJlIHVuYWxsb2NhdGVkIGFuZCBhcmUgY2hpbGRyZW4gb2YgYSBHdGtGaXhlZCB3aWRn
ZXQsIHdoaWNoIGlzCisgICAgICAgIC8vIGFwcGFyZW50bHkgd2hhdCBzb21lICJtYWtlIEZpcmVm
b3ggYnV0dG9ucyBsb29rIGxpa2UgR1RLIiBjb2RlCisgICAgICAgIC8vIGRvZXMuICBUbyBhdm9p
ZCB0aGlzIHVnbHkgbG9vaywgd2UgdXNlIGEgR3RrSEJveCBhcyBhIHBhcmVudCwKKyAgICAgICAg
Ly8gcmF0aGVyIHRoYW4gYSBHdGtGaXhlZC4KKyAgICAgICAgbV9jb250YWluZXIgPSBndGtfaGJv
eF9uZXcoZmFsc2UsIDApOworICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVS
KG1fdW5tYXBwZWRXaW5kb3cpLCBtX2NvbnRhaW5lcik7CisgICAgICAgIGd0a193aWRnZXRfcmVh
bGl6ZShtX3VubWFwcGVkV2luZG93KTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9jb250YWluZXI7
Cit9Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUd0ay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHdGsuY3BwCShyZXZp
c2lvbiAyNTE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZUdkay5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lR3Rr
LmgiCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgpAQCAtNjcsMTEgKzY3LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyVGhl
bWUqIHRoZW1lKCkKIHsKLSAgICBzdGF0aWMgUmVuZGVyVGhlbWVHZGsgZ2RrVGhlbWU7CisgICAg
c3RhdGljIFJlbmRlclRoZW1lR3RrIGdka1RoZW1lOwogICAgIHJldHVybiAmZ2RrVGhlbWU7CiB9
CiAKLVJlbmRlclRoZW1lR2RrOjpSZW5kZXJUaGVtZUdkaygpCitSZW5kZXJUaGVtZUd0azo6UmVu
ZGVyVGhlbWVHdGsoKQogICAgIDogbV9ndGtCdXR0b24oMCkKICAgICAsIG1fZ3RrQ2hlY2tib3go
MCkKICAgICAsIG1fZ3RrUmFkaW9CdXR0b24oMCkKQEAgLTgyLDExICs4MiwxMSBAQCBSZW5kZXJU
aGVtZUdkazo6UmVuZGVyVGhlbWVHZGsoKQogewogfQogCi12b2lkIFJlbmRlclRoZW1lR2RrOjpj
bG9zZSgpCit2b2lkIFJlbmRlclRoZW1lR3RrOjpjbG9zZSgpCiB7CiB9CiAKLXZvaWQgUmVuZGVy
VGhlbWVHZGs6OmFkZEludHJpbnNpY01hcmdpbnMoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
dm9pZCBSZW5kZXJUaGVtZUd0azo6YWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CiB7CiAgICAgLy8gQ3V0IG91dCB0aGUgaW50cmluc2ljIG1hcmdpbnMgY29tcGxl
dGVseSBpZiB3ZSBlbmQgdXAgdXNpbmcgYSBzbWFsbCBmb250IHNpemUKICAgICBpZiAoc3R5bGUt
PmZvbnRTaXplKCkgPCAxMSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFJlbmRlclRoZW1lR2Rr
OjphZGRJbnRyaW5zaWNNYXJnaW5zCiAgICAgfQogfQogCi1ib29sIFJlbmRlclRoZW1lR2RrOjpz
dXBwb3J0c0ZvY3VzKEVBcHBlYXJhbmNlIGFwcGVhcmFuY2UpCitib29sIFJlbmRlclRoZW1lR3Rr
OjpzdXBwb3J0c0ZvY3VzKEVBcHBlYXJhbmNlIGFwcGVhcmFuY2UpCiB7CiAgICAgc3dpdGNoIChh
cHBlYXJhbmNlKSB7CiAgICAgICAgIGNhc2UgUHVzaEJ1dHRvbkFwcGVhcmFuY2U6CkBAIC0xMjUs
NyArMTI1LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUdkazo6c3VwcG9ydHNGb2N1cyhFQXBwZQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAotR3RrU3RhdGVUeXBlIFJlbmRlclRoZW1lR2RrOjpkZXRlcm1p
bmVTdGF0ZShSZW5kZXJPYmplY3QqIG8pCitHdGtTdGF0ZVR5cGUgUmVuZGVyVGhlbWVHdGs6OmRl
dGVybWluZVN0YXRlKFJlbmRlck9iamVjdCogbykKIHsKICAgICBHdGtTdGF0ZVR5cGUgcmVzdWx0
ID0gR1RLX1NUQVRFX05PUk1BTDsKICAgICBpZiAoIWlzRW5hYmxlZChvKSkKQEAgLTEzNywxMiAr
MTM3LDEyIEBAIEd0a1N0YXRlVHlwZSBSZW5kZXJUaGVtZUdkazo6ZGV0ZXJtaW5lU3QKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1HdGtTaGFkb3dUeXBlIFJlbmRlclRoZW1lR2RrOjpkZXRlcm1p
bmVTaGFkb3coUmVuZGVyT2JqZWN0KiBvKQorR3RrU2hhZG93VHlwZSBSZW5kZXJUaGVtZUd0azo6
ZGV0ZXJtaW5lU2hhZG93KFJlbmRlck9iamVjdCogbykKIHsKICAgICByZXR1cm4gaXNDaGVja2Vk
KG8pID8gR1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VUOwogfQogCi1UaGVtZURhdGEgUmVu
ZGVyVGhlbWVHZGs6OmdldFRoZW1lRGF0YShSZW5kZXJPYmplY3QqIG8pCitUaGVtZURhdGEgUmVu
ZGVyVGhlbWVHdGs6OmdldFRoZW1lRGF0YShSZW5kZXJPYmplY3QqIG8pCiB7CiAgICAgVGhlbWVE
YXRhIHJlc3VsdDsKICAgICBzd2l0Y2ggKG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSkgewpAQCAt
MTcxLDEyICsxNzEsMTIgQEAgVGhlbWVEYXRhIFJlbmRlclRoZW1lR2RrOjpnZXRUaGVtZURhdGEo
UgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHZGs6OnNldENoZWNr
Ym94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0IAordm9pZCBSZW5kZXJUaGVtZUd0azo6
c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QgCiB7IAogICAgIHNldFJh
ZGlvU2l6ZShzdHlsZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50Q2hlY2tib3go
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwog
ICAgIEd0a1dpZGdldCogY2hlY2tib3ggPSBndGtDaGVja2JveCgpOwpAQCAtMTg5LDcgKzE4OSw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50Q2hlY2tib3goUmVuZGUKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHZGs6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0IAordm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0UmFkaW9TaXplKFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QgCiB7IAogICAgIG5vdEltcGxlbWVudGVkKCk7IAogICAgIC8v
IElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZl
IG5vdGhpbmcgdG8gZG8uCkBAIC0yMDksNyArMjA5LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUdkazo6
c2V0UmFkaW9TaXplKFJlbmRlcgogICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChmZiwg
Rml4ZWQpKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRSYWRpbyhSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogeyAK
ICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwogICAgIEd0a1dpZGdl
dCogcmFkaW8gPSBndGtSYWRpb0J1dHRvbigpOwpAQCAtMjIyLDcgKzIyMiw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVHZGs6OnBhaW50UmFkaW8oUmVuZGVyT2IKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpIAorYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJP
YmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkgCiB7IAogICAgIC8vIEZJ
WE1FOiBzaG91bGQgdXNlIHRoZW1lLWF3YXJlIGRyYXdpbmcuIFRoaXMgc2hvdWxkIGhvbm9yIHRo
ZSBzdGF0ZSBhcyB3ZWxsCiAgICAgR3RrV2lkZ2V0KiBidXR0b24gPSBndGtCdXR0b24oKTsKQEAg
LTIzNCwzMiArMjM0LDMyIEBAIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0dG9uKFJlbmRl
ck8KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVHZGs6OmFkanVzdFRl
eHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqIGUp
IGNvbnN0IAordm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCogZSkgY29uc3QgCiB7IAogICAgIG5v
dEltcGxlbWVudGVkKCk7IAogfQogCi1ib29sIFJlbmRlclRoZW1lR2RrOjpwYWludFRleHRGaWVs
ZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVj
dCYgcikKIHsKICAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVtZS1hd2FyZSBkcmF3aW5nCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50VGV4dEFyZWEo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKIHsKICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcik7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVHZGs6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsIFdlYkNvcmU6OkVsZW1lbnQqIGUpIGNvbnN0Cit2b2lkIFJl
bmRlclRoZW1lR3RrOjphZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBXZWJDb3JlOjpFbGVtZW50KiBlKSBjb25zdAogewogICAg
IGFkZEludHJpbnNpY01hcmdpbnMoc3R5bGUpOwogfQogCi12b2lkIFJlbmRlclRoZW1lR2RrOjpz
eXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0Cit2b2lkIFJlbmRl
clRoZW1lR3RrOjpzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0
CiB7CiB9CiAKLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHZGs6Omd0a0J1dHRvbigpIGNvbnN0CitH
dGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtCdXR0b24oKSBjb25zdAogewogICAgIGlmICgh
bV9ndGtCdXR0b24pIHsKICAgICAgICAgbV9ndGtCdXR0b24gPSBndGtfYnV0dG9uX25ldygpOwpA
QCAtMjcwLDcgKzI3MCw3IEBAIEd0a1dpZGdldCogUmVuZGVyVGhlbWVHZGs6Omd0a0J1dHRvbigp
IGMKICAgICByZXR1cm4gbV9ndGtCdXR0b247CiB9CiAKLUd0a1dpZGdldCogUmVuZGVyVGhlbWVH
ZGs6Omd0a0NoZWNrYm94KCkgY29uc3QKK0d0a1dpZGdldCogUmVuZGVyVGhlbWVHdGs6Omd0a0No
ZWNrYm94KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZ3RrQ2hlY2tib3gpIHsKICAgICAgICAgbV9n
dGtDaGVja2JveCA9IGd0a19jaGVja19idXR0b25fbmV3KCk7CkBAIC0yODEsNyArMjgxLDcgQEAg
R3RrV2lkZ2V0KiBSZW5kZXJUaGVtZUdkazo6Z3RrQ2hlY2tib3goKQogICAgIHJldHVybiBtX2d0
a0NoZWNrYm94OwogfQogCi1HdGtXaWRnZXQqIFJlbmRlclRoZW1lR2RrOjpndGtSYWRpb0J1dHRv
bigpIGNvbnN0CitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtSYWRpb0J1dHRvbigpIGNv
bnN0CiB7CiAgICAgaWYgKCFtX2d0a1JhZGlvQnV0dG9uKSB7CiAgICAgICAgIG1fZ3RrUmFkaW9C
dXR0b24gPSBndGtfcmFkaW9fYnV0dG9uX25ldyhOVUxMKTsKQEAgLTI5Miw3ICsyOTIsNyBAQCBH
dGtXaWRnZXQqIFJlbmRlclRoZW1lR2RrOjpndGtSYWRpb0J1dHRvCiAgICAgcmV0dXJuIG1fZ3Rr
UmFkaW9CdXR0b247CiB9CiAKLUd0a1dpZGdldCogUmVuZGVyVGhlbWVHZGs6Omd0a1dpbmRvd0Nv
bnRhaW5lcigpIGNvbnN0CitHdGtXaWRnZXQqIFJlbmRlclRoZW1lR3RrOjpndGtXaW5kb3dDb250
YWluZXIoKSBjb25zdAogewogICAgIGlmICghbV9jb250YWluZXIpIHsKICAgICAgICAgbV91bm1h
cHBlZFdpbmRvdyA9IGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHdGsuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUd0ay5oCShyZXZpc2lvbiAyNTE2OSkJKGZyb20gV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuaDoyNTE2OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL1JlbmRlclRoZW1lR3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcg
QEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBSZW5kZXJUaGVtZUdka19oCisjZGVmaW5lIFJlbmRlclRoZW1lR2RrX2gK
KworI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0
IFRoZW1lRGF0YSB7CisgICAgVGhlbWVEYXRhKCkgOiBtX3BhcnQoMCksIG1fc3RhdGUoMCkge30K
KworICAgIHVuc2lnbmVkIG1fcGFydDsKKyAgICB1bnNpZ25lZCBtX3N0YXRlOworfTsKKworY2xh
c3MgUmVuZGVyVGhlbWVHZGsgOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworcHVibGljOgorICAgIFJl
bmRlclRoZW1lR2RrKCk7CisKKyAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lJ3Mg
Y29udHJvbHMgYWN0dWFsbHkgY2FyZSBhYm91dCByZWRyYXdpbmcgd2hlbiBob3ZlcmVkLgorICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gU3lzdGVtIGZvbnRzLgorICAgIHZpcnR1YWwg
dm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworCitw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7Cisg
ICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
OworCisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBS
ZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7CisgICAgdmlydHVh
bCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OworCisgICAgdmly
dHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rv
ciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworCitwcml2YXRlOgorICAgIHZvaWQgYWRkSW50cmluc2ljTWFyZ2lucyhSZW5kZXJTdHlsZSop
IGNvbnN0OworICAgIHZvaWQgY2xvc2UoKTsKKworICAgIEd0a1N0YXRlVHlwZSBkZXRlcm1pbmVT
dGF0ZShSZW5kZXJPYmplY3QqKTsKKyAgICBHdGtTaGFkb3dUeXBlIGRldGVybWluZVNoYWRvdyhS
ZW5kZXJPYmplY3QqKTsKKyAgICBib29sIHN1cHBvcnRzRm9jdXMoRUFwcGVhcmFuY2UpOworCisg
ICAgVGhlbWVEYXRhIGdldFRoZW1lRGF0YShSZW5kZXJPYmplY3QqKTsKKworCisgICAgLyoKKyAg
ICAgKiBob2xkIHRoZSBzdGF0ZQorICAgICAqLworICAgIEd0a1dpZGdldCogZ3RrQnV0dG9uKCkg
Y29uc3Q7CisgICAgR3RrV2lkZ2V0KiBndGtDaGVja2JveCgpIGNvbnN0OworICAgIEd0a1dpZGdl
dCogZ3RrUmFkaW9CdXR0b24oKSBjb25zdDsKKyAgICBHdGtXaWRnZXQqIGd0a0VudHJ5KCkgY29u
c3Q7CisgICAgR3RrV2lkZ2V0KiBndGtFZGl0YWJsZSgpIGNvbnN0OworCisgICAgLyoKKyAgICAg
KiB1bm1hcHBlZCBHZGtXaW5kb3cgaGF2aW5nIGEgY29udGFpbmVyLiBUaGlzIGlzIGhvbGRpbmcg
YWxsCisgICAgICogb3VyIGZha2Ugd2lkZ2V0cworICAgICAqLworICAgIEd0a1dpZGdldCogZ3Rr
V2luZG93Q29udGFpbmVyKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgbXV0YWJsZSBHdGtXaWRn
ZXQgKm1fZ3RrQnV0dG9uOworICAgIG11dGFibGUgR3RrV2lkZ2V0ICptX2d0a0NoZWNrYm94Owor
ICAgIG11dGFibGUgR3RrV2lkZ2V0ICptX2d0a1JhZGlvQnV0dG9uOworICAgIG11dGFibGUgR3Rr
V2lkZ2V0ICptX2d0a0VudHJ5OworICAgIG11dGFibGUgR3RrV2lkZ2V0ICptX2d0a0VkaXRhYmxl
OworCisgICAgbXV0YWJsZSBHdGtXaWRnZXQgKm1fdW5tYXBwZWRXaW5kb3c7CisgICAgbXV0YWJs
ZSBHdGtXaWRnZXQgKm1fY29udGFpbmVyOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHdGsuaAkocmV2aXNpb24gMjUxNjkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw5ICs0
MCw5IEBAIHN0cnVjdCBUaGVtZURhdGEgewogICAgIHVuc2lnbmVkIG1fc3RhdGU7CiB9OwogCi1j
bGFzcyBSZW5kZXJUaGVtZUdkayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CitjbGFzcyBSZW5kZXJU
aGVtZUd0ayA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7CiBwdWJsaWM6Ci0gICAgUmVuZGVyVGhlbWVH
ZGsoKTsKKyAgICBSZW5kZXJUaGVtZUd0aygpOwogCiAgICAgLy8gQSBtZXRob2QgYXNraW5nIGlm
IHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4g
aG92ZXJlZC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1Njcm9sbFZpZXdHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1Njcm9sbFZpZXdHZGsuY3BwCShyZXZpc2lvbiAyNTE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1Njcm9sbFZpZXdHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxMiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20gCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgotCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcm9sbEJhci5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotCi0jaW5jbHVk
ZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKLQotc3RhdGljIGNvbnN0IGludCBNYWdpY0d0a1Njcm9sbENvbnN0YW50ID0gMTM7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU2Nyb2xsVmlld1Njcm9sbGJhciA6IHB1YmxpYyBQ
bGF0Zm9ybVNjcm9sbGJhciB7Ci1wdWJsaWM6Ci0gICAgU2Nyb2xsVmlld1Njcm9sbGJhcihTY3Jv
bGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUp
OwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBnZW9tZXRyeUNoYW5nZWQoKTsKLX07Ci0KLWNsYXNz
IFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlIDogcHVibGljIFNjcm9sbGJhckNsaWVudAot
ewotcHVibGljOgotICAgIFNjcm9sbFZpZXdQcml2YXRlKFNjcm9sbFZpZXcqIF92aWV3KQotICAg
ICAgICA6IHZpZXcoX3ZpZXcpCi0gICAgICAgICwgaGFzU3RhdGljQmFja2dyb3VuZChmYWxzZSkK
LSAgICAgICAgLCBzY3JvbGxiYXJzU3VwcHJlc3NlZChmYWxzZSkKLSAgICAgICAgLCB2U2Nyb2xs
YmFyTW9kZShTY3JvbGxiYXJBdXRvKQotICAgICAgICAsIGhTY3JvbGxiYXJNb2RlKFNjcm9sbGJh
ckF1dG8pCi0gICAgICAgICwgaW5VcGRhdGVTY3JvbGxiYXJzKGZhbHNlKQotICAgICAgICAsIGhv
cml6b250YWxBZGp1c3RtZW50KDApCi0gICAgICAgICwgdmVydGljYWxBZGp1c3RtZW50KDApCi0g
ICAge30KLQotICAgIH5TY3JvbGxWaWV3UHJpdmF0ZSgpCi0gICAgewotICAgICAgICBzZXRIYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKGZhbHNlKTsKLSAgICAgICAgc2V0SGFzVmVydGljYWxTY3JvbGxi
YXIoZmFsc2UpOwotCi0gICAgICAgIGlmIChob3Jpem9udGFsQWRqdXN0bWVudCkgewotICAgICAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKGhvcml6
b250YWxBZGp1c3RtZW50KSwgKGdwb2ludGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50
Q2hhbmdlZCwgdGhpcyk7Ci0gICAgICAgICAgICBnX29iamVjdF91bnJlZihob3Jpem9udGFsQWRq
dXN0bWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmVydGljYWxBZGp1c3RtZW50KSB7
Ci0gICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoR19PQkpF
Q1QodmVydGljYWxBZGp1c3RtZW50KSwgKGdwb2ludGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1
c3RtZW50Q2hhbmdlZCwgdGhpcyk7Ci0gICAgICAgICAgICBnX29iamVjdF91bnJlZih2ZXJ0aWNh
bEFkanVzdG1lbnQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdm9pZCBzY3JvbGxCYWNraW5n
U3RvcmUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpOwotIAotICAgIHZvaWQgc2V0SGFzSG9y
aXpvbnRhbFNjcm9sbGJhcihib29sIGhhc0Jhcik7Ci0gICAgdm9pZCBzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihib29sIGhhc0Jhcik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNj
cm9sbGJhciopOwotICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Owot
Ci0gICAgc3RhdGljIHZvaWQgYWRqdXN0bWVudENoYW5nZWQoR3RrQWRqdXN0bWVudCosIGdwb2lu
dGVyKTsKLQotICAgIFNjcm9sbFZpZXcqIHZpZXc7Ci0gICAgYm9vbCBoYXNTdGF0aWNCYWNrZ3Jv
dW5kOwotICAgIGJvb2wgc2Nyb2xsYmFyc1N1cHByZXNzZWQ7Ci0gICAgU2Nyb2xsYmFyTW9kZSB2
U2Nyb2xsYmFyTW9kZTsKLSAgICBTY3JvbGxiYXJNb2RlIGhTY3JvbGxiYXJNb2RlOwotICAgIFJl
ZlB0cjxTY3JvbGxWaWV3U2Nyb2xsYmFyPiB2QmFyOwotICAgIFJlZlB0cjxTY3JvbGxWaWV3U2Ny
b2xsYmFyPiBoQmFyOwotICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0OwotICAgIEludFNpemUgY29u
dGVudHNTaXplOwotICAgIEludFNpemUgdmlld1BvcnRTaXplOwotICAgIGJvb2wgaW5VcGRhdGVT
Y3JvbGxiYXJzOwotICAgIEhhc2hTZXQ8V2lkZ2V0Kj4gY2hpbGRyZW47Ci0gICAgR3RrQWRqdXN0
bWVudCogaG9yaXpvbnRhbEFkanVzdG1lbnQ7Ci0gICAgR3RrQWRqdXN0bWVudCogdmVydGljYWxB
ZGp1c3RtZW50OwotfTsKLQotU2Nyb2xsVmlld1Njcm9sbGJhcjo6U2Nyb2xsVmlld1Njcm9sbGJh
cihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24sIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUpCi0gICAgOiBQbGF0Zm9ybVNjcm9sbGJhcihj
bGllbnQsIG9yaWVudGF0aW9uLCBzaXplKQotewotfQotCi12b2lkIFNjcm9sbFZpZXdTY3JvbGxi
YXI6Omdlb21ldHJ5Q2hhbmdlZCgpCi17Ci0gICAgaWYgKCFwYXJlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgQVNTRVJUKHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKTsKLQotICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpOwotICAg
IEludFJlY3Qgd2luZG93UmVjdCA9IEludFJlY3QoZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWlu
aW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNp
emUoKSk7Ci0gICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0LngoKSwg
d2luZG93UmVjdC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQoKSB9
OwotICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShndGtXaWRnZXQoKSwgJmFsbG9jYXRpb24p
OwotfQotCi12b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzZXRIYXNIb3Jpem9u
dGFsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKQotewotICAgIGlmIChTY3JvbGxiYXI6Omhhc1BsYXRm
b3JtU2Nyb2xsYmFycygpKSB7Ci0gICAgICAgIGlmIChoYXNCYXIgJiYgIWhCYXIgJiYgIWhvcml6
b250YWxBZGp1c3RtZW50KSB7Ci0gICAgICAgICAgICBoQmFyID0gbmV3IFNjcm9sbFZpZXdTY3Jv
bGxiYXIodGhpcywgSG9yaXpvbnRhbFNjcm9sbGJhciwgUmVndWxhclNjcm9sbGJhcik7Ci0gICAg
ICAgICAgICB2aWV3LT5hZGRDaGlsZChoQmFyLmdldCgpKTsKLSAgICAgICAgfSBlbHNlIGlmICgh
aGFzQmFyICYmIGhCYXIpIHsKLSAgICAgICAgICAgIHZpZXctPnJlbW92ZUNoaWxkKGhCYXIuZ2V0
KCkpOwotICAgICAgICAgICAgaEJhciA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJv
b2wgaGFzQmFyKQotewotICAgIGlmIChTY3JvbGxiYXI6Omhhc1BsYXRmb3JtU2Nyb2xsYmFycygp
KSB7Ci0gICAgICAgIGlmIChoYXNCYXIgJiYgIXZCYXIgJiYgIXZlcnRpY2FsQWRqdXN0bWVudCkg
ewotICAgICAgICAgICAgdkJhciA9IG5ldyBTY3JvbGxWaWV3U2Nyb2xsYmFyKHRoaXMsIFZlcnRp
Y2FsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKLSAgICAgICAgICAgIHZpZXctPmFkZENo
aWxkKHZCYXIuZ2V0KCkpOwotICAgICAgICB9IGVsc2UgaWYgKCFoYXNCYXIgJiYgdkJhcikgewot
ICAgICAgICAgICAgdmlldy0+cmVtb3ZlQ2hpbGQodkJhci5nZXQoKSk7Ci0gICAgICAgICAgICB2
QmFyID0gMDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotCi12b2lkIFNjcm9sbFZpZXc6OlNjcm9s
bFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVs
dGEpCi17Ci0gICAgLy8gU2luY2Ugc2Nyb2xsaW5nIGlzIGRvdWJsZSBidWZmZXJlZCwgd2Ugd2ls
bCBiZSBibGl0dGluZyB0aGUgc2Nyb2xsIHZpZXcncyBpbnRlcnNlY3Rpb24KLSAgICAvLyB3aXRo
IHRoZSBjbGlwIHJlY3QgZXZlcnkgdGltZSB0byBrZWVwIGl0IHNtb290aC4KLSAgICBJbnRSZWN0
IGNsaXBSZWN0ID0gdmlldy0+d2luZG93Q2xpcFJlY3QoKTsKLSAgICBJbnRSZWN0IHNjcm9sbFZp
ZXdSZWN0ID0gdmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhJbnRSZWN0KDAsIDAsIHZp
ZXctPnZpc2libGVXaWR0aCgpLCB2aWV3LT52aXNpYmxlSGVpZ2h0KCkpKTsKLQotICAgIEludFJl
Y3QgdXBkYXRlUmVjdCA9IGNsaXBSZWN0OwotICAgIHVwZGF0ZVJlY3QuaW50ZXJzZWN0KHNjcm9s
bFZpZXdSZWN0KTsKLQotICAgIC8vRklYTUUgdXBkYXRlIGhlcmU/Ci0KLSAgICBpZiAoIWhhc1N0
YXRpY0JhY2tncm91bmQpIC8vIFRoZSBtYWluIGZyYW1lIGNhbiBqdXN0IGJsaXQgdGhlIFdlYlZp
ZXcgd2luZG93Ci0gICAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gYmxpdCBzdWJmcmFtZXMg
d2l0aG91dCBibGl0dGluZyBvdmVybGFwcGluZyBjb250ZW50Ci0gICAgICAgdmlldy0+c2Nyb2xs
QmFja2luZ1N0b3JlKC1zY3JvbGxEZWx0YS53aWR0aCgpLCAtc2Nyb2xsRGVsdGEuaGVpZ2h0KCks
IHNjcm9sbFZpZXdSZWN0LCBjbGlwUmVjdCk7Ci0gICAgZWxzZSAgewotICAgICAgIC8vIFdlIG5l
ZWQgdG8gZ28gYWhlYWQgYW5kIHJlcGFpbnQgdGhlIGVudGlyZSBiYWNraW5nIHN0b3JlLiAgRG8g
aXQgbm93IGJlZm9yZSBtb3ZpbmcgdGhlCi0gICAgICAgLy8gcGx1Z2lucy4KLSAgICAgICB2aWV3
LT5hZGRUb0RpcnR5UmVnaW9uKHVwZGF0ZVJlY3QpOwotICAgICAgIHZpZXctPnVwZGF0ZUJhY2tp
bmdTdG9yZSgpOwotICAgIH0KLQotICAgIHZpZXctPmdlb21ldHJ5Q2hhbmdlZCgpOwotCi0gICAg
Ly8gTm93IHVwZGF0ZSB0aGUgd2luZG93ICh3aGljaCBzaG91bGQgZG8gbm90aGluZyBidXQgYSBi
bGl0IG9mIHRoZSBiYWNraW5nIHN0b3JlJ3MgdXBkYXRlUmVjdCBhbmQgc28gc2hvdWxkCi0gICAg
Ly8gYmUgdmVyeSBmYXN0KS4KLSAgICB2aWV3LT51cGRhdGUoKTsKLX0KLQotdm9pZCBTY3JvbGxW
aWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQoR3RrQWRqdXN0bWVudCog
YWRqdXN0bWVudCwgZ3BvaW50ZXIgX3RoYXQpCi17Ci0gICAgU2Nyb2xsVmlld1ByaXZhdGUqIHRo
YXQgPSByZWludGVycHJldF9jYXN0PFNjcm9sbFZpZXdQcml2YXRlKj4oX3RoYXQpOwotCi0gICAg
Ly8gRmlndXJlIG91dCBpZiB3ZSByZWFsbHkgbW92ZWQuCi0gICAgSW50U2l6ZSBuZXdPZmZzZXQg
PSB0aGF0LT5zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKGFkanVzdG1lbnQgPT0gdGhhdC0+aG9yaXpv
bnRhbEFkanVzdG1lbnQpCi0gICAgICAgIG5ld09mZnNldC5zZXRXaWR0aChzdGF0aWNfY2FzdDxp
bnQ+KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSkpOwotICAgIGVsc2UgaWYg
KGFkanVzdG1lbnQgPT0gdGhhdC0+dmVydGljYWxBZGp1c3RtZW50KQotICAgICAgICBuZXdPZmZz
ZXQuc2V0SGVpZ2h0KHN0YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGFk
anVzdG1lbnQpKSk7Ci0KLSAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gbmV3T2Zmc2V0IC0gdGhh
dC0+c2Nyb2xsT2Zmc2V0OwotICAgIGlmIChzY3JvbGxEZWx0YSA9PSBJbnRTaXplKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICB0aGF0LT5zY3JvbGxPZmZzZXQgPSBuZXdPZmZzZXQ7Ci0KLSAgICBp
ZiAodGhhdC0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRo
YXQtPnNjcm9sbEJhY2tpbmdTdG9yZShzY3JvbGxEZWx0YSk7Ci0gICAgc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4odGhhdC0+dmlldyktPmZyYW1lKCktPnNlbmRTY3JvbGxFdmVudCgpOwotfQotCi12
b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
KiBiYXIpCi17Ci0gICAgLy8gRmlndXJlIG91dCBpZiB3ZSByZWFsbHkgbW92ZWQuCi0gICAgSW50
U2l6ZSBuZXdPZmZzZXQgPSBzY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKGJhcikgewotICAgICAgICBp
ZiAoYmFyID09IGhCYXIpCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoYmFyLT52YWx1
ZSgpKTsKLSAgICAgICAgZWxzZSBpZiAoYmFyID09IHZCYXIpCi0gICAgICAgICAgICBuZXdPZmZz
ZXQuc2V0SGVpZ2h0KGJhci0+dmFsdWUoKSk7Ci0gICAgfQotICAgIEludFNpemUgc2Nyb2xsRGVs
dGEgPSBuZXdPZmZzZXQgLSBzY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKHNjcm9sbERlbHRhID09IElu
dFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHNjcm9sbE9mZnNldCA9IG5ld09mZnNldDsK
LQotICAgIGlmIChzY3JvbGxiYXJzU3VwcHJlc3NlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKLSAgICBzdGF0aWNfY2FzdDxGcmFtZVZp
ZXcqPih2aWV3KS0+ZnJhbWUoKS0+c2VuZFNjcm9sbEV2ZW50KCk7Ci19Ci0KLUludFJlY3QgU2Ny
b2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odmlldyktPndpbmRvd0NsaXBS
ZWN0KGZhbHNlKTsKLX0KLQotU2Nyb2xsVmlldzo6U2Nyb2xsVmlldygpCi0gICAgOiBtX2RhdGEo
bmV3IFNjcm9sbFZpZXdQcml2YXRlKHRoaXMpKQote30KLQotU2Nyb2xsVmlldzo6flNjcm9sbFZp
ZXcoKQotewotICAgIGRlbGV0ZSBtX2RhdGE7Ci19Ci0KLS8qICAKLSAqIFRoZSBmb2xsb3dpbmcg
aXMgYXNzdW1lZDoKLSAqICAgKGhhZGogJiYgdmFkaikgfHwgKCFoYWRqICYmICF2YWRqKQotICov
IAotdm9pZCBTY3JvbGxWaWV3OjpzZXRHdGtBZGp1c3RtZW50cyhHdGtBZGp1c3RtZW50KiBoYWRq
LCBHdGtBZGp1c3RtZW50KiB2YWRqKQotewotICAgIEFTU0VSVCghaGFkaiA9PSAhdmFkaik7Ci0K
LSAgICBpZiAobV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudCkgewotICAgICAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoR19PQkpFQ1QobV9kYXRhLT5ob3Jpem9udGFs
QWRqdXN0bWVudCksIChncG9pbnRlcilTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5n
ZWQsIG1fZGF0YSk7Ci0gICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVu
YyhHX09CSkVDVChtX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCksIChncG9pbnRlcilTY3JvbGxW
aWV3UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQsIG1fZGF0YSk7Ci0gICAgICAgIGdfb2JqZWN0
X3VucmVmKG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpOwotICAgICAgICBnX29iamVjdF91
bnJlZihtX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCk7Ci0gICAgfQotCi0gICAgbV9kYXRhLT5o
b3Jpem9udGFsQWRqdXN0bWVudCA9IGhhZGo7Ci0gICAgbV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1l
bnQgPSB2YWRqOwotCi0gICAgaWYgKG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpIHsKLSAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50LCAidmFs
dWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soU2Nyb2xsVmlld1ByaXZhdGU6OmFkanVzdG1lbnRDaGFu
Z2VkKSwgbV9kYXRhKTsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2RhdGEtPnZlcnRpY2Fs
QWRqdXN0bWVudCwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLKFNjcm9sbFZpZXdQcml2YXRl
OjphZGp1c3RtZW50Q2hhbmdlZCksIG1fZGF0YSk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICog
ZGlzYWJsZSB0aGUgc2Nyb2xsYmFycyAoaWYgd2UgaGF2ZSBhbnkpIGFzIHRoZSBHdGtBZGp1c3Rt
ZW50IG92ZXIKLSAgICAgICAgICovCi0gICAgICAgIG1fZGF0YS0+c2V0SGFzVmVydGljYWxTY3Jv
bGxiYXIoZmFsc2UpOwotICAgICAgICBtX2RhdGEtPnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIo
ZmFsc2UpOwotCi0gICAgICAgIGdfb2JqZWN0X3JlZihtX2RhdGEtPmhvcml6b250YWxBZGp1c3Rt
ZW50KTsKLSAgICAgICAgZ3RrX29iamVjdF9zaW5rKEdUS19PQkpFQ1QobV9kYXRhLT5ob3Jpem9u
dGFsQWRqdXN0bWVudCkpOwotICAgICAgICBnX29iamVjdF9yZWYobV9kYXRhLT52ZXJ0aWNhbEFk
anVzdG1lbnQpOwotICAgICAgICBndGtfb2JqZWN0X3NpbmsoR1RLX09CSkVDVChtX2RhdGEtPnZl
cnRpY2FsQWRqdXN0bWVudCkpOwotICAgIH0KLQotICAgIHVwZGF0ZVNjcm9sbGJhcnMobV9kYXRh
LT5zY3JvbGxPZmZzZXQpOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZUNvbnRlbnRzKGNv
bnN0IEludFJlY3QmIHVwZGF0ZVJlY3QsIGJvb2wgbm93KQotewotICAgIGlmICh1cGRhdGVSZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSW50UG9pbnQgd2luZG93UG9pbnQg
PSBjb250ZW50c1RvV2luZG93KHVwZGF0ZVJlY3QubG9jYXRpb24oKSk7Ci0gICAgSW50UmVjdCBj
b250YWluaW5nV2luZG93UmVjdCA9IHVwZGF0ZVJlY3Q7Ci0gICAgY29udGFpbmluZ1dpbmRvd1Jl
Y3Quc2V0TG9jYXRpb24od2luZG93UG9pbnQpOwotCi0gICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7
IGNvbnRhaW5pbmdXaW5kb3dSZWN0LngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGFpbmluZ1dpbmRvd1JlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlu
aW5nV2luZG93UmVjdC53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlu
aW5nV2luZG93UmVjdC5oZWlnaHQoKSB9OwotICAgIEdka1dpbmRvdyogd2luZG93ID0gR1RLX1dJ
REdFVChjb250YWluaW5nV2luZG93KCkpLT53aW5kb3c7Ci0KLSAgICBpZiAod2luZG93KQotICAg
ICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKLQot
ICAgIC8vIENhY2hlIHRoZSBkaXJ0eSBzcG90LgotICAgIGFkZFRvRGlydHlSZWdpb24oY29udGFp
bmluZ1dpbmRvd1JlY3QpOwotCi0gICAgaWYgKG5vdyAmJiB3aW5kb3cpCi0gICAgICAgIGdka193
aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmll
dzo6dXBkYXRlKCkKLXsKLSAgICBBU1NFUlQoY29udGFpbmluZ1dpbmRvdygpKTsKLQotICAgIEdk
a1JlY3RhbmdsZSByZWN0ID0geyAwLCAwLCBtX2RhdGEtPmNvbnRlbnRzU2l6ZS53aWR0aCgpLCBt
X2RhdGEtPmNvbnRlbnRzU2l6ZS5oZWlnaHQoKSB9OwotICAgIGdka193aW5kb3dfaW52YWxpZGF0
ZV9yZWN0KEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKS0+d2luZG93LCAmcmVjdCwgdHJ1
ZSk7Ci19Ci0KLWludCBTY3JvbGxWaWV3Ojp2aXNpYmxlV2lkdGgoKSBjb25zdAotewotICAgIHJl
dHVybiB3aWR0aCgpIC0gKG1fZGF0YS0+dkJhciA/IG1fZGF0YS0+dkJhci0+d2lkdGgoKSA6IDAp
OwotfQotCi1pbnQgU2Nyb2xsVmlldzo6dmlzaWJsZUhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGhlaWdodCgpIC0gKG1fZGF0YS0+aEJhciA/IG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkgOiAw
KTsKLX0KLQotLy8gUmVnaW9uIG9mIHRoZSBjb250ZW50IGN1cnJlbnRseSB2aXNpYmxlIGluIHRo
ZSB2aWV3cG9ydCBpbiB0aGUgY29udGVudCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi1GbG9h
dFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gRmxvYXRSZWN0KGNvbnRlbnRzWCgpLCBjb250ZW50c1koKSwgdmlzaWJsZVdpZHRoKCksIHZp
c2libGVIZWlnaHQoKSk7Ci19Ci0KLUZsb2F0UmVjdCBTY3JvbGxWaWV3Ojp2aXNpYmxlQ29udGVu
dFJlY3RDb25zaWRlcmluZ0V4dGVybmFsU2Nyb2xsZXJzKCkgY29uc3QKLXsKLSAgICAvLyBleHRl
cm5hbCBzY3JvbGxlcnMgbm90IHN1cHBvcnRlZCBmb3Igbm93Ci0gICAgcmV0dXJuIHZpc2libGVD
b250ZW50UmVjdCgpOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OnNldENvbnRlbnRzUG9zKGludCBu
ZXdYLCBpbnQgbmV3WSkKLXsKLSAgICBpbnQgZHggPSBuZXdYIC0gY29udGVudHNYKCk7Ci0gICAg
aW50IGR5ID0gbmV3WSAtIGNvbnRlbnRzWSgpOwotICAgIHNjcm9sbEJ5KGR4LCBkeSk7Ci19Ci0K
LXZvaWQgU2Nyb2xsVmlldzo6cmVzaXplQ29udGVudHMoaW50IHcsIGludCBoKQotewotICAgIElu
dFNpemUgbmV3U2l6ZSh3LCBoKTsKLSAgICBpZiAobV9kYXRhLT5jb250ZW50c1NpemUgPT0gbmV3
U2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5jb250ZW50c1NpemUgPSBuZXdT
aXplOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMobV9kYXRhLT5zY3JvbGxPZmZzZXQpOwotfQotCi1p
bnQgU2Nyb2xsVmlldzo6Y29udGVudHNYKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nyb2xsT2Zm
c2V0KCkud2lkdGgoKTsKLX0KLQotaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzWSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpLmhlaWdodCgpOwotfQotCi1pbnQgU2Nyb2xsVmll
dzo6Y29udGVudHNXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+Y29udGVudHNT
aXplLndpZHRoKCk7Ci19Ci0KLWludCBTY3JvbGxWaWV3Ojpjb250ZW50c0hlaWdodCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+Y29udGVudHNTaXplLmhlaWdodCgpOwotfQotCi1JbnRT
aXplIFNjcm9sbFZpZXc6OnNjcm9sbE9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0
YS0+c2Nyb2xsT2Zmc2V0OwotfQotCi1JbnRTaXplIFNjcm9sbFZpZXc6Om1heGltdW1TY3JvbGwo
KSBjb25zdAotewotICAgIEludFNpemUgZGVsdGEgPSAobV9kYXRhLT5jb250ZW50c1NpemUgLSBJ
bnRTaXplKHZpc2libGVXaWR0aCgpLCB2aXNpYmxlSGVpZ2h0KCkpKSAtIHNjcm9sbE9mZnNldCgp
OwotICAgIGRlbHRhLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKLSAgICByZXR1cm4gZGVsdGE7Ci19
Ci0KLXZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQnkoaW50IGR4LCBpbnQgZHkpCi17Ci0gICAgSW50
U2l6ZSBzY3JvbGxPZmZzZXQgPSBtX2RhdGEtPnNjcm9sbE9mZnNldDsKLSAgICBJbnRTaXplIG5l
d1Njcm9sbE9mZnNldCA9IHNjcm9sbE9mZnNldCArIEludFNpemUoZHgsIGR5KS5zaHJ1bmtUbyht
YXhpbXVtU2Nyb2xsKCkpOwotICAgIG5ld1Njcm9sbE9mZnNldC5jbGFtcE5lZ2F0aXZlVG9aZXJv
KCk7Ci0gCi0gICAgaWYgKG5ld1Njcm9sbE9mZnNldCA9PSBzY3JvbGxPZmZzZXQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIHVwZGF0ZVNjcm9sbGJhcnMobmV3U2Nyb2xsT2Zmc2V0KTsKLX0KLQot
U2Nyb2xsYmFyTW9kZSBTY3JvbGxWaWV3OjpoU2Nyb2xsYmFyTW9kZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fZGF0YS0+aFNjcm9sbGJhck1vZGU7Ci19Ci0KLVNjcm9sbGJhck1vZGUgU2Nyb2xs
Vmlldzo6dlNjcm9sbGJhck1vZGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPnZTY3Jv
bGxiYXJNb2RlOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OnN1cHByZXNzU2Nyb2xsYmFycyhib29s
IHN1cHByZXNzZWQsIGJvb2wgcmVwYWludE9uU3VwcHJlc3MpCi17Ci0gICAgbV9kYXRhLT5zY3Jv
bGxiYXJzU3VwcHJlc3NlZCA9IHN1cHByZXNzZWQ7Ci0gICAgaWYgKHJlcGFpbnRPblN1cHByZXNz
KQotICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKLX0KLQot
dm9pZCBTY3JvbGxWaWV3OjpzZXRIU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJNb2RlIG5ld01vZGUp
Ci17Ci0gICAgaWYgKG1fZGF0YS0+aFNjcm9sbGJhck1vZGUgIT0gbmV3TW9kZSkgewotICAgICAg
ICBtX2RhdGEtPmhTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsKLSAgICAgICAgdXBkYXRlU2Nyb2xs
YmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7Ci0gICAgfQotfQotCi12b2lkIFNjcm9sbFZpZXc6
OnNldFZTY3JvbGxiYXJNb2RlKFNjcm9sbGJhck1vZGUgbmV3TW9kZSkKLXsKLSAgICBpZiAobV9k
YXRhLT52U2Nyb2xsYmFyTW9kZSAhPSBuZXdNb2RlKSB7Ci0gICAgICAgIG1fZGF0YS0+dlNjcm9s
bGJhck1vZGUgPSBuZXdNb2RlOwotICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Ny
b2xsT2Zmc2V0KTsKLSAgICB9Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyc01v
ZGUoU2Nyb2xsYmFyTW9kZSBuZXdNb2RlKQotewotICAgIG1fZGF0YS0+aFNjcm9sbGJhck1vZGUg
PSBtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsKLSAgICB1cGRhdGVTY3JvbGxiYXJz
KG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKLX0KLQotdm9pZCBTY3JvbGxWaWV3OjpzZXRTdGF0aWNC
YWNrZ3JvdW5kKGJvb2wgZmxhZykKLXsKLSAgICBtX2RhdGEtPmhhc1N0YXRpY0JhY2tncm91bmQg
PSBmbGFnOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50
UmVjdCYgbmV3R2VvbWV0cnkpCi17Ci0gICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOwotICAgIElu
dFJlY3Qgb2xkR2VvbWV0cnkgPSBmcmFtZUdlb21ldHJ5KCk7Ci0gICAgV2lkZ2V0OjpzZXRGcmFt
ZUdlb21ldHJ5KG5ld0dlb21ldHJ5KTsKLQotICAgIGlmIChuZXdHZW9tZXRyeSA9PSBvbGRHZW9t
ZXRyeSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChuZXdHZW9tZXRyeS53aWR0aCgpICE9IG9s
ZEdlb21ldHJ5LndpZHRoKCkgfHwgbmV3R2VvbWV0cnkuaGVpZ2h0KCkgIT0gb2xkR2VvbWV0cnku
aGVpZ2h0KCkpIHsKLSAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNl
dCk7Ci0gICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5zZXROZWVkc0xheW91
dCgpOwotICAgIH0KLQotICAgIGdlb21ldHJ5Q2hhbmdlZCgpOwotfQotCi12b2lkIFNjcm9sbFZp
ZXc6OmFkZENoaWxkKFdpZGdldCogY2hpbGQpCi17IAotICAgIGNoaWxkLT5zZXRQYXJlbnQodGhp
cyk7Ci0gICAgY2hpbGQtPnNldENvbnRhaW5pbmdXaW5kb3coY29udGFpbmluZ1dpbmRvdygpKTsK
LSAgICBtX2RhdGEtPmNoaWxkcmVuLmFkZChjaGlsZCk7Ci0KLSAgICBpZiAoY2hpbGQtPmd0a1dp
ZGdldCgpKQotICAgICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGNvbnRhaW5p
bmdXaW5kb3coKSksIGNoaWxkLT5ndGtXaWRnZXQoKSk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6
cmVtb3ZlQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKLXsKLSAgICBjaGlsZC0+c2V0UGFyZW50KDApOwot
ICAgIG1fZGF0YS0+Y2hpbGRyZW4ucmVtb3ZlKGNoaWxkKTsKLQotICAgIGlmIChjaGlsZC0+Z3Rr
V2lkZ2V0KCkgJiYgR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpID09IEdUS19XSURHRVQo
Y2hpbGQtPmd0a1dpZGdldCgpKS0+cGFyZW50KQotICAgICAgICBndGtfY29udGFpbmVyX3JlbW92
ZShHVEtfQ09OVEFJTkVSKGNvbnRhaW5pbmdXaW5kb3coKSksIGNoaWxkLT5ndGtXaWRnZXQoKSk7
Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3UmVjdXJzaXZlbHkoY29u
c3QgSW50UmVjdCYgcikKLXsKLSAgICBJbnRQb2ludCBwKG1heCgwLCByLngoKSksIG1heCgwLCBy
LnkoKSkpOwotICAgIFNjcm9sbFZpZXcqIHZpZXcgPSB0aGlzOwotICAgIHdoaWxlICh2aWV3KSB7
Ci0gICAgICAgIHZpZXctPnNldENvbnRlbnRzUG9zKHAueCgpLCBwLnkoKSk7Ci0gICAgICAgIHAu
bW92ZSh2aWV3LT54KCkgLSB2aWV3LT5zY3JvbGxPZmZzZXQoKS53aWR0aCgpLCB2aWV3LT55KCkg
LSB2aWV3LT5zY3JvbGxPZmZzZXQoKS5oZWlnaHQoKSk7Ci0gICAgICAgIHZpZXcgPSBzdGF0aWNf
Y2FzdDxTY3JvbGxWaWV3Kj4odmlldy0+cGFyZW50KCkpOwotICAgIH0KLX0KLQotYm9vbCBTY3Jv
bGxWaWV3OjppbldpbmRvdygpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hl
ZWxFdmVudCYgZSkKLXsKLSAgICAvLyBEZXRlcm1pbmUgaG93IG11Y2ggd2Ugd2FudCB0byBzY3Jv
bGwuICBJZiB3ZSBjYW4gbW92ZSBhdCBhbGwsIHdlIHdpbGwgYWNjZXB0IHRoZSBldmVudC4KLSAg
ICBJbnRTaXplIG1heFNjcm9sbERlbHRhID0gbWF4aW11bVNjcm9sbCgpOwotICAgIGlmICgoZS5k
ZWx0YVgoKSA8IDAgJiYgbWF4U2Nyb2xsRGVsdGEud2lkdGgoKSA+IDApIHx8Ci0gICAgICAgIChl
LmRlbHRhWCgpID4gMCAmJiBzY3JvbGxPZmZzZXQoKS53aWR0aCgpID4gMCkgfHwKLSAgICAgICAg
KGUuZGVsdGFZKCkgPCAwICYmIG1heFNjcm9sbERlbHRhLmhlaWdodCgpID4gMCkgfHwKLSAgICAg
ICAgKGUuZGVsdGFZKCkgPiAwICYmIHNjcm9sbE9mZnNldCgpLmhlaWdodCgpID4gMCkpCi0gICAg
ICAgIGUuYWNjZXB0KCk7Ci0KLSAgICBzY3JvbGxCeShlLmRlbHRhWCgpICogTElORV9TVEVQLCBl
LmRlbHRhWSgpICogTElORV9TVEVQKTsKLX0KLQotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3Jv
bGxiYXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpCi17Ci0gICAgLy8gRG9uJ3QgYWxs
b3cgcmUtZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgotICAgIGlmIChtX2RhdGEtPmluVXBk
YXRlU2Nyb2xsYmFycykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFRoaXMgY29k
ZSBpcyBoZXJlIHNvIHdlIGRvbid0IGhhdmUgdG8gZm9yayBGcmFtZVZpZXcuaC8uY3BwLgotICAg
IC8vIEluIHRoZSBlbmQsIEZyYW1lVmlldyBzaG91bGQganVzdCBtZXJnZSB3aXRoIFNjcm9sbFZp
ZXcuCi0gICAgaWYgKHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMpLT5mcmFtZSgp
LT5wcm9oaWJpdHNTY3JvbGxpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLT5p
blVwZGF0ZVNjcm9sbGJhcnMgPSB0cnVlOwotCi0gICAgYm9vbCBoYXNWZXJ0aWNhbFNjcm9sbGJh
ciA9IG1fZGF0YS0+dkJhcjsKLSAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBtX2Rh
dGEtPmhCYXI7Ci0gICAgYm9vbCBvbGRIYXNWZXJ0aWNhbCA9IGhhc1ZlcnRpY2FsU2Nyb2xsYmFy
OwotICAgIGJvb2wgb2xkSGFzSG9yaXpvbnRhbCA9IGhhc0hvcml6b250YWxTY3JvbGxiYXI7Ci0g
ICAgU2Nyb2xsYmFyTW9kZSBoU2Nyb2xsID0gbV9kYXRhLT5oU2Nyb2xsYmFyTW9kZTsKLSAgICBT
Y3JvbGxiYXJNb2RlIHZTY3JvbGwgPSBtX2RhdGEtPnZTY3JvbGxiYXJNb2RlOwotCi0gICAgY29u
c3QgaW50IGNWZXJ0aWNhbFdpZHRoID0gUGxhdGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoKTsKLSAgICBjb25zdCBpbnQgY0hvcml6b250YWxIZWlnaHQgPSBQbGF0Zm9ybVNj
cm9sbGJhcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOwotCi0gICAgZm9yIChpbnQgcGFz
cyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKLSAgICAgICAgYm9vbCBzY3JvbGxzVmVydGljYWxs
eTsKLSAgICAgICAgYm9vbCBzY3JvbGxzSG9yaXpvbnRhbGx5OwotCi0gICAgICAgIGlmICghbV9k
YXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvIHx8
IHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykpIHsKLSAgICAgICAgICAgIC8vIERvIGEgbGF5b3V0
IGlmIHBlbmRpbmcgYmVmb3JlIGNoZWNraW5nIGlmIHNjcm9sbGJhcnMgYXJlIG5lZWRlZC4KLSAg
ICAgICAgICAgIGlmIChoYXNWZXJ0aWNhbFNjcm9sbGJhciAhPSBvbGRIYXNWZXJ0aWNhbCB8fCBo
YXNIb3Jpem9udGFsU2Nyb2xsYmFyICE9IG9sZEhhc0hvcml6b250YWwpCi0gICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcyktPmxheW91dCgpOwotICAgICAgICAgICAg
IAotICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJB
bHdheXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50c0hlaWdodCgp
ID4gaGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYgKHNjcm9sbHNWZXJ0aWNhbGx5KQotICAgICAg
ICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdh
eXNPbikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50c1dpZHRoKCkgKyBj
VmVydGljYWxXaWR0aCA+IHdpZHRoKCkpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgc2Nyb2xsc0hvcml6b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09u
KSB8fCAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzV2lkdGgoKSA+IHdpZHRo
KCkpOwotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxzSG9yaXpvbnRhbGx5KQotICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5
c09uKSB8fCAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzSGVpZ2h0KCkgKyBj
SG9yaXpvbnRhbEhlaWdodCA+IGhlaWdodCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9s
bCA9PSBTY3JvbGxiYXJBdXRvKSA/IGhhc0hvcml6b250YWxTY3JvbGxiYXIgOiAoaFNjcm9sbCA9
PSBTY3JvbGxiYXJBbHdheXNPbik7Ci0gICAgICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2
U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pID8gaGFzVmVydGljYWxTY3JvbGxiYXIgOiAodlNjcm9s
bCA9PSBTY3JvbGxiYXJBbHdheXNPbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChoYXNWZXJ0aWNhbFNjcm9sbGJhciAhPSBzY3JvbGxzVmVydGljYWxseSkgewotICAgICAgICAg
ICAgbV9kYXRhLT5zZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxzVmVydGljYWxseSk7Ci0g
ICAgICAgICAgICBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbHNWZXJ0aWNhbGx5OwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIgIT0gc2Nyb2xsc0hv
cml6b250YWxseSkgewotICAgICAgICAgICAgbV9kYXRhLT5zZXRIYXNIb3Jpem9udGFsU2Nyb2xs
YmFyKHNjcm9sbHNIb3Jpem9udGFsbHkpOwotICAgICAgICAgICAgaGFzSG9yaXpvbnRhbFNjcm9s
bGJhciA9IHNjcm9sbHNIb3Jpem9udGFsbHk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBT
ZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCi0gICAgSW50U2l6ZSBt
YXhTY3JvbGxQb3NpdGlvbihjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSwgY29udGVu
dHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSk7Ci0gICAgSW50U2l6ZSBzY3JvbGwgPSBkZXNp
cmVkT2Zmc2V0LnNocnVua1RvKG1heFNjcm9sbFBvc2l0aW9uKTsKLSAgICBzY3JvbGwuY2xhbXBO
ZWdhdGl2ZVRvWmVybygpOwotCi0gICAgaWYgKG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQp
IHsKLSAgICAgICAgbV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudC0+cGFnZV9zaXplID0gdmlz
aWJsZVdpZHRoKCk7Ci0gICAgICAgIG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQtPnN0ZXBf
aW5jcmVtZW50ID0gTWFnaWNHdGtTY3JvbGxDb25zdGFudDsKLSAgICAgICAgbV9kYXRhLT5ob3Jp
em9udGFsQWRqdXN0bWVudC0+dXBwZXIgPSBjb250ZW50c1dpZHRoKCk7Ci0gICAgICAgIGd0a19h
ZGp1c3RtZW50X2NoYW5nZWQobV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudCk7Ci0KLSAgICAg
ICAgaWYgKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0LndpZHRoKCkgIT0gc2Nyb2xsLndpZHRoKCkpIHsK
LSAgICAgICAgICAgIG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQtPnZhbHVlID0gc2Nyb2xs
LndpZHRoKCk7Ci0gICAgICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKG1fZGF0
YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpOwotICAgICAgICB9IAotICAgIH0gZWxzZSBpZiAobV9k
YXRhLT5oQmFyKSB7Ci0gICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZpc2libGVXaWR0aCgpOwot
ICAgICAgICBtX2RhdGEtPmhCYXItPnNldEVuYWJsZWQoY29udGVudHNXaWR0aCgpID4gY2xpZW50
V2lkdGgpOwotICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50V2lkdGggLSBQQUdFX0tFRVAp
OwotICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudFdpZHRoOwotICAg
ICAgICBJbnRSZWN0IG9sZFJlY3QobV9kYXRhLT5oQmFyLT5mcmFtZUdlb21ldHJ5KCkpOwotICAg
ICAgICBJbnRSZWN0IGhCYXJSZWN0ID0gSW50UmVjdCgwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV9kYXRhLT52QmFyID8gbV9k
YXRhLT52QmFyLT53aWR0aCgpIDogMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkpOwotICAgICAgICBtX2RhdGEtPmhCYXItPnNldFJl
Y3QoaEJhclJlY3QpOwotICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQg
JiYgb2xkUmVjdCAhPSBtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKSkKLSAgICAgICAgICAg
IG1fZGF0YS0+aEJhci0+aW52YWxpZGF0ZSgpOwotCi0gICAgICAgIGlmIChtX2RhdGEtPnNjcm9s
bGJhcnNTdXBwcmVzc2VkKQotICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdXBwcmVzc0lu
dmFsaWRhdGlvbih0cnVlKTsKLSAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdGVwcyhMSU5FX1NU
RVAsIHBhZ2VTdGVwKTsKLSAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVu
dFdpZHRoLCBjb250ZW50c1dpZHRoKCkpOwotICAgICAgICBtX2RhdGEtPmhCYXItPnNldFZhbHVl
KHNjcm9sbC53aWR0aCgpKTsKLSAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNz
ZWQpCi0gICAgICAgICAgICBtX2RhdGEtPmhCYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZh
bHNlKTsgCi0gICAgfSAKLQotICAgIGlmIChtX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCkgewot
ICAgICAgICBtX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudC0+cGFnZV9zaXplID0gdmlzaWJsZUhl
aWdodCgpOwotICAgICAgICBtX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudC0+c3RlcF9pbmNyZW1l
bnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OwotICAgICAgICBtX2RhdGEtPnZlcnRpY2FsQWRq
dXN0bWVudC0+dXBwZXIgPSBjb250ZW50c0hlaWdodCgpOwotICAgICAgICBndGtfYWRqdXN0bWVu
dF9jaGFuZ2VkKG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKLQotICAgICAgICBpZiAobV9k
YXRhLT5zY3JvbGxPZmZzZXQuaGVpZ2h0KCkgIT0gc2Nyb2xsLmhlaWdodCgpKSB7Ci0gICAgICAg
ICAgICBtX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudC0+dmFsdWUgPSBzY3JvbGwuaGVpZ2h0KCk7
Ci0gICAgICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKG1fZGF0YS0+dmVydGlj
YWxBZGp1c3RtZW50KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9kYXRhLT52QmFyKSB7
Ci0gICAgICAgIGludCBjbGllbnRIZWlnaHQgPSB2aXNpYmxlSGVpZ2h0KCk7Ci0gICAgICAgIG1f
ZGF0YS0+dkJhci0+c2V0RW5hYmxlZChjb250ZW50c0hlaWdodCgpID4gY2xpZW50SGVpZ2h0KTsK
LSAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudEhlaWdodCAtIFBBR0VfS0VFUCk7Ci0gICAg
ICAgIGlmIChwYWdlU3RlcCA8IDApIHBhZ2VTdGVwID0gY2xpZW50SGVpZ2h0OwotICAgICAgICBJ
bnRSZWN0IG9sZFJlY3QobV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkpOwotICAgICAgICBJ
bnRSZWN0IHZCYXJSZWN0ID0gSW50UmVjdCh3aWR0aCgpIC0gbV9kYXRhLT52QmFyLT53aWR0aCgp
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT52QmFyLT53aWR0aCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIChtX2RhdGEtPmhCYXIgPyBtX2RhdGEt
PmhCYXItPmhlaWdodCgpIDogMCkpOwotICAgICAgICBtX2RhdGEtPnZCYXItPnNldFJlY3QodkJh
clJlY3QpOwotICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xk
UmVjdCAhPSBtX2RhdGEtPnZCYXItPmZyYW1lR2VvbWV0cnkoKSkKLSAgICAgICAgICAgIG1fZGF0
YS0+dkJhci0+aW52YWxpZGF0ZSgpOwotCi0gICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNT
dXBwcmVzc2VkKQotICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRTdXBwcmVzc0ludmFsaWRh
dGlvbih0cnVlKTsKLSAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRTdGVwcyhMSU5FX1NURVAsIHBh
Z2VTdGVwKTsKLSAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdo
dCwgY29udGVudHNIZWlnaHQoKSk7Ci0gICAgICAgIG1fZGF0YS0+dkJhci0+c2V0VmFsdWUoc2Ny
b2xsLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQp
Ci0gICAgICAgICAgICBtX2RhdGEtPnZCYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNl
KTsKLSAgICB9Ci0KLSAgICBpZiAob2xkSGFzVmVydGljYWwgIT0gKG1fZGF0YS0+dkJhciAhPSAw
KSB8fCBvbGRIYXNIb3Jpem9udGFsICE9IChtX2RhdGEtPmhCYXIgIT0gMCkpCi0gICAgICAgIGdl
b21ldHJ5Q2hhbmdlZCgpOwotCi0gICAgLy8gU2VlIGlmIG91ciBvZmZzZXQgaGFzIGNoYW5nZWQg
aW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgbWlnaHQgbm90IGhhdmUgc2Nyb2xsYmFycy4KLSAgICAv
LyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBlZGl0aW5nIGEgYm9keSB3aXRoIG92ZXJmbG93OmhpZGRl
biBhbmQgc2Nyb2xsaW5nIHRvIHJldmVhbCBzZWxlY3Rpb24uCi0gICAgLy8gSXQgY2FuIGFsc28g
aGFwcGVuIHdoZW4gbWF4aW1pemluZyBhIHdpbmRvdyB0aGF0IGhhcyBzY3JvbGxiYXJzIChidXQg
dGhlIG5ldyBtYXhpbWl6ZWQgcmVzdWx0Ci0gICAgLy8gZG9lcyBub3QpLgotICAgIEludFNpemUg
c2Nyb2xsRGVsdGEgPSBzY3JvbGwgLSBtX2RhdGEtPnNjcm9sbE9mZnNldDsKLSAgICBpZiAoc2Ny
b2xsRGVsdGEgIT0gSW50U2l6ZSgpKSB7Ci0gICAgICAgbV9kYXRhLT5zY3JvbGxPZmZzZXQgPSBz
Y3JvbGw7Ci0gICAgICAgbV9kYXRhLT5zY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEpOwot
ICAgIH0KLSAKLSAgICBtX2RhdGEtPmluVXBkYXRlU2Nyb2xsYmFycyA9IGZhbHNlOwotfQotCi1J
bnRQb2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiB3aW5k
b3dQb2ludCkgY29uc3QKLXsgCi0gICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21D
b250YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsKLSAgICByZXR1cm4gdmlld1BvaW50ICsgc2Ny
b2xsT2Zmc2V0KCk7Ci19Ci0KLUludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3co
Y29uc3QgSW50UG9pbnQmIGNvbnRlbnRzUG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgdmll
d1BvaW50ID0gY29udGVudHNQb2ludCAtIHNjcm9sbE9mZnNldCgpOwotICAgIHJldHVybiBjb252
ZXJ0VG9Db250YWluaW5nV2luZG93KHZpZXdQb2ludCk7ICAKLX0KLQotUGxhdGZvcm1TY3JvbGxi
YXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJhclVuZGVyTW91c2UoY29uc3QgUGxhdGZvcm1Nb3VzZUV2
ZW50JiBtb3VzZUV2ZW50KQoteyAKLSAgICBJbnRQb2ludCB2aWV3UG9pbnQgPSBjb252ZXJ0RnJv
bUNvbnRhaW5pbmdXaW5kb3cobW91c2VFdmVudC5wb3MoKSk7Ci0gICAgaWYgKG1fZGF0YS0+aEJh
ciAmJiBtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKS5jb250YWlucyh2aWV3UG9pbnQpKQot
ICAgICAgICByZXR1cm4gbV9kYXRhLT5oQmFyLmdldCgpOwotICAgIGlmIChtX2RhdGEtPnZCYXIg
JiYgbV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkuY29udGFpbnModmlld1BvaW50KSkKLSAg
ICAgICAgcmV0dXJuIG1fZGF0YS0+dkJhci5nZXQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotSW50
UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCogY2hpbGQs
IGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKLXsKLSAgICBJbnRQb2ludCBuZXdQb2ludCA9
IHBvaW50OwotICAgIGlmIChjaGlsZCAhPSBtX2RhdGEtPmhCYXIgJiYgY2hpbGQgIT0gbV9kYXRh
LT52QmFyKQotICAgICAgICBuZXdQb2ludCA9IHBvaW50IC0gc2Nyb2xsT2Zmc2V0KCk7Ci0gICAg
cmV0dXJuIFdpZGdldDo6Y29udmVydENoaWxkVG9TZWxmKGNoaWxkLCBuZXdQb2ludCk7Ci19Ci0K
LUludFBvaW50IFNjcm9sbFZpZXc6OmNvbnZlcnRTZWxmVG9DaGlsZChjb25zdCBXaWRnZXQqIGNo
aWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgSW50UG9pbnQgbmV3UG9p
bnQgPSBwb2ludDsKLSAgICBpZiAoY2hpbGQgIT0gbV9kYXRhLT5oQmFyICYmIGNoaWxkICE9IG1f
ZGF0YS0+dkJhcikKLSAgICAgICAgbmV3UG9pbnQgPSBwb2ludCArIHNjcm9sbE9mZnNldCgpOwot
ICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRTZWxmVG9DaGlsZChjaGlsZCwgbmV3UG9pbnQpOwot
fQotCi12b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIGhlcmUgc28g
d2UgZG9uJ3QgaGF2ZSB0byBmb3JrIEZyYW1lVmlldy5oLy5jcHAuCi0gICAgLy8gSW4gdGhlIGVu
ZCwgRnJhbWVWaWV3IHNob3VsZCBqdXN0IG1lcmdlIHdpdGggU2Nyb2xsVmlldy4KLSAgICBBU1NF
UlQoaXNGcmFtZVZpZXcoKSk7Ci0KLSAgICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBJbnRSZWN0IGRvY3VtZW50RGlydHlSZWN0ID0gcmVj
dDsKLSAgICBkb2N1bWVudERpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVHZW9tZXRyeSgpKTsKLQot
ICAgIGNvbnRleHQtPnNhdmUoKTsKLQotICAgIGNvbnRleHQtPnRyYW5zbGF0ZSh4KCksIHkoKSk7
Ci0gICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZSgteCgpLCAteSgpKTsKLQotICAgIGNvbnRleHQt
PnRyYW5zbGF0ZSgtY29udGVudHNYKCksIC1jb250ZW50c1koKSk7Ci0gICAgZG9jdW1lbnREaXJ0
eVJlY3QubW92ZShjb250ZW50c1goKSwgY29udGVudHNZKCkpOwotCi0gICAgY29udGV4dC0+Y2xp
cChlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKSk7Ci0gICAgc3RhdGljX2Nh
c3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyktPmZyYW1lKCktPnBhaW50KGNvbnRleHQsIGRvY3Vt
ZW50RGlydHlSZWN0KTsKLSAgICBjb250ZXh0LT5yZXN0b3JlKCk7Ci0KLSAgICAvLyBOb3cgcGFp
bnQgdGhlIHNjcm9sbGJhcnMuCi0gICAgaWYgKCFtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2Vk
ICYmIChtX2RhdGEtPmhCYXIgfHwgbV9kYXRhLT52QmFyKSkgewotICAgICAgICBjb250ZXh0LT5z
YXZlKCk7Ci0gICAgICAgIEludFJlY3Qgc2Nyb2xsVmlld0RpcnR5UmVjdCA9IHJlY3Q7Ci0gICAg
ICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QuaW50ZXJzZWN0KGZyYW1lR2VvbWV0cnkoKSk7Ci0gICAg
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSh4KCksIHkoKSk7Ci0gICAgICAgIHNjcm9sbFZpZXdEaXJ0
eVJlY3QubW92ZSgteCgpLCAteSgpKTsKLSAgICAgICAgaWYgKG1fZGF0YS0+aEJhcikKLSAgICAg
ICAgICAgIG1fZGF0YS0+aEJhci0+cGFpbnQoY29udGV4dCwgc2Nyb2xsVmlld0RpcnR5UmVjdCk7
Ci0gICAgICAgIGlmIChtX2RhdGEtPnZCYXIpCi0gICAgICAgICAgICBtX2RhdGEtPnZCYXItPnBh
aW50KGNvbnRleHQsIHNjcm9sbFZpZXdEaXJ0eVJlY3QpOwotCi0gICAgICAgIC8qCi0gICAgICAg
ICAqIEZJWE1FOiBUT0RPOiBDaGVjayBpZiB0aGF0IHdvcmtzIHdpdGggUlRMCi0gICAgICAgICAq
LwotICAgICAgICAvLyBGaWxsIHRoZSBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUuCi0gICAgICAg
IEludFJlY3QgaENvcm5lcjsKLSAgICAgICAgaWYgKG1fZGF0YS0+aEJhciAmJiB3aWR0aCgpIC0g
bV9kYXRhLT5oQmFyLT53aWR0aCgpID4gMCkgewotICAgICAgICAgICAgaENvcm5lciA9IEludFJl
Y3QobV9kYXRhLT5oQmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVpZ2h0KCkgLSBtX2RhdGEtPmhCYXItPmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2lkdGgoKSAtIG1fZGF0YS0+aEJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYg
KGhDb3JuZXIuaW50ZXJzZWN0cyhzY3JvbGxWaWV3RGlydHlSZWN0KSkKLSAgICAgICAgICAgICAg
ICBjb250ZXh0LT5maWxsUmVjdChoQ29ybmVyLCBDb2xvcjo6d2hpdGUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1fZGF0YS0+dkJhciAmJiBoZWlnaHQoKSAtIG1fZGF0YS0+dkJhci0+aGVp
Z2h0KCkgPiAwKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IHZDb3JuZXIod2lkdGgoKSAtIG1fZGF0
YS0+dkJhci0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2RhdGEtPnZC
YXItPmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+
d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1fZGF0YS0+
dkJhci0+aGVpZ2h0KCkpOwotICAgICAgICAgICAgaWYgKHZDb3JuZXIgIT0gaENvcm5lciAmJiB2
Q29ybmVyLmludGVyc2VjdHMoc2Nyb2xsVmlld0RpcnR5UmVjdCkpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC0+ZmlsbFJlY3QodkNvcm5lciwgQ29sb3I6OndoaXRlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICB9Ci19Ci0KLS8qCi0gKiB1cGRhdGUgY2hp
bGRyZW4gYnV0IG5vciBvdXIgc2Nyb2xsYmFycy4gVGhleSBzaG91bGQgbm90IHNjcm9sbCB3aGVu
Ci0gKiB3ZSBzY3JvbGwgb3VyIGNvbnRlbnQuCi0gKi8KLXZvaWQgU2Nyb2xsVmlldzo6Z2VvbWV0
cnlDaGFuZ2VkKCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PFdpZGdldCo+Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBtX2RhdGEtPmNoaWxkcmVuLmVuZCgpOwotICAgIGZvciAoSGFzaFNldDxXaWRnZXQq
Pjo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IG1fZGF0YS0+Y2hpbGRyZW4uYmVnaW4oKTsgY3Vy
cmVudCAhPSBlbmQ7ICsrY3VycmVudCkKLSAgICAgICAgKCpjdXJyZW50KS0+Z2VvbWV0cnlDaGFu
Z2VkKCk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQotewotICAgIGlmICAoKGRpcmVj
dGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgJiYgbV9kYXRhLT52
QmFyKQotICAgICAgICBtX2RhdGEtPnZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
KTsKLSAgICBlbHNlIGlmIChtX2RhdGEtPmhCYXIpCi0gICAgICAgIG1fZGF0YS0+aEJhci0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotfQotCi12b2lkIFNjcm9sbFZpZXc6OmFkZFRv
RGlydHlSZWdpb24oY29uc3QgSW50UmVjdCYgY29udGFpbmluZ1dpbmRvd1JlY3QpCi17Ci0gICAg
QVNTRVJUKGlzRnJhbWVWaWV3KCkpOwotICAgIGNvbnN0IEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyk7Ci0gICAgUGFnZSogcGFnZSA9IGZy
YW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKLSAgICBp
ZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICBwYWdlLT5jaHJvbWUoKS0+YWRkVG9EaXJ0
eVJlZ2lvbihjb250YWluaW5nV2luZG93UmVjdCk7Ci19Ci0KLXZvaWQgU2Nyb2xsVmlldzo6c2Ny
b2xsQmFja2luZ1N0b3JlKGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3
UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCi17Ci0gICAgQVNTRVJUKGlzRnJhbWVWaWV3
KCkpOwotICAgIGNvbnN0IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
RnJhbWVWaWV3Kj4odGhpcyk7Ci0gICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/
IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAg
IHJldHVybjsKLSAgICBwYWdlLT5jaHJvbWUoKS0+c2Nyb2xsQmFja2luZ1N0b3JlKGR4LCBkeSwg
c2Nyb2xsVmlld1JlY3QsIGNsaXBSZWN0KTsKLX0KLQotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVC
YWNraW5nU3RvcmUoKQotewotICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKLSAgICBjb25zdCBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMp
OwotICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1l
KCktPnBhZ2UoKSA6IDA7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgcGFn
ZS0+Y2hyb21lKCktPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotfQotCi1IYXNoU2V0PFdpZGdldCo+
KiBTY3JvbGxWaWV3OjpjaGlsZHJlbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICZtX2RhdGEtPmNo
aWxkcmVuOwotfQotCi19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R3Rr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R3RrLmNw
cAkocmV2aXNpb24gMjUxNjkpCShmcm9tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdH
ZGsuY3BwOjI1MTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvU2Nyb2xsVmlld0d0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYsIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJTY3JvbGxWaWV3LmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgor
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCitzdGF0aWMgY29uc3QgaW50
IE1hZ2ljR3RrU2Nyb2xsQ29uc3RhbnQgPSAxMzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBTY3JvbGxWaWV3U2Nyb2xsYmFyIDogcHVibGljIFBsYXRmb3JtU2Nyb2xsYmFyIHsKK3B1
YmxpYzoKKyAgICBTY3JvbGxWaWV3U2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGdlb21ldHJ5Q2hhbmdlZCgpOworfTsKKworY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmll
d1ByaXZhdGUgOiBwdWJsaWMgU2Nyb2xsYmFyQ2xpZW50Cit7CitwdWJsaWM6CisgICAgU2Nyb2xs
Vmlld1ByaXZhdGUoU2Nyb2xsVmlldyogX3ZpZXcpCisgICAgICAgIDogdmlldyhfdmlldykKKyAg
ICAgICAgLCBoYXNTdGF0aWNCYWNrZ3JvdW5kKGZhbHNlKQorICAgICAgICAsIHNjcm9sbGJhcnNT
dXBwcmVzc2VkKGZhbHNlKQorICAgICAgICAsIHZTY3JvbGxiYXJNb2RlKFNjcm9sbGJhckF1dG8p
CisgICAgICAgICwgaFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKKyAgICAgICAgLCBpblVw
ZGF0ZVNjcm9sbGJhcnMoZmFsc2UpCisgICAgICAgICwgaG9yaXpvbnRhbEFkanVzdG1lbnQoMCkK
KyAgICAgICAgLCB2ZXJ0aWNhbEFkanVzdG1lbnQoMCkKKyAgICB7fQorCisgICAgflNjcm9sbFZp
ZXdQcml2YXRlKCkKKyAgICB7CisgICAgICAgIHNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoZmFs
c2UpOworICAgICAgICBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSk7CisKKyAgICAgICAg
aWYgKGhvcml6b250YWxBZGp1c3RtZW50KSB7CisgICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2Z1bmMoR19PQkpFQ1QoaG9yaXpvbnRhbEFkanVzdG1lbnQpLCAoZ3Bv
aW50ZXIpU2Nyb2xsVmlld1ByaXZhdGU6OmFkanVzdG1lbnRDaGFuZ2VkLCB0aGlzKTsKKyAgICAg
ICAgICAgIGdfb2JqZWN0X3VucmVmKGhvcml6b250YWxBZGp1c3RtZW50KTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICh2ZXJ0aWNhbEFkanVzdG1lbnQpIHsKKyAgICAgICAgICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVCh2ZXJ0aWNhbEFkanVzdG1lbnQp
LCAoZ3BvaW50ZXIpU2Nyb2xsVmlld1ByaXZhdGU6OmFkanVzdG1lbnRDaGFuZ2VkLCB0aGlzKTsK
KyAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKHZlcnRpY2FsQWRqdXN0bWVudCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2b2lkIHNjcm9sbEJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBz
Y3JvbGxEZWx0YSk7CisgCisgICAgdm9pZCBzZXRIYXNIb3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wg
aGFzQmFyKTsKKyAgICB2b2lkIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKTsK
KworICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CisgICAgdmlydHVh
bCBJbnRSZWN0IHdpbmRvd0NsaXBSZWN0KCkgY29uc3Q7CisKKyAgICBzdGF0aWMgdm9pZCBhZGp1
c3RtZW50Q2hhbmdlZChHdGtBZGp1c3RtZW50KiwgZ3BvaW50ZXIpOworCisgICAgU2Nyb2xsVmll
dyogdmlldzsKKyAgICBib29sIGhhc1N0YXRpY0JhY2tncm91bmQ7CisgICAgYm9vbCBzY3JvbGxi
YXJzU3VwcHJlc3NlZDsKKyAgICBTY3JvbGxiYXJNb2RlIHZTY3JvbGxiYXJNb2RlOworICAgIFNj
cm9sbGJhck1vZGUgaFNjcm9sbGJhck1vZGU7CisgICAgUmVmUHRyPFNjcm9sbFZpZXdTY3JvbGxi
YXI+IHZCYXI7CisgICAgUmVmUHRyPFNjcm9sbFZpZXdTY3JvbGxiYXI+IGhCYXI7CisgICAgSW50
U2l6ZSBzY3JvbGxPZmZzZXQ7CisgICAgSW50U2l6ZSBjb250ZW50c1NpemU7CisgICAgSW50U2l6
ZSB2aWV3UG9ydFNpemU7CisgICAgYm9vbCBpblVwZGF0ZVNjcm9sbGJhcnM7CisgICAgSGFzaFNl
dDxXaWRnZXQqPiBjaGlsZHJlbjsKKyAgICBHdGtBZGp1c3RtZW50KiBob3Jpem9udGFsQWRqdXN0
bWVudDsKKyAgICBHdGtBZGp1c3RtZW50KiB2ZXJ0aWNhbEFkanVzdG1lbnQ7Cit9OworCitTY3Jv
bGxWaWV3U2Nyb2xsYmFyOjpTY3JvbGxWaWV3U2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xp
ZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNp
emUgc2l6ZSkKKyAgICA6IFBsYXRmb3JtU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIHNp
emUpCit7Cit9CisKK3ZvaWQgU2Nyb2xsVmlld1Njcm9sbGJhcjo6Z2VvbWV0cnlDaGFuZ2VkKCkK
K3sKKyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFy
ZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0
aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0g
SW50UmVjdChmcmFtZVZpZXctPmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coZnJhbWVHZW9tZXRy
eSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5KCkuc2l6ZSgpKTsKKyAgICBHdGtBbGxvY2F0
aW9uIGFsbG9jYXRpb24gPSB7IHdpbmRvd1JlY3QueCgpLCB3aW5kb3dSZWN0LnkoKSwgd2luZG93
UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgZ3RrX3dpZGdldF9zaXpl
X2FsbG9jYXRlKGd0a1dpZGdldCgpLCAmYWxsb2NhdGlvbik7Cit9CisKK3ZvaWQgU2Nyb2xsVmll
dzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNC
YXIpCit7CisgICAgaWYgKFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxiYXJzKCkpIHsKKyAg
ICAgICAgaWYgKGhhc0JhciAmJiAhaEJhciAmJiAhaG9yaXpvbnRhbEFkanVzdG1lbnQpIHsKKyAg
ICAgICAgICAgIGhCYXIgPSBuZXcgU2Nyb2xsVmlld1Njcm9sbGJhcih0aGlzLCBIb3Jpem9udGFs
U2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHZpZXctPmFkZENoaWxk
KGhCYXIuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFoYXNCYXIgJiYgaEJhcikgeworICAg
ICAgICAgICAgdmlldy0+cmVtb3ZlQ2hpbGQoaEJhci5nZXQoKSk7CisgICAgICAgICAgICBoQmFy
ID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3
UHJpdmF0ZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCit7CisgICAgaWYg
KFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxiYXJzKCkpIHsKKyAgICAgICAgaWYgKGhhc0Jh
ciAmJiAhdkJhciAmJiAhdmVydGljYWxBZGp1c3RtZW50KSB7CisgICAgICAgICAgICB2QmFyID0g
bmV3IFNjcm9sbFZpZXdTY3JvbGxiYXIodGhpcywgVmVydGljYWxTY3JvbGxiYXIsIFJlZ3VsYXJT
Y3JvbGxiYXIpOworICAgICAgICAgICAgdmlldy0+YWRkQ2hpbGQodkJhci5nZXQoKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoIWhhc0JhciAmJiB2QmFyKSB7CisgICAgICAgICAgICB2aWV3LT5yZW1v
dmVDaGlsZCh2QmFyLmdldCgpKTsKKyAgICAgICAgICAgIHZCYXIgPSAwOworICAgICAgICB9Cisg
ICAgfQorfQorCisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNjcm9sbEJh
Y2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICAvLyBTaW5jZSBz
Y3JvbGxpbmcgaXMgZG91YmxlIGJ1ZmZlcmVkLCB3ZSB3aWxsIGJlIGJsaXR0aW5nIHRoZSBzY3Jv
bGwgdmlldydzIGludGVyc2VjdGlvbgorICAgIC8vIHdpdGggdGhlIGNsaXAgcmVjdCBldmVyeSB0
aW1lIHRvIGtlZXAgaXQgc21vb3RoLgorICAgIEludFJlY3QgY2xpcFJlY3QgPSB2aWV3LT53aW5k
b3dDbGlwUmVjdCgpOworICAgIEludFJlY3Qgc2Nyb2xsVmlld1JlY3QgPSB2aWV3LT5jb252ZXJ0
VG9Db250YWluaW5nV2luZG93KEludFJlY3QoMCwgMCwgdmlldy0+dmlzaWJsZVdpZHRoKCksIHZp
ZXctPnZpc2libGVIZWlnaHQoKSkpOworCisgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gY2xpcFJl
Y3Q7CisgICAgdXBkYXRlUmVjdC5pbnRlcnNlY3Qoc2Nyb2xsVmlld1JlY3QpOworCisgICAgLy9G
SVhNRSB1cGRhdGUgaGVyZT8KKworICAgIGlmICghaGFzU3RhdGljQmFja2dyb3VuZCkgLy8gVGhl
IG1haW4gZnJhbWUgY2FuIGp1c3QgYmxpdCB0aGUgV2ViVmlldyB3aW5kb3cKKyAgICAgICAvLyBG
SVhNRTogRmluZCBhIHdheSB0byBibGl0IHN1YmZyYW1lcyB3aXRob3V0IGJsaXR0aW5nIG92ZXJs
YXBwaW5nIGNvbnRlbnQKKyAgICAgICB2aWV3LT5zY3JvbGxCYWNraW5nU3RvcmUoLXNjcm9sbERl
bHRhLndpZHRoKCksIC1zY3JvbGxEZWx0YS5oZWlnaHQoKSwgc2Nyb2xsVmlld1JlY3QsIGNsaXBS
ZWN0KTsKKyAgICBlbHNlICB7CisgICAgICAgLy8gV2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgcmVw
YWludCB0aGUgZW50aXJlIGJhY2tpbmcgc3RvcmUuICBEbyBpdCBub3cgYmVmb3JlIG1vdmluZyB0
aGUKKyAgICAgICAvLyBwbHVnaW5zLgorICAgICAgIHZpZXctPmFkZFRvRGlydHlSZWdpb24odXBk
YXRlUmVjdCk7CisgICAgICAgdmlldy0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgfQorCisg
ICAgdmlldy0+Z2VvbWV0cnlDaGFuZ2VkKCk7CisKKyAgICAvLyBOb3cgdXBkYXRlIHRoZSB3aW5k
b3cgKHdoaWNoIHNob3VsZCBkbyBub3RoaW5nIGJ1dCBhIGJsaXQgb2YgdGhlIGJhY2tpbmcgc3Rv
cmUncyB1cGRhdGVSZWN0IGFuZCBzbyBzaG91bGQKKyAgICAvLyBiZSB2ZXJ5IGZhc3QpLgorICAg
IHZpZXctPnVwZGF0ZSgpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRl
OjphZGp1c3RtZW50Q2hhbmdlZChHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50LCBncG9pbnRlciBf
dGhhdCkKK3sKKyAgICBTY3JvbGxWaWV3UHJpdmF0ZSogdGhhdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
U2Nyb2xsVmlld1ByaXZhdGUqPihfdGhhdCk7CisKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJl
YWxseSBtb3ZlZC4KKyAgICBJbnRTaXplIG5ld09mZnNldCA9IHRoYXQtPnNjcm9sbE9mZnNldDsK
KyAgICBpZiAoYWRqdXN0bWVudCA9PSB0aGF0LT5ob3Jpem9udGFsQWRqdXN0bWVudCkKKyAgICAg
ICAgbmV3T2Zmc2V0LnNldFdpZHRoKHN0YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0
X3ZhbHVlKGFkanVzdG1lbnQpKSk7CisgICAgZWxzZSBpZiAoYWRqdXN0bWVudCA9PSB0aGF0LT52
ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIG5ld09mZnNldC5zZXRIZWlnaHQoc3RhdGljX2Nh
c3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVudCkpKTsKKworICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEgPSBuZXdPZmZzZXQgLSB0aGF0LT5zY3JvbGxPZmZzZXQ7CisgICAg
aWYgKHNjcm9sbERlbHRhID09IEludFNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHRoYXQt
PnNjcm9sbE9mZnNldCA9IG5ld09mZnNldDsKKworICAgIGlmICh0aGF0LT5zY3JvbGxiYXJzU3Vw
cHJlc3NlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGhhdC0+c2Nyb2xsQmFja2luZ1N0b3Jl
KHNjcm9sbERlbHRhKTsKKyAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih0aGF0LT52aWV3KS0+
ZnJhbWUoKS0+c2VuZFNjcm9sbEV2ZW50KCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xs
Vmlld1ByaXZhdGU6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIGJhcikKK3sKKyAgICAvLyBGaWd1
cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KKyAgICBJbnRTaXplIG5ld09mZnNldCA9IHNjcm9s
bE9mZnNldDsKKyAgICBpZiAoYmFyKSB7CisgICAgICAgIGlmIChiYXIgPT0gaEJhcikKKyAgICAg
ICAgICAgIG5ld09mZnNldC5zZXRXaWR0aChiYXItPnZhbHVlKCkpOworICAgICAgICBlbHNlIGlm
IChiYXIgPT0gdkJhcikKKyAgICAgICAgICAgIG5ld09mZnNldC5zZXRIZWlnaHQoYmFyLT52YWx1
ZSgpKTsKKyAgICB9CisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IG5ld09mZnNldCAtIHNjcm9s
bE9mZnNldDsKKyAgICBpZiAoc2Nyb2xsRGVsdGEgPT0gSW50U2l6ZSgpKQorICAgICAgICByZXR1
cm47CisgICAgc2Nyb2xsT2Zmc2V0ID0gbmV3T2Zmc2V0OworCisgICAgaWYgKHNjcm9sbGJhcnNT
dXBwcmVzc2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBzY3JvbGxCYWNraW5nU3RvcmUoc2Ny
b2xsRGVsdGEpOworICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHZpZXcpLT5mcmFtZSgpLT5z
ZW5kU2Nyb2xsRXZlbnQoKTsKK30KKworSW50UmVjdCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJp
dmF0ZTo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBGcmFtZVZpZXcqPih2aWV3KS0+d2luZG93Q2xpcFJlY3QoZmFsc2UpOworfQorCitTY3Jv
bGxWaWV3OjpTY3JvbGxWaWV3KCkKKyAgICA6IG1fZGF0YShuZXcgU2Nyb2xsVmlld1ByaXZhdGUo
dGhpcykpCit7fQorCitTY3JvbGxWaWV3Ojp+U2Nyb2xsVmlldygpCit7CisgICAgZGVsZXRlIG1f
ZGF0YTsKK30KKworLyogIAorICogVGhlIGZvbGxvd2luZyBpcyBhc3N1bWVkOgorICogICAoaGFk
aiAmJiB2YWRqKSB8fCAoIWhhZGogJiYgIXZhZGopCisgKi8gCit2b2lkIFNjcm9sbFZpZXc6OnNl
dEd0a0FkanVzdG1lbnRzKEd0a0FkanVzdG1lbnQqIGhhZGosIEd0a0FkanVzdG1lbnQqIHZhZGop
Cit7CisgICAgQVNTRVJUKCFoYWRqID09ICF2YWRqKTsKKworICAgIGlmIChtX2RhdGEtPmhvcml6
b250YWxBZGp1c3RtZW50KSB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZnVuYyhHX09CSkVDVChtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KSwgKGdwb2ludGVy
KVNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hhbmdlZCwgbV9kYXRhKTsKKyAgICAgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKG1fZGF0YS0+dmVy
dGljYWxBZGp1c3RtZW50KSwgKGdwb2ludGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50
Q2hhbmdlZCwgbV9kYXRhKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9kYXRhLT5ob3Jpem9u
dGFsQWRqdXN0bWVudCk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZGF0YS0+dmVydGljYWxB
ZGp1c3RtZW50KTsKKyAgICB9CisKKyAgICBtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50ID0g
aGFkajsKKyAgICBtX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCA9IHZhZGo7CisKKyAgICBpZiAo
bV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudCkgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQsICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFD
SyhTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQpLCBtX2RhdGEpOworICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50LCAidmFsdWUtY2hh
bmdlZCIsIEdfQ0FMTEJBQ0soU2Nyb2xsVmlld1ByaXZhdGU6OmFkanVzdG1lbnRDaGFuZ2VkKSwg
bV9kYXRhKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBkaXNhYmxlIHRoZSBzY3JvbGxiYXJz
IChpZiB3ZSBoYXZlIGFueSkgYXMgdGhlIEd0a0FkanVzdG1lbnQgb3ZlcgorICAgICAgICAgKi8K
KyAgICAgICAgbV9kYXRhLT5zZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihmYWxzZSk7CisgICAgICAg
IG1fZGF0YS0+c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihmYWxzZSk7CisKKyAgICAgICAgZ19v
YmplY3RfcmVmKG1fZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpOworICAgICAgICBndGtfb2Jq
ZWN0X3NpbmsoR1RLX09CSkVDVChtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KSk7CisgICAg
ICAgIGdfb2JqZWN0X3JlZihtX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCk7CisgICAgICAgIGd0
a19vYmplY3Rfc2luayhHVEtfT0JKRUNUKG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KSk7Cisg
ICAgfQorCisgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7Cit9CisK
K3ZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlQ29udGVudHMoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVj
dCwgYm9vbCBub3cpCit7CisgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IGNvbnRlbnRzVG9XaW5kb3codXBk
YXRlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IGNvbnRhaW5pbmdXaW5kb3dSZWN0ID0g
dXBkYXRlUmVjdDsKKyAgICBjb250YWluaW5nV2luZG93UmVjdC5zZXRMb2NhdGlvbih3aW5kb3dQ
b2ludCk7CisKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgY29udGFpbmluZ1dpbmRvd1JlY3Qu
eCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nV2luZG93UmVjdC55KCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LndpZHRoKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LmhlaWdodCgp
IH07CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3co
KSktPndpbmRvdzsKKworICAgIGlmICh3aW5kb3cpCisgICAgICAgIGdka193aW5kb3dfaW52YWxp
ZGF0ZV9yZWN0KHdpbmRvdywgJnJlY3QsIHRydWUpOworCisgICAgLy8gQ2FjaGUgdGhlIGRpcnR5
IHNwb3QuCisgICAgYWRkVG9EaXJ0eVJlZ2lvbihjb250YWluaW5nV2luZG93UmVjdCk7CisKKyAg
ICBpZiAobm93ICYmIHdpbmRvdykKKyAgICAgICAgZ2RrX3dpbmRvd19wcm9jZXNzX3VwZGF0ZXMo
d2luZG93LCB0cnVlKTsKK30KKwordm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGUoKQoreworICAgIEFT
U0VSVChjb250YWluaW5nV2luZG93KCkpOworCisgICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IDAs
IDAsIG1fZGF0YS0+Y29udGVudHNTaXplLndpZHRoKCksIG1fZGF0YS0+Y29udGVudHNTaXplLmhl
aWdodCgpIH07CisgICAgZ2RrX3dpbmRvd19pbnZhbGlkYXRlX3JlY3QoR1RLX1dJREdFVChjb250
YWluaW5nV2luZG93KCkpLT53aW5kb3csICZyZWN0LCB0cnVlKTsKK30KKworaW50IFNjcm9sbFZp
ZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHdpZHRoKCkgLSAobV9kYXRh
LT52QmFyID8gbV9kYXRhLT52QmFyLT53aWR0aCgpIDogMCk7Cit9CisKK2ludCBTY3JvbGxWaWV3
Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGVpZ2h0KCkgLSAobV9kYXRh
LT5oQmFyID8gbV9kYXRhLT5oQmFyLT5oZWlnaHQoKSA6IDApOworfQorCisvLyBSZWdpb24gb2Yg
dGhlIGNvbnRlbnQgY3VycmVudGx5IHZpc2libGUgaW4gdGhlIHZpZXdwb3J0IGluIHRoZSBjb250
ZW50IHZpZXcncyBjb29yZGluYXRlIHN5c3RlbS4KK0Zsb2F0UmVjdCBTY3JvbGxWaWV3Ojp2aXNp
YmxlQ29udGVudFJlY3QoKSBjb25zdAoreworICAgIHJldHVybiBGbG9hdFJlY3QoY29udGVudHNY
KCksIGNvbnRlbnRzWSgpLCB2aXNpYmxlV2lkdGgoKSwgdmlzaWJsZUhlaWdodCgpKTsKK30KKwor
RmxvYXRSZWN0IFNjcm9sbFZpZXc6OnZpc2libGVDb250ZW50UmVjdENvbnNpZGVyaW5nRXh0ZXJu
YWxTY3JvbGxlcnMoKSBjb25zdAoreworICAgIC8vIGV4dGVybmFsIHNjcm9sbGVycyBub3Qgc3Vw
cG9ydGVkIGZvciBub3cKKyAgICByZXR1cm4gdmlzaWJsZUNvbnRlbnRSZWN0KCk7Cit9CisKK3Zv
aWQgU2Nyb2xsVmlldzo6c2V0Q29udGVudHNQb3MoaW50IG5ld1gsIGludCBuZXdZKQoreworICAg
IGludCBkeCA9IG5ld1ggLSBjb250ZW50c1goKTsKKyAgICBpbnQgZHkgPSBuZXdZIC0gY29udGVu
dHNZKCk7CisgICAgc2Nyb2xsQnkoZHgsIGR5KTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpyZXNp
emVDb250ZW50cyhpbnQgdywgaW50IGgpCit7CisgICAgSW50U2l6ZSBuZXdTaXplKHcsIGgpOwor
ICAgIGlmIChtX2RhdGEtPmNvbnRlbnRzU2l6ZSA9PSBuZXdTaXplKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2RhdGEtPmNvbnRlbnRzU2l6ZSA9IG5ld1NpemU7CisgICAgdXBkYXRlU2Nyb2xs
YmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7Cit9CisKK2ludCBTY3JvbGxWaWV3Ojpjb250ZW50
c1goKSBjb25zdAoreworICAgIHJldHVybiBzY3JvbGxPZmZzZXQoKS53aWR0aCgpOworfQorCitp
bnQgU2Nyb2xsVmlldzo6Y29udGVudHNZKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2Nyb2xsT2Zm
c2V0KCkuaGVpZ2h0KCk7Cit9CisKK2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1dpZHRoKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKTsKK30KKworaW50
IFNjcm9sbFZpZXc6OmNvbnRlbnRzSGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRh
LT5jb250ZW50c1NpemUuaGVpZ2h0KCk7Cit9CisKK0ludFNpemUgU2Nyb2xsVmlldzo6c2Nyb2xs
T2Zmc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5zY3JvbGxPZmZzZXQ7Cit9CisK
K0ludFNpemUgU2Nyb2xsVmlldzo6bWF4aW11bVNjcm9sbCgpIGNvbnN0Cit7CisgICAgSW50U2l6
ZSBkZWx0YSA9IChtX2RhdGEtPmNvbnRlbnRzU2l6ZSAtIEludFNpemUodmlzaWJsZVdpZHRoKCks
IHZpc2libGVIZWlnaHQoKSkpIC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgZGVsdGEuY2xhbXBOZWdh
dGl2ZVRvWmVybygpOworICAgIHJldHVybiBkZWx0YTsKK30KKwordm9pZCBTY3JvbGxWaWV3Ojpz
Y3JvbGxCeShpbnQgZHgsIGludCBkeSkKK3sKKyAgICBJbnRTaXplIHNjcm9sbE9mZnNldCA9IG1f
ZGF0YS0+c2Nyb2xsT2Zmc2V0OworICAgIEludFNpemUgbmV3U2Nyb2xsT2Zmc2V0ID0gc2Nyb2xs
T2Zmc2V0ICsgSW50U2l6ZShkeCwgZHkpLnNocnVua1RvKG1heGltdW1TY3JvbGwoKSk7CisgICAg
bmV3U2Nyb2xsT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKyAKKyAgICBpZiAobmV3U2Ny
b2xsT2Zmc2V0ID09IHNjcm9sbE9mZnNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdXBkYXRl
U2Nyb2xsYmFycyhuZXdTY3JvbGxPZmZzZXQpOworfQorCitTY3JvbGxiYXJNb2RlIFNjcm9sbFZp
ZXc6OmhTY3JvbGxiYXJNb2RlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9kYXRhLT5oU2Nyb2xs
YmFyTW9kZTsKK30KKworU2Nyb2xsYmFyTW9kZSBTY3JvbGxWaWV3Ojp2U2Nyb2xsYmFyTW9kZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZGF0YS0+dlNjcm9sbGJhck1vZGU7Cit9CisKK3ZvaWQg
U2Nyb2xsVmlldzo6c3VwcHJlc3NTY3JvbGxiYXJzKGJvb2wgc3VwcHJlc3NlZCwgYm9vbCByZXBh
aW50T25TdXBwcmVzcykKK3sKKyAgICBtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkID0gc3Vw
cHJlc3NlZDsKKyAgICBpZiAocmVwYWludE9uU3VwcHJlc3MpCisgICAgICAgIHVwZGF0ZVNjcm9s
bGJhcnMobV9kYXRhLT5zY3JvbGxPZmZzZXQpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnNldEhT
Y3JvbGxiYXJNb2RlKFNjcm9sbGJhck1vZGUgbmV3TW9kZSkKK3sKKyAgICBpZiAobV9kYXRhLT5o
U2Nyb2xsYmFyTW9kZSAhPSBuZXdNb2RlKSB7CisgICAgICAgIG1fZGF0YS0+aFNjcm9sbGJhck1v
ZGUgPSBuZXdNb2RlOworICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zm
c2V0KTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0VlNjcm9sbGJhck1vZGUoU2Ny
b2xsYmFyTW9kZSBuZXdNb2RlKQoreworICAgIGlmIChtX2RhdGEtPnZTY3JvbGxiYXJNb2RlICE9
IG5ld01vZGUpIHsKKyAgICAgICAgbV9kYXRhLT52U2Nyb2xsYmFyTW9kZSA9IG5ld01vZGU7Cisg
ICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMobV9kYXRhLT5zY3JvbGxPZmZzZXQpOworICAgIH0KK30K
Kwordm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJzTW9kZShTY3JvbGxiYXJNb2RlIG5ld01v
ZGUpCit7CisgICAgbV9kYXRhLT5oU2Nyb2xsYmFyTW9kZSA9IG1fZGF0YS0+dlNjcm9sbGJhck1v
ZGUgPSBuZXdNb2RlOworICAgIHVwZGF0ZVNjcm9sbGJhcnMobV9kYXRhLT5zY3JvbGxPZmZzZXQp
OworfQorCit2b2lkIFNjcm9sbFZpZXc6OnNldFN0YXRpY0JhY2tncm91bmQoYm9vbCBmbGFnKQor
eworICAgIG1fZGF0YS0+aGFzU3RhdGljQmFja2dyb3VuZCA9IGZsYWc7Cit9CisKK3ZvaWQgU2Ny
b2xsVmlldzo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiBuZXdHZW9tZXRyeSkKK3sK
KyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisgICAgSW50UmVjdCBvbGRHZW9tZXRyeSA9IGZy
YW1lR2VvbWV0cnkoKTsKKyAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkobmV3R2VvbWV0cnkp
OworCisgICAgaWYgKG5ld0dlb21ldHJ5ID09IG9sZEdlb21ldHJ5KQorICAgICAgICByZXR1cm47
CisgICAgaWYgKG5ld0dlb21ldHJ5LndpZHRoKCkgIT0gb2xkR2VvbWV0cnkud2lkdGgoKSB8fCBu
ZXdHZW9tZXRyeS5oZWlnaHQoKSAhPSBvbGRHZW9tZXRyeS5oZWlnaHQoKSkgeworICAgICAgICB1
cGRhdGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8RnJhbWVWaWV3Kj4odGhpcyktPnNldE5lZWRzTGF5b3V0KCk7CisgICAgfQorCisgICAgZ2Vv
bWV0cnlDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBj
aGlsZCkKK3sgCisgICAgY2hpbGQtPnNldFBhcmVudCh0aGlzKTsKKyAgICBjaGlsZC0+c2V0Q29u
dGFpbmluZ1dpbmRvdyhjb250YWluaW5nV2luZG93KCkpOworICAgIG1fZGF0YS0+Y2hpbGRyZW4u
YWRkKGNoaWxkKTsKKworICAgIGlmIChjaGlsZC0+Z3RrV2lkZ2V0KCkpCisgICAgICAgIGd0a19j
b250YWluZXJfYWRkKEdUS19DT05UQUlORVIoY29udGFpbmluZ1dpbmRvdygpKSwgY2hpbGQtPmd0
a1dpZGdldCgpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNo
aWxkKQoreworICAgIGNoaWxkLT5zZXRQYXJlbnQoMCk7CisgICAgbV9kYXRhLT5jaGlsZHJlbi5y
ZW1vdmUoY2hpbGQpOworCisgICAgaWYgKGNoaWxkLT5ndGtXaWRnZXQoKSAmJiBHVEtfV0lER0VU
KGNvbnRhaW5pbmdXaW5kb3coKSkgPT0gR1RLX1dJREdFVChjaGlsZC0+Z3RrV2lkZ2V0KCkpLT5w
YXJlbnQpCisgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIoY29udGFp
bmluZ1dpbmRvdygpKSwgY2hpbGQtPmd0a1dpZGdldCgpKTsKK30KKwordm9pZCBTY3JvbGxWaWV3
OjpzY3JvbGxSZWN0SW50b1ZpZXdSZWN1cnNpdmVseShjb25zdCBJbnRSZWN0JiByKQoreworICAg
IEludFBvaW50IHAobWF4KDAsIHIueCgpKSwgbWF4KDAsIHIueSgpKSk7CisgICAgU2Nyb2xsVmll
dyogdmlldyA9IHRoaXM7CisgICAgd2hpbGUgKHZpZXcpIHsKKyAgICAgICAgdmlldy0+c2V0Q29u
dGVudHNQb3MocC54KCksIHAueSgpKTsKKyAgICAgICAgcC5tb3ZlKHZpZXctPngoKSAtIHZpZXct
PnNjcm9sbE9mZnNldCgpLndpZHRoKCksIHZpZXctPnkoKSAtIHZpZXctPnNjcm9sbE9mZnNldCgp
LmhlaWdodCgpKTsKKyAgICAgICAgdmlldyA9IHN0YXRpY19jYXN0PFNjcm9sbFZpZXcqPih2aWV3
LT5wYXJlbnQoKSk7CisgICAgfQorfQorCitib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lk
IFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQoreworICAgIC8v
IERldGVybWluZSBob3cgbXVjaCB3ZSB3YW50IHRvIHNjcm9sbC4gIElmIHdlIGNhbiBtb3ZlIGF0
IGFsbCwgd2Ugd2lsbCBhY2NlcHQgdGhlIGV2ZW50LgorICAgIEludFNpemUgbWF4U2Nyb2xsRGVs
dGEgPSBtYXhpbXVtU2Nyb2xsKCk7CisgICAgaWYgKChlLmRlbHRhWCgpIDwgMCAmJiBtYXhTY3Jv
bGxEZWx0YS53aWR0aCgpID4gMCkgfHwKKyAgICAgICAgKGUuZGVsdGFYKCkgPiAwICYmIHNjcm9s
bE9mZnNldCgpLndpZHRoKCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVkoKSA8IDAgJiYgbWF4
U2Nyb2xsRGVsdGEuaGVpZ2h0KCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVkoKSA+IDAgJiYg
c2Nyb2xsT2Zmc2V0KCkuaGVpZ2h0KCkgPiAwKSkKKyAgICAgICAgZS5hY2NlcHQoKTsKKworICAg
IHNjcm9sbEJ5KGUuZGVsdGFYKCkgKiBMSU5FX1NURVAsIGUuZGVsdGFZKCkgKiBMSU5FX1NURVAp
OworfQorCit2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYg
ZGVzaXJlZE9mZnNldCkKK3sKKyAgICAvLyBEb24ndCBhbGxvdyByZS1lbnRyYW5jeSBpbnRvIHRo
aXMgZnVuY3Rpb24uCisgICAgaWYgKG1fZGF0YS0+aW5VcGRhdGVTY3JvbGxiYXJzKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIGhlcmUgc28gd2UgZG9uJ3Qg
aGF2ZSB0byBmb3JrIEZyYW1lVmlldy5oLy5jcHAuCisgICAgLy8gSW4gdGhlIGVuZCwgRnJhbWVW
aWV3IHNob3VsZCBqdXN0IG1lcmdlIHdpdGggU2Nyb2xsVmlldy4KKyAgICBpZiAoc3RhdGljX2Nh
c3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyktPmZyYW1lKCktPnByb2hpYml0c1Njcm9sbGluZygp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPmluVXBkYXRlU2Nyb2xsYmFycyA9IHRy
dWU7CisKKyAgICBib29sIGhhc1ZlcnRpY2FsU2Nyb2xsYmFyID0gbV9kYXRhLT52QmFyOworICAg
IGJvb2wgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciA9IG1fZGF0YS0+aEJhcjsKKyAgICBib29sIG9s
ZEhhc1ZlcnRpY2FsID0gaGFzVmVydGljYWxTY3JvbGxiYXI7CisgICAgYm9vbCBvbGRIYXNIb3Jp
em9udGFsID0gaGFzSG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICBTY3JvbGxiYXJNb2RlIGhTY3Jv
bGwgPSBtX2RhdGEtPmhTY3JvbGxiYXJNb2RlOworICAgIFNjcm9sbGJhck1vZGUgdlNjcm9sbCA9
IG1fZGF0YS0+dlNjcm9sbGJhck1vZGU7CisKKyAgICBjb25zdCBpbnQgY1ZlcnRpY2FsV2lkdGgg
PSBQbGF0Zm9ybVNjcm9sbGJhcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpOworICAgIGNvbnN0
IGludCBjSG9yaXpvbnRhbEhlaWdodCA9IFBsYXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9udGFsU2Ny
b2xsYmFySGVpZ2h0KCk7CisKKyAgICBmb3IgKGludCBwYXNzID0gMDsgcGFzcyA8IDI7IHBhc3Mr
KykgeworICAgICAgICBib29sIHNjcm9sbHNWZXJ0aWNhbGx5OworICAgICAgICBib29sIHNjcm9s
bHNIb3Jpem9udGFsbHk7CisKKyAgICAgICAgaWYgKCFtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVz
c2VkICYmIChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gfHwgdlNjcm9sbCA9PSBTY3JvbGxiYXJB
dXRvKSkgeworICAgICAgICAgICAgLy8gRG8gYSBsYXlvdXQgaWYgcGVuZGluZyBiZWZvcmUgY2hl
Y2tpbmcgaWYgc2Nyb2xsYmFycyBhcmUgbmVlZGVkLgorICAgICAgICAgICAgaWYgKGhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyICE9IG9sZEhhc1ZlcnRpY2FsIHx8IGhhc0hvcml6b250YWxTY3JvbGxiYXIg
IT0gb2xkSGFzSG9yaXpvbnRhbCkKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZVZp
ZXcqPih0aGlzKS0+bGF5b3V0KCk7CisgICAgICAgICAgICAgCisgICAgICAgICAgICBzY3JvbGxz
VmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAodlNjcm9sbCA9
PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzSGVpZ2h0KCkgPiBoZWlnaHQoKSk7CisgICAgICAg
ICAgICBpZiAoc2Nyb2xsc1ZlcnRpY2FsbHkpCisgICAgICAgICAgICAgICAgc2Nyb2xsc0hvcml6
b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKSB8fCAoaFNjcm9sbCA9PSBT
Y3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzV2lkdGgoKSArIGNWZXJ0aWNhbFdpZHRoID4gd2lkdGgo
KSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRh
bGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9s
bGJhckF1dG8gJiYgY29udGVudHNXaWR0aCgpID4gd2lkdGgoKSk7CisgICAgICAgICAgICAgICAg
aWYgKHNjcm9sbHNIb3Jpem9udGFsbHkpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbHNWZXJ0
aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNj
cm9sbGJhckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSArIGNIb3Jpem9udGFsSGVpZ2h0ID4gaGVp
Z2h0KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgc2Nyb2xsc0hvcml6b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8pID8g
aGFzSG9yaXpvbnRhbFNjcm9sbGJhciA6IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09uKTsK
KyAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0
bykgPyBoYXNWZXJ0aWNhbFNjcm9sbGJhciA6ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09u
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhhc1ZlcnRpY2FsU2Nyb2xsYmFy
ICE9IHNjcm9sbHNWZXJ0aWNhbGx5KSB7CisgICAgICAgICAgICBtX2RhdGEtPnNldEhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKHNjcm9sbHNWZXJ0aWNhbGx5KTsKKyAgICAgICAgICAgIGhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyID0gc2Nyb2xsc1ZlcnRpY2FsbHk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
aGFzSG9yaXpvbnRhbFNjcm9sbGJhciAhPSBzY3JvbGxzSG9yaXpvbnRhbGx5KSB7CisgICAgICAg
ICAgICBtX2RhdGEtPnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsc0hvcml6b250YWxs
eSk7CisgICAgICAgICAgICBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gc2Nyb2xsc0hvcml6b250
YWxseTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBw
YWdlIHN0ZXAvbGluZSBzdGVwKS4KKyAgICBJbnRTaXplIG1heFNjcm9sbFBvc2l0aW9uKGNvbnRl
bnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpLCBjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhl
aWdodCgpKTsKKyAgICBJbnRTaXplIHNjcm9sbCA9IGRlc2lyZWRPZmZzZXQuc2hydW5rVG8obWF4
U2Nyb2xsUG9zaXRpb24pOworICAgIHNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisKKyAg
ICBpZiAobV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudCkgeworICAgICAgICBtX2RhdGEtPmhv
cml6b250YWxBZGp1c3RtZW50LT5wYWdlX3NpemUgPSB2aXNpYmxlV2lkdGgoKTsKKyAgICAgICAg
bV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudC0+c3RlcF9pbmNyZW1lbnQgPSBNYWdpY0d0a1Nj
cm9sbENvbnN0YW50OworICAgICAgICBtX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50LT51cHBl
ciA9IGNvbnRlbnRzV2lkdGgoKTsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZChtX2Rh
dGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKKworICAgICAgICBpZiAobV9kYXRhLT5zY3JvbGxP
ZmZzZXQud2lkdGgoKSAhPSBzY3JvbGwud2lkdGgoKSkgeworICAgICAgICAgICAgbV9kYXRhLT5o
b3Jpem9udGFsQWRqdXN0bWVudC0+dmFsdWUgPSBzY3JvbGwud2lkdGgoKTsKKyAgICAgICAgICAg
IGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQobV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVu
dCk7CisgICAgICAgIH0gCisgICAgfSBlbHNlIGlmIChtX2RhdGEtPmhCYXIpIHsKKyAgICAgICAg
aW50IGNsaWVudFdpZHRoID0gdmlzaWJsZVdpZHRoKCk7CisgICAgICAgIG1fZGF0YS0+aEJhci0+
c2V0RW5hYmxlZChjb250ZW50c1dpZHRoKCkgPiBjbGllbnRXaWR0aCk7CisgICAgICAgIGludCBw
YWdlU3RlcCA9IChjbGllbnRXaWR0aCAtIFBBR0VfS0VFUCk7CisgICAgICAgIGlmIChwYWdlU3Rl
cCA8IDApIHBhZ2VTdGVwID0gY2xpZW50V2lkdGg7CisgICAgICAgIEludFJlY3Qgb2xkUmVjdCht
X2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKSk7CisgICAgICAgIEludFJlY3QgaEJhclJlY3Qg
PSBJbnRSZWN0KDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgp
IC0gbV9kYXRhLT5oQmFyLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2lkdGgoKSAtIChtX2RhdGEtPnZCYXIgPyBtX2RhdGEtPnZCYXItPndpZHRoKCkgOiAw
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5oZWln
aHQoKSk7CisgICAgICAgIG1fZGF0YS0+aEJhci0+c2V0UmVjdChoQmFyUmVjdCk7CisgICAgICAg
IGlmICghbV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1fZGF0YS0+
aEJhci0+ZnJhbWVHZW9tZXRyeSgpKQorICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5pbnZhbGlk
YXRlKCk7CisKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAg
ICAgICAgICBtX2RhdGEtPmhCYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOworICAg
ICAgICBtX2RhdGEtPmhCYXItPnNldFN0ZXBzKExJTkVfU1RFUCwgcGFnZVN0ZXApOworICAgICAg
ICBtX2RhdGEtPmhCYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRlbnRzV2lkdGgo
KSk7CisgICAgICAgIG1fZGF0YS0+aEJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCkpOworICAg
ICAgICBpZiAobV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fZGF0
YS0+aEJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOyAKKyAgICB9IAorCisgICAg
aWYgKG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KSB7CisgICAgICAgIG1fZGF0YS0+dmVydGlj
YWxBZGp1c3RtZW50LT5wYWdlX3NpemUgPSB2aXNpYmxlSGVpZ2h0KCk7CisgICAgICAgIG1fZGF0
YS0+dmVydGljYWxBZGp1c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IE1hZ2ljR3RrU2Nyb2xsQ29u
c3RhbnQ7CisgICAgICAgIG1fZGF0YS0+dmVydGljYWxBZGp1c3RtZW50LT51cHBlciA9IGNvbnRl
bnRzSGVpZ2h0KCk7CisgICAgICAgIGd0a19hZGp1c3RtZW50X2NoYW5nZWQobV9kYXRhLT52ZXJ0
aWNhbEFkanVzdG1lbnQpOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbE9mZnNldC5oZWln
aHQoKSAhPSBzY3JvbGwuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+dmVydGljYWxB
ZGp1c3RtZW50LT52YWx1ZSA9IHNjcm9sbC5oZWlnaHQoKTsKKyAgICAgICAgICAgIGd0a19hZGp1
c3RtZW50X3ZhbHVlX2NoYW5nZWQobV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpOworICAgICAg
ICB9CisgICAgfSBlbHNlIGlmIChtX2RhdGEtPnZCYXIpIHsKKyAgICAgICAgaW50IGNsaWVudEhl
aWdodCA9IHZpc2libGVIZWlnaHQoKTsKKyAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRFbmFibGVk
KGNvbnRlbnRzSGVpZ2h0KCkgPiBjbGllbnRIZWlnaHQpOworICAgICAgICBpbnQgcGFnZVN0ZXAg
PSAoY2xpZW50SGVpZ2h0IC0gUEFHRV9LRUVQKTsKKyAgICAgICAgaWYgKHBhZ2VTdGVwIDwgMCkg
cGFnZVN0ZXAgPSBjbGllbnRIZWlnaHQ7CisgICAgICAgIEludFJlY3Qgb2xkUmVjdChtX2RhdGEt
PnZCYXItPmZyYW1lR2VvbWV0cnkoKSk7CisgICAgICAgIEludFJlY3QgdkJhclJlY3QgPSBJbnRS
ZWN0KHdpZHRoKCkgLSBtX2RhdGEtPnZCYXItPndpZHRoKCksIAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2RhdGEtPnZCYXItPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGhlaWdodCgpIC0gKG1fZGF0YS0+aEJhciA/IG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkgOiAwKSk7
CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0UmVjdCh2QmFyUmVjdCk7CisgICAgICAgIGlmICgh
bV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiBvbGRSZWN0ICE9IG1fZGF0YS0+dkJhci0+
ZnJhbWVHZW9tZXRyeSgpKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5pbnZhbGlkYXRlKCk7
CisKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAgICAgICAg
ICBtX2RhdGEtPnZCYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOworICAgICAgICBt
X2RhdGEtPnZCYXItPnNldFN0ZXBzKExJTkVfU1RFUCwgcGFnZVN0ZXApOworICAgICAgICBtX2Rh
dGEtPnZCYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgpKTsK
KyAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkpOworICAgICAg
ICBpZiAobV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fZGF0YS0+
dkJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOworICAgIH0KKworICAgIGlmIChv
bGRIYXNWZXJ0aWNhbCAhPSAobV9kYXRhLT52QmFyICE9IDApIHx8IG9sZEhhc0hvcml6b250YWwg
IT0gKG1fZGF0YS0+aEJhciAhPSAwKSkKKyAgICAgICAgZ2VvbWV0cnlDaGFuZ2VkKCk7CisKKyAg
ICAvLyBTZWUgaWYgb3VyIG9mZnNldCBoYXMgY2hhbmdlZCBpbiBhIHNpdHVhdGlvbiB3aGVyZSB3
ZSBtaWdodCBub3QgaGF2ZSBzY3JvbGxiYXJzLgorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVu
IGVkaXRpbmcgYSBib2R5IHdpdGggb3ZlcmZsb3c6aGlkZGVuIGFuZCBzY3JvbGxpbmcgdG8gcmV2
ZWFsIHNlbGVjdGlvbi4KKyAgICAvLyBJdCBjYW4gYWxzbyBoYXBwZW4gd2hlbiBtYXhpbWl6aW5n
IGEgd2luZG93IHRoYXQgaGFzIHNjcm9sbGJhcnMgKGJ1dCB0aGUgbmV3IG1heGltaXplZCByZXN1
bHQKKyAgICAvLyBkb2VzIG5vdCkuCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IHNjcm9sbCAt
IG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OworICAgIGlmIChzY3JvbGxEZWx0YSAhPSBJbnRTaXplKCkp
IHsKKyAgICAgICBtX2RhdGEtPnNjcm9sbE9mZnNldCA9IHNjcm9sbDsKKyAgICAgICBtX2RhdGEt
PnNjcm9sbEJhY2tpbmdTdG9yZShzY3JvbGxEZWx0YSk7CisgICAgfQorIAorICAgIG1fZGF0YS0+
aW5VcGRhdGVTY3JvbGxiYXJzID0gZmFsc2U7Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6Ondp
bmRvd1RvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KSBjb25zdAoreyAKKyAg
ICBJbnRQb2ludCB2aWV3UG9pbnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cod2luZG93
UG9pbnQpOworICAgIHJldHVybiB2aWV3UG9pbnQgKyBzY3JvbGxPZmZzZXQoKTsKK30KKworSW50
UG9pbnQgU2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyhjb25zdCBJbnRQb2ludCYgY29udGVu
dHNQb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCB2aWV3UG9pbnQgPSBjb250ZW50c1BvaW50
IC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgcmV0dXJuIGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
dmlld1BvaW50KTsgIAorfQorCitQbGF0Zm9ybVNjcm9sbGJhciogU2Nyb2xsVmlldzo6c2Nyb2xs
YmFyVW5kZXJNb3VzZShjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIG1vdXNlRXZlbnQpCit7IAor
ICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhtb3Vz
ZUV2ZW50LnBvcygpKTsKKyAgICBpZiAobV9kYXRhLT5oQmFyICYmIG1fZGF0YS0+aEJhci0+ZnJh
bWVHZW9tZXRyeSgpLmNvbnRhaW5zKHZpZXdQb2ludCkpCisgICAgICAgIHJldHVybiBtX2RhdGEt
PmhCYXIuZ2V0KCk7CisgICAgaWYgKG1fZGF0YS0+dkJhciAmJiBtX2RhdGEtPnZCYXItPmZyYW1l
R2VvbWV0cnkoKS5jb250YWlucyh2aWV3UG9pbnQpKQorICAgICAgICByZXR1cm4gbV9kYXRhLT52
QmFyLmdldCgpOworICAgIHJldHVybiAwOworfQorCitJbnRQb2ludCBTY3JvbGxWaWV3Ojpjb252
ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAoreworICAgIEludFBvaW50IG5ld1BvaW50ID0gcG9pbnQ7CisgICAgaWYgKGNoaWxk
ICE9IG1fZGF0YS0+aEJhciAmJiBjaGlsZCAhPSBtX2RhdGEtPnZCYXIpCisgICAgICAgIG5ld1Bv
aW50ID0gcG9pbnQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0
Q2hpbGRUb1NlbGYoY2hpbGQsIG5ld1BvaW50KTsKK30KKworSW50UG9pbnQgU2Nyb2xsVmlldzo6
Y29udmVydFNlbGZUb0NoaWxkKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBw
b2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBuZXdQb2ludCA9IHBvaW50OworICAgIGlmIChj
aGlsZCAhPSBtX2RhdGEtPmhCYXIgJiYgY2hpbGQgIT0gbV9kYXRhLT52QmFyKQorICAgICAgICBu
ZXdQb2ludCA9IHBvaW50ICsgc2Nyb2xsT2Zmc2V0KCk7CisgICAgcmV0dXJuIFdpZGdldDo6Y29u
dmVydFNlbGZUb0NoaWxkKGNoaWxkLCBuZXdQb2ludCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6
cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgaGVyZSBzbyB3ZSBkb24ndCBoYXZlIHRvIGZvcmsg
RnJhbWVWaWV3LmgvLmNwcC4KKyAgICAvLyBJbiB0aGUgZW5kLCBGcmFtZVZpZXcgc2hvdWxkIGp1
c3QgbWVyZ2Ugd2l0aCBTY3JvbGxWaWV3LgorICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKKwor
ICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEludFJlY3QgZG9jdW1lbnREaXJ0eVJlY3QgPSByZWN0OworICAgIGRvY3VtZW50RGlydHlS
ZWN0LmludGVyc2VjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgY29udGV4dC0+c2F2ZSgpOwor
CisgICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgpKTsKKyAgICBkb2N1bWVudERpcnR5UmVj
dC5tb3ZlKC14KCksIC15KCkpOworCisgICAgY29udGV4dC0+dHJhbnNsYXRlKC1jb250ZW50c1go
KSwgLWNvbnRlbnRzWSgpKTsKKyAgICBkb2N1bWVudERpcnR5UmVjdC5tb3ZlKGNvbnRlbnRzWCgp
LCBjb250ZW50c1koKSk7CisKKyAgICBjb250ZXh0LT5jbGlwKGVuY2xvc2luZ0ludFJlY3Qodmlz
aWJsZUNvbnRlbnRSZWN0KCkpKTsKKyAgICBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih0
aGlzKS0+ZnJhbWUoKS0+cGFpbnQoY29udGV4dCwgZG9jdW1lbnREaXJ0eVJlY3QpOworICAgIGNv
bnRleHQtPnJlc3RvcmUoKTsKKworICAgIC8vIE5vdyBwYWludCB0aGUgc2Nyb2xsYmFycy4KKyAg
ICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgKG1fZGF0YS0+aEJhciB8fCBt
X2RhdGEtPnZCYXIpKSB7CisgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgSW50UmVj
dCBzY3JvbGxWaWV3RGlydHlSZWN0ID0gcmVjdDsKKyAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVj
dC5pbnRlcnNlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRl
KHgoKSwgeSgpKTsKKyAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5tb3ZlKC14KCksIC15KCkp
OworICAgICAgICBpZiAobV9kYXRhLT5oQmFyKQorICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5w
YWludChjb250ZXh0LCBzY3JvbGxWaWV3RGlydHlSZWN0KTsKKyAgICAgICAgaWYgKG1fZGF0YS0+
dkJhcikKKyAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+cGFpbnQoY29udGV4dCwgc2Nyb2xsVmll
d0RpcnR5UmVjdCk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRklYTUU6IFRPRE86IENoZWNr
IGlmIHRoYXQgd29ya3Mgd2l0aCBSVEwKKyAgICAgICAgICovCisgICAgICAgIC8vIEZpbGwgdGhl
IHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZS4KKyAgICAgICAgSW50UmVjdCBoQ29ybmVyOworICAg
ICAgICBpZiAobV9kYXRhLT5oQmFyICYmIHdpZHRoKCkgLSBtX2RhdGEtPmhCYXItPndpZHRoKCkg
PiAwKSB7CisgICAgICAgICAgICBoQ29ybmVyID0gSW50UmVjdChtX2RhdGEtPmhCYXItPndpZHRo
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1fZGF0YS0+aEJh
ci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gbV9k
YXRhLT5oQmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRh
LT5oQmFyLT5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAoaENvcm5lci5pbnRlcnNlY3RzKHNj
cm9sbFZpZXdEaXJ0eVJlY3QpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPmZpbGxSZWN0KGhD
b3JuZXIsIENvbG9yOjp3aGl0ZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9kYXRhLT52
QmFyICYmIGhlaWdodCgpIC0gbV9kYXRhLT52QmFyLT5oZWlnaHQoKSA+IDApIHsKKyAgICAgICAg
ICAgIEludFJlY3QgdkNvcm5lcih3aWR0aCgpIC0gbV9kYXRhLT52QmFyLT53aWR0aCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+aGVpZ2h0KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT52QmFyLT53aWR0aCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9kYXRhLT52QmFyLT5oZWlnaHQoKSk7CisgICAg
ICAgICAgICBpZiAodkNvcm5lciAhPSBoQ29ybmVyICYmIHZDb3JuZXIuaW50ZXJzZWN0cyhzY3Jv
bGxWaWV3RGlydHlSZWN0KSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdCh2Q29y
bmVyLCBDb2xvcjo6d2hpdGUpOworICAgICAgICB9CisKKyAgICAgICAgY29udGV4dC0+cmVzdG9y
ZSgpOworICAgIH0KK30KKworLyoKKyAqIHVwZGF0ZSBjaGlsZHJlbiBidXQgbm9yIG91ciBzY3Jv
bGxiYXJzLiBUaGV5IHNob3VsZCBub3Qgc2Nyb2xsIHdoZW4KKyAqIHdlIHNjcm9sbCBvdXIgY29u
dGVudC4KKyAqLwordm9pZCBTY3JvbGxWaWV3OjpnZW9tZXRyeUNoYW5nZWQoKSBjb25zdAorewor
ICAgIEhhc2hTZXQ8V2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fZGF0YS0+Y2hpbGRy
ZW4uZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFdpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBjdXJy
ZW50ID0gbV9kYXRhLT5jaGlsZHJlbi5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50
KQorICAgICAgICAoKmN1cnJlbnQpLT5nZW9tZXRyeUNoYW5nZWQoKTsKK30KKwordm9pZCBTY3Jv
bGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHkgZ3JhbnVsYXJpdHkpCit7CisgICAgaWYgICgoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRp
cmVjdGlvbiA9PSBTY3JvbGxEb3duKSAmJiBtX2RhdGEtPnZCYXIpCisgICAgICAgIG1fZGF0YS0+
dkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworICAgIGVsc2UgaWYgKG1fZGF0
YS0+aEJhcikKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRS
ZWN0JiBjb250YWluaW5nV2luZG93UmVjdCkKK3sKKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7
CisgICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxjb25zdCBGcmFt
ZVZpZXcqPih0aGlzKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJh
bWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0
dXJuOworICAgIHBhZ2UtPmNocm9tZSgpLT5hZGRUb0RpcnR5UmVnaW9uKGNvbnRhaW5pbmdXaW5k
b3dSZWN0KTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxCYWNraW5nU3RvcmUoaW50IGR4
LCBpbnQgZHksIGNvbnN0IEludFJlY3QmIHNjcm9sbFZpZXdSZWN0LCBjb25zdCBJbnRSZWN0JiBj
bGlwUmVjdCkKK3sKKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisgICAgY29uc3QgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKTsKKyAg
ICBQYWdlKiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5w
YWdlKCkgOiAwOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhZ2UtPmNo
cm9tZSgpLT5zY3JvbGxCYWNraW5nU3RvcmUoZHgsIGR5LCBzY3JvbGxWaWV3UmVjdCwgY2xpcFJl
Y3QpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCit7CisgICAg
QVNTRVJUKGlzRnJhbWVWaWV3KCkpOworICAgIGNvbnN0IEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyk7CisgICAgUGFnZSogcGFnZSA9IGZy
YW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBwYWdlLT5jaHJvbWUoKS0+dXBkYXRlQmFj
a2luZ1N0b3JlKCk7Cit9CisKK0hhc2hTZXQ8V2lkZ2V0Kj4qIFNjcm9sbFZpZXc6OmNoaWxkcmVu
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gJm1fZGF0YS0+Y2hpbGRyZW47Cit9CisKK30KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1NvdW5kR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dkay9Tb3VuZEdkay5jcHAJKHJldmlzaW9uIDI1MTY5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvU291bmRHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJAY29sbGFib3Jh
LmNvLnVrPgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaW5jbHVkZSAiU291bmQuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi12b2lkIHN5c3RlbUJlZXAoKQotewotICAgIGdka19iZWVw
KCk7Ci19Ci0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1NvdW5kR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9T
b3VuZEd0ay5jcHAJKHJldmlzaW9uIDI1MTY5KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9T
b3VuZEdkay5jcHA6MjUxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9Tb3VuZEd0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xsYWJvcmEuY28udWs+CisgKgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJTb3Vu
ZC5oIgorCisjaW5jbHVkZSA8Z2RrL2dkay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgc3lzdGVtQmVlcCgpCit7CisgICAgZ2RrX2JlZXAoKTsKK30KKworfQorCisvLyB2aW06IHRz
PTQgc3c9NCBldApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJKHJl
dmlzaW9uIDI1MTY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAotICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtV2hlZWxFdmVudC5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2
ZW50U2Nyb2xsKiBldmVudCkKLXsKLSAgICBtX2RlbHRhWCA9IDA7Ci0gICAgbV9kZWx0YVkgPSAw
OwotCi0gICAgaWYgKGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9VUCkKLSAgICAgICAg
bV9kZWx0YVkgPSAtMTIwOwotICAgIGVsc2UgaWYgKGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1ND
Uk9MTF9MRUZUKQotICAgICAgICBtX2RlbHRhWCA9IC0xMjA7Ci0gICAgZWxzZSBpZiAoZXZlbnQt
PmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1JJR0hUKQotICAgICAgICBtX2RlbHRhWCA9IDEyMDsK
LSAgICBlbHNlCi0gICAgICAgIG1fZGVsdGFZID0gMTIwOwotCi0gICAgbV9wb3NpdGlvbiA9IElu
dFBvaW50KChpbnQpZXZlbnQtPngsIChpbnQpZXZlbnQtPnkpOwotICAgIG1fZ2xvYmFsUG9zaXRp
b24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54X3Jvb3QsIChpbnQpZXZlbnQtPnlfcm9vdCk7Ci0g
ICAgbV9pc0FjY2VwdGVkID0gZmFsc2U7Ci0gICAgbV9zaGlmdEtleSA9IGV2ZW50LT5zdGF0ZSAm
IEdES19TSElGVF9NQVNLOwotICAgIG1fY3RybEtleSA9IGV2ZW50LT5zdGF0ZSAmIEdES19DT05U
Uk9MX01BU0s7Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfTU9EMV9NQVNLOwot
ICAgIG1fbWV0YUtleSA9IGV2ZW50LT5zdGF0ZSAmIEdES19NT0QyX01BU0s7Ci0gICAgbV9pc0Nv
bnRpbnVvdXMgPSBmYWxzZTsKLX0KLQotfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hl
ZWxFdmVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxF
dmVudEd0ay5jcHAJKHJldmlzaW9uIDI1MTY5KQkoZnJvbSBXZWJDb3JlL3BsYXRmb3JtL2dkay9X
aGVlbEV2ZW50R2RrLmNwcDoyNTE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1doZWVsRXZl
bnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKworI2luY2x1ZGUgPGdkay9nZGsuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxF
dmVudChHZGtFdmVudFNjcm9sbCogZXZlbnQpCit7CisgICAgbV9kZWx0YVggPSAwOworICAgIG1f
ZGVsdGFZID0gMDsKKworICAgIGlmIChldmVudC0+ZGlyZWN0aW9uID09IEdES19TQ1JPTExfVVAp
CisgICAgICAgIG1fZGVsdGFZID0gLTEyMDsKKyAgICBlbHNlIGlmIChldmVudC0+ZGlyZWN0aW9u
ID09IEdES19TQ1JPTExfTEVGVCkKKyAgICAgICAgbV9kZWx0YVggPSAtMTIwOworICAgIGVsc2Ug
aWYgKGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9SSUdIVCkKKyAgICAgICAgbV9kZWx0
YVggPSAxMjA7CisgICAgZWxzZQorICAgICAgICBtX2RlbHRhWSA9IDEyMDsKKworICAgIG1fcG9z
aXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54LCAoaW50KWV2ZW50LT55KTsKKyAgICBtX2ds
b2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+eF9yb290LCAoaW50KWV2ZW50LT55
X3Jvb3QpOworICAgIG1faXNBY2NlcHRlZCA9IGZhbHNlOworICAgIG1fc2hpZnRLZXkgPSBldmVu
dC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKKyAgICBtX2N0cmxLZXkgPSBldmVudC0+c3RhdGUg
JiBHREtfQ09OVFJPTF9NQVNLOworICAgIG1fYWx0S2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX01P
RDFfTUFTSzsKKyAgICBtX21ldGFLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfTU9EMl9NQVNLOwor
ICAgIG1faXNDb250aW51b3VzID0gZmFsc2U7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ2RrL1dpZGdldEdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
V2lkZ2V0R2RrLmNwcAkocmV2aXNpb24gMjUxNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9X
aWRnZXRHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI4OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20gCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJXaWRnZXQuaCIKLQotI2luY2x1ZGUgIkN1cnNvci5oIgotI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgotCi0jaW5jbHVkZSA8Z2RrL2dkay5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBXaWRnZXRQcml2YXRlIHsKLXB1YmxpYzoKLSAgICBH
dGtXaWRnZXQqIHdpZGdldDsKLSAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKLSAgICBJbnRSZWN0
IGZyYW1lUmVjdDsKLQotICAgIFNjcm9sbFZpZXcqIHBhcmVudDsKLSAgICBHdGtDb250YWluZXIq
IGNvbnRhaW5pbmdXaW5kb3c7Ci0gICAgYm9vbCBzdXBwcmVzc0ludmFsaWRhdGlvbjsKLQotICAg
IEdka0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
d2lkZ2V0ID8gd2lkZ2V0LT53aW5kb3cgOiAwOwotICAgIH0KLX07Ci0KLVdpZGdldDo6V2lkZ2V0
KCkKLSAgICA6IGRhdGEobmV3IFdpZGdldFByaXZhdGUpCi17Ci0gICAgZGF0YS0+d2lkZ2V0ID0g
MDsKLSAgICBkYXRhLT5wYXJlbnQgPSAwOwotICAgIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3cgPSAw
OwotICAgIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uID0gZmFsc2U7Ci19Ci0KLUd0a1dpZGdl
dCogV2lkZ2V0OjpndGtXaWRnZXQoKSBjb25zdAotewotICAgIHJldHVybiBkYXRhLT53aWRnZXQ7
Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRHdGtXaWRnZXQoR3RrV2lkZ2V0KiB3aWRnZXQpCi17Ci0g
ICAgZGF0YS0+d2lkZ2V0ID0gd2lkZ2V0OwotfQotCi1XaWRnZXQ6On5XaWRnZXQoKQotewotICAg
IGRlbGV0ZSBkYXRhOwotfQotCi12b2lkIFdpZGdldDo6c2V0Q29udGFpbmluZ1dpbmRvdyhHdGtD
b250YWluZXIqIGNvbnRhaW5pbmdXaW5kb3cpCi17Ci0gICAgZGF0YS0+Y29udGFpbmluZ1dpbmRv
dyA9IGNvbnRhaW5pbmdXaW5kb3c7Ci19Ci0KLUd0a0NvbnRhaW5lciogV2lkZ2V0Ojpjb250YWlu
aW5nV2luZG93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGF0YS0+Y29udGFpbmluZ1dpbmRvdzsK
LX0KLQotdm9pZCBXaWRnZXQ6OnNldENsaWVudChXaWRnZXRDbGllbnQqIGMpCi17Ci0gICAgZGF0
YS0+Y2xpZW50ID0gYzsKLX0KLQotV2lkZ2V0Q2xpZW50KiBXaWRnZXQ6OmNsaWVudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGRhdGEtPmNsaWVudDsKLX0KLQotSW50UmVjdCBXaWRnZXQ6OmZyYW1l
R2VvbWV0cnkoKSBjb25zdAotewotICAgIHJldHVybiBkYXRhLT5mcmFtZVJlY3Q7Ci19Ci0KLXZv
aWQgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgZGF0
YS0+ZnJhbWVSZWN0ID0gcjsKLX0KLQotdm9pZCBXaWRnZXQ6OnNldFBhcmVudChTY3JvbGxWaWV3
KiB2KQotewotICAgIGRhdGEtPnBhcmVudCA9IHY7Ci19Ci0KLVNjcm9sbFZpZXcqIFdpZGdldDo6
cGFyZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGF0YS0+cGFyZW50OwotfQotIAotdm9pZCBX
aWRnZXQ6OnNldEZvY3VzKCkKLXsKLSAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoZ3RrV2lkZ2V0
KCkgPyBndGtXaWRnZXQoKSA6IEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSk7Ci19Ci0K
LXZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCi17Ci0gICAgR2Rr
Q3Vyc29yKiBwY3VyID0gY3Vyc29yLmltcGwoKTsKLSAgICBpZiAoIXBjdXIpCi0gICAgICAgIHJl
dHVybjsKLSAgICBnZGtfd2luZG93X3NldF9jdXJzb3IoZGF0YS0+Z2RrRHJhd2FibGUoKSA/IEdE
S19XSU5ET1coZGF0YS0+Z2RrRHJhd2FibGUoKSkgOiBHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5k
b3coKSktPndpbmRvdywgcGN1cik7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzaG93KCkKLXsKLSAgICBp
ZiAoIWd0a1dpZGdldCgpKQotICAgICAgICAgcmV0dXJuOwotICAgIGd0a193aWRnZXRfc2hvdyhn
dGtXaWRnZXQoKSk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpoaWRlKCkKLXsKLSAgICBpZiAoIWd0a1dp
ZGdldCgpKQotICAgICAgICAgcmV0dXJuOwotICAgIGd0a193aWRnZXRfaGlkZShndGtXaWRnZXQo
KSk7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRFbmFibGVkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotYm9vbCBXaWRnZXQ6OmlzRW5hYmxlZCgpIGNvbnN0Ci17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgV2lkZ2V0OjpyZW1v
dmVGcm9tUGFyZW50KCkKLXsKLSAgICBpZiAocGFyZW50KCkpCi0gICAgICAgIHBhcmVudCgpLT5y
ZW1vdmVDaGlsZCh0aGlzKTsKLX0KLQotLyoKLSAqIFN0cmF0ZWd5IHRvIHBhaW50aW5nIGEgV2lk
Z2V0OgotICogIDEuKSBkbyBub3QgcGFpbnQgaWYgdGhlcmUgaXMgbm8gR3RrV2lkZ2V0IHNldAot
ICogIDIuKSBXZSBhc3N1bWUgdGhhdCBHVEtfTk9fV0lORE9XIGlzIHNldCBhbmQgdGhhdCBnZW9t
ZXRyeUNoYW5nZWQgcG9zaXRpb25lZAotICogICAgICB0aGUgd2lkZ2V0IGNvcnJlY3RseS4gQVRN
IHdlIGRvIG5vdCBob25vciB0aGUgR3JhcGhpY3NDb250ZXh0IHRyYW5zbGF0aW9uLgotICovCi12
b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JikKLXsKLSAgICBpZiAoIWd0a1dpZGdldCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHdGtX
aWRnZXQqIHdpZGdldCA9IGd0a1dpZGdldCgpOwotICAgIEFTU0VSVChHVEtfV0lER0VUX05PX1dJ
TkRPVyh3aWRnZXQpKTsKLQotICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9uZXcoR0RL
X0VYUE9TRSk7Ci0gICAgZXZlbnQtPmV4cG9zZSA9ICpjb250ZXh0LT5nZGtFeHBvc2VFdmVudCgp
OwotICAgIGV2ZW50LT5leHBvc2UucmVnaW9uID0gZ3RrX3dpZGdldF9yZWdpb25faW50ZXJzZWN0
KHdpZGdldCwgZXZlbnQtPmV4cG9zZS5yZWdpb24pOwotCi0gICAgLyoKLSAgICAgKiBUaGlzIHdp
bGwgYmUgdW5yZWYnZWQgYnkgZ2RrX2V2ZW50X2ZyZWUuCi0gICAgICovCi0gICAgZ19vYmplY3Rf
cmVmKGV2ZW50LT5leHBvc2Uud2luZG93KTsKLQotICAgIC8qCi0gICAgICogSWYgd2UgYXJlIGdv
aW5nIHRvIHBhaW50IGRvIHRoZSB0cmFuc2xhdGlvbiBhbmQgR3RrQWxsb2NhdGlvbiBtYW5pcHVs
YXRpb24uCi0gICAgICovCi0gICAgaWYgKCFnZGtfcmVnaW9uX2VtcHR5KGV2ZW50LT5leHBvc2Uu
cmVnaW9uKSkgewotICAgICAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5leHBvc2Uu
cmVnaW9uLCAmZXZlbnQtPmV4cG9zZS5hcmVhKTsKLSAgICAgICAgZ3RrX3dpZGdldF9zZW5kX2V4
cG9zZSh3aWRnZXQsIGV2ZW50KTsKLSAgICB9Ci0KLSAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7
Ci19Ci0KLXZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBXaWRnZXQ6OmludmFsaWRhdGUoKQotewotICAgIGludmFsaWRh
dGVSZWN0KEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKLX0KLQotdm9pZCBXaWRn
ZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKGRhdGEt
PnN1cHByZXNzSW52YWxpZGF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXBhcmVu
dCgpKSB7Ci0gICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQoY29u
dGFpbmluZ1dpbmRvdygpKSwgcmVjdC54KCksIHJlY3QueSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBp
ZiAoaXNGcmFtZVZpZXcoKSkKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRo
aXMpLT5hZGRUb0RpcnR5UmVnaW9uKHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgLy8gR2V0IHRoZSByb290IHdpZGdldC4KLSAgICBTY3JvbGxWaWV3KiBvdXRlcm1vc3RWaWV3
ID0gcGFyZW50KCk7Ci0gICAgd2hpbGUgKG91dGVybW9zdFZpZXcgJiYgb3V0ZXJtb3N0Vmlldy0+
cGFyZW50KCkpCi0gICAgICAgIG91dGVybW9zdFZpZXcgPSBvdXRlcm1vc3RWaWV3LT5wYXJlbnQo
KTsKLSAgICBpZiAoIW91dGVybW9zdFZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJl
Y3Qgd2luZG93UmVjdCA9IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3cocmVjdCk7Ci0gICAgZ3Rr
X3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpLCB3
aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2luZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgpKTsKLSAgICBvdXRl
cm1vc3RWaWV3LT5hZGRUb0RpcnR5UmVnaW9uKHdpbmRvd1JlY3QpOwotfQotCi1JbnRQb2ludCBX
aWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBj
b25zdAotewotICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gcG9pbnQ7Ci0gICAgZm9yIChjb25z
dCBXaWRnZXQgKnBhcmVudFdpZGdldCA9IHBhcmVudCgpLCAqY2hpbGRXaWRnZXQgPSB0aGlzOwot
ICAgICAgICAgcGFyZW50V2lkZ2V0OwotICAgICAgICAgY2hpbGRXaWRnZXQgPSBwYXJlbnRXaWRn
ZXQsIHBhcmVudFdpZGdldCA9IHBhcmVudFdpZGdldC0+cGFyZW50KCkpCi0gICAgICAgIHdpbmRv
d1BvaW50ID0gcGFyZW50V2lkZ2V0LT5jb252ZXJ0Q2hpbGRUb1NlbGYoY2hpbGRXaWRnZXQsIHdp
bmRvd1BvaW50KTsKLSAgICByZXR1cm4gd2luZG93UG9pbnQ7Ci19Ci0KLUludFBvaW50IFdpZGdl
dDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29u
c3QKLXsKLSAgICBJbnRQb2ludCB3aWRnZXRQb2ludCA9IHBvaW50OwotICAgIGZvciAoY29uc3Qg
V2lkZ2V0ICpwYXJlbnRXaWRnZXQgPSBwYXJlbnQoKSwgKmNoaWxkV2lkZ2V0ID0gdGhpczsKLSAg
ICAgICAgIHBhcmVudFdpZGdldDsKLSAgICAgICAgIGNoaWxkV2lkZ2V0ID0gcGFyZW50V2lkZ2V0
LCBwYXJlbnRXaWRnZXQgPSBwYXJlbnRXaWRnZXQtPnBhcmVudCgpKQotICAgICAgICB3aWRnZXRQ
b2ludCA9IHBhcmVudFdpZGdldC0+Y29udmVydFNlbGZUb0NoaWxkKGNoaWxkV2lkZ2V0LCB3aWRn
ZXRQb2ludCk7Ci0gICAgcmV0dXJuIHdpZGdldFBvaW50OwotfQotCi1JbnRSZWN0IFdpZGdldDo6
Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAotewot
ICAgIEludFJlY3QgY29udmVydGVkUmVjdCA9IHJlY3Q7Ci0gICAgY29udmVydGVkUmVjdC5zZXRM
b2NhdGlvbihjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnZlcnRlZFJlY3QubG9jYXRpb24o
KSkpOwotICAgIHJldHVybiBjb252ZXJ0ZWRSZWN0OwotfQotCi1JbnRQb2ludCBXaWRnZXQ6OmNv
bnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSArIGNoaWxkLT54KCks
IHBvaW50LnkoKSArIGNoaWxkLT55KCkpOwotfQotIAotSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0
U2VsZlRvQ2hpbGQoY29uc3QgV2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBj
b25zdAotewotICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkgLSBjaGlsZC0+eCgpLCBwb2lu
dC55KCkgLSBjaGlsZC0+eSgpKTsKLX0KLQotYm9vbCBXaWRnZXQ6OnN1cHByZXNzSW52YWxpZGF0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZGF0YS0+c3VwcHJlc3NJbnZhbGlkYXRpb247Ci19
Ci0KLXZvaWQgV2lkZ2V0OjpzZXRTdXBwcmVzc0ludmFsaWRhdGlvbihib29sIHN1cHByZXNzKQot
ewotICAgIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uID0gc3VwcHJlc3M7Ci19Ci0KLXZvaWQg
V2lkZ2V0OjpnZW9tZXRyeUNoYW5nZWQoKSBjb25zdAotewotfQotfQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvV2lkZ2V0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9XaWRnZXRHdGsuY3BwCShyZXZpc2lvbiAyNTE2OSkJKGZyb20gV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvV2lkZ2V0R2RrLmNwcDoyNTE2OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpZGdl
dEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWls
LmNvbSAKKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldpZGdldC5oIgorCisjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0Lmgi
CisKKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFdpZGdldFByaXZhdGUgeworcHVibGljOgorICAgIEd0a1dp
ZGdldCogd2lkZ2V0OworICAgIFdpZGdldENsaWVudCogY2xpZW50OworICAgIEludFJlY3QgZnJh
bWVSZWN0OworCisgICAgU2Nyb2xsVmlldyogcGFyZW50OworICAgIEd0a0NvbnRhaW5lciogY29u
dGFpbmluZ1dpbmRvdzsKKyAgICBib29sIHN1cHByZXNzSW52YWxpZGF0aW9uOworCisgICAgR2Rr
RHJhd2FibGUqIGdka0RyYXdhYmxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aWRn
ZXQgPyB3aWRnZXQtPndpbmRvdyA6IDA7CisgICAgfQorfTsKKworV2lkZ2V0OjpXaWRnZXQoKQor
ICAgIDogZGF0YShuZXcgV2lkZ2V0UHJpdmF0ZSkKK3sKKyAgICBkYXRhLT53aWRnZXQgPSAwOwor
ICAgIGRhdGEtPnBhcmVudCA9IDA7CisgICAgZGF0YS0+Y29udGFpbmluZ1dpbmRvdyA9IDA7Cisg
ICAgZGF0YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24gPSBmYWxzZTsKK30KKworR3RrV2lkZ2V0KiBX
aWRnZXQ6Omd0a1dpZGdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPndpZGdldDsKK30K
Kwordm9pZCBXaWRnZXQ6OnNldEd0a1dpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBk
YXRhLT53aWRnZXQgPSB3aWRnZXQ7Cit9CisKK1dpZGdldDo6fldpZGdldCgpCit7CisgICAgZGVs
ZXRlIGRhdGE7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRDb250YWluaW5nV2luZG93KEd0a0NvbnRh
aW5lciogY29udGFpbmluZ1dpbmRvdykKK3sKKyAgICBkYXRhLT5jb250YWluaW5nV2luZG93ID0g
Y29udGFpbmluZ1dpbmRvdzsKK30KKworR3RrQ29udGFpbmVyKiBXaWRnZXQ6OmNvbnRhaW5pbmdX
aW5kb3coKSBjb25zdAoreworICAgIHJldHVybiBkYXRhLT5jb250YWluaW5nV2luZG93OworfQor
Cit2b2lkIFdpZGdldDo6c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKK3sKKyAgICBkYXRhLT5j
bGllbnQgPSBjOworfQorCitXaWRnZXRDbGllbnQqIFdpZGdldDo6Y2xpZW50KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZGF0YS0+Y2xpZW50OworfQorCitJbnRSZWN0IFdpZGdldDo6ZnJhbWVHZW9t
ZXRyeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPmZyYW1lUmVjdDsKK30KKwordm9pZCBX
aWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBkYXRhLT5m
cmFtZVJlY3QgPSByOworfQorCit2b2lkIFdpZGdldDo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHYp
Cit7CisgICAgZGF0YS0+cGFyZW50ID0gdjsKK30KKworU2Nyb2xsVmlldyogV2lkZ2V0OjpwYXJl
bnQoKSBjb25zdAoreworICAgIHJldHVybiBkYXRhLT5wYXJlbnQ7Cit9CisgCit2b2lkIFdpZGdl
dDo6c2V0Rm9jdXMoKQoreworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhndGtXaWRnZXQoKSA/
IGd0a1dpZGdldCgpIDogR1RLX1dJREdFVChjb250YWluaW5nV2luZG93KCkpKTsKK30KKwordm9p
ZCBXaWRnZXQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImIGN1cnNvcikKK3sKKyAgICBHZGtDdXJz
b3IqIHBjdXIgPSBjdXJzb3IuaW1wbCgpOworICAgIGlmICghcGN1cikKKyAgICAgICAgcmV0dXJu
OworICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihkYXRhLT5nZGtEcmF3YWJsZSgpID8gR0RLX1dJ
TkRPVyhkYXRhLT5nZGtEcmF3YWJsZSgpKSA6IEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygp
KS0+d2luZG93LCBwY3VyKTsKK30KKwordm9pZCBXaWRnZXQ6OnNob3coKQoreworICAgIGlmICgh
Z3RrV2lkZ2V0KCkpCisgICAgICAgICByZXR1cm47CisgICAgZ3RrX3dpZGdldF9zaG93KGd0a1dp
ZGdldCgpKTsKK30KKwordm9pZCBXaWRnZXQ6OmhpZGUoKQoreworICAgIGlmICghZ3RrV2lkZ2V0
KCkpCisgICAgICAgICByZXR1cm47CisgICAgZ3RrX3dpZGdldF9oaWRlKGd0a1dpZGdldCgpKTsK
K30KKwordm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitib29sIFdpZGdldDo6aXNFbmFibGVkKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXaWRnZXQ6OnJlbW92ZUZy
b21QYXJlbnQoKQoreworICAgIGlmIChwYXJlbnQoKSkKKyAgICAgICAgcGFyZW50KCktPnJlbW92
ZUNoaWxkKHRoaXMpOworfQorCisvKgorICogU3RyYXRlZ3kgdG8gcGFpbnRpbmcgYSBXaWRnZXQ6
CisgKiAgMS4pIGRvIG5vdCBwYWludCBpZiB0aGVyZSBpcyBubyBHdGtXaWRnZXQgc2V0CisgKiAg
Mi4pIFdlIGFzc3VtZSB0aGF0IEdUS19OT19XSU5ET1cgaXMgc2V0IGFuZCB0aGF0IGdlb21ldHJ5
Q2hhbmdlZCBwb3NpdGlvbmVkCisgKiAgICAgIHRoZSB3aWRnZXQgY29ycmVjdGx5LiBBVE0gd2Ug
ZG8gbm90IGhvbm9yIHRoZSBHcmFwaGljc0NvbnRleHQgdHJhbnNsYXRpb24uCisgKi8KK3ZvaWQg
V2lkZ2V0OjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmKQor
eworICAgIGlmICghZ3RrV2lkZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEd0a1dpZGdl
dCogd2lkZ2V0ID0gZ3RrV2lkZ2V0KCk7CisgICAgQVNTRVJUKEdUS19XSURHRVRfTk9fV0lORE9X
KHdpZGdldCkpOworCisgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfRVhQ
T1NFKTsKKyAgICBldmVudC0+ZXhwb3NlID0gKmNvbnRleHQtPmdka0V4cG9zZUV2ZW50KCk7Cisg
ICAgZXZlbnQtPmV4cG9zZS5yZWdpb24gPSBndGtfd2lkZ2V0X3JlZ2lvbl9pbnRlcnNlY3Qod2lk
Z2V0LCBldmVudC0+ZXhwb3NlLnJlZ2lvbik7CisKKyAgICAvKgorICAgICAqIFRoaXMgd2lsbCBi
ZSB1bnJlZidlZCBieSBnZGtfZXZlbnRfZnJlZS4KKyAgICAgKi8KKyAgICBnX29iamVjdF9yZWYo
ZXZlbnQtPmV4cG9zZS53aW5kb3cpOworCisgICAgLyoKKyAgICAgKiBJZiB3ZSBhcmUgZ29pbmcg
dG8gcGFpbnQgZG8gdGhlIHRyYW5zbGF0aW9uIGFuZCBHdGtBbGxvY2F0aW9uIG1hbmlwdWxhdGlv
bi4KKyAgICAgKi8KKyAgICBpZiAoIWdka19yZWdpb25fZW1wdHkoZXZlbnQtPmV4cG9zZS5yZWdp
b24pKSB7CisgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdp
b24sICZldmVudC0+ZXhwb3NlLmFyZWEpOworICAgICAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3Nl
KHdpZGdldCwgZXZlbnQpOworICAgIH0KKworICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKK30K
Kwordm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIFdpZGdldDo6aW52YWxpZGF0ZSgpCit7CisgICAgaW52YWxpZGF0ZVJl
Y3QoSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpOworfQorCit2b2lkIFdpZGdldDo6
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAoZGF0YS0+c3Vw
cHJlc3NJbnZhbGlkYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcGFyZW50KCkp
IHsKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChjb250YWlu
aW5nV2luZG93KCkpLCByZWN0LngoKSwgcmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChp
c0ZyYW1lVmlldygpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcykt
PmFkZFRvRGlydHlSZWdpb24ocmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBHZXQgdGhlIHJvb3Qgd2lkZ2V0LgorICAgIFNjcm9sbFZpZXcqIG91dGVybW9zdFZpZXcgPSBw
YXJlbnQoKTsKKyAgICB3aGlsZSAob3V0ZXJtb3N0VmlldyAmJiBvdXRlcm1vc3RWaWV3LT5wYXJl
bnQoKSkKKyAgICAgICAgb3V0ZXJtb3N0VmlldyA9IG91dGVybW9zdFZpZXctPnBhcmVudCgpOwor
ICAgIGlmICghb3V0ZXJtb3N0VmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCB3
aW5kb3dSZWN0ID0gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhyZWN0KTsKKyAgICBndGtfd2lk
Z2V0X3F1ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSksIHdpbmRv
d1JlY3QueCgpLCB3aW5kb3dSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aW5kb3dSZWN0LndpZHRoKCksIHdpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgIG91dGVybW9z
dFZpZXctPmFkZFRvRGlydHlSZWdpb24od2luZG93UmVjdCk7Cit9CisKK0ludFBvaW50IFdpZGdl
dDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
Cit7CisgICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSBwb2ludDsKKyAgICBmb3IgKGNvbnN0IFdp
ZGdldCAqcGFyZW50V2lkZ2V0ID0gcGFyZW50KCksICpjaGlsZFdpZGdldCA9IHRoaXM7CisgICAg
ICAgICBwYXJlbnRXaWRnZXQ7CisgICAgICAgICBjaGlsZFdpZGdldCA9IHBhcmVudFdpZGdldCwg
cGFyZW50V2lkZ2V0ID0gcGFyZW50V2lkZ2V0LT5wYXJlbnQoKSkKKyAgICAgICAgd2luZG93UG9p
bnQgPSBwYXJlbnRXaWRnZXQtPmNvbnZlcnRDaGlsZFRvU2VsZihjaGlsZFdpZGdldCwgd2luZG93
UG9pbnQpOworICAgIHJldHVybiB3aW5kb3dQb2ludDsKK30KKworSW50UG9pbnQgV2lkZ2V0Ojpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAor
eworICAgIEludFBvaW50IHdpZGdldFBvaW50ID0gcG9pbnQ7CisgICAgZm9yIChjb25zdCBXaWRn
ZXQgKnBhcmVudFdpZGdldCA9IHBhcmVudCgpLCAqY2hpbGRXaWRnZXQgPSB0aGlzOworICAgICAg
ICAgcGFyZW50V2lkZ2V0OworICAgICAgICAgY2hpbGRXaWRnZXQgPSBwYXJlbnRXaWRnZXQsIHBh
cmVudFdpZGdldCA9IHBhcmVudFdpZGdldC0+cGFyZW50KCkpCisgICAgICAgIHdpZGdldFBvaW50
ID0gcGFyZW50V2lkZ2V0LT5jb252ZXJ0U2VsZlRvQ2hpbGQoY2hpbGRXaWRnZXQsIHdpZGdldFBv
aW50KTsKKyAgICByZXR1cm4gd2lkZ2V0UG9pbnQ7Cit9CisKK0ludFJlY3QgV2lkZ2V0Ojpjb252
ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAg
SW50UmVjdCBjb252ZXJ0ZWRSZWN0ID0gcmVjdDsKKyAgICBjb252ZXJ0ZWRSZWN0LnNldExvY2F0
aW9uKGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29udmVydGVkUmVjdC5sb2NhdGlvbigpKSk7
CisgICAgcmV0dXJuIGNvbnZlcnRlZFJlY3Q7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVy
dENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpICsgY2hpbGQtPngoKSwgcG9p
bnQueSgpICsgY2hpbGQtPnkoKSk7Cit9CisgCitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRTZWxm
VG9DaGlsZChjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEludFBvaW50KHBvaW50LngoKSAtIGNoaWxkLT54KCksIHBvaW50Lnko
KSAtIGNoaWxkLT55KCkpOworfQorCitib29sIFdpZGdldDo6c3VwcHJlc3NJbnZhbGlkYXRpb24o
KSBjb25zdAoreworICAgIHJldHVybiBkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbjsKK30KKwor
dm9pZCBXaWRnZXQ6OnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGJvb2wgc3VwcHJlc3MpCit7Cisg
ICAgZGF0YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24gPSBzdXBwcmVzczsKK30KKwordm9pZCBXaWRn
ZXQ6Omdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0Cit7Cit9Cit9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwCShyZXZpc2lvbiAyNTE2OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2RrL0ltYWdlR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW1hZ2UuaCIKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotIAotLy8gVGhpcyBmdW5jdGlv
biBsb2FkcyByZXNvdXJjZXMgZnJvbSBXZWJLaXQKLVZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJ
bnRvQXJyYXkoY29uc3QgY2hhciopOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQml0
bWFwSW1hZ2U6OmluaXRQbGF0Zm9ybURhdGEoKQotewotfQotCi12b2lkIEJpdG1hcEltYWdlOjpp
bnZhbGlkYXRlUGxhdGZvcm1EYXRhKCkKLXsKLX0KLQotSW1hZ2UqIEltYWdlOjpsb2FkUGxhdGZv
cm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQotewotICAgIFZlY3RvcjxjaGFyPiBhcnIgPSBs
b2FkUmVzb3VyY2VJbnRvQXJyYXkobmFtZSk7Ci0gICAgQml0bWFwSW1hZ2UqIGltZyA9IG5ldyBC
aXRtYXBJbWFnZTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIgPSBuZXcgU2hhcmVk
QnVmZmVyKGFyci5kYXRhKCksIGFyci5zaXplKCkpOwotICAgIGltZy0+c2V0RGF0YShidWZmZXIs
IHRydWUpOwotICAgIHJldHVybiBpbWc7Ci19Ci19CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dkay9JbWFnZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nZGsvSW1hZ2VHdGsuY3BwCShyZXZpc2lvbiAyNTE2OSkJKGZyb20gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwOjI1MTY5KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZS5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisgCisvLyBUaGlzIGZ1bmN0aW9uIGxvYWRz
IHJlc291cmNlcyBmcm9tIFdlYktpdAorVmVjdG9yPGNoYXI+IGxvYWRSZXNvdXJjZUludG9BcnJh
eShjb25zdCBjaGFyKik7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBCaXRtYXBJbWFn
ZTo6aW5pdFBsYXRmb3JtRGF0YSgpCit7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmludmFsaWRh
dGVQbGF0Zm9ybURhdGEoKQoreworfQorCitJbWFnZSogSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291
cmNlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgVmVjdG9yPGNoYXI+IGFyciA9IGxvYWRSZXNv
dXJjZUludG9BcnJheShuYW1lKTsKKyAgICBCaXRtYXBJbWFnZSogaW1nID0gbmV3IEJpdG1hcElt
YWdlOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IG5ldyBTaGFyZWRCdWZmZXIo
YXJyLmRhdGEoKSwgYXJyLnNpemUoKSk7CisgICAgaW1nLT5zZXREYXRhKGJ1ZmZlciwgdHJ1ZSk7
CisgICAgcmV0dXJuIGltZzsKK30KK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16055</attachid>
            <date>2007-08-21 09:44:31 -0700</date>
            <delta_ts>2007-09-22 13:41:06 -0700</delta_ts>
            <desc>Hash files renamed</desc>
            <filename>script-to-rename-gdk.patch</filename>
            <type>text/plain</type>
            <size>1556</size>
            <attacher name="Juan A. Suarez">jasuarez</attacher>
            
              <data encoding="base64">LS0tIC4vV2ViS2l0VG9vbHMvU2NyaXB0cy9kby13ZWJjb3JlLXJlbmFtZQkyMDA3LTA4LTIwIDE4
OjU5OjE3LjAwMDAwMDAwMCArMDIwMAorKysgLi9XZWJLaXRUb29scy9TY3JpcHRzL2RvLXdlYmNv
cmUtcmVuYW1lLWdkawkyMDA3LTA4LTIxIDE3OjU3OjE2LjAwMDAwMDAwMCArMDIwMApAQCAtNjgs
NyArNjgsMzYgQEAKIH0KIAogbXkgJXJlbmFtZXMgPSAoCi0gICAgInh4eCIgPT4gInl5eSIsCisg
ICAgICJnZGtsYXVuY2hlciIgPT4gImd0a2xhdW5jaGVyIiwKKyAgICAgIkdka0xhdW5jaGVyIiA9
PiAiR3RrTGF1bmNoZXIiLAorICAgICAiSW1hZ2VHZGsiID0+ICJJbWFnZUd0ayIsCisgICAgICJG
b250UGxhdGZvcm1EYXRhR2RrIiA9PiAiRm9udFBsYXRmb3JtRGF0YUd0ayIsCisgICAgICJGb250
Q2FjaGVHZGsiID0+ICJGb250Q2FjaGVHdGsiLAorICAgICAiQ3Vyc29yR2RrIiA9PiAiQ3Vyc29y
R3RrIiwKKyAgICAgIktleUV2ZW50R2RrIiA9PiAiS2V5RXZlbnRHdGsiLAorICAgICAiTG9nZ2lu
Z0dkayIgPT4gIkxvZ2dpbmdHdGsiLAorICAgICAiV2lkZ2V0R2RrIiA9PiAiV2lkZ2V0R3RrIiwK
KyAgICAgIlBvcHVwTWVudUdkayIgPT4gIlBvcHVwTWVudUd0ayIsCisgICAgICJQbGF0Zm9ybVNj
cm9sbEJhckdkayIgPT4gIlBsYXRmb3JtU2Nyb2xsQmFyR3RrIiwKKyAgICAgIkRyYWdJbWFnZUdk
ayIgPT4gIkRyYWdJbWFnZUd0ayIsCisgICAgICJXaGVlbEV2ZW50R2RrIiA9PiAiV2hlZWxFdmVu
dEd0ayIsCisgICAgICJNSU1FVHlwZVJlZ2lzdHJ5R2RrIiA9PiAiTUlNRVR5cGVSZWdpc3RyeUd0
ayIsCisgICAgICJNb3VzZUV2ZW50R2RrIiA9PiAiTW91c2VFdmVudEd0ayIsCisgICAgICJTY3Jv
bGxWaWV3R2RrIiA9PiAiU2Nyb2xsVmlld0d0ayIsCisgICAgICJHbHlwaFBhZ2VUcmVlTm9kZUdk
ayIgPT4gIkdseXBoUGFnZVRyZWVOb2RlR3RrIiwKKyAgICAgIkNvb2tpZUphckdkayIgPT4gIkNv
b2tpZUphckd0ayIsCisgICAgICJGb250R2RrIiA9PiAiRm9udEd0ayIsCisgICAgICJTb3VuZEdk
ayIgPT4gIlNvdW5kR3RrIiwKKyAgICAgIkRyYWdEYXRhR2RrIiA9PiAiRHJhZ0RhdGFHdGsiLAor
ICAgICAiUGxhdGZvcm1TY3JlZW5HZGsiID0+ICJQbGF0Zm9ybVNjcmVlbkd0ayIsCisgICAgICJG
b250RGF0YUdkayIgPT4gIkZvbnREYXRhR3RrIiwKKyAgICAgIlJlbmRlclRoZW1lR2RrIiA9PiAi
UmVuZGVyVGhlbWVHdGsiLAorICAgICAid2ViY29yZS1nZGsiID0+ICJ3ZWJjb3JlLWd0ayIsCisg
ICAgICJEb2N1bWVudExvYWRlckdkayIgPT4gIkRvY3VtZW50TG9hZGVyR3RrIiwKKyAgICAgIkV2
ZW50SGFuZGxlckdkayIgPT4gIkV2ZW50SGFuZGxlckd0ayIsCisgICAgICJGcmFtZUdkayIgPT4g
IkZyYW1lR3RrIiwKKyAgICAgIkRyYWdDb250cm9sbGVyR2RrIiA9PiAiRHJhZ0NvbnRyb2xsZXJH
dGsiLAorICAgICMieHh4IiA9PiAieXl5IiwKICAgICAjIktVUkwiID0+ICJQbGF0Zm9ybVVSTCIs
CiAgICAgIyJLVVJMTWFjIiA9PiAiUGxhdGZvcm1VUkxNYWMiLAogICAgICMiS1VSTF9IXyIgPT4g
IlBsYXRmb3JtVVJMX2giLAo=
</data>
<flag name="review"
          id="6737"
          type_id="1"
          status="+"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16361</attachid>
            <date>2007-09-23 07:25:56 -0700</date>
            <delta_ts>2007-09-23 07:25:56 -0700</delta_ts>
            <desc>The used hash for the renames</desc>
            <filename>rename.hash</filename>
            <type>text/plain</type>
            <size>1989</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvZG8td2ViY29yZS1yZW5hbWUKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0VG9vbHMvU2NyaXB0cy9kby13ZWJjb3JlLXJlbmFtZSAgIChSZXZpc2lvbiAyNTY3
MikKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvZG8td2ViY29yZS1yZW5hbWUgICAoQXJiZWl0c2tv
cGllKQpAQCAtNjgsNyArNjgsNDQgQEAKIH0KIAogbXkgJXJlbmFtZXMgPSAoCi0gICAgInh4eCIg
PT4gInl5eSIsCisgICAgICJndGtsYXVuY2hlciIgPT4gImd0a2xhdW5jaGVyIiwKKyAgICAgIkd0
a0xhdW5jaGVyIiA9PiAiR3RrTGF1bmNoZXIiLAorICAgICAiRG9jdW1lbnRMb2FkZXJHdGsiID0+
ICJEb2N1bWVudExvYWRlckd0ayIsCisgICAgICJEcmFnQ29udHJvbGxlckd0ayIgPT4gIkRyYWdD
b250cm9sbGVyR3RrIiwKKyAgICAgIkV2ZW50SGFuZGxlckd0ayIgPT4gIkV2ZW50SGFuZGxlckd0
ayIsIAorICAgICAiRnJhbWVHdGsiID0+ICJGcmFtZUd0ayIsCisgICAgICJDbGlwYm9hcmRHdGsi
ID0+ICJDbGlwYm9hcmRHdGsiLAorICAgICAiQ29udGV4dE1lbnVHdGsiID0+ICAiQ29udGV4dE1l
bnVHdGsiLAorICAgICAiQ29udGV4dE1lbnVJdGVtR3RrIiA9PiAiQ29udGV4dE1lbnVJdGVtR3Rr
IiwKKyAgICAgIkNvb2tpZUphckd0ayIgPT4gIkNvb2tpZUphckd0ayIsCisgICAgICJDdXJzb3JH
dGsiID0+ICJDdXJzb3JHdGsiLAorICAgICAiRHJhZ0RhdGFHdGsiID0+ICJEcmFnRGF0YUd0ayIs
CisgICAgICJEcmFnSW1hZ2VHdGsiID0+ICJEcmFnSW1hZ2VHdGsiLAorICAgICAiRmlsZUNob29z
ZXJHdGsiID0+ICJGaWxlQ2hvb3Nlckd0ayIsCisgICAgICJGaWxlU3lzdGVtR3RrIiA9PiAiRmls
ZVN5c3RlbUd0ayIsCisgICAgICJGb250Q2FjaGVHdGsiID0+ICJGb250Q2FjaGVHdGsiLAorICAg
ICAiRm9udERhdGFHdGsiID0+ICJGb250RGF0YUd0ayIsCisgICAgICJGb250R3RrIiA9PiAiRm9u
dEd0ayIsCisgICAgICJGb250UGxhdGZvcm1EYXRhR3RrIiA9PiAiRm9udFBsYXRmb3JtRGF0YUd0
ayIsCisgICAgICJHbHlwaFBhZ2VUcmVlTm9kZUd0ayIgPT4gIkdseXBoUGFnZVRyZWVOb2RlR3Rr
IiwKKyAgICAgIktleUV2ZW50R3RrIiA9PiAiS2V5RXZlbnRHdGsiLAorICAgICAiTG9jYWxpemVk
U3RyaW5nc0d0ayIgPT4gIkxvY2FsaXplZFN0cmluZ3NHdGsiLAorICAgICAiTG9nZ2luZ0d0ayIg
PT4gIkxvZ2dpbmdHdGsiLAorICAgICAiTUlNRVR5cGVSZWdpc3RyeUd0ayIgPT4gIk1JTUVUeXBl
UmVnaXN0cnlHdGsiLAorICAgICAiTW91c2VFdmVudEd0ayIgPT4gIk1vdXNlRXZlbnRHdGsiLAor
ICAgICAiUGFzdGVib2FyZEd0ayIgPT4gIlBhc3RlYm9hcmRHdGsiLAorICAgICAiUGxhdGZvcm1T
Y3JlZW5HdGsiID0+ICJQbGF0Zm9ybVNjcmVlbkd0ayIsCisgICAgICJQbGF0Zm9ybVNjcm9sbEJh
ckd0ayIgPT4gIlBsYXRmb3JtU2Nyb2xsQmFyR3RrIiwKKyAgICAgIlBvcHVwTWVudUd0ayIgPT4g
IlBvcHVwTWVudUd0ayIsCisgICAgICJSZW5kZXJUaGVtZUd0ayIgPT4gIlJlbmRlclRoZW1lR3Rr
IiwKKyAgICAgIlNjcm9sbFZpZXdHdGsiID0+ICJTY3JvbGxWaWV3R3RrIiwKKyAgICAgIlNlYXJj
aFBvcHVwTWVudUd0ayIgPT4gIlNlYXJjaFBvcHVwTWVudUd0ayIsCisgICAgICJTb3VuZEd0ayIg
PT4gIlNvdW5kR3RrIiwKKyAgICAgIldoZWVsRXZlbnRHdGsiID0+ICJXaGVlbEV2ZW50R3RrIiwK
KyAgICAgIldpZGdldEd0ayIgPT4gIldpZGdldEd0ayIsCisgICAgICJJY29uR3RrIiA9PiAiSWNv
bkd0ayIsCisgICAgICJJbWFnZUd0ayIgPT4gIkltYWdlR3RrIiwKKyAgICAjInh4eCIgPT4gInl5
eSIsCiAgICAgIyJLVVJMIiA9PiAiUGxhdGZvcm1VUkwiLAogICAgICMiS1VSTE1hYyIgPT4gIlBs
YXRmb3JtVVJMTWFjIiwKICAgICAjIktVUkxfSF8iID0+ICJQbGF0Zm9ybVVSTF9oIiwK
</data>

          </attachment>
      

    </bug>

</bugzilla>