<?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>67773</bug_id>
          
          <creation_ts>2011-09-08 03:45:16 -0700</creation_ts>
          <short_desc>[Qt] Remove the QStyle dependency in Qt&apos;s mobile theme</short_desc>
          <delta_ts>2011-11-14 07:45:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>72124</dependson>
    
    <dependson>72274</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pierre Rossi">pierre.rossi</reporter>
          <assigned_to name="Pierre Rossi">pierre.rossi</assigned_to>
          <cc>hausmann</cc>
    
    <cc>jesus</cc>
    
    <cc>kasthuri.n-s</cc>
    
    <cc>keith.rosenblatt</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>463980</commentid>
    <comment_count>0</comment_count>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-09-08 03:45:16 -0700</bug_when>
    <thetext>[Qt] Remove the QStyle dependency in Qt&apos;s mobile theme</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463982</commentid>
    <comment_count>1</comment_count>
      <attachid>106720</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-09-08 03:50:54 -0700</bug_when>
    <thetext>Created attachment 106720
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463985</commentid>
    <comment_count>2</comment_count>
      <attachid>106720</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-08 04:30:26 -0700</bug_when>
    <thetext>Comment on attachment 106720
Patch

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

r=me with nits.

&gt; Source/WebCore/ChangeLog:6
&gt; +        GraphicsContext3DQt doesn&apos;t actually use QStyleOption

use -&gt; need

&gt; Source/WebCore/ChangeLog:10
&gt; +        No new tests as there should be no functionnal change.

functionnal -&gt; functional</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463988</commentid>
    <comment_count>3</comment_count>
      <attachid>106723</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-09-08 04:51:43 -0700</bug_when>
    <thetext>Created attachment 106723
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463991</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 04:54:37 -0700</bug_when>
    <thetext>Attachment 106723 did not pass style-queue:

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

Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:50:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:57:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463992</commentid>
    <comment_count>5</comment_count>
      <attachid>106725</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-09-08 04:55:09 -0700</bug_when>
    <thetext>Created attachment 106725
More readable version (still pretty huge)

This is just a more review-friendly version of the patch above since it takes the &quot;git mv&quot; into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463994</commentid>
    <comment_count>6</comment_count>
      <attachid>106723</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-08 05:07:56 -0700</bug_when>
    <thetext>Comment on attachment 106723
Patch

Attachment 106723 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9615754</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464107</commentid>
    <comment_count>7</comment_count>
      <attachid>106751</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-09-08 09:54:15 -0700</bug_when>
    <thetext>Created attachment 106751
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464111</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 09:57:47 -0700</bug_when>
    <thetext>Attachment 106751 did not pass style-queue:

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

Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:50:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/qt/RenderThemeQStyle.cpp:57:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464112</commentid>
    <comment_count>9</comment_count>
      <attachid>106752</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-09-08 09:57:56 -0700</bug_when>
    <thetext>Created attachment 106752
Review-friendly version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464782</commentid>
    <comment_count>10</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2011-09-09 07:34:13 -0700</bug_when>
    <thetext>I think we should consider making the mobile theme (perhaps we should find a better name) the default and having an option to turn on QStyle. Mobile theme should be available anywhere where Qt runs, while QStyle might end up being an optional Qt class in Qt5.

This would involve change the name of the build option and the guard names and adjusting the LayotuTests results to default to the mobile theme. I&apos;m not sure if this change needs to be part of this patch/bug, but I find this discussion relevant here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495612</commentid>
    <comment_count>11</comment_count>
      <attachid>106751</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-03 10:34:04 -0700</bug_when>
    <thetext>Comment on attachment 106751
Patch

Clearing review and taking this out of the review queue as the patch is going to change soon :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500658</commentid>
    <comment_count>12</comment_count>
      <attachid>114665</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-11-11 04:19:47 -0800</bug_when>
    <thetext>Created attachment 114665
Patch

So here&apos;s a new approach that doesn&apos;t require a compile time decision. It has the benefit of allowing us to still use QStyle for the WebKit1 API and potentially for the desktop webview.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500663</commentid>
    <comment_count>13</comment_count>
      <attachid>114665</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-11 04:27:07 -0800</bug_when>
    <thetext>Comment on attachment 114665
Patch

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

&gt; Source/WebCore/html/HTMLSelectElement.h:203
&gt; +    if (!qgetenv(&quot;QT_WEBKIT_USE_MOBILE_THEME&quot;).isNull())

Initial feedback: It would be nice to centralize the qgetenv() calls into for example a class method in RenderThemeQt.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500681</commentid>
    <comment_count>14</comment_count>
      <attachid>114674</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-11-11 05:01:30 -0800</bug_when>
    <thetext>Created attachment 114674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500724</commentid>
    <comment_count>15</comment_count>
      <attachid>114691</attachid>
    <who name="Pierre Rossi">pierre.rossi</who>
    <bug_when>2011-11-11 06:20:38 -0800</bug_when>
    <thetext>Created attachment 114691
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500746</commentid>
    <comment_count>16</comment_count>
      <attachid>114691</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-11 07:14:30 -0800</bug_when>
    <thetext>Comment on attachment 114691
Patch

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

r=me with the proposed changes.

&gt; Source/WebCore/Target.pri:-25
&gt; -contains(DEFINES, WTF_USE_QT_MOBILE_THEME=1) {
&gt; -    DEFINES += ENABLE_NO_LISTBOX_RENDERING=1
&gt; -}

IT looks like that we may be able to replace the NO_LISTBOX_RENDERING feature define with PLATFORM(QT) if we want to.

&gt; Source/WebCore/html/HTMLSelectElement.h:208
&gt; +#if PLATFORM(QT)
&gt; +    if (RenderThemeQt::useMobileTheme())
&gt; +#endif
&gt;      return true;

I think this is easier to read if the PLATFORM(QT) branch had its own return statement.

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:400
&gt; +#else
&gt; +        qputenv(&quot;QT_WEBKIT_USE_MOBILE_THEME&quot;, QByteArray(&quot;1&quot;));
&gt; +#endif

This should be removed, useMobileTheme() should return true if we don&apos;t have QStyle.

&gt; Source/WebCore/platform/qt/RenderThemeQtMobile.cpp:570
&gt; +void RenderThemeQtMobile::adjustMenuListStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
&gt; +{
&gt; +    style-&gt;resetBorder();
&gt; +
&gt; +    // Height is locked to auto.
&gt; +    style-&gt;setHeight(Length(Auto));
&gt; +
&gt; +    // White-space is locked to pre
&gt; +    style-&gt;setWhiteSpace(PRE);
&gt; +
&gt; +    computeSizeBasedOnStyle(style);
&gt; +
&gt; +    // Add in the padding that we&apos;d like to use.
&gt; +    setPopupPadding(style);
&gt; +    style-&gt;setPaddingLeft(Length(menuListPadding, Fixed));
&gt; +}

It would be nicer if the QtMobileImplementation would call the base class implementation and then do the padding adjustment. This can be fixed in a separate patch.

&gt; Source/WebKit/qt/Api/qwebpage.cpp:3276
&gt; +    if (qgetenv(&quot;QT_WEBKIT_USE_MOBILE_THEME&quot;).isNull()) {

I think this should be replaced with a call to RenderThemeQt::useMobileTheme().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501424</commentid>
    <comment_count>17</comment_count>
      <attachid>114691</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-11-12 05:57:47 -0800</bug_when>
    <thetext>Comment on attachment 114691
Patch

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

&gt; Source/WebCore/html/HTMLSelectElement.h:210
&gt;  #if ENABLE(NO_LISTBOX_RENDERING)
&gt; +#if PLATFORM(QT)
&gt; +    if (RenderThemeQt::useMobileTheme())
&gt; +#endif
&gt;      return true;
&gt; -#else
&gt; -    return !m_multiple &amp;&amp; m_size &lt;= 1;
&gt;  #endif
&gt; +    return !m_multiple &amp;&amp; m_size &lt;= 1;

We should introduce a function like usesMenuListFor(const HTMLSelectElement*) to RenderTheme, and remove NO_LISTBOX_RENDERING.
RenderThemeQtMobile should return true from this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501761</commentid>
    <comment_count>18</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-14 03:06:27 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 114691 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114691&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLSelectElement.h:210
&gt; &gt;  #if ENABLE(NO_LISTBOX_RENDERING)
&gt; &gt; +#if PLATFORM(QT)
&gt; &gt; +    if (RenderThemeQt::useMobileTheme())
&gt; &gt; +#endif
&gt; &gt;      return true;
&gt; &gt; -#else
&gt; &gt; -    return !m_multiple &amp;&amp; m_size &lt;= 1;
&gt; &gt;  #endif
&gt; &gt; +    return !m_multiple &amp;&amp; m_size &lt;= 1;
&gt; 
&gt; We should introduce a function like usesMenuListFor(const HTMLSelectElement*) to RenderTheme, and remove NO_LISTBOX_RENDERING.
&gt; RenderThemeQtMobile should return true from this function.

Yes, good idea! We&apos;ll do that separately when removing the NO_LISTBOX_RENDERING define altogether.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501787</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-11-14 04:19:48 -0800</bug_when>
    <thetext>Landed with qgetenv usage fixed and minor instantiation fix in themeForPage

Committed r100123: &lt;http://trac.webkit.org/changeset/100123&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106720</attachid>
            <date>2011-09-08 03:50:54 -0700</date>
            <delta_ts>2011-09-08 04:51:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67773-20110908124941.patch</filename>
            <type>text/plain</type>
            <size>2837</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ2OTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOTUzY2UwZDg1NzdhMjky
NTY3NDY1Y2E3OGM0MGUzYzgyYmY1MWRkLi45NmFjMjhjYTdhYjZkMTgzM2E0NDQ2Y2I3M2ZkMTdh
NGVlMjhmNTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDktMDggIFBpZXJy
ZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CisKKyAgICAgICAgW1F0XSBSZW1vdmUg
dGhlIFFTdHlsZSBkZXBlbmRlbmN5IGluIFF0J3MgbW9iaWxlIHRoZW1lCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc3MworCisgICAgICAgIEdyYXBo
aWNzQ29udGV4dDNEUXQgZG9lc24ndCBhY3R1YWxseSB1c2UgUVN0eWxlT3B0aW9uCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFz
IHRoZXJlIHNob3VsZCBiZSBubyBmdW5jdGlvbm5hbCBjaGFuZ2UuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKwogMjAx
MS0wOS0wNiAgQWJoaXNoZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IE51bGwgb3duaW5nUmVuZGVyZXIgY3Jhc2ggaW4gUmVuZGVyU2Nyb2xsYmFyOjp1cGRhdGVTY3Jv
bGxiYXJQYXJ0cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKaW5kZXggOGE5ZWQ1ZTYzN2EyNDUyMWYw
NWY2MWRhNjBhYWE3NTY1MDNjMDEwMi4uMjAwNmE5ZWRjNTVmMDY1NGY0ODU4MmRlMGQ1ZTM0YjAx
ZjNkMTFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNs
dWRlIDxRQWJzdHJhY3RTY3JvbGxBcmVhPgogI2luY2x1ZGUgPFFHcmFwaGljc09iamVjdD4KICNp
bmNsdWRlIDxRR0xDb250ZXh0PgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkdyYXBoaWNzSXRlbT4K
ICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKQEAgLTc4LDcgKzc3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSwgQml0bWFwVGV4dHVyZSog
bWFzaykgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZvaWQgcGFpbnQoUVBhaW50ZXIqLCBjb25zdCBR
U3R5bGVPcHRpb25HcmFwaGljc0l0ZW0qLCBRV2lkZ2V0Kik7CisgICAgdm9pZCBwYWludChRUGFp
bnRlciopOwogICAgIFFSZWN0RiBib3VuZGluZ1JlY3QoKSBjb25zdDsKICAgICB2b2lkIGJsaXRN
dWx0aXNhbXBsZUZyYW1lYnVmZmVyKCkgY29uc3Q7CiAgICAgdm9pZCBibGl0TXVsdGlzYW1wbGVG
cmFtZWJ1ZmZlckFuZFJlc3RvcmVDb250ZXh0KCkgY29uc3Q7CkBAIC0yMDIsMTEgKzIwMSwxMCBA
QCBRUmVjdEYgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpib3VuZGluZ1JlY3QoKSBjb25zdAog
ICAgIHJldHVybiBRUmVjdEYoUVBvaW50RigwLCAwKSwgUVNpemVGKG1fY29udGV4dC0+bV9jdXJy
ZW50V2lkdGgsIG1fY29udGV4dC0+bV9jdXJyZW50SGVpZ2h0KSk7CiB9CiAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlOjpwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVN0eWxl
T3B0aW9uR3JhcGhpY3NJdGVtKiBvcHRpb24sIFFXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBRX1VO
VVNFRCh3aWRnZXQpOwogCi0gICAgUVJlY3RGIHJlY3QgPSBvcHRpb24gPyBvcHRpb24tPnJlY3Qg
OiBib3VuZGluZ1JlY3QoKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpwYWludChR
UGFpbnRlciogcGFpbnRlcikKK3sKKyAgICBRUmVjdEYgcmVjdCA9IGJvdW5kaW5nUmVjdCgpOwog
CiAgICAgbV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBibGl0TXVsdGlzYW1wbGVGcmFt
ZWJ1ZmZlcigpOwpAQCAtNDI2LDcgKzQyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvCiAg
ICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAgIElt
YWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CiAgICAgUVBhaW50ZXIq
IHBhaW50ZXIgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAg
ICBtX3ByaXZhdGUtPnBhaW50KHBhaW50ZXIsIDAsIDApOworICAgIG1fcHJpdmF0ZS0+cGFpbnQo
cGFpbnRlcik7CiB9CiAKICNpZiBkZWZpbmVkKFFUX09QRU5HTF9FU18yKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106723</attachid>
            <date>2011-09-08 04:51:43 -0700</date>
            <delta_ts>2011-09-08 09:54:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67773-20110908135029.patch</filename>
            <type>text/plain</type>
            <size>220015</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ2OTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOTUzY2UwZDg1NzdhMjky
NTY3NDY1Y2E3OGM0MGUzYzgyYmY1MWRkLi5iM2Q4NThhZTUwMWIzZTc5ZDY3ZGQ3NzE3ZjZmZGRl
NThkNTYxMmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjI0IEBACisyMDExLTA5LTA4ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3Zl
IHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBpbiBRdCdzIG1vYmlsZSB0aGVtZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NzMKKworICAgICAgICBSZW1v
dmFsIG9mIHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBmb3IgdGhlIG1vYmlsZSB0aGVtZS4KKworICAg
ICAgICBUaGlzIHJlZmFjdG9yaW5nIHNwbGl0cyB1cCBSZW5kZXJUaGVtZVF0IGludG8gdHdvCisg
ICAgICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLCBhIFFTdHlsZS1iYWNrZWQgb25lLCBhbmQgYQor
ICAgICAgICBSZW5kZXJUaGVtZVF0TW9iaWxlIG9uZSB0aGF0IHVzZXMgUVBhaW50ZXIgZGlyZWN0
bHkuCisKKyAgICAgICAgVXNlIG9mIHRoZSBtb2JpbGUgdGhlbWUgY2FuIGJlIHRyaWdnZXJlZCB2
aWEgYSBjb21waWxlIGZsYWcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGlzIGp1c3QgcmVmYWN0b3JpbmcuCisKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0
eWxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0eWxl
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5j
cHAuCisgICAgICAgIChXZWJDb3JlOjppbml0U3R5bGVPcHRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQ
YWludGVyOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6flN0eWxlUGFp
bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpSZW5kZXJUaGVtZVF0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXQ6On5SZW5kZXJUaGVtZVF0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXQ6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpm
YWxsYmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnFTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzSG92ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNGb2N1c1JpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpjb250cm9sU3VwcG9ydHNUaW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0NvbnRyb2xUaW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpmaW5kRnJhbWVMaW5lV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6aW5mbGF0ZUJ1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
dDo6YWRqdXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpw
bGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdDo6c3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0OjpzeXN0ZW1Db2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
OjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OmNvbXB1dGVTaXplQmFzZWRPblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXQ6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpw
YWludENoZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldFJhZGlv
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFJhZGlvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldEJ1dHRvblNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdDo6c2V0QnV0dG9uUGFkZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0OjphZGp1c3RUZXh0RmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0OjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
OjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0
TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRQb3B1
cFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZW51TGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRv
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVudUxpc3RC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YW5pbWF0aW9uUmVwZWF0
SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
OjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lUXQ6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0OjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdDo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
dDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OmNvbnZlcnRUb1BhaW50aW5nUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50U2VhcmNoRmllbGRE
ZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRJbm5lclNwaW5CdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpleHRyYU1lZGlhQ29udHJv
bHNTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmxkTWF0cml4VHJhbnNmb3JtZXI6
OldvcmxkTWF0cml4VHJhbnNmb3JtZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ybGRNYXRyaXhU
cmFuc2Zvcm1lcjo6fldvcmxkTWF0cml4VHJhbnNmb3JtZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6bWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhQmFja2dyb3VuZCk6CisgICAgICAgIChX
ZWJDb3JlOjptZWRpYUVsZW1lbnRDYW5QbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OmdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhTXV0ZUJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhUGxheUJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFDdXJyZW50VGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRyb2xzQ3Vy
cmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFD
b250cm9sc1JlbWFpbmluZ1RpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpjYXJldEJsaW5rSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUVN0eWxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
Omhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0Zvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVBhaW50ZXI6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3
UHJpbWl0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZHJhd0NvbnRyb2wp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3Q29tcGxleENvbnRyb2wpOgor
ICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZHJhd0NoZWNrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyOjpmaW5kQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBh
aW50ZXI6OmRyYXdSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmZpbmRS
YWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmRyYXdNdWx0aXBsZUNvbWJv
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZHJhd1NpbXBsZUNvbWJv
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6Z2V0QnV0dG9uSW1hZ2VT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZmluZENvbWJvQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBh
aW50ZXI6On5TdHlsZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpk
cmF3TGluZUVkaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3Q2hlY2tC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3UmFkaW9CdXR0b24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3UHVzaEJ1dHRvbik6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmRyYXdDb21ib0JveCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnRoZW1lRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjpSZW5kZXJUaGVtZVF0TW9iaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6On5SZW5kZXJUaGVtZVF0TW9iaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXRNb2JpbGU6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0TW9iaWxlOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzdXBwb3J0c0hvdmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29udHJvbFN1cHBvcnRzVGludHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c3VwcG9ydHNDb250cm9sVGlu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdE1vYmlsZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c3lzdGVtRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzeXN0ZW1Db2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbXB1dGVTaXplQmFzZWRPblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldENoZWNrYm94
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludENoZWNr
Ym94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldFJhZGlvU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdEJ1dHRvblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldEJ1dHRvblNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0QnV0dG9uUGFkZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludEJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0RmllbGRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRG
aWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0
QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50
VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0
TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpz
ZXRQb3B1cFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6
cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjph
ZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdE1vYmlsZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphbmltYXRpb25EdXJhdGlvbkZv
clByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFk
anVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1v
YmlsZTo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
TW9iaWxlOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6
OmNvbnZlcnRUb1BhaW50aW5nUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
TW9iaWxlOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2VhcmNoRmllbGRE
ZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y2hlY2tNdWx0aXBsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzdXBwb3J0c0ZvY3VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldFBhbGV0dGVGcm9tUGFnZUNs
aWVudElmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmV4
dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6V29ybGRNYXRy
aXhUcmFuc2Zvcm1lcjo6V29ybGRNYXRyaXhUcmFuc2Zvcm1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JsZE1hdHJpeFRyYW5zZm9ybWVyOjp+V29ybGRNYXRyaXhUcmFuc2Zvcm1lcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjptZWRpYUNvbnRyb2xzQmFzZWxpbmVP
cGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVk
aWFCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhRWxlbWVudENhblBsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Z2V0TWVkaWFDb250cm9sRm9y
ZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBh
aW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6OnBhaW50TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYUN1
cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmZvcm1h
dE1lZGlhQ29udHJvbHNDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYVZvbHVt
ZVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBh
aW50TWVkaWFTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdE1vYmlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lUXRNb2JpbGU6OmNhcmV0QmxpbmtJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpmaWxlTGlzdE5hbWVGb3JXaWR0aCk6CisgICAgICAgICog
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmZpbmRGcmFtZUxpbmVXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmlzVmFsaWQpOgorICAgICAgICAqIHBsYXRm
b3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWU6Om5hdGl2ZVRoZW1lKToKKwogMjAxMS0wOS0wNiAgQWJoaXNoZWsgQXJ5YSAgPGluZmVy
bm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE51bGwgb3duaW5nUmVuZGVyZXIgY3Jhc2ggaW4g
UmVuZGVyU2Nyb2xsYmFyOjp1cGRhdGVTY3JvbGxiYXJQYXJ0cy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXgg
NTg0OTYyYWRjZGNhOTQ2ZmE5ZWZiN2QyMDhhMGQ4ZDIzYjM2MDQwZS4uZWU3YWVmNGI4OTk0Y2My
ZmI5ZDlmOTRmY2JjZDgwYzM5MzkwYmI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTIwOTAsOCArMjA5
MCw2IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggXAogICAg
IHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmggXAogICAgIHBsYXRmb3JtL3F0L1F0U3R5bGVP
cHRpb25XZWJDb21ib0JveC5oIFwKLSAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmggXAot
ICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xs
YWJsZUFyZWEuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBcCiAgICAgcGxhdGZv
cm0vU2Nyb2xsYmFyLmggXApAQCAtMjYyMSw3ICsyNjE5LDYgQEAgU09VUkNFUyArPSBcCiAgICAg
cGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRm
b3JtVG91Y2hFdmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1Ub3VjaFBvaW50
UXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcCBcCiAgICAgcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0
LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcCBcCkBAIC0yNjQyLDggKzI2
MzksMTMgQEAgU09VUkNFUyArPSBcCiB9CiAKIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRf
TU9CSUxFX1RIRU1FPTEpIHsKLSAgICBIRUFERVJTICs9IHBsYXRmb3JtL3F0L1F0TW9iaWxlV2Vi
U3R5bGUuaAotICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vcXQvUXRNb2JpbGVXZWJTdHlsZS5jcHAK
KyAgICBIRUFERVJTICs9IHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaAorICAgIFNP
VVJDRVMgKz0gcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKKyAgICBTT1VSQ0VT
IC09IHBsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAorfSBlbHNlIHsKKyAgICBIRUFERVJTICs9
IHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmggXAorICAgICAgICAgICAgICAgcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9xdC9SZW5k
ZXJUaGVtZVFTdHlsZS5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NNT09USF9T
Q1JPTExJTkc9MSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRN
b2JpbGVXZWJTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdE1vYmlsZVdl
YlN0eWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNhMTgxN2Q3MjJiOTVl
ZTkyMmY3Y2Y2NDhmY2RiNGU1MTkxY2E4NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0
eWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJRdE1vYmlsZVdlYlN0eWxlLmgiCi0KLSNp
bmNsdWRlICJRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCIKLQotI2luY2x1ZGUgPFFQYWludGVy
PgotI2luY2x1ZGUgPFFQaXhtYXBDYWNoZT4KLSNpbmNsdWRlIDxRU3R5bGVPcHRpb24+Ci0KLVF0
TW9iaWxlV2ViU3R5bGU6OlF0TW9iaWxlV2ViU3R5bGUoKQotewotfQotCi1zdGF0aWMgaW5saW5l
IHZvaWQgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50ZXIs
IGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0IFFCcnVzaCYgYnJ1c2gp
Ci17Ci0gICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5wZW4oKTsKLSAgICBRQnJ1c2ggb2xkQnJ1
c2ggPSBwYWludGVyLT5icnVzaCgpOwotICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50
ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0gICAgcGFpbnRlci0+c2V0UGVuKHBlbik7Ci0gICAg
cGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gpOwotCi0gICAgaW50IGxpbmUgPSAxOwotICAgIHBhaW50
ZXItPmRyYXdSb3VuZGVkUmVjdChyZWN0LmFkanVzdGVkKGxpbmUsIGxpbmUsIC1saW5lLCAtbGlu
ZSksCi0gICAgICAgICAgICAvKiB4UmFkaXVzICovIDUuMCwgLyogeVJhZGlvdXMgKi8gNS4wKTsK
LSAgICBwYWludGVyLT5zZXRQZW4ob2xkUGVuKTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChvbGRC
cnVzaCk7Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd0NoZWNrZXIoUVBhaW50ZXIq
IHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0Ci17Ci0gICAgaW50IGJvcmRl
ciA9IHFNaW4ocU1heCgxLCBpbnQoMC4yICogc2l6ZSkpLCA2KTsKLSAgICBpbnQgY2hlY2tlclNp
emUgPSBxTWF4KHNpemUgLSAyICogYm9yZGVyLCAzKTsKLSAgICBpbnQgd2lkdGggPSBjaGVja2Vy
U2l6ZSAvIDM7Ci0gICAgaW50IG1pZGRsZSA9IHFNYXgoMyAqIGNoZWNrZXJTaXplIC8gNywgMyk7
Ci0gICAgaW50IHggPSAoKHNpemUgLSBjaGVja2VyU2l6ZSkgPj4gMSk7Ci0gICAgaW50IHkgPSAo
KHNpemUgLSBjaGVja2VyU2l6ZSkgPj4gMSkgKyAoY2hlY2tlclNpemUgLSB3aWR0aCAtIG1pZGRs
ZSk7Ci0gICAgUVZlY3RvcjxRTGluZUY+IGxpbmVzKGNoZWNrZXJTaXplICsgMSk7Ci0gICAgcGFp
bnRlci0+c2V0UGVuKGNvbG9yKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pZGRsZTsgKytp
KSB7Ci0gICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgsIHksIHgsIHkgKyB3aWR0aCk7Ci0gICAg
ICAgICsreDsKLSAgICAgICAgKyt5OwotICAgIH0KLSAgICBmb3IgKGludCBpID0gbWlkZGxlOyBp
IDw9IGNoZWNrZXJTaXplOyArK2kpIHsKLSAgICAgICAgbGluZXNbaV0gPSBRTGluZUYoeCwgeSwg
eCwgeSArIHdpZHRoKTsKLSAgICAgICAgKyt4OwotICAgICAgICAtLXk7Ci0gICAgfQotICAgIHBh
aW50ZXItPmRyYXdMaW5lcyhsaW5lcy5jb25zdERhdGEoKSwgbGluZXMuc2l6ZSgpKTsKLX0KLQot
UVBpeG1hcCBRdE1vYmlsZVdlYlN0eWxlOjpmaW5kQ2hlY2tlcihjb25zdCBRUmVjdCYgcmVjdCwg
Ym9vbCBkaXNhYmxlZCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9IHFNaW4ocmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKLSAgICBRUGl4bWFwIHJlc3VsdDsKLSAgICBzdGF0aWMgY29uc3Qg
UVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFlbW81LSIpICsgUUxhdGluMVN0
cmluZyhtZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSsgUUxhdGluMVN0cmluZygiLWNoZWNrZXIt
Iik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZSkgKyBR
TGF0aW4xU3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIp
IDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKTsKLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6Zmlu
ZChrZXksIHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplLCBzaXplKTsK
LSAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICAgICAgUVBhaW50ZXIg
cGFpbnRlcigmcmVzdWx0KTsKLSAgICAgICAgZHJhd0NoZWNrZXIoJnBhaW50ZXIsIHNpemUsIGRp
c2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7Ci0gICAgICAgIFFQaXhtYXBD
YWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNv
bnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIFFDb2xvciBjb2xvcikgY29uc3QKLXsKLSAg
ICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwot
Ci0gICAgLy8gZ2V0IG1pbm9yIHNpemUgdG8gZG8gbm90IHBhaW50IGEgd2lkZSBlbGlwc2UKLSAg
ICBxcmVhbCBzcXVhcmVTaXplID0gcU1pbihzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwot
ICAgIC8vIGRlZmxhdGUgb25lIHBpeGVsCi0gICAgUVJlY3QgcmVjdCA9IFFSZWN0KFFQb2ludCgx
LCAxKSwgUVNpemUoc3F1YXJlU2l6ZSAtIDIsIHNxdWFyZVNpemUgLSAyKSk7Ci0gICAgY29uc3Qg
UVBvaW50IGNlbnRlckdyYWRpZW50KHJlY3QuYm90dG9tUmlnaHQoKSAqIDAuNyk7Ci0KLSAgICBR
UmFkaWFsR3JhZGllbnQgcmFkaWFsR3JhZGllbnQoY2VudGVyR3JhZGllbnQsIGNlbnRlckdyYWRp
ZW50LngoKSAtIDEpOwotICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6d2hp
dGUpOwotICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC42LCBRdDo6d2hpdGUpOwotICAg
IHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBjb2xvcik7Ci0KLSAgICBwYWludGVyLT5z
ZXRQZW4oY29sb3IpOwotICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKLSAgICBwYWludGVy
LT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChyYWRpYWxHcmFkaWVu
dCk7Ci0gICAgcGFpbnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0KLSAgICBpbnQgYm9yZGVyID0g
MC4xICogKHJlY3Qud2lkdGgoKSArIHJlY3QuaGVpZ2h0KCkpOwotICAgIGJvcmRlciA9IHFNaW4o
cU1heCgyLCBib3JkZXIpLCAxMCk7Ci0gICAgcmVjdC5hZGp1c3QoYm9yZGVyLCBib3JkZXIsIC1i
b3JkZXIsIC1ib3JkZXIpOwotICAgIGlmIChjaGVja2VkKSB7Ci0gICAgICAgIHBhaW50ZXItPnNl
dFBlbihRdDo6Tm9QZW4pOwotICAgICAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0gICAg
ICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIH0KLX0KLQotUVBpeG1hcCBRdE1v
YmlsZVdlYlN0eWxlOjpmaW5kUmFkaW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwg
Ym9vbCBkaXNhYmxlZCkgY29uc3QKLXsKLSAgICBRUGl4bWFwIHJlc3VsdDsKLSAgICBzdGF0aWMg
Y29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFlbW81LSIpICsgUUxh
dGluMVN0cmluZyhtZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSArIFFMYXRpbjFTdHJpbmcoIi1y
YWRpby0iKTsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihzaXpl
LndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVyKHNpemUuaGVp
Z2h0KCkpICsgUUxhdGluMVN0cmluZygiLSIpCi0gICAgICAgICsgKGRpc2FibGVkID8gUUxhdGlu
MVN0cmluZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFTdHJpbmcoImVuYWJsZWQiKSkgKyAoY2hlY2tl
ZCA/IFFMYXRpbjFTdHJpbmcoIi1jaGVja2VkIikgOiBRTGF0aW4xU3RyaW5nKCIiKSk7Ci0gICAg
aWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7Ci0gICAgICAgIHJlc3VsdCA9
IFFQaXhtYXAoc2l6ZSk7Ci0gICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0g
ICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7Ci0gICAgICAgIGRyYXdSYWRpbygmcGFp
bnRlciwgc2l6ZSwgY2hlY2tlZCwgZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5IDogUXQ6OmRhcmtH
cmF5KTsKLSAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdDb250
cm9sKENvbnRyb2xFbGVtZW50IGVsZW1lbnQsIGNvbnN0IFFTdHlsZU9wdGlvbiogb3B0aW9uLCBR
UGFpbnRlciogcGFpbnRlciwgY29uc3QgUVdpZGdldCogd2lkZ2V0KSBjb25zdAotewotICAgIHN3
aXRjaCAoZWxlbWVudCkgewotICAgIGNhc2UgQ0VfQ2hlY2tCb3g6IHsKLSAgICAgICAgUVJlY3Qg
cmVjdCA9IG9wdGlvbi0+cmVjdDsKLSAgICAgICAgY29uc3QgYm9vbCBkaXNhYmxlZCA9ICEob3B0
aW9uLT5zdGF0ZSAmIFN0YXRlX0VuYWJsZWQpOwotCi0gICAgICAgIFFMaW5lYXJHcmFkaWVudCBs
aW5lYXJHcmFkaWVudChyZWN0LnRvcExlZnQoKSwgcmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAg
ICBpZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQo
MC4wLCBRdDo6bGlnaHRHcmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9y
QXQoMC41LCBRdDo6d2hpdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpkYXJrR3JheSk7Ci0gICAgICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHBhaW50ZXItPnNldFBlbihRUGVuKGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0Ojpk
YXJrR3JheSkpOwotICAgICAgICBwYWludGVyLT5zZXRCcnVzaChsaW5lYXJHcmFkaWVudCk7Ci0g
ICAgICAgIHBhaW50ZXItPmRyYXdSZWN0KHJlY3QpOwotICAgICAgICByZWN0LmFkanVzdCgxLCAx
LCAtMSwgLTEpOwotCi0gICAgICAgIGlmIChvcHRpb24tPnN0YXRlICYgU3RhdGVfT2ZmKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgUVBpeG1hcCBjaGVja2VyID0gZmluZENoZWNrZXIo
cmVjdCwgZGlzYWJsZWQpOwotICAgICAgICBpZiAoY2hlY2tlci5pc051bGwoKSkKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGludCB4ID0gKHJlY3Qud2lkdGgoKSAtIGNoZWNrZXIud2lk
dGgoKSkgPj4gMTsKLSAgICAgICAgaW50IHkgPSAocmVjdC5oZWlnaHQoKSAtIGNoZWNrZXIuaGVp
Z2h0KCkpID4+IDE7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdC54KCkgKyB4LCBy
ZWN0LnkoKSArIHksIGNoZWNrZXIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBD
RV9SYWRpb0J1dHRvbjogewotICAgICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRpb24t
PnN0YXRlICYgU3RhdGVfRW5hYmxlZCk7Ci0gICAgICAgIFFQaXhtYXAgcmFkaW8gPSBmaW5kUmFk
aW8ob3B0aW9uLT5yZWN0LnNpemUoKSwgb3B0aW9uLT5zdGF0ZSAmIFN0YXRlX09uLCBkaXNhYmxl
ZCk7Ci0gICAgICAgIGlmIChyYWRpby5pc051bGwoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBwYWludGVyLT5kcmF3UGl4bWFwKG9wdGlvbi0+cmVjdC54KCksIG9wdGlvbi0+cmVjdC55
KCksIHJhZGlvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ0VfUHVzaEJ1dHRv
bjogewotICAgICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRpb24tPnN0YXRlICYgU3Rh
dGVfRW5hYmxlZCk7Ci0gICAgICAgIFFSZWN0IHJlY3QgPSBvcHRpb24tPnJlY3Q7Ci0gICAgICAg
IFFQZW4gcGVuKFF0OjpkYXJrR3JheSwgMS4wLCBRdDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAs
IFF0OjpSb3VuZEpvaW4pOwotICAgICAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKLQotICAgICAg
ICBjb25zdCBib29sIHN1bmtlbiA9IChvcHRpb24tPnN0YXRlICYgU3RhdGVfU3Vua2VuKTsKLSAg
ICAgICAgaWYgKHN1bmtlbikgewotICAgICAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJh
Y2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtHcmF5KSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5l
YXJHcmFkaWVudDsKLSAgICAgICAgaWYgKGRpc2FibGVkKSB7Ci0gICAgICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOwotICAg
ICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKFFQb2ludChyZWN0LmJvdHRvbUxl
ZnQoKS54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICByZWN0LmJvdHRvbUxlZnQoKS55KCkg
LSAvKiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7Ci0gICAgICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOwotICAgICAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0Q29sb3JBdCgwLjQsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIGxp
bmVhckdyYWRpZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFFXaW5kb3dzU3R5bGU6OmRyYXdDb250cm9sKGVsZW1lbnQsIG9wdGlvbiwgcGFpbnRlciwg
d2lkZ2V0KTsKLSAgICB9Ci19Ci12b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdQcmltaXRpdmUo
UHJpbWl0aXZlRWxlbWVudCBlbGVtZW50LCBjb25zdCBRU3R5bGVPcHRpb24qIG9wdGlvbiwgUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFXaWRnZXQqIHdpZGdldCkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKGVsZW1lbnQpIHsKLSAgICBjYXNlIFFTdHlsZTo6UEVfUGFuZWxMaW5lRWRpdDogewotICAg
ICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRpb24tPnN0YXRlICYgU3RhdGVfRW5hYmxl
ZCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgc3Vua2VuID0gKG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9T
dW5rZW4pOwotICAgICAgICBRUmVjdCByZWN0ID0gb3B0aW9uLT5yZWN0OwotICAgICAgICBRUGVu
IHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6
Um91bmRKb2luKTsKLSAgICAgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7Ci0KLSAgICAgICAgaWYg
KHN1bmtlbikgewotICAgICAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQo
cGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtHcmF5KSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVu
dDsKLSAgICAgICAgaWYgKGRpc2FibGVkKSB7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRTdGFydChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRG
aW5hbFN0b3AocmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0Q29sb3JBdCgwLjAsIFF0OjpsaWdodEdyYXkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGll
bnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAg
ICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QudG9wTGVmdCgpLngoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QudG9wTGVmdCgpLnkoKSArIC8qIG9mZnNldCBs
aW1pdCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNl
dENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0Q29sb3JBdCgwLjM1LCBRdDo6d2hpdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd1Jl
Y3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBsaW5lYXJHcmFk
aWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBRV2lu
ZG93c1N0eWxlOjpkcmF3UHJpbWl0aXZlKGVsZW1lbnQsIG9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0
KTsKLSAgICB9Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd011bHRpcGxlQ29tYm9C
dXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBRQ29sb3IgY29sb3Ip
IGNvbnN0Ci17Ci0gICAgaW50IHJlY3RXaWR0aCA9IHNpemUud2lkdGgoKSAtIDE7Ci0gICAgaW50
IHdpZHRoID0gcU1heCgyLCByZWN0V2lkdGggPj4gMyk7Ci0gICAgaW50IGRpc3RhbmNlID0gKHJl
Y3RXaWR0aCAtIDMgKiB3aWR0aCkgPj4gMTsKLSAgICBpbnQgdG9wID0gKHNpemUuaGVpZ2h0KCkg
LSB3aWR0aCkgPj4gMTsKLQotICAgIHBhaW50ZXItPnNldFBlbihjb2xvcik7Ci0gICAgcGFpbnRl
ci0+c2V0QnJ1c2goY29sb3IpOwotCi0gICAgcGFpbnRlci0+ZHJhd1JlY3QoMCwgdG9wLCB3aWR0
aCwgd2lkdGgpOwotICAgIHBhaW50ZXItPmRyYXdSZWN0KHdpZHRoICsgZGlzdGFuY2UsIHRvcCwg
d2lkdGgsIHdpZHRoKTsKLSAgICBwYWludGVyLT5kcmF3UmVjdCgyICogKHdpZHRoICsgZGlzdGFu
Y2UpLCB0b3AsIHdpZHRoLCB3aWR0aCk7Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJh
d1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwg
UUNvbG9yIGNvbG9yKSBjb25zdAotewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAg
ICBpbnQgbWlkbGUgPSB3aWR0aCA+PiAxOwotICAgIFFWZWN0b3I8UUxpbmU+IGxpbmVzKHdpZHRo
ICsgMSk7Ci0KLSAgICBmb3IgKGludCB4ID0gMCwgeSA9IDA7ICB4IDwgbWlkbGU7IHgrKywgeSsr
KSB7Ci0gICAgICAgIGxpbmVzW3hdID0gUUxpbmUoeCwgeSwgeCwgeSArIDIpOwotICAgICAgICBs
aW5lc1t4ICsgbWlkbGVdID0gUUxpbmUod2lkdGggLSB4IC0gMSwgeSwgd2lkdGggLSB4IC0gMSwg
eSArIDIpOwotICAgIH0KLSAgICAvLyBKdXN0IHRvIGVuc3VyZSB0aGUgbGluZXMnIGludGVyc2Vj
dGlvbi4KLSAgICBsaW5lc1t3aWR0aF0gPSBRTGluZShtaWRsZSwgbWlkbGUsIG1pZGxlLCBtaWRs
ZSArIDIpOwotCi0gICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKLSAgICBwYWludGVyLT5zZXRC
cnVzaChjb2xvcik7Ci0gICAgcGFpbnRlci0+ZHJhd0xpbmVzKGxpbmVzKTsKLX0KLQotUVNpemUg
UXRNb2JpbGVXZWJTdHlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKGNvbnN0IFFTaXplJiBidXR0b25T
aXplKSBjb25zdAotewotICAgIGNvbnN0IGludCBib3JkZXIgPSBxTWF4KDMsIGJ1dHRvblNpemUu
d2lkdGgoKSA+PiAzKSA8PCAxOwotCi0gICAgaW50IHdpZHRoID0gYnV0dG9uU2l6ZS53aWR0aCgp
IC0gYm9yZGVyOwotICAgIGludCBoZWlnaHQgPSBidXR0b25TaXplLmhlaWdodCgpIC0gYm9yZGVy
OwotCi0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICByZXR1cm4gUVNp
emUoKTsKLQotICAgIGlmIChoZWlnaHQgPj0gKHdpZHRoID4+IDEpKQotICAgICAgICB3aWR0aCA9
IHdpZHRoID4+IDEgPDwgMTsKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gaGVpZ2h0IDw8IDE7
Ci0KLSAgICByZXR1cm4gUVNpemUod2lkdGggKyAxLCB3aWR0aCk7Ci19Ci0KLVFQaXhtYXAgUXRN
b2JpbGVXZWJTdHlsZTo6ZmluZENvbWJvQnV0dG9uKGNvbnN0IFFTaXplJiBzaXplLCBib29sIG11
bHRpcGxlLCBib29sIGRpc2FibGVkKSBjb25zdAotewotICAgIFFQaXhtYXAgcmVzdWx0OwotICAg
IFFTaXplIGltYWdlU2l6ZSA9IGdldEJ1dHRvbkltYWdlU2l6ZShzaXplKTsKLQotICAgIGlmIChp
bWFnZVNpemUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBRUGl4bWFwKCk7Ci0gICAgc3RhdGlj
IGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS0iKSArIFFM
YXRpbjFTdHJpbmcobWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkgKyBRTGF0aW4xU3RyaW5nKCIt
Y29tYm8tIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyAobXVsdGlwbGUgPyBRTGF0aW4x
U3RyaW5nKCJtdWx0aXBsZS0iKSA6IFFMYXRpbjFTdHJpbmcoInNpbXBsZS0iKSkKLSAgICAgICAg
KyBRU3RyaW5nOjpudW1iZXIoaW1hZ2VTaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIp
ICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgKyBRTGF0aW4x
U3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIpIDogUUxh
dGluMVN0cmluZygiZW5hYmxlZCIpKTsKLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXks
IHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChpbWFnZVNpemUpOwotICAgICAg
ICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAgICAgICBRUGFpbnRlciBwYWludGVy
KCZyZXN1bHQpOwotICAgICAgICBpZiAobXVsdGlwbGUpCi0gICAgICAgICAgICBkcmF3TXVsdGlw
bGVDb21ib0J1dHRvbigmcGFpbnRlciwgaW1hZ2VTaXplLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdy
YXkgOiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3U2ltcGxl
Q29tYm9CdXR0b24oJnBhaW50ZXIsIGltYWdlU2l6ZSwgZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5
IDogUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1
bHQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFF0TW9iaWxlV2ViU3R5
bGU6OmRyYXdDb21wbGV4Q29udHJvbChDb21wbGV4Q29udHJvbCBjb250cm9sLCBjb25zdCBRU3R5
bGVPcHRpb25Db21wbGV4KiBvcHRpb24sIFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRV2lkZ2V0
KiB3aWRnZXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChjb250cm9sKSB7Ci0gICAgY2FzZSBDQ19D
b21ib0JveDogewotICAgICAgICBib29sIG11bHRpcGxlID0gZmFsc2U7Ci0gICAgICAgIGNvbnN0
IGJvb2wgZGlzYWJsZWQgPSAhKG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9FbmFibGVkKTsKLQotICAg
ICAgICBjb25zdCBRU3R5bGVPcHRpb25Db21ib0JveCogY21iID0gMDsKLSAgICAgICAgY29uc3Qg
V2ViQ29yZTo6UXRTdHlsZU9wdGlvbldlYkNvbWJvQm94KiB3ZWJDb21ibyA9IHN0YXRpY19jYXN0
PGNvbnN0IFdlYkNvcmU6OlF0U3R5bGVPcHRpb25XZWJDb21ib0JveCo+KG9wdGlvbik7Ci0KLSAg
ICAgICAgaWYgKHdlYkNvbWJvKSB7Ci0gICAgICAgICAgICBtdWx0aXBsZSA9IHdlYkNvbWJvLT5t
dWx0aXBsZSgpOwotICAgICAgICAgICAgY21iID0gd2ViQ29tYm87Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgY21iID0gcXN0eWxlb3B0aW9uX2Nhc3Q8Y29uc3QgUVN0eWxlT3B0aW9uQ29t
Ym9Cb3gqPihvcHRpb24pOwotCi0gICAgICAgIGlmICghY21iKSB7Ci0gICAgICAgICAgICBRV2lu
ZG93c1N0eWxlOjpkcmF3Q29tcGxleENvbnRyb2woY29udHJvbCwgb3B0aW9uLCBwYWludGVyLCB3
aWRnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIShj
bWItPnN1YkNvbnRyb2xzICYgU0NfQ29tYm9Cb3hBcnJvdykpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBRUmVjdCByZWN0ID0gb3B0aW9uLT5yZWN0OwotICAgICAgICBRUGVuIHBlbihR
dDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRK
b2luKTsKLSAgICAgICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50OwotICAgICAgICBp
ZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3Qu
Ym90dG9tTGVmdCgpKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChy
ZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAu
MCwgUXQ6OmdyYXkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAs
IFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVu
dC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVu
dC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QuYm90dG9tTGVmdCgpLngoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlY3QuYm90dG9tTGVmdCgpLnkoKSAtIC8qIG9mZnNldCBsaW1pdCBmb3Ig
Z3JhZGllbnQgKi8gMjApKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQo
MC4wLCBRdDo6Z3JheSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAu
NCwgUXQ6OndoaXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRyYXdSZWN0YW5ndWxhckNvbnRy
b2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgbGluZWFyR3JhZGllbnQpOwotCi0gICAg
ICAgIHJlY3QgPSBzdWJDb250cm9sUmVjdChDQ19Db21ib0JveCwgY21iLCBTQ19Db21ib0JveEFy
cm93LCB3aWRnZXQpOwotICAgICAgICBRUGl4bWFwIHBpYyA9IGZpbmRDb21ib0J1dHRvbihyZWN0
LnNpemUoKSwgbXVsdGlwbGUsIGRpc2FibGVkKTsKLQotICAgICAgICBpZiAocGljLmlzTnVsbCgp
KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaW50IHggPSAocmVjdC53aWR0aCgpIC0g
cGljLndpZHRoKCkpID4+IDE7Ci0gICAgICAgIGludCB5ID0gKHJlY3QuaGVpZ2h0KCkgLSBwaWMu
aGVpZ2h0KCkpID4+IDE7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdC54KCkgKyB4
LCByZWN0LnkoKSArIHksIHBpYyk7Ci0KLSAgICAgICAgcGFpbnRlci0+c2V0UGVuKGRpc2FibGVk
ID8gUXQ6OmdyYXkgOiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBwYWludGVyLT5kcmF3TGluZShy
ZWN0LmxlZnQoKSAtIDIsIHJlY3QudG9wKCkgKyAyLCByZWN0LmxlZnQoKSAtIDIsIHJlY3QuYm90
dG9tKCkgLSAyKTsKLQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgUVdpbmRvd3NTdHlsZTo6ZHJhd0NvbXBsZXhDb250cm9sKGNvbnRyb2wsIG9wdGlvbiwgcGFp
bnRlciwgd2lkZ2V0KTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1F0TW9iaWxlV2ViU3R5bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI5OWQy
YjhiNWEzOWM5NGMwYjlhMTcyYTE4ZmU0YmFlYzA0MjY5MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdE1v
YmlsZVdlYlN0eWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2lmbmRlZiBRdE1vYmlsZVdlYlN0eWxlX2gKLSNkZWZpbmUgUXRNb2JpbGVXZWJT
dHlsZV9oCi0KLSNpbmNsdWRlIDxRV2luZG93c1N0eWxlPgotCi1jbGFzcyBRdE1vYmlsZVdlYlN0
eWxlIDogcHVibGljIFFXaW5kb3dzU3R5bGUgewotcHVibGljOgotICAgIFF0TW9iaWxlV2ViU3R5
bGUoKTsKLQotICAgIHZvaWQgZHJhd0NvbnRyb2woQ29udHJvbEVsZW1lbnQsIGNvbnN0IFFTdHls
ZU9wdGlvbiosIFFQYWludGVyKiwgY29uc3QgUVdpZGdldCopIGNvbnN0OwotICAgIHZvaWQgZHJh
d0NvbXBsZXhDb250cm9sKENvbXBsZXhDb250cm9sLCBjb25zdCBRU3R5bGVPcHRpb25Db21wbGV4
KiwgUVBhaW50ZXIqLCBjb25zdCBRV2lkZ2V0KikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3UHJpbWl0
aXZlKFByaW1pdGl2ZUVsZW1lbnQsIGNvbnN0IFFTdHlsZU9wdGlvbiosIFFQYWludGVyKiwgY29u
c3QgUVdpZGdldCopIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZvaWQgZHJhd0NoZWNrZXIoUVBh
aW50ZXIqIHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0OwotICAgIFFQaXht
YXAgZmluZENoZWNrZXIoY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgZGlzYWJsZWQpIGNvbnN0Owot
Ci0gICAgdm9pZCBkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXpl
LCBib29sIGNoZWNrZWQsIFFDb2xvciBjb2xvcikgY29uc3Q7Ci0gICAgUVBpeG1hcCBmaW5kUmFk
aW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7
Ci0KLSAgICBRU2l6ZSBnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNpemUmIGJ1dHRvblNpemUp
IGNvbnN0OwotICAgIHZvaWQgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVy
LCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdDsKLSAgICB2b2lkIGRyYXdN
dWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwg
UUNvbG9yIGNvbG9yKSBjb25zdDsKLSAgICBRUGl4bWFwIGZpbmRDb21ib0J1dHRvbihjb25zdCBR
U2l6ZSYgc2l6ZSwgYm9vbCBtdWx0aXBsZSwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7Ci0KLX07Ci0K
LSNlbmRpZiAvLyBRdE1vYmlsZVdlYlN0eWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzA5NjE5OTM5NzFjOGQ2
M2MzNGEzYjNjMmE0NDBiZDNkMmJmZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0wLDAgKzEsMTUxMCBAQAor
LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9y
Zz4KKyAqICAgICAgICAgICAgICAgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4K
KyAqICAgICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgor
ICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKKworI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5o
IgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0
LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgor
I2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3Iu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpZiBFTkFCTEUoVklERU8pCisj
aW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKKyNlbmRpZgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhaW50SW5mby5oIgor
I2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUXRTdHlsZU9wdGlvbldlYkNv
bWJvQm94LmgiCisjaW5jbHVkZSAicXdlYnNldHRpbmdzLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94
LmgiCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKKyNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5o
IgorI2VuZGlmCisjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVF0LmgiCisjaW5jbHVkZSAiU2xpZGVyVGh1
bWJFbGVtZW50LmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2luY2x1ZGUgIlVzZXJBZ2Vu
dFN0eWxlU2hlZXRzLmgiCisKKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UUNv
bG9yPgorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UUZpbGU+CisjaW5j
bHVkZSA8UUZvbnRNZXRyaWNzPgorI2luY2x1ZGUgPFFMaW5lRWRpdD4KKyNpbmNsdWRlIDxRTWFj
U3R5bGU+CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVBsYXN0aXF1ZVN0eWxlPgor
I2luY2x1ZGUgPFFQdXNoQnV0dG9uPgorI2luY2x1ZGUgPFFTdHlsZUZhY3Rvcnk+CisjaW5jbHVk
ZSA8UVN0eWxlT3B0aW9uQnV0dG9uPgorI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkZyYW1lVjI+Cisj
aWYgRU5BQkxFKFBST0dSRVNTX1RBRykKKyNpbmNsdWRlIDxRU3R5bGVPcHRpb25Qcm9ncmVzc0Jh
clYyPgorI2VuZGlmCisjaW5jbHVkZSA8UVN0eWxlT3B0aW9uU2xpZGVyPgorI2luY2x1ZGUgPFFX
aWRnZXQ+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKKworaW5saW5lIHN0YXRpYyB2b2lkIGluaXRTdHlsZU9wdGlvbihRV2lkZ2V0ICp3aWRnZXQs
IFFTdHlsZU9wdGlvbiYgb3B0aW9uKQoreworICAgIGlmICh3aWRnZXQpCisgICAgICAgIG9wdGlv
bi5pbml0RnJvbSh3aWRnZXQpOworICAgIGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgIElm
IGEgd2lkZ2V0IGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUgZm9yIHJlbmRlcmluZywgd2UgZmFs
bGJhY2sgdG8gZGVmYXVsdAorICAgICAgICAgIHZhbHVlIGZvciBhbiBhY3RpdmUgd2lkZ2V0Lgor
ICAgICAgICAgKi8KKyAgICAgICAgb3B0aW9uLnN0YXRlID0gUVN0eWxlOjpTdGF0ZV9BY3RpdmUg
fCBRU3R5bGU6OlN0YXRlX0VuYWJsZWQ7CisgICAgfQorfQorLy8gVGhlc2UgdmFsdWVzIGFsbCBt
YXRjaCBTYWZhcmkvV2luL0Nocm9taXVtCitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdENvbnRy
b2xGb250UGl4ZWxTaXplID0gMTM7CitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdENhbmNlbEJ1
dHRvblNpemUgPSA5Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pbkNhbmNlbEJ1dHRvblNpemUgPSA1
Oworc3RhdGljIGNvbnN0IGZsb2F0IG1heENhbmNlbEJ1dHRvblNpemUgPSAyMTsKK3N0YXRpYyBj
b25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAxMzsK
K3N0YXRpYyBjb25zdCBmbG9hdCBtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9
IDk7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNp
emUgPSAzMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uV2lkdGggPSAxODsKKworU3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVR
dCogdGhlbWUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIGluaXQocGFpbnRJ
bmZvLmNvbnRleHQgPyBwYWludEluZm8uY29udGV4dCA6IDAsIHRoZW1lLT5xU3R5bGUoKSk7Cit9
CisKK1N0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKFNjcm9sbGJhclRoZW1lUXQqIHRoZW1lLCBH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW5pdChjb250ZXh0LCB0aGVtZS0+c3R5
bGUoKSk7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjppbml0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgUVN0eWxlKiB0aGVtZVN0eWxlKQoreworICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxR
UGFpbnRlcio+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICB3aWRnZXQgPSAwOwor
ICAgIFFQYWludERldmljZSogZGV2ID0gMDsKKyAgICBpZiAocGFpbnRlcikKKyAgICAgICAgZGV2
ID0gcGFpbnRlci0+ZGV2aWNlKCk7CisgICAgaWYgKGRldiAmJiBkZXYtPmRldlR5cGUoKSA9PSBR
SW50ZXJuYWw6OldpZGdldCkKKyAgICAgICAgd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UVdpZGdldCo+
KGRldik7CisgICAgc3R5bGUgPSB0aGVtZVN0eWxlOworCisgICAgaWYgKHBhaW50ZXIpIHsKKyAg
ICAgICAgLy8gdGhlIHN0eWxlcyBvZnRlbiBhc3N1bWUgYmVpbmcgY2FsbGVkIHdpdGggYSBwcmlz
dGluZSBwYWludGVyIHdoZXJlIG5vIGJydXNoIGlzIHNldCwKKyAgICAgICAgLy8gc28gcmVzZXQg
aXQgbWFudWFsbHkKKyAgICAgICAgb2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOworICAgICAg
ICBwYWludGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7CisKKyAgICAgICAgLy8gcGFpbnRpbmcg
dGhlIHdpZGdldCB3aXRoIGFudGktYWxpYXNpbmcgd2lsbCBtYWtlIGl0IGJsdXJyeQorICAgICAg
ICAvLyBkaXNhYmxlIGl0IGhlcmUgYW5kIHJlc3RvcmUgaXQgbGF0ZXIKKyAgICAgICAgb2xkQW50
aWFsaWFzaW5nID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2lu
Zyk7CisgICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2lu
ZywgZmFsc2UpOworICAgIH0KK30KKworU3R5bGVQYWludGVyOjp+U3R5bGVQYWludGVyKCkKK3sK
KyAgICBpZiAocGFpbnRlcikgeworICAgICAgICBwYWludGVyLT5zZXRCcnVzaChvbGRCcnVzaCk7
CisgICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnRzKFFQYWludGVyOjpBbnRpYWxpYXNpbmcs
IG9sZEFudGlhbGlhc2luZyk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBS
ZW5kZXJUaGVtZVF0OjpjcmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFJlbmRlclRoZW1lUXQocGFnZSkpOworfQorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBS
ZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpCisg
ICAgICAgIHJldHVybiBSZW5kZXJUaGVtZVF0OjpjcmVhdGUocGFnZSk7CisKKyAgICBzdGF0aWMg
UmVuZGVyVGhlbWUqIGZhbGxiYWNrID0gUmVuZGVyVGhlbWVRdDo6Y3JlYXRlKDApLnJlbGVhc2VS
ZWYoKTsKKyAgICByZXR1cm4gZmFsbGJhY2s7Cit9CisKK1JlbmRlclRoZW1lUXQ6OlJlbmRlclRo
ZW1lUXQoUGFnZSogcGFnZSkKKyAgICA6IFJlbmRlclRoZW1lKCkKKyAgICAsIG1fcGFnZShwYWdl
KQorICAgICwgbV9saW5lRWRpdCgwKQoreworICAgIFFQdXNoQnV0dG9uIGJ1dHRvbjsKKyAgICBi
dXR0b24uc2V0QXR0cmlidXRlKFF0OjpXQV9NYWNTbWFsbFNpemUpOworICAgIFFGb250IGRlZmF1
bHRCdXR0b25Gb250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOworICAgIFFGb250SW5m
byBmb250SW5mbyhkZWZhdWx0QnV0dG9uRm9udCk7CisgICAgbV9idXR0b25Gb250RmFtaWx5ID0g
ZGVmYXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7CisjaWZkZWYgUV9XU19NQUMKKyAgICBtX2J1dHRv
bkZvbnRQaXhlbFNpemUgPSBmb250SW5mby5waXhlbFNpemUoKTsKKyNlbmRpZgorCisgICAgbV9m
YWxsYmFja1N0eWxlID0gUVN0eWxlRmFjdG9yeTo6Y3JlYXRlKFFMYXRpbjFTdHJpbmcoIndpbmRv
d3MiKSk7Cit9CisKK1JlbmRlclRoZW1lUXQ6On5SZW5kZXJUaGVtZVF0KCkKK3sKKyAgICBkZWxl
dGUgbV9mYWxsYmFja1N0eWxlOworI2lmbmRlZiBRVF9OT19MSU5FRURJVAorICAgIGRlbGV0ZSBt
X2xpbmVFZGl0OworI2VuZGlmCit9CisKKy8vIFJlbW92ZSB0aGlzIHdoZW4gU2VhcmNoRmllbGRQ
YXJ0IGlzIHN0eWxlLWFibGUgaW4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZCgpCitib29s
IFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBmaWxsLCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAoreworICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVh
cmFuY2UoKSkgeworICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAgICAgICAvLyBUZXN0IHRo
ZSBzdHlsZSB0byBzZWUgaWYgdGhlIFVBIGJvcmRlciBhbmQgYmFja2dyb3VuZCBtYXRjaC4KKyAg
ICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyCisgICAgICAgICAgICAgICAg
fHwgKnN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gZmlsbAorICAgICAgICAgICAgICAgIHx8
IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Ip
ICE9IGJhY2tncm91bmRDb2xvcik7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFJlbmRl
clRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dyb3VuZENv
bG9yKTsKKyAgICB9Cit9CisKKy8vIGZvciBzb21lIHdpZGdldCBwYWludGluZywgd2UgbmVlZCB0
byBmYWxsYmFjayB0byBXaW5kb3dzIHN0eWxlCitRU3R5bGUqIFJlbmRlclRoZW1lUXQ6OmZhbGxi
YWNrU3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiAobV9mYWxsYmFja1N0eWxlKSA/IG1fZmFs
bGJhY2tTdHlsZSA6IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKK30KKworUVN0eWxlKiBSZW5kZXJU
aGVtZVF0OjpxU3R5bGUoKSBjb25zdAoreworICAgIGlmIChtX3BhZ2UpIHsKKyAgICAgICAgUVdl
YlBhZ2VDbGllbnQqIHBhZ2VDbGllbnQgPSBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCk7CisKKyAgICAgICAgaWYgKHBhZ2VDbGllbnQpCisgICAgICAgICAg
ICByZXR1cm4gcGFnZUNsaWVudC0+c3R5bGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gUUFwcGxp
Y2F0aW9uOjpzdHlsZSgpOworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0cmFEZWZhdWx0
U3R5bGVTaGVldCgpCit7CisgICAgU3RyaW5nIHJlc3VsdCA9IFJlbmRlclRoZW1lOjpleHRyYURl
ZmF1bHRTdHlsZVNoZWV0KCk7CisjaWYgRU5BQkxFKE5PX0xJU1RCT1hfUkVOREVSSU5HKQorICAg
IHJlc3VsdCArPSBTdHJpbmcodGhlbWVRdE5vTGlzdGJveGVzVXNlckFnZW50U3R5bGVTaGVldCwg
c2l6ZW9mKHRoZW1lUXROb0xpc3Rib3hlc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKyNlbmRpZgor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNIb3Zl
cihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoreworICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNh
c2UgQ2hlY2tib3hQYXJ0OgorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgIGNhc2UgUHVzaEJ1dHRv
blBhcnQ6CisgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoK
KyAgICBjYXNlIEJ1dHRvbkJldmVsUGFydDoKKyAgICBjYXNlIExpc3Rib3hQYXJ0OgorICAgIGNh
c2UgTGlzdEl0ZW1QYXJ0OgorICAgIGNhc2UgTWVudWxpc3RQYXJ0OgorICAgIGNhc2UgTWVudWxp
c3RCdXR0b25QYXJ0OgorICAgIGNhc2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6CisgICAgY2FzZSBT
bGlkZXJWZXJ0aWNhbFBhcnQ6CisgICAgY2FzZSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0Ogor
ICAgIGNhc2UgU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBh
cnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25QYXJ0OgorICAgIGNhc2UgU2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25QYXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKKyAgICBj
YXNlIFRleHRBcmVhUGFydDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW50IFJlbmRlclRoZW1lUXQ6OmJhc2Vs
aW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIGlmICghby0+
aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFy
YW5jZSgpID09IENoZWNrYm94UGFydCB8fCBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gUmFk
aW9QYXJ0KQorICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3gobyktPm1hcmdpblRvcCgpICsgdG9S
ZW5kZXJCb3gobyktPmhlaWdodCgpIC0gMjsgLy8gU2FtZSBhcyBpbiBvbGQga2h0bWwKKyAgICBy
ZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24obyk7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVRdDo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25z
dAoreworICAgIGlmICghaXNFbmFibGVkKG8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBDaGVja2JveGVzIG9ubHkgaGF2ZSB0aW50IHdoZW4gY2hlY2tlZC4KKyAgICBpZiAoby0+
c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCkKKyAgICAgICAgcmV0dXJuIGlz
Q2hlY2tlZChvKTsKKworICAgIC8vIEZvciBub3cgYXNzdW1lIG90aGVyIGNvbnRyb2xzIGhhdmUg
dGludCBpZiBlbmFibGVkLgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlclRoZW1l
UXQ6OnN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworaW50IFJlbmRlclRoZW1lUXQ6OmZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqIHN0eWxlKSBj
b25zdAoreworI2lmbmRlZiBRVF9OT19MSU5FRURJVAorICAgIGlmICghbV9saW5lRWRpdCkKKyAg
ICAgICAgbV9saW5lRWRpdCA9IG5ldyBRTGluZUVkaXQoKTsKKyNlbmRpZgorCisgICAgUVN0eWxl
T3B0aW9uRnJhbWVWMiBvcHQ7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gMDsKKyNpZm5kZWYgUVRf
Tk9fTElORUVESVQKKyAgICB3aWRnZXQgPSBtX2xpbmVFZGl0OworI2VuZGlmCisgICAgcmV0dXJu
IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0RlZmF1bHRGcmFtZVdpZHRoLCAmb3B0LCB3
aWRnZXQpOworfQorCitzdGF0aWMgUVJlY3QgaW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3Qm
IG9yaWdpbmFsUmVjdCwgUVN0eWxlKiBzdHlsZSkKK3sKKyAgICBRU3R5bGVPcHRpb25CdXR0b24g
b3B0aW9uOworICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOworICAgIG9w
dGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OworCisgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHN0eWxl
LT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLCAmb3B0aW9u
LCAwKTsKKyAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgaW50IHBhZGRp
bmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBvcmlnaW5hbFJlY3QubGVmdCgpOworICAgICAg
ICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxSZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJp
Z2h0KCk7CisgICAgICAgIGludCBwYWRkaW5nVG9wID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdp
bmFsUmVjdC50b3AoKTsKKyAgICAgICAgaW50IHBhZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3Qu
Ym90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgpOworCisgICAgICAgIHJldHVybiBvcmlnaW5h
bFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAtcGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBw
YWRkaW5nQm90dG9tKTsKKyAgICB9CisgICAgcmV0dXJuIG9yaWdpbmFsUmVjdDsKK30KKwordm9p
ZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8s
IEludFJlY3QmIHJlY3QpCit7CisgICAgc3dpdGNoIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkp
IHsKKyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSYWRp
b1BhcnQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgY2Fz
ZSBCdXR0b25QYXJ0OiB7CisgICAgICAgIFFSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVCdXR0
b25SZWN0KHJlY3QsIHFTdHlsZSgpKTsKKyAgICAgICAgcmVjdCA9IEludFJlY3QoaW5mbGF0ZWRS
ZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSwgaW5mbGF0ZWRSZWN0LndpZHRoKCksIGluZmxhdGVk
UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE1lbnVsaXN0
UGFydDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitDb2xvciBSZW5kZXJUaGVtZVF0OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpw
YWxldHRlKCk7CisgICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAg
ICByZXR1cm4gcGFsLmJydXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQp
LmNvbG9yKCk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lUXQ6OnBsYXRmb3JtSW5hY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbCA9IFFBcHBs
aWNhdGlvbjo6cGFsZXR0ZSgpOworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3Rz
KHBhbCk7CisgICAgcmV0dXJuIHBhbC5icnVzaChRUGFsZXR0ZTo6SW5hY3RpdmUsIFFQYWxldHRl
OjpIaWdobGlnaHQpLmNvbG9yKCk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lUXQ6OnBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBRUGFsZXR0ZSBw
YWwgPSBRQXBwbGljYXRpb246OnBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGll
bnRJZkV4aXN0cyhwYWwpOworICAgIHJldHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwg
UVBhbGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKTsKK30KKworQ29sb3IgUmVuZGVyVGhl
bWVRdDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7
CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0UGFs
ZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFsLmJydXNoKFFQ
YWxldHRlOjpJbmFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKTsKK30K
KworQ29sb3IgUmVuZGVyVGhlbWVRdDo6cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpIGNvbnN0Cit7
CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0UGFs
ZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFsLmJydXNoKFFQ
YWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVRdDo6c3lzdGVtRm9udChpbnQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0Cit7
CisgICAgLy8gbm8tb3AKK30KKworQ29sb3IgUmVuZGVyVGhlbWVRdDo6c3lzdGVtQ29sb3IoaW50
IGNzc1ZhbHVlSWQpIGNvbnN0Cit7CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpw
YWxldHRlKCk7CisgICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAg
ICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKKyAgICBjYXNlIENTU1ZhbHVlQnV0dG9udGV4dDoKKyAg
ICAgICAgcmV0dXJuIHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6QnV0dG9u
VGV4dCkuY29sb3IoKTsKKyAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6CisgICAgICAgIHJl
dHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OlRleHQpLmNvbG9yKCk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihj
c3NWYWx1ZUlkKTsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJUaGVtZVF0OjptaW5pbXVtTWVudUxp
c3RTaXplKFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICBjb25zdCBRRm9udE1ldHJpY3MgJmZt
ID0gUUFwcGxpY2F0aW9uOjpmb250TWV0cmljcygpOworICAgIHJldHVybiBmbS53aWR0aChRTGF0
aW4xQ2hhcigneCcpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0Ojpjb21wdXRlU2l6ZUJhc2Vk
T25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0Cit7CisgICAgUVNpemUgc2l6
ZSgwLCAwKTsKKyAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5m
b250KCkpOworICAgIFFTdHlsZSogc3R5bGUgPSBxU3R5bGUoKTsKKworICAgIHN3aXRjaCAocmVu
ZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAgIGNh
c2UgU2VhcmNoRmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDogeworICAgICAgICBp
bnQgcGFkZGluZyA9IGZpbmRGcmFtZUxpbmVXaWR0aChzdHlsZSk7CisgICAgICAgIHJlbmRlclN0
eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICAgICAgcmVu
ZGVyU3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICAg
ICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Cisg
ICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhl
ZCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmll
ZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCFyZW5kZXJTdHlsZS0+d2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFyZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRv
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFu
Y2UoKSkgeworICAgIGNhc2UgQ2hlY2tib3hQYXJ0OiB7CisgICAgICAgIFFTdHlsZU9wdGlvbiBz
dHlsZU9wdGlvbjsKKyAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9T
bWFsbDsKKyAgICAgICAgaW50IGNoZWNrQm94V2lkdGggPSBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0
eWxlOjpQTV9JbmRpY2F0b3JXaWR0aCwgJnN0eWxlT3B0aW9uKTsKKyAgICAgICAgY2hlY2tCb3hX
aWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBzaXplID0gUVNp
emUoY2hlY2tCb3hXaWR0aCwgY2hlY2tCb3hXaWR0aCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIFJhZGlvUGFydDogeworICAgICAgICBRU3R5bGVPcHRpb24gc3R5bGVPcHRpb247
CisgICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7CisgICAg
ICAgIGludCByYWRpb1dpZHRoID0gc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fRXhjbHVz
aXZlSW5kaWNhdG9yV2lkdGgsICZzdHlsZU9wdGlvbik7CisgICAgICAgIHJhZGlvV2lkdGggKj0g
cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgc2l6ZSA9IFFTaXplKHJhZGlv
V2lkdGgsIHJhZGlvV2lkdGgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXNo
QnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBhcnQ6IHsKKyAgICAgICAgUVN0eWxlT3B0aW9u
QnV0dG9uIHN0eWxlT3B0aW9uOworICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6
OlN0YXRlX1NtYWxsOworICAgICAgICBRU2l6ZSBjb250ZW50U2l6ZSA9IGZtLnNpemUoUXQ6OlRl
eHRTaG93TW5lbW9uaWMsIFFTdHJpbmc6OmZyb21MYXRpbjEoIlgiKSk7CisgICAgICAgIFFTaXpl
IHB1c2hCdXR0b25TaXplID0gc3R5bGUtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlOjpDVF9QdXNo
QnV0dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZzdHlsZU9wdGlvbiwgY29udGVudFNpemUsIDApOworICAgICAgICBzdHlsZU9wdGlv
bi5yZWN0ID0gUVJlY3QoMCwgMCwgcHVzaEJ1dHRvblNpemUud2lkdGgoKSwgcHVzaEJ1dHRvblNp
emUuaGVpZ2h0KCkpOworICAgICAgICBRUmVjdCBsYXlvdXRSZWN0ID0gc3R5bGUtPnN1YkVsZW1l
bnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCAwKTsKKworICAg
ICAgICAvLyBJZiB0aGUgc3R5bGUgc3VwcG9ydHMgbGF5b3V0IHJlY3RzIHdlIHVzZSB0aGF0LCBh
bmQgIGNvbXBlbnNhdGUgYWNjb3JkaW5nbHkKKyAgICAgICAgLy8gaW4gcGFpbnRCdXR0b24oKSBi
ZWxvdy4KKyAgICAgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKQorICAgICAgICAgICAgc2l6
ZS5zZXRIZWlnaHQobGF5b3V0UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHNpemUuc2V0SGVpZ2h0KHB1c2hCdXR0b25TaXplLmhlaWdodCgpKTsKKworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBNZW51bGlzdFBhcnQ6IHsKKyAgICAgICAgUVN0eWxlT3B0
aW9uQ29tYm9Cb3ggc3R5bGVPcHRpb247CisgICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFT
dHlsZTo6U3RhdGVfU21hbGw7CisgICAgICAgIGludCBjb250ZW50SGVpZ2h0ID0gcU1heChmbS5s
aW5lU3BhY2luZygpLCAxNCkgKyAyOworICAgICAgICBRU2l6ZSBtZW51TGlzdFNpemUgPSBzdHls
ZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGU6OkNUX0NvbWJvQm94LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIFFTaXpl
KDAsIGNvbnRlbnRIZWlnaHQpLCAwKTsKKyAgICAgICAgc2l6ZS5zZXRIZWlnaHQobWVudUxpc3RT
aXplLmhlaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIEZJWE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNl
IGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNjb3VudC4KKyAgICBp
ZiAocmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRo
KCkgPiAwKQorICAgICAgICByZW5kZXJTdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHNpemUud2lk
dGgoKSwgRml4ZWQpKTsKKyAgICBpZiAocmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYm
IHNpemUuaGVpZ2h0KCkgPiAwKQorICAgICAgICByZW5kZXJTdHlsZS0+c2V0TWluSGVpZ2h0KExl
bmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OnNl
dENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50Q2hl
Y2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworfQorCit2b2lkIFJlbmRl
clRoZW1lUXQ6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAg
Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6
OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworfQorCit2b2lk
IFJlbmRlclRoZW1lUXQ6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIERpdGNo
IHRoZSBib3JkZXIuCisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisKKyNpZmRlZiBRX1dTX01B
QworICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0KSB7CisgICAg
ICAgIC8vIFRoZSBNYWMgcG9ydHMgaWdub3JlIHRoZSBzcGVjaWZpZWQgaGVpZ2h0IGZvciA8aW5w
dXQgdHlwZT0iYnV0dG9uIj4gZWxlbWVudHMKKyAgICAgICAgLy8gdW5sZXNzIGEgYm9yZGVyIGFu
ZC9vciBiYWNrZ3JvdW5kIENTUyBwcm9wZXJ0eSBpcyBhbHNvIHNwZWNpZmllZC4KKyAgICAgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAgIH0KKyNlbmRpZgorCisgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CisKKyNpZmRlZiBR
X1dTX01BQyAvLyBVc2UgZml4ZWQgZm9udCBzaXplIGFuZCBmYW1pbHkgb24gTWFjIChsaWtlIFNh
ZmFyaSBkb2VzKQorICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKG1fYnV0dG9u
Rm9udFBpeGVsU2l6ZSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShtX2J1
dHRvbkZvbnRQaXhlbFNpemUpOworI2Vsc2UKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lm
aWVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7CisjZW5kaWYKKworICAgIEZvbnRGYW1pbHkgZm9u
dEZhbWlseTsKKyAgICBmb250RmFtaWx5LnNldEZhbWlseShtX2J1dHRvbkZvbnRGYW1pbHkpOwor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoZm9udEZhbWlseSk7CisgICAgc3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgIHN0eWxlLT5mb250KCkudXBk
YXRlKHNlbGVjdG9yLT5mb250U2VsZWN0b3IoKSk7CisgICAgc3R5bGUtPnNldExpbmVIZWlnaHQo
UmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHNldEJ1dHRvblNpemUoc3R5
bGUpOworICAgIHNldEJ1dHRvblBhZGRpbmcoc3R5bGUpOworfQorCit2b2lkIFJlbmRlclRoZW1l
UXQ6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGNvbXB1
dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRC
dXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBRU3R5bGVPcHRp
b25CdXR0b24gc3R5bGVPcHRpb247CisgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpT
dGF0ZV9TbWFsbDsKKworICAgIC8vIEZha2UgYSBidXR0b24gcmVjdCBoZXJlLCBzaW5jZSB3ZSdy
ZSBqdXN0IGNvbXB1dGluZyBkZWx0YXMKKyAgICBRUmVjdCBvcmlnaW5hbFJlY3QgPSBRUmVjdCgw
LCAwLCAxMDAsIDMwKTsKKyAgICBzdHlsZU9wdGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OworCisg
ICAgLy8gRGVmYXVsdCBwYWRkaW5nIGlzIGJhc2VkIG9uIHRoZSBidXR0b24gbWFyZ2luIHBpeGVs
IG1ldHJpYworICAgIGludCBidXR0b25NYXJnaW4gPSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0
eWxlOjpQTV9CdXR0b25NYXJnaW4sICZzdHlsZU9wdGlvbiwgMCk7CisgICAgaW50IHBhZGRpbmdM
ZWZ0ID0gYnV0dG9uTWFyZ2luOworICAgIGludCBwYWRkaW5nUmlnaHQgPSBidXR0b25NYXJnaW47
CisgICAgaW50IHBhZGRpbmdUb3AgPSBidXR0b25NYXJnaW47CisgICAgaW50IHBhZGRpbmdCb3R0
b20gPSBidXR0b25NYXJnaW47CisKKyAgICAvLyBUaGVuIGNoZWNrIGlmIHRoZSBzdHlsZSB1c2Vz
IGxheW91dCBtYXJnaW5zCisgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVt
ZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCAwKTsKKyAgICBp
ZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgUVJlY3QgY29udGVudHNSZWN0ID0g
cVN0eWxlKCktPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkNvbnRlbnRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0
eWxlT3B0aW9uLCAwKTsKKyAgICAgICAgcGFkZGluZ0xlZnQgPSBjb250ZW50c1JlY3QubGVmdCgp
IC0gbGF5b3V0UmVjdC5sZWZ0KCk7CisgICAgICAgIHBhZGRpbmdSaWdodCA9IGxheW91dFJlY3Qu
cmlnaHQoKSAtIGNvbnRlbnRzUmVjdC5yaWdodCgpOworICAgICAgICBwYWRkaW5nVG9wID0gY29u
dGVudHNSZWN0LnRvcCgpIC0gbGF5b3V0UmVjdC50b3AoKTsKKworICAgICAgICAvLyBDYW4ndCB1
c2UgdGhpcyByaWdodCBub3cgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoZSBiYXNlbGluZSB0byBj
b21wZW5zYXRlCisgICAgICAgIC8vIHBhZGRpbmdCb3R0b20gPSBsYXlvdXRSZWN0LmJvdHRvbSgp
IC0gY29udGVudHNSZWN0LmJvdHRvbSgpOworICAgIH0KKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xl
ZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmln
aHQoTGVuZ3RoKHBhZGRpbmdSaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1Rv
cChMZW5ndGgocGFkZGluZ1RvcCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRv
bShMZW5ndGgocGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0
OjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAu
aXNWYWxpZCgpKQorICAgICAgIHJldHVybiB0cnVlOworCisgICAgUVN0eWxlT3B0aW9uQnV0dG9u
IG9wdGlvbjsKKyAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7CisgICAgb3B0
aW9uLnJlY3QgPSByOworICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwor
CisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRp
b25zKG9wdGlvbiwgbyk7CisgICAgaWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQgfHwg
YXBwZWFyYW5jZSA9PSBCdXR0b25QYXJ0KSB7CisgICAgICAgIG9wdGlvbi5yZWN0ID0gaW5mbGF0
ZUJ1dHRvblJlY3Qob3B0aW9uLnJlY3QsIHFTdHlsZSgpKTsKKyAgICAgICAgcC5kcmF3Q29udHJv
bChRU3R5bGU6OkNFX1B1c2hCdXR0b24sIG9wdGlvbik7CisgICAgfSBlbHNlIGlmIChhcHBlYXJh
bmNlID09IFJhZGlvUGFydCkKKyAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUmFkaW9C
dXR0b24sIG9wdGlvbik7CisgICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBDaGVja2JveFBhcnQp
CisgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX0NoZWNrQm94LCBvcHRpb24pOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVs
ZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAoreworICAgIC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlrZSB0aGlzIGxlYWRzIHRvIGRp
ZmZlcmVuY2VzIGxpa2U6CisgICAgLy8gLSBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0ICgy
LDIpIHNpemUgMTY4eDI1IFtiZ2NvbG9yPSNGRkZGRkZdIGJvcmRlcjogKDJweCBpbnNldCAjMDAw
MDAwKV0KKyAgICAvLyArIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAx
NjZ4MjYKKyAgICAvLyBpbiBsYXlvdXQgdGVzdHMgd2hlbiBhIENTUyBzdHlsZSBpcyBhcHBsaWVk
IHRoYXQgZG9lc24ndCBhZmZlY3QgYmFja2dyb3VuZCBjb2xvciwgYm9yZGVyIG9yCisgICAgLy8g
cGFkZGluZy4gSnVzdCB3b3J0aCBrZWVwaW5nIGluIG1pbmQhCisgICAgc3R5bGUtPnNldEJhY2tn
cm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIHN0eWxlLT5yZXNldEJvcmRlcigp
OworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHls
ZShzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRUZXh0RmllbGQoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
U3R5bGVQYWludGVyIHAodGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBRU3R5bGVPcHRpb25GcmFtZVYyIHBhbmVsOworICAgIGluaXRT
dHlsZU9wdGlvbihwLndpZGdldCwgcGFuZWwpOworICAgIHBhbmVsLnJlY3QgPSByOworICAgIHBh
bmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aChxU3R5bGUoKSk7CisgICAgcGFuZWwu
c3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47CisgICAgcGFuZWwuZmVhdHVyZXMgPSBRU3R5
bGVPcHRpb25GcmFtZVYyOjpOb25lOworCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRh
dGEgZm9yIGEgdGV4dCBmaWVsZAorICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFs
aXplQ29tbW9uUVN0eWxlT3B0aW9ucyhwYW5lbCwgbyk7CisgICAgaWYgKGFwcGVhcmFuY2UgIT0g
VGV4dEZpZWxkUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAor
ICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFRleHRBcmVhUGFydAorICAgICAgICAmJiBhcHBlYXJh
bmNlICE9IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBw
YWludCB0aGUgdGV4dCBmaWVsZC4KKyAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5l
bExpbmVFZGl0LCBwYW5lbCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRo
ZW1lUXQ6OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBhZGp1c3RU
ZXh0RmllbGRTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOworfQorCitib29sIFJlbmRl
clRoZW1lUXQ6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGks
IHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAg
c3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisKKyAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8u
CisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworCisgICAgLy8gV2hpdGUtc3Bh
Y2UgaXMgbG9ja2VkIHRvIHByZQorICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisKKyAg
ICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7CisKKyAgICAvLyBBZGQgaW4gdGhlIHBh
ZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNlLgorICAgIHNldFBvcHVwUGFkZGluZyhzdHlsZSk7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0UG9wdXBQYWRkaW5nKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICBjb25zdCBpbnQgcGFkZGluZ0xlZnQgPSA0OworICAgIGNvbnN0
IGludCBwYWRkaW5nUmlnaHQgPSBzdHlsZS0+d2lkdGgoKS5pc0ZpeGVkKCkgfHwgc3R5bGUtPndp
ZHRoKCkuaXNQZXJjZW50KCkgPyA1IDogODsKKworICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChM
ZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7CisKKyAgICBRU3R5bGVPcHRpb25Db21ib0JveCBv
cHQ7CisgICAgaW50IHcgPSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9CdXR0b25J
Y29uU2l6ZSwgJm9wdCwgMCk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFk
ZGluZ1JpZ2h0ICsgdywgRml4ZWQpKTsKKworICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0
aCgyLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCgyLCBGaXhl
ZCkpOworfQorCisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHls
ZVBhaW50ZXIgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIFF0U3R5bGVPcHRpb25XZWJDb21ib0JveCBvcHQobyk7CisgICAgaW5p
dFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHQpOworICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVP
cHRpb25zKG9wdCwgbyk7CisKKyAgICBJbnRSZWN0IHJlY3QgPSByOworCisjaWYgZGVmaW5lZChR
X1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVfTUFDKQorICAgIC8vIFFNYWNTdHlsZSBt
YWtlcyB0aGUgY29tYm8gYm94ZXMgYSBsaXR0bGUgYml0IHNtYWxsZXIgdG8gbGVhdmUgc3BhY2Ug
Zm9yIHRoZSBmb2N1cyByZWN0LgorICAgIC8vIEJlY2F1c2Ugb2YgaXQsIHRoZSBjb21ibyBidXR0
b24gaXMgZHJhd24gYXQgYSBwb2ludCB0byB0aGUgbGVmdCBvZiB3aGVyZSBpdCB3YXMgZXhwZWN0
IHRvIGJlIGFuZCBtYXkgZW5kIHVwCisgICAgLy8gb3ZlcmxhcHBlZCB3aXRoIHRoZSB0ZXh0LiBU
aGlzIHdpbGwgZm9yY2UgUU1hY1N0eWxlIHRvIGRyYXcgdGhlIGNvbWJvIGJveCB3aXRoIHRoZSBl
eHBlY3RlZCB3aWR0aC4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUp
KQorICAgICAgICByZWN0LmluZmxhdGVYKDMpOworI2VuZGlmCisKKyAgICBjb25zdCBRUG9pbnQg
dG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BM
ZWZ0KTsKKyAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBvcHQucmVjdC5z
ZXRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6
Q0NfQ29tYm9Cb3gsIG9wdCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlz
dEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAoreworICAgIC8vIFdPUktBUk9VTkQgYmVjYXVzZSBodG1sLmNzcyBzcGVjaWZp
ZXMgLXdlYmtpdC1ib3JkZXItcmFkaXVzIGZvciA8c2VsZWN0PiBzbyB3ZSBvdmVycmlkZSBpdCBo
ZXJlCisgICAgLy8gc2VlIGFsc28gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTgzOTkKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKKworICAgIC8vIEhlaWdo
dCBpcyBsb2NrZWQgdG8gYXV0by4KKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7
CisKKyAgICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCisgICAgc3R5bGUtPnNldFdo
aXRlU3BhY2UoUFJFKTsKKworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKKwor
ICAgIC8vIEFkZCBpbiB0aGUgcGFkZGluZyB0aGF0IHdlJ2QgbGlrZSB0byB1c2UuCisgICAgc2V0
UG9wdXBQYWRkaW5nKHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lbnVM
aXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
U3R5bGVQYWludGVyIHAodGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3ggb3B0aW9uKG8pOwor
ICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKKyAgICBpbml0aWFsaXplQ29t
bW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOworICAgIG9wdGlvbi5yZWN0ID0gcjsKKworICAg
IC8vIGZvciBkcmF3aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkgb25seSBvbiB0aGUgZmFs
bGJhY2sgc3R5bGUKKyAgICBwLnN0eWxlID0gZmFsbGJhY2tTdHlsZSgpOworICAgIG9wdGlvbi5z
dWJDb250cm9scyA9IFFTdHlsZTo6U0NfQ29tYm9Cb3hBcnJvdzsKKyAgICBwLmRyYXdDb21wbGV4
Q29udHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCBvcHRpb24pOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKK2RvdWJsZSBSZW5kZXJUaGVtZVF0Ojph
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5k
ZXJQcm9ncmVzcykgY29uc3QKK3sKKyAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkg
Pj0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogVXNlIGhhcmQtY29kZWQg
dmFsdWUgdW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05
MTcxIGlzIGZpeGVkLgorICAgIC8vIFVzZSB0aGUgdmFsdWUgZnJvbSB3aW5kb3dzIHN0eWxlIHdo
aWNoIGlzIDEwIGZwcy4KKyAgICByZXR1cm4gMC4xOworfQorCitkb3VibGUgUmVuZGVyVGhlbWVR
dDo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVy
UHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49
IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgUVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMiBv
cHRpb247CisgICAgb3B0aW9uLnJlY3Quc2V0U2l6ZShyZW5kZXJQcm9ncmVzcy0+c2l6ZSgpKTsK
KyAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dz
ZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5p
bWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHJldHVybiAob3B0aW9uLnJlY3Qu
d2lkdGgoKSAvIHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1
bmtXaWR0aCwgJm9wdGlvbikpICogYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jh
cihyZW5kZXJQcm9ncmVzcyk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0UHJvZ3Jl
c3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworfQorCitib29s
IFJlbmRlclRoZW1lUXQ6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlmICghby0+aXNQcm9ncmVz
cygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBp
KTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgIHJldHVybiB0cnVlOworCisgICAgUVN0
eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMiBvcHRpb247CisgICAgaW5pdFN0eWxlT3B0aW9uKHAud2lk
Z2V0LCBvcHRpb24pOworICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwg
byk7CisKKyAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dy
ZXNzKG8pOworICAgIG9wdGlvbi5yZWN0ID0gcjsKKyAgICBvcHRpb24ubWF4aW11bSA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgb3B0aW9uLm1pbmltdW0gPSAwOworICAg
IG9wdGlvbi5wcm9ncmVzcyA9IChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSAqIHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOworCisgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBy
LmxvY2F0aW9uKCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisgICAgb3B0
aW9uLnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CisgICAgb3B0aW9uLnJlY3Quc2V0U2l6ZShy
LnNpemUoKSk7CisKKyAgICBpZiAob3B0aW9uLnByb2dyZXNzIDwgMCkgeworICAgICAgICAvLyBG
SVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05
MTcxIGlzIGZpeGVkLAorICAgICAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGlu
ZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KKyAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6
OkNFX1Byb2dyZXNzQmFyR3Jvb3ZlLCBvcHRpb24pOworICAgICAgICBpbnQgY2h1bmtXaWR0aCA9
IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwg
Jm9wdGlvbik7CisgICAgICAgIFFDb2xvciBjb2xvciA9IChvcHRpb24ucGFsZXR0ZS5oaWdobGln
aHQoKSA9PSBvcHRpb24ucGFsZXR0ZS5iYWNrZ3JvdW5kKCkpID8gb3B0aW9uLnBhbGV0dGUuY29s
b3IoUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodCkgOiBvcHRpb24ucGFsZXR0
ZS5jb2xvcihRUGFsZXR0ZTo6SGlnaGxpZ2h0KTsKKyAgICAgICAgaWYgKHJlbmRlclByb2dyZXNz
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgICAgICBwLnBhaW50ZXItPmZp
bGxSZWN0KG9wdGlvbi5yZWN0LnJpZ2h0KCkgLSBjaHVua1dpZHRoICAtIHJlbmRlclByb2dyZXNz
LT5hbmltYXRpb25Qcm9ncmVzcygpICogb3B0aW9uLnJlY3Qud2lkdGgoKSwgMCwgY2h1bmtXaWR0
aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNvbG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcC5wYWludGVyLT5maWxsUmVjdChyZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3Mo
KSAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdo
dCgpLCBjb2xvcik7CisgICAgfSBlbHNlCisgICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpD
RV9Qcm9ncmVzc0Jhciwgb3B0aW9uKTsKKworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BM
ZWZ0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlclRoZW1l
UXQ6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsK
KyAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7CisgICAgb3B0aW9uLnN1YkNv
bnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJHcm9vdmU7CisgICAgQ29udHJvbFBhcnQgYXBwZWFy
YW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7CisgICAgb3B0
aW9uLnJlY3QgPSByOworICAgIGlmIChhcHBlYXJhbmNlID09IFNsaWRlclZlcnRpY2FsUGFydCkK
KyAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIGlmIChpc1By
ZXNzZWQobykpCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsK
KworICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRpb24pOwor
CisgICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMpIHsKKyAgICAg
ICAgUVN0eWxlT3B0aW9uRm9jdXNSZWN0IGZvY3VzT3B0aW9uOworICAgICAgICBmb2N1c09wdGlv
bi5yZWN0ID0gcjsKKyAgICAgICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfRnJhbWVGb2N1
c1JlY3QsIGZvY3VzT3B0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0
Qm94U2hhZG93KG51bGxwdHIpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50U2xpZGVy
VGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQ
YWludGVyIHAodGhpcywgcGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKKyAgICBpbml0U3R5bGVP
cHRpb24ocC53aWRnZXQsIG9wdGlvbik7CisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxl
OjpTQ19TbGlkZXJIYW5kbGU7CisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxp
emVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7CisgICAgb3B0aW9uLnJlY3QgPSByOwor
ICAgIGlmIChhcHBlYXJhbmNlID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICBv
cHRpb24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7CisgICAgaWYgKGlzUHJlc3NlZChvKSkg
eworICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckhh
bmRsZTsKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOworICAg
IH0KKworICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRpb24p
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0
U2xpZGVyVGh1bWJTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOworICAgIHN0eWxlLT5z
ZXRCb3hTaGFkb3cobnVsbHB0cik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFy
Y2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1
cm4gcGFpbnRUZXh0RmllbGQobywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OmFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
bGVtZW50KiBlKSBjb25zdAoreworICAgIC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlrZSB0aGlz
IGxlYWRzIHRvIGRpZmZlcmVuY2VzIGxpa2U6CisgICAgLy8gLSBSZW5kZXJUZXh0Q29udHJvbCB7
SU5QVVR9IGF0ICgyLDIpIHNpemUgMTY4eDI1IFtiZ2NvbG9yPSNGRkZGRkZdIGJvcmRlcjogKDJw
eCBpbnNldCAjMDAwMDAwKV0KKyAgICAvLyArIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQg
KDIsMikgc2l6ZSAxNjZ4MjYKKyAgICAvLyBpbiBsYXlvdXQgdGVzdHMgd2hlbiBhIENTUyBzdHls
ZSBpcyBhcHBsaWVkIHRoYXQgZG9lc24ndCBhZmZlY3QgYmFja2dyb3VuZCBjb2xvciwgYm9yZGVy
IG9yCisgICAgLy8gcGFkZGluZy4gSnVzdCB3b3J0aCBrZWVwaW5nIGluIG1pbmQhCisgICAgc3R5
bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIHN0eWxlLT5y
ZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBjb21wdXRlU2l6
ZUJhc2VkT25TdHlsZShzdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgLy8gTG9naWMgdGFrZW4g
ZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtLmNwcC4KKyAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNp
emUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4KKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+
Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBpbnQgY2FuY2Vs
QnV0dG9uU2l6ZSA9IGxyb3VuZGYocU1pbihxTWF4KG1pbkNhbmNlbEJ1dHRvblNpemUsIGRlZmF1
bHRDYW5jZWxCdXR0b25TaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2VsQnV0dG9uU2l6ZSkpOwor
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOworfQor
CisvLyBGdW5jdGlvbiB0YWtlbiBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW0uY3BwCitJbnRSZWN0
IFJlbmRlclRoZW1lUXQ6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlucHV0
UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBJbnRSZWN0IHBhcnRS
ZWN0LCBjb25zdCBJbnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3QKK3sKKyAgICAvLyBDb21wdXRl
IGFuIG9mZnNldCBiZXR3ZWVuIHRoZSBwYXJ0IHJlbmRlcmVyIGFuZCB0aGUgaW5wdXQgcmVuZGVy
ZXIuCisgICAgSW50U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlciA9IC0ocGFydFJlbmRlcmVy
LT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5kZXJlcikpOworICAgIC8vIE1v
dmUgdGhlIHJlY3QgaW50byBwYXJ0UmVuZGVyZXIncyBjb29yZHMuCisgICAgcGFydFJlY3QubW92
ZShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7CisgICAgLy8gQWNjb3VudCBmb3IgdGhlIGxvY2Fs
IGRyYXdpbmcgb2Zmc2V0LgorICAgIHBhcnRSZWN0Lm1vdmUobG9jYWxPZmZzZXQueCgpLCBsb2Nh
bE9mZnNldC55KCkpOworCisgICAgcmV0dXJuIHBhcnRSZWN0OworfQorCitib29sIFJlbmRlclRo
ZW1lUXQ6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgLy8gTG9naWMgY29waWVkIGZyb20g
UmVuZGVyVGhlbWVDaHJvbWl1bS5jcHAuCisKKyAgICAvLyBHZXQgdGhlIHJlbmRlcmVyIG9mIDxp
bnB1dD4gZWxlbWVudC4KKyAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0
b3JOb2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFJlbmRlckJveCogaW5wdXRSZW5kZXJCb3ggPSB0b1JlbmRlckJv
eChpbnB1dC0+cmVuZGVyZXIoKSk7CisgICAgSW50UmVjdCBpbnB1dENvbnRlbnRCb3ggPSBpbnB1
dFJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2Nh
bGVkIGJ1dHRvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gu
CisgICAgaW50IGNhbmNlbEJ1dHRvblNpemUgPSBxTWluKGlucHV0Q29udGVudEJveC53aWR0aCgp
LCBxTWluKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSkpOworICAgIC8vIENh
bGN1bGF0ZSBjYW5jZWwgYnV0dG9uJ3MgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGlucHV0
IGVsZW1lbnQuCisgICAgLy8gQ2VudGVyIHRoZSBidXR0b24gdmVydGljYWxseS4gUm91bmQgdXAg
dGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwK
KyAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiBU
aGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCisgICAgSW50UmVjdCBjYW5j
ZWxCdXR0b25SZWN0KG8tPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihpbnB1dFJlbmRlckJv
eCkud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb250ZW50Qm94
LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBjYW5jZWxCdXR0b25TaXplICsgMSkg
LyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25TaXplLCBjYW5j
ZWxCdXR0b25TaXplKTsKKyAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IGNvbnZlcnRUb1BhaW50
aW5nUmVjdChpbnB1dFJlbmRlckJveCwgbywgY2FuY2VsQnV0dG9uUmVjdCwgcik7CisgICAgc3Rh
dGljIEltYWdlKiBjYW5jZWxJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2Vh
cmNoQ2FuY2VsQnV0dG9uIikucmVsZWFzZVJlZigpOworICAgIHN0YXRpYyBJbWFnZSogY2FuY2Vs
UHJlc3NlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxC
dXR0b25QcmVzc2VkIikucmVsZWFzZVJlZigpOworICAgIHBpLmNvbnRleHQtPmRyYXdJbWFnZShp
c1ByZXNzZWQobykgPyBjYW5jZWxQcmVzc2VkSW1hZ2UgOiBjYW5jZWxJbWFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG8tPnN0eWxlKCktPmNvbG9yU3BhY2UoKSwgcGFpbnRp
bmdSZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6YWRq
dXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShz
ZWxlY3Rvciwgc3R5bGUsIGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24obywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRo
ZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uKG8sIHBpLCByKTsKK30KKworI2lmbmRlZiBRVF9OT19TUElO
Qk9YCit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Cit7Cisg
ICAgLy8gVXNlIHRoZSBzYW1lIHdpZHRoIGFzIG91ciBuYXRpdmUgc2Nyb2xsYmFyCisgICAgaW50
IHdpZHRoID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVz
cygpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5
bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZVF0OjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFN0eWxlUGFpbnRl
ciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIFFTdHlsZU9wdGlvblNwaW5Cb3ggb3B0aW9uOworICAgIGluaXRTdHls
ZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKKyAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5
bGU6OlNDX1NwaW5Cb3hVcCB8IFFTdHlsZTo6U0NfU3BpbkJveERvd247CisgICAgaWYgKCFpc1Jl
YWRPbmx5Q29udHJvbChvKSkgeworICAgICAgICBpZiAoaXNFbmFibGVkKG8pKQorICAgICAgICAg
ICAgb3B0aW9uLnN0ZXBFbmFibGVkID0gUUFic3RyYWN0U3BpbkJveDo6U3RlcFVwRW5hYmxlZCB8
IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBEb3duRW5hYmxlZDsKKyAgICAgICAgaWYgKGlzUHJlc3Nl
ZChvKSkgeworICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2Vu
OworICAgICAgICAgICAgaWYgKGlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQobykpCisgICAgICAg
ICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXA7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRy
b2xzID0gUVN0eWxlOjpTQ19TcGluQm94RG93bjsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBS
ZW5kZXIgdGhlIHNwaW4gYnV0dG9ucyBmb3IgTFRSIG9yIFJUTCBhY2NvcmRpbmdseS4KKyAgICBv
cHRpb24uZGlyZWN0aW9uID0gby0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
UXQ6OkxlZnRUb1JpZ2h0IDogUXQ6OlJpZ2h0VG9MZWZ0OworCisgICAgSW50UmVjdCBidXR0b25S
ZWN0ID0gcmVjdDsKKyAgICAvLyBEZWZhdWx0IHRvIG1vdmluZyB0aGUgYnV0dG9ucyBhIGxpdHRs
ZSBiaXQgd2l0aGluIHRoZSBlZGl0b3IgZnJhbWUuCisgICAgaW50IGluZmxhdGVYID0gLTI7Cisg
ICAgaW50IGluZmxhdGVZID0gLTI7CisjaWYgZGVmaW5lZChRX1dTX01BQykgJiYgIWRlZmluZWQo
UVRfTk9fU1RZTEVfTUFDKQorICAgIC8vIFFNYWNTdHlsZSB3aWxsIHBvc2l0aW9uIHRoZSBhcXVh
IGJ1dHRvbnMgZmx1c2ggdG8gdGhlIHJpZ2h0LgorICAgIC8vIFRoaXMgd2lsbCBtb3ZlIHRoZW0g
bW9yZSB3aXRoaW4gdGhlIGNvbnRyb2wgZm9yIGJldHRlciBzdHlsZSwgYSBsYQorICAgIC8vIENo
cm9taXVtIGxvb2sgJiBmZWVsLgorICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4ocC5z
dHlsZSkpIHsKKyAgICAgICAgaW5mbGF0ZVggPSAtNDsKKyAgICAgICAgLy8gUmVuZGVyIG1pbmkg
YXF1YSBzcGluIGJ1dHRvbnMgZm9yIFFNYWNTdHlsZSB0byBmaXQgbmljZWx5IGludG8KKyAgICAg
ICAgLy8gdGhlIGVkaXRvciBhcmVhLCBsaWtlIENocm9taXVtLgorICAgICAgICBvcHRpb24uc3Rh
dGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5pOworICAgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoUV9X
U19YMTEpICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX1BMQVNUSVFVRSkKKyAgICAvLyBRUGxhc3Rp
cXVlU3R5bGUgbG9va3MgYmVzdCB3aGVuIHRoZSBzcGluIGJ1dHRvbnMgYXJlIGZsdXNoIHdpdGgg
dGhlIGZyYW1lJ3MgZWRnZS4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFQbGFzdGlxdWVTdHlsZSo+
KHAuc3R5bGUpKSB7CisgICAgICAgIGluZmxhdGVYID0gMDsKKyAgICAgICAgaW5mbGF0ZVkgPSAw
OworICAgIH0KKyNlbmRpZgorCisgICAgYnV0dG9uUmVjdC5pbmZsYXRlWChpbmZsYXRlWCk7Cisg
ICAgYnV0dG9uUmVjdC5pbmZsYXRlWShpbmZsYXRlWSk7CisgICAgb3B0aW9uLnJlY3QgPSBidXR0
b25SZWN0OworCisgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TcGluQm94LCBv
cHRpb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlclRoZW1l
UXQ6OnN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgIGNhc2Ug
QnV0dG9uUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2FzZSBUZXh0QXJlYVBh
cnQ6CisgICAgY2FzZSBMaXN0Ym94UGFydDoKKyAgICBjYXNlIE1lbnVsaXN0UGFydDoKKyAgICBj
YXNlIFJhZGlvUGFydDoKKyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICBjYXNlIFNsaWRlckhv
cml6b250YWxQYXJ0OgorICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OiAvLyBObyBmb3IgYWxsIG90aGVycy4uLgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OnNldFBhbGV0dGVG
cm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJiBwYWxldHRlKSBjb25zdAoreworICAgIC8v
IElmIHRoZSB3ZWJ2aWV3IGhhcyBhIGN1c3RvbSBwYWxldHRlLCB1c2UgaXQKKyAgICBpZiAoIW1f
cGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIENocm9tZSogY2hyb21lID0gbV9wYWdlLT5jaHJv
bWUoKTsKKyAgICBpZiAoIWNocm9tZSkKKyAgICAgICAgcmV0dXJuOworICAgIENocm9tZUNsaWVu
dCogY2hyb21lQ2xpZW50ID0gY2hyb21lLT5jbGllbnQoKTsKKyAgICBpZiAoIWNocm9tZUNsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gY2hy
b21lQ2xpZW50LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBpZiAoIXBhZ2VDbGllbnQpCisg
ICAgICAgIHJldHVybjsKKyAgICBwYWxldHRlID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOworfQor
CitDb250cm9sUGFydCBSZW5kZXJUaGVtZVF0Ojppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9u
cyhRU3R5bGVPcHRpb24mIG9wdGlvbiwgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIC8v
IERlZmF1bHQgYml0czogbm8gZm9jdXMsIG5vIG1vdXNlIG92ZXIKKyAgICBvcHRpb24uc3RhdGUg
Jj0gfihRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzIHwgUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXIpOwor
CisgICAgaWYgKGlzUmVhZE9ubHlDb250cm9sKG8pKQorICAgICAgICAvLyBSZWFkb25seSBpcyBz
dXBwb3J0ZWQgb24gdGV4dGZpZWxkcy4KKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6
U3RhdGVfUmVhZE9ubHk7CisKKyAgICBvcHRpb24uZGlyZWN0aW9uID0gUXQ6OkxlZnRUb1JpZ2h0
OworCisgICAgaWYgKGlzSG92ZXJlZChvKSkKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHls
ZTo6U3RhdGVfTW91c2VPdmVyOworCisgICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlz
dHMob3B0aW9uLnBhbGV0dGUpOworCisgICAgaWYgKCFpc0VuYWJsZWQobykpIHsKKyAgICAgICAg
b3B0aW9uLnBhbGV0dGUuc2V0Q3VycmVudENvbG9yR3JvdXAoUVBhbGV0dGU6OkRpc2FibGVkKTsK
KyAgICAgICAgb3B0aW9uLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0VuYWJsZWQ7CisgICAgfQor
CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gby0+c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQor
ICAgICAgICByZXR1cm4gTm9Db250cm9sUGFydDsKKworICAgIENvbnRyb2xQYXJ0IHJlc3VsdCA9
IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKHN1cHBvcnRzRm9jdXMocmVzdWx0KSAmJiBp
c0ZvY3VzZWQobykpIHsKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfSGFz
Rm9jdXM7CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0tleWJvYXJkRm9j
dXNDaGFuZ2U7CisgICAgfQorCisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBXZWJDb3Jl
OjpSVEwpCisgICAgICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6UmlnaHRUb0xlZnQ7CisKKyAg
ICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgY2FzZSBT
cXVhcmVCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvbkJl
dmVsUGFydDoKKyAgICBjYXNlIExpc3RJdGVtUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0QnV0dG9u
UGFydDoKKyAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6CisgICAgY2FzZSBT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6IHsKKyAgICAgICAgaWYgKGlzUHJlc3NlZChvKSkK
KyAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKKyAgICAg
ICAgZWxzZSBpZiAocmVzdWx0ID09IFB1c2hCdXR0b25QYXJ0IHx8IHJlc3VsdCA9PSBCdXR0b25Q
YXJ0KQorICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmFpc2VkOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgY2FzZSBDaGVj
a2JveFBhcnQ6CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSAoaXNDaGVja2VkKG8pID8gUVN0eWxl
OjpTdGF0ZV9PbiA6IFFTdHlsZTo6U3RhdGVfT2ZmKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCisjaWYgRU5BQkxFKFZJREVPKQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0
cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCit7CisgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmlu
ZyhtZWRpYUNvbnRyb2xzUXRVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9s
c1F0VXNlckFnZW50U3R5bGVTaGVldCkpOworCisgICAgaWYgKG1fcGFnZSAmJiBtX3BhZ2UtPmNo
cm9tZSgpLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpCisgICAgICAgIHJl
c3VsdCArPSBTdHJpbmcobWVkaWFDb250cm9sc1F0RnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzUXRGdWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCkp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gSGVscGVyIGNsYXNzIHRvIHRyYW5zZm9y
bSB0aGUgcGFpbnRlcidzIHdvcmxkIG1hdHJpeCB0byB0aGUgb2JqZWN0J3MgY29udGVudCBhcmVh
LCBzY2FsZWQgdG8gMCwwLDEwMCwxMDAKK2NsYXNzIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgewor
cHVibGljOgorICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIoUVBhaW50ZXIqIHBhaW50ZXIsIFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiByKSA6IG1fcGFpbnRlcihw
YWludGVyKQorICAgIHsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyT2JqZWN0
LT5zdHlsZSgpOworICAgICAgICBtX29yaWdpbmFsVHJhbnNmb3JtID0gbV9wYWludGVyLT50cmFu
c2Zvcm0oKTsKKyAgICAgICAgbV9wYWludGVyLT50cmFuc2xhdGUoci54KCkgKyBzdHlsZS0+cGFk
ZGluZ0xlZnQoKS52YWx1ZSgpLCByLnkoKSArIHN0eWxlLT5wYWRkaW5nVG9wKCkudmFsdWUoKSk7
CisgICAgICAgIG1fcGFpbnRlci0+c2NhbGUoKHIud2lkdGgoKSAtIHN0eWxlLT5wYWRkaW5nTGVm
dCgpLnZhbHVlKCkgLSBzdHlsZS0+cGFkZGluZ1JpZ2h0KCkudmFsdWUoKSkgLyAxMDAuMCwKKyAg
ICAgICAgICAgICAoci5oZWlnaHQoKSAtIHN0eWxlLT5wYWRkaW5nVG9wKCkudmFsdWUoKSAtIHN0
eWxlLT5wYWRkaW5nQm90dG9tKCkudmFsdWUoKSkgLyAxMDAuMCk7CisgICAgfQorCisgICAgfldv
cmxkTWF0cml4VHJhbnNmb3JtZXIoKSB7IG1fcGFpbnRlci0+c2V0VHJhbnNmb3JtKG1fb3JpZ2lu
YWxUcmFuc2Zvcm0pOyB9CisKK3ByaXZhdGU6CisgICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsKKyAg
ICBRVHJhbnNmb3JtIG1fb3JpZ2luYWxUcmFuc2Zvcm07Cit9OworCitkb3VibGUgUmVuZGVyVGhl
bWVRdDo6bWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IDAuNDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhQmFja2dyb3VuZChRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKK3sKKyAgICBwYWludGVyLT5z
ZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBzdGF0aWMgUUNvbG9yIHRyYW5zcGFyZW50QmxhY2soMCwg
MCwgMCwgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpICogMjU1KTsKKyAgICBwYWludGVy
LT5zZXRCcnVzaCh0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBwYWludGVyLT5kcmF3Um91bmRlZFJl
Y3Qoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIDUuMCwgNS4wKTsKK30KKwor
c3RhdGljIGJvb2wgbWVkaWFFbGVtZW50Q2FuUGxheShSZW5kZXJPYmplY3QqIG8pCit7CisgICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7
CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBtZWRpYUVsZW1lbnQtPnJlYWR5U3RhdGUoKSA+IEhUTUxNZWRpYUVsZW1lbnQ6OkhBVkVf
TUVUQURBVEEKKyAgICAgICAgICAgfHwgKG1lZGlhRWxlbWVudC0+cmVhZHlTdGF0ZSgpID09IEhU
TUxNZWRpYUVsZW1lbnQ6OkhBVkVfTk9USElORworICAgICAgICAgICAgICAgJiYgby0+c3R5bGUo
KS0+YXBwZWFyYW5jZSgpID09IE1lZGlhUGxheUJ1dHRvblBhcnQgJiYgbWVkaWFFbGVtZW50LT5w
cmVsb2FkKCkgPT0gIm5vbmUiKTsKK30KKworUUNvbG9yIFJlbmRlclRoZW1lUXQ6OmdldE1lZGlh
Q29udHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgUUNv
bG9yIGZnQ29sb3IgPSBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwor
ICAgIGlmICghbykKKyAgICAgICAgcmV0dXJuIGZnQ29sb3I7CisKKyAgICBpZiAoby0+bm9kZSgp
LT5hY3RpdmUoKSkKKyAgICAgICAgZmdDb2xvciA9IGZnQ29sb3IubGlnaHRlcigpOworCisgICAg
aWYgKCFtZWRpYUVsZW1lbnRDYW5QbGF5KG8pKSB7CisgICAgICAgIFFQYWxldHRlIHBhbCA9IFFB
cHBsaWNhdGlvbjo6cGFsZXR0ZSgpOworICAgICAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJ
ZkV4aXN0cyhwYWwpOworICAgICAgICBmZ0NvbG9yID0gcGFsLmJydXNoKFFQYWxldHRlOjpEaXNh
YmxlZCwgUVBhbGV0dGU6OlRleHQpLmNvbG9yKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZnQ29s
b3I7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1l
ZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVu
ZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKworICAgIHBhaW50TWVkaWFC
YWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRy
YW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgY29uc3QgUVBvaW50RiBhcnJvd1BvbHln
b25bOV0gPSB7IFFQb2ludEYoMjAsIDApLCBRUG9pbnRGKDEwMCwgMCksIFFQb2ludEYoMTAwLCA4
MCksCisgICAgICAgICAgICBRUG9pbnRGKDgwLCA4MCksIFFQb2ludEYoODAsIDMwKSwgUVBvaW50
RigxMCwgMTAwKSwgUVBvaW50RigwLCA5MCksIFFQb2ludEYoNzAsIDIwKSwgUVBvaW50RigyMCwg
MjApfTsKKworICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3Vu
ZENvbG9yKG8pKTsKKyAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKGFycm93UG9seWdvbiwgOSk7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRp
YU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQg
PSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsK
KyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFp
bnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKworICAg
IHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBXb3JsZE1hdHJpeFRy
YW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgY29uc3QgUVBvaW50
RiBzcGVha2VyUG9seWdvbls2XSA9IHsgUVBvaW50RigyMCwgMzApLCBRUG9pbnRGKDUwLCAzMCks
IFFQb2ludEYoODAsIDApLAorICAgICAgICAgICAgUVBvaW50Rig4MCwgMTAwKSwgUVBvaW50Rig1
MCwgNzApLCBRUG9pbnRGKDIwLCA3MCl9OworCisgICAgcC5wYWludGVyLT5zZXRCcnVzaChtZWRp
YUVsZW1lbnQtPm11dGVkKCkgPyBRdDo6ZGFya1JlZCA6IGdldE1lZGlhQ29udHJvbEZvcmVncm91
bmRDb2xvcihvKSk7CisgICAgcC5wYWludGVyLT5kcmF3UG9seWdvbihzcGVha2VyUG9seWdvbiwg
Nik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRN
ZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZv
KTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAu
cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKwor
ICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBXb3JsZE1hdHJp
eFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgcC5wYWludGVy
LT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIGlmICht
ZWRpYUVsZW1lbnQtPmNhblBsYXkoKSkgeworICAgICAgICBjb25zdCBRUG9pbnRGIHBsYXlQb2x5
Z29uWzNdID0geyBRUG9pbnRGKDAsIDApLCBRUG9pbnRGKDEwMCwgNTApLCBRUG9pbnRGKDAsIDEw
MCl9OworICAgICAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKHBsYXlQb2x5Z29uLCAzKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KDAsIDAsIDMwLCAxMDApOwor
ICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KDcwLCAwLCAzMCwgMTAwKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtC
YWNrQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KQoreworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgdGhpcyBhdCB0aGUgbW9tZW50Lgor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2Vl
a0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpCit7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCB0aGlzIGF0IHRoZSBtb21l
bnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVk
aWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5m
byk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBw
LnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Cisg
ICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50
VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGN1cnJlbnRUaW1lKSArICIgLyAiICsgZm9ybWF0
TWVkaWFDb250cm9sc1RpbWUoZHVyYXRpb24pOworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdDo6
Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0
IGR1cmF0aW9uKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0ICpvLCBj
b25zdCBQYWludEluZm8gJnBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmcikKK3sKKyAgICBTdHls
ZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVy
OjpBbnRpYWxpYXNpbmcsIHRydWUpOworCisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWlu
dGVyLCByKTsKKworICAgIGlmICghby0+aXNTbGlkZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgSW50UmVjdCBiID0gdG9SZW5kZXJCb3gobyktPmNvbnRlbnRCb3hSZWN0KCk7CisK
KyAgICAvLyBQb3NpdGlvbiB0aGUgb3V0ZXIgcmVjdGFuZ2xlCisgICAgaW50IHRvcCA9IHIueSgp
ICsgYi55KCk7CisgICAgaW50IGxlZnQgPSByLngoKSArIGIueCgpOworICAgIGludCB3aWR0aCA9
IGIud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gYi5oZWlnaHQoKTsKKworICAgIC8vIEdldCB0
aGUgc2NhbGUgY29sb3IgZnJvbSB0aGUgcGFnZSBjbGllbnQKKyAgICBRUGFsZXR0ZSBwYWwgPSBR
QXBwbGljYXRpb246OnBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4
aXN0cyhwYWwpOworICAgIGNvbnN0IFFDb2xvciBoaWdobGlnaHRUZXh0ID0gcGFsLmJydXNoKFFQ
YWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHRlZFRleHQpLmNvbG9yKCk7CisgICAg
Y29uc3QgUUNvbG9yIHNjYWxlQ29sb3IoaGlnaGxpZ2h0VGV4dC5yZWQoKSwgaGlnaGxpZ2h0VGV4
dC5ncmVlbigpLCBoaWdobGlnaHRUZXh0LmJsdWUoKSwgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3Bh
Y2l0eSgpICogMjU1KTsKKworICAgIC8vIERyYXcgdGhlIG91dGVyIHJlY3RhbmdsZQorICAgIHAu
cGFpbnRlci0+c2V0QnJ1c2goc2NhbGVDb2xvcik7CisgICAgcC5wYWludGVyLT5kcmF3UmVjdChs
ZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworCisgICAgaWYgKCFvLT5ub2RlKCkgfHwgIW8tPm5v
ZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHNsaWRlciA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
PihvLT5ub2RlKCkpOworCisgICAgLy8gUG9zaXRpb24gdGhlIGlubmVyIHJlY3RhbmdsZQorICAg
IGhlaWdodCA9IGhlaWdodCAqIHNsaWRlci0+dmFsdWVBc051bWJlcigpOworICAgIHRvcCArPSBi
LmhlaWdodCgpIC0gaGVpZ2h0OworCisgICAgLy8gRHJhdyB0aGUgaW5uZXIgcmVjdGFuZ2xlCisg
ICAgcC5wYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBwLnBhaW50ZXItPnNldEJydXNo
KGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7CisgICAgcC5wYWludGVyLT5kcmF3
UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJP
YmplY3QgKm8sIGNvbnN0IFBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQor
eworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3RoaW5nIHRvIGRyYXcgaGVy
ZSwgdGhpcyBpcyBhbGwgZG9uZSBpbiB0aGUgdHJhY2sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7
CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0
eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50
ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBh
aW50ZXIsIHIpOworCisgICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBtZWRpYUVsZW1lbnQt
PnBsYXllcigpKSB7CisgICAgICAgIC8vIEdldCB0aGUgYnVmZmVyZWQgcGFydHMgb2YgdGhlIG1l
ZGlhCisgICAgICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCA9IHBsYXllci0+YnVmZmVy
ZWQoKTsKKyAgICAgICAgaWYgKGJ1ZmZlcmVkLT5sZW5ndGgoKSA+IDAgJiYgcGxheWVyLT5kdXJh
dGlvbigpIDwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpIHsKKyAgICAg
ICAgICAgIC8vIFNldCB0aGUgdHJhbnNmb3JtIGFuZCBicnVzaAorICAgICAgICAgICAgV29ybGRN
YXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAgICAgICAg
ICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoKSk7
CisKKyAgICAgICAgICAgIC8vIFBhaW50IGVhY2ggYnVmZmVyZWQgc2VjdGlvbgorICAgICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBleDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVm
ZmVyZWQtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBzdGFydFggPSAo
YnVmZmVyZWQtPnN0YXJ0KGksIGV4KSAvIHBsYXllci0+ZHVyYXRpb24oKSkgKiAxMDA7CisgICAg
ICAgICAgICAgICAgZmxvYXQgd2lkdGggPSAoKGJ1ZmZlcmVkLT5lbmQoaSwgZXgpIC8gcGxheWVy
LT5kdXJhdGlvbigpKSAqIDEwMCkgLSBzdGFydFg7CisgICAgICAgICAgICAgICAgcC5wYWludGVy
LT5kcmF3UmVjdChzdGFydFgsIDM3LCB3aWR0aCwgMjYpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEFTU0VSVChvLT5ub2RlKCkpOwor
ICAgIE5vZGUqIGhvc3ROb2RlID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAg
ICBBU1NFUlQoaG9zdE5vZGUpOworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9
IHRvUGFyZW50TWVkaWFFbGVtZW50KGhvc3ROb2RlKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJ
bmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsK
KworICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7CisgICAgcC5wYWludGVyLT5zZXRC
cnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoaG9zdE5vZGUtPnJlbmRlcmVyKCkp
KTsKKyAgICBwLnBhaW50ZXItPmRyYXdSZWN0KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhl
aWdodCgpKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCit2b2lkIFJlbmRlclRo
ZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7
CisgICAgLy8gdGltZWxpbmVUaHVtYkhlaWdodCBzaG91bGQgbWF0Y2ggdGhlIGhlaWdodCBwcm9w
ZXJ0eSBvZiAtd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lIGluIG1lZGlhQ29udHJvbHNR
dC5jc3MuCisgICAgY29uc3QgaW50IHRpbWVsaW5lVGh1bWJIZWlnaHQgPSAxMjsKKyAgICBjb25z
dCBpbnQgdGltZWxpbmVUaHVtYldpZHRoID0gdGltZWxpbmVUaHVtYkhlaWdodCAvIDM7CisgICAg
Ly8gdm9sdW1lVGh1bWJXaWR0aCBzaG91bGQgbWF0Y2ggdGhlIHdpZHRoIHByb3BlcnR5IG9mIC13
ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciBpbiBtZWRpYUNvbnRyb2xzUXQuY3Nz
LgorICAgIGNvbnN0IGludCB2b2x1bWVUaHVtYldpZHRoID0gMTI7CisgICAgY29uc3QgaW50IHZv
bHVtZVRodW1iSGVpZ2h0ID0gdm9sdW1lVGh1bWJXaWR0aCAvIDM7CisgICAgQ29udHJvbFBhcnQg
cGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisKKyAgICBpZiAocGFydCA9PSBNZWRpYVNsaWRl
clRodW1iUGFydCkgeworICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHRpbWVsaW5lVGh1
bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodGltZWxp
bmVUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICB9IGVsc2UgaWYgKHBhcnQgPT0gTWVkaWFWb2x1
bWVTbGlkZXJUaHVtYlBhcnQpIHsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodm9s
dW1lVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
dm9sdW1lVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICB9IGVsc2UgaWYgKHBhcnQgPT0gU2xpZGVy
VGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7
CisgICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CisgICAgICAgIGlmIChwYXJ0ID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9u
ID0gUXQ6OlZlcnRpY2FsOworCisgICAgICAgIFFTdHlsZSogcXN0eWxlID0gcVN0eWxlKCk7CisK
KyAgICAgICAgaW50IGxlbmd0aCA9IHFzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlk
ZXJMZW5ndGgsICZvcHRpb24pOworICAgICAgICBpbnQgdGhpY2tuZXNzID0gcXN0eWxlLT5waXhl
bE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlclRoaWNrbmVzcywgJm9wdGlvbik7CisgICAgICAgIGlm
IChvcHRpb24ub3JpZW50YXRpb24gPT0gUXQ6OlZlcnRpY2FsKSB7CisgICAgICAgICAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKKyAgICAgICAgICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOworICAgICAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodGhpY2tuZXNzLCBGaXhlZCkpOworICAgICAg
ICB9CisgICAgfQorfQorCitkb3VibGUgUmVuZGVyVGhlbWVRdDo6Y2FyZXRCbGlua0ludGVydmFs
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpjdXJzb3JGbGFzaFRpbWUoKSAv
IDEwMDAuMCAvIDIuMDsKK30KKworU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZv
cldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IEZvbnQmIGZvbnQs
IGludCB3aWR0aCkKK3sKKyAgICBpZiAod2lkdGggPD0gMCkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworCisgICAgU3RyaW5nIHN0cmluZzsKKyAgICBpZiAoZmlsZW5hbWVzLmlzRW1wdHkoKSkK
KyAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKKyAgICBl
bHNlIGlmIChmaWxlbmFtZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgU3RyaW5nIGZuYW1lID0g
ZmlsZW5hbWVzWzBdOworICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udC5mb250KCkpOworICAg
ICAgICBzdHJpbmcgPSBmbS5lbGlkZWRUZXh0KGZuYW1lLCBRdDo6RWxpZGVMZWZ0LCB3aWR0aCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG4gPSBmaWxlbmFtZXMuc2l6ZSgpOworICAgICAg
ICBzdHJpbmcgPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJQYWdlIiwgIiVuIGZp
bGUocykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm51
bWJlciBvZiBjaG9zZW4gZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjpDb2RlY0ZvclRyLCBuKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc3RyaW5nOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
MTEzOWRmNTIyZGY5YzEwMmYzOGFiNjVjNjJmYmY2MDAyNzRjZTdhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApAQCAtMCww
ICsxLDIzMSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1l
bnRhdGlvbiBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
I2lmbmRlZiBSZW5kZXJUaGVtZVFTdHlsZV9oCisjZGVmaW5lIFJlbmRlclRoZW1lUVN0eWxlX2gK
KworI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKKyNpbmNsdWRlIDxRU3R5bGU+CisKK1FUX0JF
R0lOX05BTUVTUEFDRQorY2xhc3MgUUxpbmVFZGl0OworY2xhc3MgUVBhaW50ZXI7CitjbGFzcyBR
V2lkZ2V0OworUVRfRU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBF
TkFCTEUoUFJPR1JFU1NfVEFHKQorY2xhc3MgUmVuZGVyUHJvZ3Jlc3M7CisjZW5kaWYKK2NsYXNz
IFJlbmRlclN0eWxlOworY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKK2NsYXNzIFNjcm9sbGJhclRo
ZW1lUXQ7CisKK2NsYXNzIFJlbmRlclRoZW1lUXQgOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworcHJp
dmF0ZToKKyAgICBSZW5kZXJUaGVtZVF0KFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJUaGVt
ZVF0KCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3Jl
YXRlKFBhZ2UqKTsKKworICAgIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNv
bnN0OworCisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmpl
Y3QqKSBjb25zdDsKKworICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFu
Z2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgorICAgIHZpcnR1
YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsK
KworICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcg
aXMgc3VwcG9ydGVkIGF0IGFsbC4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGlu
dHMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBS
ZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7CisKKyAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9u
IGNvbG9yLgorICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xv
ciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0
OworICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Owor
CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
OworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0OworCisgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwg
Y29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJikgY29uc3Q7
CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCgpOworI2VuZGlmCisKKyAgICBRU3R5bGUqIHFTdHlsZSgpIGNvbnN0Owor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBw
YWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisg
ICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51
TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKKworI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyNlbmRpZgorCisgICAg
dmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFj
a1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
KworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
CisjaWZuZGVmIFFUX05PX1NQSU5CT1gKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGlu
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworI2lmIEVOQUJM
RShQUk9HUkVTU19UQUcpCisgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRo
ZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5p
bWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0
OworICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBw
cm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworI2VuZGlmCisKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFT
ZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGlt
ZShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc0N1
cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7CisgICAg
dmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3Vy
cmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzT3du
RGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Citwcml2YXRlOgorCisgICAgdm9pZCBwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRlcios
IGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBkb3VibGUgbWVkaWFDb250cm9sc0Jhc2VsaW5l
T3BhY2l0eSgpIGNvbnN0OworICAgIFFDb2xvciBnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29s
b3IoUmVuZGVyT2JqZWN0KiA9IDApIGNvbnN0OworI2VuZGlmCisgICAgdm9pZCBjb21wdXRlU2l6
ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSopIGNvbnN0OworCitwcml2YXRlOgorICAgIHZpcnR1
YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxl
bmFtZXMsIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgpOworCisgICAgYm9vbCBzdXBwb3J0c0ZvY3Vz
KENvbnRyb2xQYXJ0KSBjb25zdDsKKworICAgIENvbnRyb2xQYXJ0IGluaXRpYWxpemVDb21tb25R
U3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYsIFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAg
dm9pZCBzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdm9pZCBzZXRQ
b3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZvaWQgc2V0UGFsZXR0ZUZy
b21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmKSBjb25zdDsKKworICAgIGludCBmaW5kRnJh
bWVMaW5lV2lkdGgoUVN0eWxlKikgY29uc3Q7CisKKyAgICBRU3R5bGUqIGZhbGxiYWNrU3R5bGUo
KSBjb25zdDsKKworICAgIEludFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KFJlbmRlck9iamVj
dCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIEludFJl
Y3QgcGFydFJlY3QsIGNvbnN0IEludFJlY3QmIGxvY2FsT2Zmc2V0KSBjb25zdDsKKworICAgIFBh
Z2UqIG1fcGFnZTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgaW50IG1fYnV0dG9uRm9udFBpeGVs
U2l6ZTsKKyNlbmRpZgorICAgIFFTdHJpbmcgbV9idXR0b25Gb250RmFtaWx5OworCisgICAgUVN0
eWxlKiBtX2ZhbGxiYWNrU3R5bGU7CisgICAgbXV0YWJsZSBRTGluZUVkaXQqIG1fbGluZUVkaXQ7
Cit9OworCitjbGFzcyBTdHlsZVBhaW50ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFN0eWxl
UGFpbnRlcihSZW5kZXJUaGVtZVF0KiwgY29uc3QgUGFpbnRJbmZvJik7CisgICAgZXhwbGljaXQg
U3R5bGVQYWludGVyKFNjcm9sbGJhclRoZW1lUXQqLCBHcmFwaGljc0NvbnRleHQqKTsKKyAgICB+
U3R5bGVQYWludGVyKCk7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBwYWlu
dGVyICYmIHN0eWxlOyB9CisKKyAgICBRUGFpbnRlciogcGFpbnRlcjsKKyAgICBRV2lkZ2V0KiB3
aWRnZXQ7CisgICAgUVN0eWxlKiBzdHlsZTsKKworICAgIHZvaWQgZHJhd1ByaW1pdGl2ZShRU3R5
bGU6OlByaW1pdGl2ZUVsZW1lbnQgcGUsIGNvbnN0IFFTdHlsZU9wdGlvbiYgb3B0KQorICAgIHsg
c3R5bGUtPmRyYXdQcmltaXRpdmUocGUsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KKyAgICB2
b2lkIGRyYXdDb250cm9sKFFTdHlsZTo6Q29udHJvbEVsZW1lbnQgY2UsIGNvbnN0IFFTdHlsZU9w
dGlvbiYgb3B0KQorICAgIHsgc3R5bGUtPmRyYXdDb250cm9sKGNlLCAmb3B0LCBwYWludGVyLCB3
aWRnZXQpOyB9CisgICAgdm9pZCBkcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDb21wbGV4Q29u
dHJvbCBjYywgY29uc3QgUVN0eWxlT3B0aW9uQ29tcGxleCYgb3B0KQorICAgIHsgc3R5bGUtPmRy
YXdDb21wbGV4Q29udHJvbChjYywgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQorCitwcml2YXRl
OgorICAgIHZvaWQgaW5pdChHcmFwaGljc0NvbnRleHQqLCBRU3R5bGUqKTsKKworICAgIFFCcnVz
aCBvbGRCcnVzaDsKKyAgICBib29sIG9sZEFudGlhbGlhc2luZzsKKworICAgIFFfRElTQUJMRV9D
T1BZKFN0eWxlUGFpbnRlcikKK307CisKK30KKworI2VuZGlmIC8vIFJlbmRlclRoZW1lUXRfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0NjVmMDc4MmU2NzIyYTYzODYyZTRmMDk5ZDk2ZDI4MmZl
NWE0Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE1OTcgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
cHJvamVjdC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sg
UnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqICAgICAgICAgICAgICAgMjAwNiBEaXJrIE11ZWxsZXIg
PG11ZWxsZXJAa2RlLm9yZz4KLSAqICAgICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgotCi0jaW5jbHVkZSAiQ1NT
Rm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgotI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVk
ZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50UXQuaCIKLSNpbmNsdWRlICJDb2xv
ci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUg
IkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCi0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkKLSNpbmNsdWRlICJR
dE1vYmlsZVdlYlN0eWxlLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
Ci0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0j
ZW5kaWYKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgotI2luY2x1
ZGUgIlF0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIgotI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5o
IgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0jaW5j
bHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNlbmRpZgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRdC5o
IgotI2luY2x1ZGUgIlNsaWRlclRodW1iRWxlbWVudC5oIgotI2luY2x1ZGUgIlRpbWVSYW5nZXMu
aCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotCi0jaW5jbHVkZSA8UUFwcGxp
Y2F0aW9uPgotI2luY2x1ZGUgPFFDb2xvcj4KLSNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgot
I2luY2x1ZGUgPFFGaWxlPgotI2luY2x1ZGUgPFFGb250TWV0cmljcz4KLSNpbmNsdWRlIDxRTGlu
ZUVkaXQ+Ci0jaW5jbHVkZSA8UU1hY1N0eWxlPgotI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1
ZGUgPFFQbGFzdGlxdWVTdHlsZT4KLSNpbmNsdWRlIDxRUHVzaEJ1dHRvbj4KLSNpbmNsdWRlIDxR
U3R5bGVGYWN0b3J5PgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkJ1dHRvbj4KLSNpbmNsdWRlIDxR
U3R5bGVPcHRpb25GcmFtZVYyPgotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0jaW5jbHVkZSA8
UVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMj4KLSNlbmRpZgotI2luY2x1ZGUgPFFTdHlsZU9wdGlv
blNsaWRlcj4KLSNpbmNsdWRlIDxRV2lkZ2V0PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWlubGluZSBzdGF0aWMgdm9pZCBpbml0U3R5bGVP
cHRpb24oUVdpZGdldCAqd2lkZ2V0LCBRU3R5bGVPcHRpb24mIG9wdGlvbikKLXsKLSAgICBpZiAo
d2lkZ2V0KQotICAgICAgICBvcHRpb24uaW5pdEZyb20od2lkZ2V0KTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgLyoKLSAgICAgICAgICBJZiBhIHdpZGdldCBpcyBub3QgZGlyZWN0bHkgYXZhaWxhYmxl
IGZvciByZW5kZXJpbmcsIHdlIGZhbGxiYWNrIHRvIGRlZmF1bHQKLSAgICAgICAgICB2YWx1ZSBm
b3IgYW4gYWN0aXZlIHdpZGdldC4KLSAgICAgICAgICovCi0gICAgICAgIG9wdGlvbi5zdGF0ZSA9
IFFTdHlsZTo6U3RhdGVfQWN0aXZlIHwgUVN0eWxlOjpTdGF0ZV9FbmFibGVkOwotICAgIH0KLX0K
LS8vIFRoZXNlIHZhbHVlcyBhbGwgbWF0Y2ggU2FmYXJpL1dpbi9DaHJvbWl1bQotc3RhdGljIGNv
bnN0IGZsb2F0IGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZSA9IDEzOwotc3RhdGljIGNvbnN0
IGZsb2F0IGRlZmF1bHRDYW5jZWxCdXR0b25TaXplID0gOTsKLXN0YXRpYyBjb25zdCBmbG9hdCBt
aW5DYW5jZWxCdXR0b25TaXplID0gNTsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhDYW5jZWxCdXR0
b25TaXplID0gMjE7Ci1zdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TaXplID0gMTM7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblNpemUgPSA5Owotc3RhdGljIGNvbnN0IGZsb2F0IG1heFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gMzA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVs
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoID0gMTg7Ci0KLSNpZiBVU0UoUVRfTU9CSUxF
X1RIRU1FKQotbmFtZXNwYWNlIHsKLSAgICBmbG9hdCBidXR0b25QYWRkaW5nTGVmdCA9IDE4Owot
ICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdSaWdodCA9IDE4OwotICAgIGZsb2F0IGJ1dHRvblBhZGRp
bmdUb3AgPSAyOwotICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdCb3R0b20gPSAzOwotICAgIGZsb2F0
IG1lbnVMaXN0UGFkZGluZyA9IDk7Ci0gICAgZmxvYXQgdGV4dEZpZWxkUGFkZGluZyA9IDU7Ci19
Ci0jZW5kaWYKLQotU3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVRdCogdGhl
bWUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQotewotICAgIGluaXQocGFpbnRJbmZvLmNv
bnRleHQgPyBwYWludEluZm8uY29udGV4dCA6IDAsIHRoZW1lLT5xU3R5bGUoKSk7Ci19Ci0KLVN0
eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKFNjcm9sbGJhclRoZW1lUXQqIHRoZW1lLCBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgaW5pdChjb250ZXh0LCB0aGVtZS0+c3R5bGUoKSk7
Ci19Ci0KLXZvaWQgU3R5bGVQYWludGVyOjppbml0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
UVN0eWxlKiB0aGVtZVN0eWxlKQotewotICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxRUGFpbnRl
cio+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB3aWRnZXQgPSAwOwotICAgIFFQ
YWludERldmljZSogZGV2ID0gMDsKLSAgICBpZiAocGFpbnRlcikKLSAgICAgICAgZGV2ID0gcGFp
bnRlci0+ZGV2aWNlKCk7Ci0gICAgaWYgKGRldiAmJiBkZXYtPmRldlR5cGUoKSA9PSBRSW50ZXJu
YWw6OldpZGdldCkKLSAgICAgICAgd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UVdpZGdldCo+KGRldik7
Ci0gICAgc3R5bGUgPSB0aGVtZVN0eWxlOwotCi0gICAgaWYgKHBhaW50ZXIpIHsKLSAgICAgICAg
Ly8gdGhlIHN0eWxlcyBvZnRlbiBhc3N1bWUgYmVpbmcgY2FsbGVkIHdpdGggYSBwcmlzdGluZSBw
YWludGVyIHdoZXJlIG5vIGJydXNoIGlzIHNldCwKLSAgICAgICAgLy8gc28gcmVzZXQgaXQgbWFu
dWFsbHkKLSAgICAgICAgb2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOwotICAgICAgICBwYWlu
dGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7Ci0KLSAgICAgICAgLy8gcGFpbnRpbmcgdGhlIHdp
ZGdldCB3aXRoIGFudGktYWxpYXNpbmcgd2lsbCBtYWtlIGl0IGJsdXJyeQotICAgICAgICAvLyBk
aXNhYmxlIGl0IGhlcmUgYW5kIHJlc3RvcmUgaXQgbGF0ZXIKLSAgICAgICAgb2xkQW50aWFsaWFz
aW5nID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZyk7Ci0g
ICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgZmFs
c2UpOwotICAgIH0KLX0KLQotU3R5bGVQYWludGVyOjp+U3R5bGVQYWludGVyKCkKLXsKLSAgICBp
ZiAocGFpbnRlcikgewotICAgICAgICBwYWludGVyLT5zZXRCcnVzaChvbGRCcnVzaCk7Ci0gICAg
ICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnRzKFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIG9sZEFu
dGlhbGlhc2luZyk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJU
aGVtZVF0OjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJl
bmRlclRoZW1lUXQocGFnZSkpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJU
aGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAg
IHJldHVybiBSZW5kZXJUaGVtZVF0OjpjcmVhdGUocGFnZSk7Ci0KLSAgICBzdGF0aWMgUmVuZGVy
VGhlbWUqIGZhbGxiYWNrID0gUmVuZGVyVGhlbWVRdDo6Y3JlYXRlKDApLnJlbGVhc2VSZWYoKTsK
LSAgICByZXR1cm4gZmFsbGJhY2s7Ci19Ci0KLVJlbmRlclRoZW1lUXQ6OlJlbmRlclRoZW1lUXQo
UGFnZSogcGFnZSkKLSAgICA6IFJlbmRlclRoZW1lKCkKLSAgICAsIG1fcGFnZShwYWdlKQotICAg
ICwgbV9saW5lRWRpdCgwKQotewotICAgIFFQdXNoQnV0dG9uIGJ1dHRvbjsKLSAgICBidXR0b24u
c2V0QXR0cmlidXRlKFF0OjpXQV9NYWNTbWFsbFNpemUpOwotICAgIFFGb250IGRlZmF1bHRCdXR0
b25Gb250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOwotICAgIFFGb250SW5mbyBmb250
SW5mbyhkZWZhdWx0QnV0dG9uRm9udCk7Ci0gICAgbV9idXR0b25Gb250RmFtaWx5ID0gZGVmYXVs
dEJ1dHRvbkZvbnQuZmFtaWx5KCk7Ci0jaWZkZWYgUV9XU19NQUMKLSAgICBtX2J1dHRvbkZvbnRQ
aXhlbFNpemUgPSBmb250SW5mby5waXhlbFNpemUoKTsKLSNlbmRpZgotCi0jaWYgVVNFKFFUX01P
QklMRV9USEVNRSkKLSAgICBtX2ZhbGxiYWNrU3R5bGUgPSBuZXcgUXRNb2JpbGVXZWJTdHlsZTsK
LSNlbHNlCi0gICAgbV9mYWxsYmFja1N0eWxlID0gUVN0eWxlRmFjdG9yeTo6Y3JlYXRlKFFMYXRp
bjFTdHJpbmcoIndpbmRvd3MiKSk7Ci0jZW5kaWYKLX0KLQotUmVuZGVyVGhlbWVRdDo6flJlbmRl
clRoZW1lUXQoKQotewotICAgIGRlbGV0ZSBtX2ZhbGxiYWNrU3R5bGU7Ci0jaWZuZGVmIFFUX05P
X0xJTkVFRElUCi0gICAgZGVsZXRlIG1fbGluZUVkaXQ7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShR
VF9NT0JJTEVfVEhFTUUpCi1ib29sIFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmls
bExheWVyJiBmaWxsLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAotewotICAg
IHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6
Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgTWVudWxpc3RQYXJ0OgotICAgIGNhc2Ug
U2VhcmNoRmllbGRQYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRB
cmVhUGFydDoKLSAgICAgICAgLy8gVGVzdCB0aGUgc3R5bGUgdG8gc2VlIGlmIHRoZSBVQSBib3Jk
ZXIgYW5kIGJhY2tncm91bmQgbWF0Y2guCi0gICAgICAgIHJldHVybiAoc3R5bGUtPmJvcmRlcigp
ICE9IGJvcmRlcgotICAgICAgICAgICAgICAgIHx8ICpzdHlsZS0+YmFja2dyb3VuZExheWVycygp
ICE9IGZpbGwKLSAgICAgICAgICAgICAgICB8fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSAhPSBiYWNrZ3JvdW5kQ29sb3IpOwotICAgIGNh
c2UgQ2hlY2tib3hQYXJ0OgotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xT
dHlsZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dyb3VuZENvbG9yKTsKLSAgICB9Ci19Ci0K
LWludCBSZW5kZXJUaGVtZVF0Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDE7Ci19Ci0jZWxzZQotLy8gUmVtb3ZlIHRo
aXMgd2hlbiBTZWFyY2hGaWVsZFBhcnQgaXMgc3R5bGUtYWJsZSBpbiBSZW5kZXJUaGVtZTo6aXND
b250cm9sU3R5bGVkKCkKLWJvb2wgUmVuZGVyVGhlbWVRdDo6aXNDb250cm9sU3R5bGVkKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxs
TGF5ZXImIGZpbGwsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Ci17Ci0gICAg
c3dpdGNoIChzdHlsZS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6
Ci0gICAgICAgIC8vIFRlc3QgdGhlIHN0eWxlIHRvIHNlZSBpZiB0aGUgVUEgYm9yZGVyIGFuZCBi
YWNrZ3JvdW5kIG1hdGNoLgotICAgICAgICByZXR1cm4gKHN0eWxlLT5ib3JkZXIoKSAhPSBib3Jk
ZXIKLSAgICAgICAgICAgICAgICB8fCAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBmaWxs
Ci0gICAgICAgICAgICAgICAgfHwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcikgIT0gYmFja2dyb3VuZENvbG9yKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVy
LCBmaWxsLCBiYWNrZ3JvdW5kQ29sb3IpOwotICAgIH0KLX0KLSNlbmRpZgotCi0vLyBmb3Igc29t
ZSB3aWRnZXQgcGFpbnRpbmcsIHdlIG5lZWQgdG8gZmFsbGJhY2sgdG8gV2luZG93cyBzdHlsZQot
UVN0eWxlKiBSZW5kZXJUaGVtZVF0OjpmYWxsYmFja1N0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gKG1fZmFsbGJhY2tTdHlsZSkgPyBtX2ZhbGxiYWNrU3R5bGUgOiBRQXBwbGljYXRpb246OnN0
eWxlKCk7Ci19Ci0KLVFTdHlsZSogUmVuZGVyVGhlbWVRdDo6cVN0eWxlKCkgY29uc3QKLXsKLSNp
ZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIHJldHVybiBmYWxsYmFja1N0eWxlKCk7Ci0jZW5k
aWYKLQotICAgIGlmIChtX3BhZ2UpIHsKLSAgICAgICAgUVdlYlBhZ2VDbGllbnQqIHBhZ2VDbGll
bnQgPSBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0K
LSAgICAgICAgaWYgKHBhZ2VDbGllbnQpCi0gICAgICAgICAgICByZXR1cm4gcGFnZUNsaWVudC0+
c3R5bGUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwotfQot
Ci1TdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpCi17Ci0gICAg
U3RyaW5nIHJlc3VsdCA9IFJlbmRlclRoZW1lOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7Ci0j
aWYgRU5BQkxFKE5PX0xJU1RCT1hfUkVOREVSSU5HKQotICAgIHJlc3VsdCArPSBTdHJpbmcodGhl
bWVRdE5vTGlzdGJveGVzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lUXROb0xpc3Ri
b3hlc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSop
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6c3Vw
cG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHN3
aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAg
IGNhc2UgUmFkaW9QYXJ0OgotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBTcXVh
cmVCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvbkJldmVs
UGFydDoKLSAgICBjYXNlIExpc3Rib3hQYXJ0OgotICAgIGNhc2UgTGlzdEl0ZW1QYXJ0OgotICAg
IGNhc2UgTWVudWxpc3RQYXJ0OgotICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgotICAgIGNh
c2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6Ci0gICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6Ci0g
ICAgY2FzZSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0OgotICAgIGNhc2UgU2xpZGVyVGh1bWJW
ZXJ0aWNhbFBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25QYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25Q
YXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotaW50IFJlbmRlclRoZW1lUXQ6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVu
ZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIGlmICghby0+aXNCb3goKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFy
dCB8fCBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KQotICAgICAgICByZXR1
cm4gdG9SZW5kZXJCb3gobyktPm1hcmdpblRvcCgpICsgdG9SZW5kZXJCb3gobyktPmhlaWdodCgp
IC0gMjsgLy8gU2FtZSBhcyBpbiBvbGQga2h0bWwKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJh
c2VsaW5lUG9zaXRpb24obyk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6Y29udHJvbFN1cHBv
cnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIGlmICghaXNFbmFi
bGVkKG8pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDaGVja2JveGVzIG9ubHkg
aGF2ZSB0aW50IHdoZW4gY2hlY2tlZC4KLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
ID09IENoZWNrYm94UGFydCkKLSAgICAgICAgcmV0dXJuIGlzQ2hlY2tlZChvKTsKLQotICAgIC8v
IEZvciBub3cgYXNzdW1lIG90aGVyIGNvbnRyb2xzIGhhdmUgdGludCBpZiBlbmFibGVkLgotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzQ29udHJvbFRp
bnRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFJlbmRlclRoZW1lUXQ6
OmZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqIHN0eWxlKSBjb25zdAotewotI2lmbmRlZiBRVF9O
T19MSU5FRURJVAotICAgIGlmICghbV9saW5lRWRpdCkKLSAgICAgICAgbV9saW5lRWRpdCA9IG5l
dyBRTGluZUVkaXQoKTsKLSNlbmRpZgotCi0gICAgUVN0eWxlT3B0aW9uRnJhbWVWMiBvcHQ7Ci0g
ICAgUVdpZGdldCogd2lkZ2V0ID0gMDsKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSAgICB3aWRn
ZXQgPSBtX2xpbmVFZGl0OwotI2VuZGlmCi0gICAgcmV0dXJuIHN0eWxlLT5waXhlbE1ldHJpYyhR
U3R5bGU6OlBNX0RlZmF1bHRGcmFtZVdpZHRoLCAmb3B0LCB3aWRnZXQpOwotfQotCi1zdGF0aWMg
UVJlY3QgaW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCwgUVN0eWxl
KiBzdHlsZSkKLXsKLSAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOwotICAgIG9wdGlvbi5z
dGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgIG9wdGlvbi5yZWN0ID0gb3JpZ2luYWxS
ZWN0OwotCi0gICAgUVJlY3QgbGF5b3V0UmVjdCA9IHN0eWxlLT5zdWJFbGVtZW50UmVjdChRU3R5
bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLCAmb3B0aW9uLCAwKTsKLSAgICBpZiAoIWxheW91
dFJlY3QuaXNOdWxsKCkpIHsKLSAgICAgICAgaW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5s
ZWZ0KCkgLSBvcmlnaW5hbFJlY3QubGVmdCgpOwotICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0g
b3JpZ2luYWxSZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJpZ2h0KCk7Ci0gICAgICAgIGludCBw
YWRkaW5nVG9wID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKLSAgICAg
ICAgaW50IHBhZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0
LmJvdHRvbSgpOwotCi0gICAgICAgIHJldHVybiBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRp
bmdMZWZ0LCAtcGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKLSAgICB9
Ci0gICAgcmV0dXJuIG9yaWdpbmFsUmVjdDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1
c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgc3dpdGNoIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIENoZWNrYm94
UGFydDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAg
ICAgIFFSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVCdXR0b25SZWN0KHJlY3QsIHFTdHlsZSgp
KTsKLSAgICAgICAgcmVjdCA9IEludFJlY3QoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0
LnkoKSwgaW5mbGF0ZWRSZWN0LndpZHRoKCksIGluZmxhdGVkUmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1Db2xvciBSZW5kZXJU
aGVtZVF0OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17
Ci0gICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7Ci0gICAgc2V0UGFs
ZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKLSAgICByZXR1cm4gcGFsLmJydXNoKFFQ
YWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7Ci19Ci0KLUNvbG9y
IFJlbmRlclRoZW1lUXQ6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAotewotICAgIFFQYWxldHRlIHBhbCA9IFFBcHBsaWNhdGlvbjo6cGFsZXR0ZSgpOwot
ICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKHBhbCk7Ci0gICAgcmV0dXJuIHBh
bC5icnVzaChRUGFsZXR0ZTo6SW5hY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7
Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lUXQ6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBRUGFsZXR0ZSBwYWwgPSBRQXBwbGljYXRpb246OnBh
bGV0dGUoKTsKLSAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhwYWwpOwotICAg
IHJldHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodGVk
VGV4dCkuY29sb3IoKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVRdDo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgUVBhbGV0dGUgcGFsID0g
UUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7Ci0gICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZF
eGlzdHMocGFsKTsKLSAgICByZXR1cm4gcGFsLmJydXNoKFFQYWxldHRlOjpJbmFjdGl2ZSwgUVBh
bGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVR
dDo6cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpIGNvbnN0Ci17Ci0gICAgUVBhbGV0dGUgcGFsID0g
UUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7Ci0gICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZF
eGlzdHMocGFsKTsKLSAgICByZXR1cm4gcGFsLmJydXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxl
dHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6c3lzdGVt
Rm9udChpbnQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0Ci17Ci0gICAgLy8gbm8tb3AKLX0KLQot
Q29sb3IgUmVuZGVyVGhlbWVRdDo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Ci17
Ci0gICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7Ci0gICAgc2V0UGFs
ZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKLSAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQp
IHsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9udGV4dDoKLSAgICAgICAgcmV0dXJuIHBhbC5icnVz
aChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6QnV0dG9uVGV4dCkuY29sb3IoKTsKLSAgICBj
YXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6Ci0gICAgICAgIHJldHVybiBwYWwuYnJ1c2goUVBhbGV0
dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OlRleHQpLmNvbG9yKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1ZUlkKTsKLSAgICB9Ci19
Ci0KLWludCBSZW5kZXJUaGVtZVF0OjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikg
Y29uc3QKLXsKLSAgICBjb25zdCBRRm9udE1ldHJpY3MgJmZtID0gUUFwcGxpY2F0aW9uOjpmb250
TWV0cmljcygpOwotICAgIHJldHVybiBmbS53aWR0aChRTGF0aW4xQ2hhcigneCcpKTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZVF0Ojpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSog
cmVuZGVyU3R5bGUpIGNvbnN0Ci17Ci0gICAgUVNpemUgc2l6ZSgwLCAwKTsKLSAgICBjb25zdCBR
Rm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpOwotICAgIFFTdHlsZSog
c3R5bGUgPSBxU3R5bGUoKTsKLQotICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2Uo
KSkgewotICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0Ogot
ICAgIGNhc2UgVGV4dEZpZWxkUGFydDogewotICAgICAgICBpbnQgcGFkZGluZyA9IGZpbmRGcmFt
ZUxpbmVXaWR0aChzdHlsZSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nTGVmdChM
ZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdS
aWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBh
ZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5z
ZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIElmIHRo
ZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhp
bmcgdG8gZG8uCi0gICAgaWYgKCFyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpICYmICFyZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgQ2hl
Y2tib3hQYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbiBzdHlsZU9wdGlvbjsKLSAgICAgICAg
c3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICAgICAgaW50IGNo
ZWNrQm94V2lkdGggPSBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9JbmRpY2F0b3JXaWR0
aCwgJnN0eWxlT3B0aW9uKTsKLSAgICAgICAgY2hlY2tCb3hXaWR0aCAqPSByZW5kZXJTdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBzaXplID0gUVNpemUoY2hlY2tCb3hXaWR0aCwgY2hl
Y2tCb3hXaWR0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFJhZGlvUGFydDog
ewotICAgICAgICBRU3R5bGVPcHRpb24gc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9u
LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCByYWRpb1dpZHRoID0g
c3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fRXhjbHVzaXZlSW5kaWNhdG9yV2lkdGgsICZz
dHlsZU9wdGlvbik7Ci0gICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2
ZVpvb20oKTsKLSAgICAgICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0jaWYgIVVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgY2Fz
ZSBQdXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6IHsKLSAgICAgICAgUVN0eWxl
T3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBR
U3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBRU2l6ZSBjb250ZW50U2l6ZSA9IGZtLnNpemUo
UXQ6OlRleHRTaG93TW5lbW9uaWMsIFFTdHJpbmc6OmZyb21MYXRpbjEoIlgiKSk7Ci0gICAgICAg
IFFTaXplIHB1c2hCdXR0b25TaXplID0gc3R5bGUtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlOjpD
VF9QdXNoQnV0dG9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgY29udGVudFNpemUsIDApOwotICAgICAgICBzdHls
ZU9wdGlvbi5yZWN0ID0gUVJlY3QoMCwgMCwgcHVzaEJ1dHRvblNpemUud2lkdGgoKSwgcHVzaEJ1
dHRvblNpemUuaGVpZ2h0KCkpOwotICAgICAgICBRUmVjdCBsYXlvdXRSZWN0ID0gc3R5bGUtPnN1
YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCAwKTsK
LQotICAgICAgICAvLyBJZiB0aGUgc3R5bGUgc3VwcG9ydHMgbGF5b3V0IHJlY3RzIHdlIHVzZSB0
aGF0LCBhbmQgIGNvbXBlbnNhdGUgYWNjb3JkaW5nbHkKLSAgICAgICAgLy8gaW4gcGFpbnRCdXR0
b24oKSBiZWxvdy4KLSAgICAgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKQotICAgICAgICAg
ICAgc2l6ZS5zZXRIZWlnaHQobGF5b3V0UmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNpemUuc2V0SGVpZ2h0KHB1c2hCdXR0b25TaXplLmhlaWdodCgpKTsKLQotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBNZW51bGlzdFBhcnQ6IHsKLSAgICAgICAgUVN0
eWxlT3B0aW9uQ29tYm9Cb3ggc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9uLnN0YXRl
IHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCBjb250ZW50SGVpZ2h0ID0gcU1h
eChmbS5saW5lU3BhY2luZygpLCAxNCkgKyAyOwotICAgICAgICBRU2l6ZSBtZW51TGlzdFNpemUg
PSBzdHlsZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGU6OkNUX0NvbWJvQm94LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24s
IFFTaXplKDAsIGNvbnRlbnRIZWlnaHQpLCAwKTsKLSAgICAgICAgc2l6ZS5zZXRIZWlnaHQobWVu
dUxpc3RTaXplLmhlaWdodCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IENoZWNrIGlz
IGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBh
Y2NvdW50LgotICAgIGlmIChyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
ICYmIHNpemUud2lkdGgoKSA+IDApCi0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRNaW5XaWR0aChM
ZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIGlmIChyZW5kZXJTdHlsZS0+aGVpZ2h0
KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCi0gICAgICAgIHJlbmRlclN0eWxlLT5z
ZXRNaW5IZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVRdDo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsK
LSAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVRdDo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcikKLXsKLSAgICByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7Ci19
Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKLXsKLSAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Ci19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVRdDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICByZXR1cm4gcGFpbnRCdXR0b24obywgaSwg
cik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17
Ci0gICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLQot
I2lmZGVmIFFfV1NfTUFDCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRv
blBhcnQpIHsKLSAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25vcmUgdGhlIHNwZWNpZmllZCBo
ZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50cwotICAgICAgICAvLyB1bmxl
c3MgYSBib3JkZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3BlcnR5IGlzIGFsc28gc3BlY2lm
aWVkLgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVl
KTsKLQotI2lmZGVmIFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250IHNpemUgYW5kIGZhbWlseSBv
biBNYWMgKGxpa2UgU2FmYXJpIGRvZXMpCi0gICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmll
ZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7Ci0jZWxzZQotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLSAgICBmb250RGVzY3Jp
cHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLSNlbmRpZgotCi0jaWYg
IVVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgRm9udEZhbWlseSBmb250RmFtaWx5OwotICAgIGZv
bnRGYW1pbHkuc2V0RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0
aW9uLnNldEZhbWlseShmb250RmFtaWx5KTsKLSAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc2VsZWN0b3ItPmZv
bnRTZWxlY3RvcigpKTsKLSNlbmRpZgotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKLSAg
ICBzZXRCdXR0b25QYWRkaW5nKHN0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRC
dXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBjb21wdXRlU2l6ZUJh
c2VkT25TdHlsZShzdHlsZSk7Ci19Ci0KLSNpZiAhVVNFKFFUX01PQklMRV9USEVNRSkKLXZvaWQg
UmVuZGVyVGhlbWVRdDo6c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Ci17Ci0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgIHN0eWxlT3B0aW9u
LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0KLSAgICAvLyBGYWtlIGEgYnV0dG9uIHJl
Y3QgaGVyZSwgc2luY2Ugd2UncmUganVzdCBjb21wdXRpbmcgZGVsdGFzCi0gICAgUVJlY3Qgb3Jp
Z2luYWxSZWN0ID0gUVJlY3QoMCwgMCwgMTAwLCAzMCk7Ci0gICAgc3R5bGVPcHRpb24ucmVjdCA9
IG9yaWdpbmFsUmVjdDsKLQotICAgIC8vIERlZmF1bHQgcGFkZGluZyBpcyBiYXNlZCBvbiB0aGUg
YnV0dG9uIG1hcmdpbiBwaXhlbCBtZXRyaWMKLSAgICBpbnQgYnV0dG9uTWFyZ2luID0gcVN0eWxl
KCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fQnV0dG9uTWFyZ2luLCAmc3R5bGVPcHRpb24sIDAp
OwotICAgIGludCBwYWRkaW5nTGVmdCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1Jp
Z2h0ID0gYnV0dG9uTWFyZ2luOwotICAgIGludCBwYWRkaW5nVG9wID0gYnV0dG9uTWFyZ2luOwot
ICAgIGludCBwYWRkaW5nQm90dG9tID0gYnV0dG9uTWFyZ2luOwotCi0gICAgLy8gVGhlbiBjaGVj
ayBpZiB0aGUgc3R5bGUgdXNlcyBsYXlvdXQgbWFyZ2lucwotICAgIFFSZWN0IGxheW91dFJlY3Qg
PSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRl
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHls
ZU9wdGlvbiwgMCk7Ci0gICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIFFS
ZWN0IGNvbnRlbnRzUmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1
c2hCdXR0b25Db250ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0gICAgICAgIHBhZGRpbmdMZWZ0ID0g
Y29udGVudHNSZWN0LmxlZnQoKSAtIGxheW91dFJlY3QubGVmdCgpOwotICAgICAgICBwYWRkaW5n
UmlnaHQgPSBsYXlvdXRSZWN0LnJpZ2h0KCkgLSBjb250ZW50c1JlY3QucmlnaHQoKTsKLSAgICAg
ICAgcGFkZGluZ1RvcCA9IGNvbnRlbnRzUmVjdC50b3AoKSAtIGxheW91dFJlY3QudG9wKCk7Ci0K
LSAgICAgICAgLy8gQ2FuJ3QgdXNlIHRoaXMgcmlnaHQgbm93IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2
ZSB0aGUgYmFzZWxpbmUgdG8gY29tcGVuc2F0ZQotICAgICAgICAvLyBwYWRkaW5nQm90dG9tID0g
bGF5b3V0UmVjdC5ib3R0b20oKSAtIGNvbnRlbnRzUmVjdC5ib3R0b20oKTsKLSAgICB9Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci19Ci0j
ZWxzZQotdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKLXsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChidXR0b25QYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAg
ICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChidXR0b25QYWRkaW5nUmlnaHQsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKGJ1dHRvblBhZGRpbmdUb3AsIEZp
eGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKGJ1dHRvblBhZGRpbmdC
b3R0b20sIEZpeGVkKSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludEJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgp
KQotICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIG9wdGlvbjsK
LSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnJlY3Qg
PSByOwotICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotCi0gICAgQ29u
dHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlv
biwgbyk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQgfHwgYXBwZWFyYW5j
ZSA9PSBCdXR0b25QYXJ0KSB7Ci0gICAgICAgIG9wdGlvbi5yZWN0ID0gaW5mbGF0ZUJ1dHRvblJl
Y3Qob3B0aW9uLnJlY3QsIHFTdHlsZSgpKTsKLSAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6
OkNFX1B1c2hCdXR0b24sIG9wdGlvbik7Ci0gICAgfSBlbHNlIGlmIChhcHBlYXJhbmNlID09IFJh
ZGlvUGFydCkKLSAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUmFkaW9CdXR0b24sIG9w
dGlvbik7Ci0gICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBDaGVja2JveFBhcnQpCi0gICAgICAg
cC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX0NoZWNrQm94LCBvcHRpb24pOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVsZFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewot
ICAgIC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlrZSB0aGlzIGxlYWRzIHRvIGRpZmZlcmVuY2Vz
IGxpa2U6Ci0gICAgLy8gLSBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUg
MTY4eDI1IFtiZ2NvbG9yPSNGRkZGRkZdIGJvcmRlcjogKDJweCBpbnNldCAjMDAwMDAwKV0KLSAg
ICAvLyArIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAxNjZ4MjYKLSAg
ICAvLyBpbiBsYXlvdXQgdGVzdHMgd2hlbiBhIENTUyBzdHlsZSBpcyBhcHBsaWVkIHRoYXQgZG9l
c24ndCBhZmZlY3QgYmFja2dyb3VuZCBjb2xvciwgYm9yZGVyIG9yCi0gICAgLy8gcGFkZGluZy4g
SnVzdCB3b3J0aCBrZWVwaW5nIGluIG1pbmQhCi0gICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xv
cihDb2xvcjo6dHJhbnNwYXJlbnQpOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0
eWxlLT5yZXNldFBhZGRpbmcoKTsKLSAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7
Ci0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVu
Z3RoKHRleHRGaWVsZFBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdo
dChMZW5ndGgodGV4dEZpZWxkUGFkZGluZywgRml4ZWQpKTsKLSNlbmRpZgotfQotCi1ib29sIFJl
bmRlclRoZW1lUXQ6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIGkp
OwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0
eWxlT3B0aW9uRnJhbWVWMiBwYW5lbDsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIHBh
bmVsKTsKLSAgICBwYW5lbC5yZWN0ID0gcjsKLSAgICBwYW5lbC5saW5lV2lkdGggPSBmaW5kRnJh
bWVMaW5lV2lkdGgocVN0eWxlKCkpOwotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgaWYg
KGlzUHJlc3NlZChvKSkKLSAgICAgICAgcGFuZWwuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5r
ZW47Ci0jZWxzZQotICAgIHBhbmVsLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotI2Vu
ZGlmCi0gICAgcGFuZWwuZmVhdHVyZXMgPSBRU3R5bGVPcHRpb25GcmFtZVYyOjpOb25lOwotCi0g
ICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgdGV4dCBmaWVsZAotICAgIENv
bnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhwYW5l
bCwgbyk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgIT0gVGV4dEZpZWxkUGFydAotICAgICAgICAmJiBh
cHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFRl
eHRBcmVhUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IExpc3Rib3hQYXJ0KQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4KLSAgICBw
LmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVFZGl0LCBwYW5lbCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRBcmVhU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKLXsKLSAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzZWxlY3Rvciwgc3R5
bGUsIGVsZW1lbnQpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50VGV4dEFyZWEoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0g
ICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1l
UXQ6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0KLSAg
ICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgoQXV0bykpOwotCi0gICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0
eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7Ci0KLSAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShz
dHlsZSk7Ci0KLSAgICAvLyBBZGQgaW4gdGhlIHBhZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNl
LgotICAgIHNldFBvcHVwUGFkZGluZyhzdHlsZSk7Ci0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkK
LSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKG1lbnVMaXN0UGFkZGluZywgRml4ZWQp
KTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlclRoZW1lUXQ6OnNldFBvcHVwUGFkZGluZyhSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IHBhZGRpbmdMZWZ0ID0gNDsK
LSAgICBjb25zdCBpbnQgcGFkZGluZ1JpZ2h0ID0gc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgpIHx8
IHN0eWxlLT53aWR0aCgpLmlzUGVyY2VudCgpID8gNSA6IDg7Ci0KLSAgICBzdHlsZS0+c2V0UGFk
ZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOwotCi0gICAgUVN0eWxlT3B0aW9u
Q29tYm9Cb3ggb3B0OwotICAgIGludCB3ID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6
UE1fQnV0dG9uSWNvblNpemUsICZvcHQsIDApOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQo
TGVuZ3RoKHBhZGRpbmdSaWdodCArIHcsIEZpeGVkKSk7Ci0KLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z1RvcChMZW5ndGgoMiwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5n
dGgoMiwgRml4ZWQpKTsKLX0KLQotCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVudUxpc3Qo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgU3R5bGVQYWludGVyIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3ggb3B0KG8p
OwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0KTsKLSAgICBpbml0aWFsaXplQ29t
bW9uUVN0eWxlT3B0aW9ucyhvcHQsIG8pOwotCi0gICAgSW50UmVjdCByZWN0ID0gcjsKLQotI2lm
IGRlZmluZWQoUV9XU19NQUMpICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX01BQykKLSAgICAvLyBR
TWFjU3R5bGUgbWFrZXMgdGhlIGNvbWJvIGJveGVzIGEgbGl0dGxlIGJpdCBzbWFsbGVyIHRvIGxl
YXZlIHNwYWNlIGZvciB0aGUgZm9jdXMgcmVjdC4KLSAgICAvLyBCZWNhdXNlIG9mIGl0LCB0aGUg
Y29tYm8gYnV0dG9uIGlzIGRyYXduIGF0IGEgcG9pbnQgdG8gdGhlIGxlZnQgb2Ygd2hlcmUgaXQg
d2FzIGV4cGVjdCB0byBiZSBhbmQgbWF5IGVuZCB1cAotICAgIC8vIG92ZXJsYXBwZWQgd2l0aCB0
aGUgdGV4dC4gVGhpcyB3aWxsIGZvcmNlIFFNYWNTdHlsZSB0byBkcmF3IHRoZSBjb21ibyBib3gg
d2l0aCB0aGUgZXhwZWN0ZWQgd2lkdGguCi0gICAgaWYgKHFvYmplY3RfY2FzdDxRTWFjU3R5bGUq
PihwLnN0eWxlKSkKLSAgICAgICAgcmVjdC5pbmZsYXRlWCgzKTsKLSNlbmRpZgotCi0gICAgY29u
c3QgUVBvaW50IHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgcC5wYWludGVyLT50cmFu
c2xhdGUodG9wTGVmdCk7Ci0gICAgb3B0LnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7Ci0gICAg
b3B0LnJlY3Quc2V0U2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICBwLmRyYXdDb21wbGV4Q29udHJv
bChRU3R5bGU6OkNDX0NvbWJvQm94LCBvcHQpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10
b3BMZWZ0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIC8v
IE1vYmlsZSB0aGVtZSB1c2VzIGJvcmRlciByYWRpdXMuCi0jZWxzZQotICAgIC8vIFdPUktBUk9V
TkQgYmVjYXVzZSBodG1sLmNzcyBzcGVjaWZpZXMgLXdlYmtpdC1ib3JkZXItcmFkaXVzIGZvciA8
c2VsZWN0PiBzbyB3ZSBvdmVycmlkZSBpdCBoZXJlCi0gICAgLy8gc2VlIGFsc28gaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzOTkKLSAgICBzdHlsZS0+cmVzZXRCb3Jk
ZXJSYWRpdXMoKTsKLSNlbmRpZgotCi0gICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgot
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKLQotICAgIC8vIFdoaXRlLXNwYWNl
IGlzIGxvY2tlZCB0byBwcmUKLSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOwotCi0gICAg
Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOwotCi0gICAgLy8gQWRkIGluIHRoZSBwYWRk
aW5nIHRoYXQgd2UnZCBsaWtlIHRvIHVzZS4KLSAgICBzZXRQb3B1cFBhZGRpbmcoc3R5bGUpOwot
fQotCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBp
KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFF0
U3R5bGVPcHRpb25XZWJDb21ib0JveCBvcHRpb24obyk7Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAu
d2lkZ2V0LCBvcHRpb24pOwotICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlv
biwgbyk7Ci0gICAgb3B0aW9uLnJlY3QgPSByOwotCi0gICAgLy8gZm9yIGRyYXdpbmcgdGhlIGNv
bWJvIGJveCBhcnJvdywgcmVseSBvbmx5IG9uIHRoZSBmYWxsYmFjayBzdHlsZQotICAgIHAuc3R5
bGUgPSBmYWxsYmFja1N0eWxlKCk7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpT
Q19Db21ib0JveEFycm93OwotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfQ29t
Ym9Cb3gsIG9wdGlvbik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBFTkFCTEUoUFJP
R1JFU1NfVEFHKQotZG91YmxlIFJlbmRlclRoZW1lUXQ6OmFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdAotewot
ICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSA+PSAwKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIC8vIEZJWE1FOiBVc2UgaGFyZC1jb2RlZCB2YWx1ZSB1bnRpbCBodHRwOi8vYnVn
cmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQuCi0gICAgLy8g
VXNlIHRoZSB2YWx1ZSBmcm9tIHdpbmRvd3Mgc3R5bGUgd2hpY2ggaXMgMTAgZnBzLgotICAgIHJl
dHVybiAwLjE7Ci19Ci0KLWRvdWJsZSBSZW5kZXJUaGVtZVF0OjphbmltYXRpb25EdXJhdGlvbkZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3QKLXsKLSAg
ICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgPj0gMCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyIG9wdGlvbjsKLSAgICBvcHRpb24ucmVj
dC5zZXRTaXplKHJlbmRlclByb2dyZXNzLT5zaXplKCkpOwotICAgIC8vIEZJWE1FOiBVbnRpbCBo
dHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQs
Ci0gICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcgYWNyb3NzIHRoZSBwcm9n
cmVzcyBiYXIuCi0gICAgcmV0dXJuIChvcHRpb24ucmVjdC53aWR0aCgpIC8gcVN0eWxlKCktPnBp
eGVsTWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9uKSkgKiBh
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKHJlbmRlclByb2dyZXNzKTsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIHN0eWxl
LT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRQ
cm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IElu
dFJlY3QmIHIpCi17Ci0gICAgaWYgKCFvLT5pc1Byb2dyZXNzKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGkpOwotICAgIGlmICghcC5pc1ZhbGlk
KCkpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYy
IG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgaW5p
dGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLQotICAgIFJlbmRlclByb2dy
ZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7Ci0gICAgb3B0aW9uLnJl
Y3QgPSByOwotICAgIG9wdGlvbi5tYXhpbXVtID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKTsKLSAgICBvcHRpb24ubWluaW11bSA9IDA7Ci0gICAgb3B0aW9uLnByb2dyZXNzID0gKHJl
bmRlclByb2dyZXNzLT5wb3NpdGlvbigpICogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSk7Ci0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsKLSAgICBwLnBh
aW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBvcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50
KDAsIDApKTsKLSAgICBvcHRpb24ucmVjdC5zZXRTaXplKHIuc2l6ZSgpKTsKLQotICAgIGlmIChv
cHRpb24ucHJvZ3Jlc3MgPCAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBVbnRpbCBodHRwOi8vYnVn
cmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQsCi0gICAgICAg
IC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3Mg
YmFyLgotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXJHcm9vdmUs
IG9wdGlvbik7Ci0gICAgICAgIGludCBjaHVua1dpZHRoID0gcVN0eWxlKCktPnBpeGVsTWV0cmlj
KFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9uKTsKLSAgICAgICAgUUNv
bG9yIGNvbG9yID0gKG9wdGlvbi5wYWxldHRlLmhpZ2hsaWdodCgpID09IG9wdGlvbi5wYWxldHRl
LmJhY2tncm91bmQoKSkgPyBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6QWN0aXZlLCBR
UGFsZXR0ZTo6SGlnaGxpZ2h0KSA6IG9wdGlvbi5wYWxldHRlLmNvbG9yKFFQYWxldHRlOjpIaWdo
bGlnaHQpOwotICAgICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnN0eWxlKCktPmRpcmVjdGlvbigp
ID09IFJUTCkKLSAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3Qob3B0aW9uLnJlY3Qucmln
aHQoKSAtIGNodW5rV2lkdGggIC0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCkg
KiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQo
KSwgY29sb3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0
KHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICogb3B0aW9uLnJlY3Qud2lkdGgo
KSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNvbG9yKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFyLCBvcHRpb24p
OwotCi0gICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTbGlkZXJUcmFjayhS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXIg
cCh0aGlzLCBwaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihw
LndpZGdldCwgb3B0aW9uKTsKLSAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1Ns
aWRlckdyb292ZTsKLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1v
blFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgaWYg
KGFwcGVhcmFuY2UgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBvcHRpb24ub3JpZW50
YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgaWYgKGlzUHJlc3NlZChvKSkKLSAgICAgICAgb3B0
aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotCi0gICAgcC5kcmF3Q29tcGxleENv
bnRyb2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7Ci0KLSAgICBpZiAob3B0aW9uLnN0YXRl
ICYgUVN0eWxlOjpTdGF0ZV9IYXNGb2N1cykgewotICAgICAgICBRU3R5bGVPcHRpb25Gb2N1c1Jl
Y3QgZm9jdXNPcHRpb247Ci0gICAgICAgIGZvY3VzT3B0aW9uLnJlY3QgPSByOwotICAgICAgICBw
LmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9GcmFtZUZvY3VzUmVjdCwgZm9jdXNPcHRpb24pOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1
c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAotewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwaSk7Ci0g
ICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVP
cHRpb25TbGlkZXIgb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9u
KTsKLSAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKLSAg
ICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMo
b3B0aW9uLCBvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0g
U2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG9wdGlvbi5vcmllbnRhdGlvbiA9IFF0
OjpWZXJ0aWNhbDsKLSAgICBpZiAoaXNQcmVzc2VkKG8pKSB7Ci0gICAgICAgIG9wdGlvbi5hY3Rp
dmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVySGFuZGxlOwotICAgICAgICBvcHRpb24u
c3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0gICAgfQotCi0gICAgcC5kcmF3Q29tcGxl
eENvbnRyb2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50
KSBjb25zdAotewotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHNlbGVj
dG9yLCBzdHlsZSwgZWxlbWVudCk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBw
aSwgcik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0g
ICAgLy8gUmVzZXR0aW5nIHRoZSBzdHlsZSBsaWtlIHRoaXMgbGVhZHMgdG8gZGlmZmVyZW5jZXMg
bGlrZToKLSAgICAvLyAtIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAx
Njh4MjUgW2JnY29sb3I9I0ZGRkZGRl0gYm9yZGVyOiAoMnB4IGluc2V0ICMwMDAwMDApXQotICAg
IC8vICsgUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2NngyNgotICAg
IC8vIGluIGxheW91dCB0ZXN0cyB3aGVuIGEgQ1NTIHN0eWxlIGlzIGFwcGxpZWQgdGhhdCBkb2Vz
bid0IGFmZmVjdCBiYWNrZ3JvdW5kIGNvbG9yLCBib3JkZXIgb3IKLSAgICAvLyBwYWRkaW5nLiBK
dXN0IHdvcnRoIGtlZXBpbmcgaW4gbWluZCEKLSAgICBzdHlsZS0+c2V0QmFja2dyb3VuZENvbG9y
KENvbG9yOjp0cmFuc3BhcmVudCk7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5
bGUtPnJlc2V0UGFkZGluZygpOwotICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsK
LX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVu
dCogZSkgY29uc3QKLXsKLSAgICAvLyBMb2dpYyB0YWtlbiBmcm9tIFJlbmRlclRoZW1lQ2hyb21p
dW0uY3BwLgotICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBz
aXplLgotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENv
bnRyb2xGb250UGl4ZWxTaXplOwotICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gbHJvdW5kZihx
TWluKHFNYXgobWluQ2FuY2VsQnV0dG9uU2l6ZSwgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgKiBm
b250U2NhbGUpLCBtYXhDYW5jZWxCdXR0b25TaXplKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExl
bmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7Ci19Ci0KLS8vIEZ1bmN0aW9uIHRha2VuIGZy
b20gUmVuZGVyVGhlbWVDaHJvbWl1bS5jcHAKLUludFJlY3QgUmVuZGVyVGhlbWVRdDo6Y29udmVy
dFRvUGFpbnRpbmdSZWN0KFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVy
T2JqZWN0KiBwYXJ0UmVuZGVyZXIsIEludFJlY3QgcGFydFJlY3QsIGNvbnN0IEludFJlY3QmIGxv
Y2FsT2Zmc2V0KSBjb25zdAotewotICAgIC8vIENvbXB1dGUgYW4gb2Zmc2V0IGJldHdlZW4gdGhl
IHBhcnQgcmVuZGVyZXIgYW5kIHRoZSBpbnB1dCByZW5kZXJlci4KLSAgICBJbnRTaXplIG9mZnNl
dEZyb21JbnB1dFJlbmRlcmVyID0gLShwYXJ0UmVuZGVyZXItPm9mZnNldEZyb21BbmNlc3RvckNv
bnRhaW5lcihpbnB1dFJlbmRlcmVyKSk7Ci0gICAgLy8gTW92ZSB0aGUgcmVjdCBpbnRvIHBhcnRS
ZW5kZXJlcidzIGNvb3Jkcy4KLSAgICBwYXJ0UmVjdC5tb3ZlKG9mZnNldEZyb21JbnB1dFJlbmRl
cmVyKTsKLSAgICAvLyBBY2NvdW50IGZvciB0aGUgbG9jYWwgZHJhd2luZyBvZmZzZXQuCi0gICAg
cGFydFJlY3QubW92ZShsb2NhbE9mZnNldC54KCksIGxvY2FsT2Zmc2V0LnkoKSk7Ci0KLSAgICBy
ZXR1cm4gcGFydFJlY3Q7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVj
dCYgcikKLXsKLSAgICAvLyBMb2dpYyBjb3BpZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtLmNw
cC4KLQotICAgIC8vIEdldCB0aGUgcmVuZGVyZXIgb2YgPGlucHV0PiBlbGVtZW50LgotICAgIE5v
ZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICBpZiAoIWlu
cHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVu
ZGVyQm94KiBpbnB1dFJlbmRlckJveCA9IHRvUmVuZGVyQm94KGlucHV0LT5yZW5kZXJlcigpKTsK
LSAgICBJbnRSZWN0IGlucHV0Q29udGVudEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94
UmVjdCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgYnV0dG9uIHN0YXlzIHNxdWFy
ZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveC4KLSAgICBpbnQgY2FuY2VsQnV0dG9u
U2l6ZSA9IHFNaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHFNaW4oaW5wdXRDb250ZW50Qm94
LmhlaWdodCgpLCByLmhlaWdodCgpKSk7Ci0gICAgLy8gQ2FsY3VsYXRlIGNhbmNlbCBidXR0b24n
cyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgaW5wdXQgZWxlbWVudC4KLSAgICAvLyBDZW50
ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMg
dG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKLSAgICAvLyBiZSBvbmUgcGl4ZWwg
Y2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJl
dHRlciB3aXRoIHRoZSB0ZXh0LgotICAgIEludFJlY3QgY2FuY2VsQnV0dG9uUmVjdChvLT5vZmZz
ZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5kZXJCb3gpLndpZHRoKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q29udGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50
Qm94LmhlaWdodCgpIC0gY2FuY2VsQnV0dG9uU2l6ZSArIDEpIC8gMiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uU2l6ZSwgY2FuY2VsQnV0dG9uU2l6ZSk7Ci0gICAg
SW50UmVjdCBwYWludGluZ1JlY3QgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXRSZW5kZXJC
b3gsIG8sIGNhbmNlbEJ1dHRvblJlY3QsIHIpOwotICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsSW1h
Z2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbEJ1dHRvbiIpLnJl
bGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3NlZCIpLnJlbGVh
c2VSZWYoKTsKLSAgICBwaS5jb250ZXh0LT5kcmF3SW1hZ2UoaXNQcmVzc2VkKG8pID8gY2FuY2Vs
UHJlc3NlZEltYWdlIDogY2FuY2VsSW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvLT5zdHlsZSgpLT5jb2xvclNwYWNlKCksIHBhaW50aW5nUmVjdCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVs
ZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGREZWNv
cmF0aW9uKG8sIHBpLCByKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
bihvLCBwaSwgcik7Ci19Ci0KLSNpZm5kZWYgUVRfTk9fU1BJTkJPWAotdm9pZCBSZW5kZXJUaGVt
ZVF0OjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFbGVtZW50KiBlKSBjb25zdAotewotICAgIC8vIFVzZSB0aGUgc2FtZSB3
aWR0aCBhcyBvdXIgbmF0aXZlIHNjcm9sbGJhcgotICAgIGludCB3aWR0aCA9IFNjcm9sbGJhclRo
ZW1lOjpuYXRpdmVUaGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRNaW5XaWR0aChMZW5n
dGgod2lkdGgsIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRJbm5lclNw
aW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8p
OwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5
bGVPcHRpb25TcGluQm94IG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9w
dGlvbik7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAgfCBR
U3R5bGU6OlNDX1NwaW5Cb3hEb3duOwotICAgIGlmICghaXNSZWFkT25seUNvbnRyb2wobykpIHsK
LSAgICAgICAgaWYgKGlzRW5hYmxlZChvKSkKLSAgICAgICAgICAgIG9wdGlvbi5zdGVwRW5hYmxl
ZCA9IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBVcEVuYWJsZWQgfCBRQWJzdHJhY3RTcGluQm94OjpT
dGVwRG93bkVuYWJsZWQ7Ci0gICAgICAgIGlmIChpc1ByZXNzZWQobykpIHsKLSAgICAgICAgICAg
IG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICAgICAgICAgIGlmIChp
c1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKG8pKQotICAgICAgICAgICAgICAgIG9wdGlvbi5hY3Rp
dmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3Bp
bkJveERvd247Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmVuZGVyIHRoZSBzcGluIGJ1dHRv
bnMgZm9yIExUUiBvciBSVEwgYWNjb3JkaW5nbHkuCi0gICAgb3B0aW9uLmRpcmVjdGlvbiA9IG8t
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFF0OjpMZWZ0VG9SaWdodCA6IFF0
OjpSaWdodFRvTGVmdDsKLQotICAgIEludFJlY3QgYnV0dG9uUmVjdCA9IHJlY3Q7Ci0gICAgLy8g
RGVmYXVsdCB0byBtb3ZpbmcgdGhlIGJ1dHRvbnMgYSBsaXR0bGUgYml0IHdpdGhpbiB0aGUgZWRp
dG9yIGZyYW1lLgotICAgIGludCBpbmZsYXRlWCA9IC0yOwotICAgIGludCBpbmZsYXRlWSA9IC0y
OwotI2lmIGRlZmluZWQoUV9XU19NQUMpICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX01BQykKLSAg
ICAvLyBRTWFjU3R5bGUgd2lsbCBwb3NpdGlvbiB0aGUgYXF1YSBidXR0b25zIGZsdXNoIHRvIHRo
ZSByaWdodC4KLSAgICAvLyBUaGlzIHdpbGwgbW92ZSB0aGVtIG1vcmUgd2l0aGluIHRoZSBjb250
cm9sIGZvciBiZXR0ZXIgc3R5bGUsIGEgbGEKLSAgICAvLyBDaHJvbWl1bSBsb29rICYgZmVlbC4K
LSAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUpKSB7Ci0gICAgICAgIGlu
ZmxhdGVYID0gLTQ7Ci0gICAgICAgIC8vIFJlbmRlciBtaW5pIGFxdWEgc3BpbiBidXR0b25zIGZv
ciBRTWFjU3R5bGUgdG8gZml0IG5pY2VseSBpbnRvCi0gICAgICAgIC8vIHRoZSBlZGl0b3IgYXJl
YSwgbGlrZSBDaHJvbWl1bS4KLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVf
TWluaTsKLSAgICB9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiAhZGVmaW5lZChR
VF9OT19TVFlMRV9QTEFTVElRVUUpCi0gICAgLy8gUVBsYXN0aXF1ZVN0eWxlIGxvb2tzIGJlc3Qg
d2hlbiB0aGUgc3BpbiBidXR0b25zIGFyZSBmbHVzaCB3aXRoIHRoZSBmcmFtZSdzIGVkZ2UuCi0g
ICAgaWYgKHFvYmplY3RfY2FzdDxRUGxhc3RpcXVlU3R5bGUqPihwLnN0eWxlKSkgewotICAgICAg
ICBpbmZsYXRlWCA9IDA7Ci0gICAgICAgIGluZmxhdGVZID0gMDsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVgoaW5mbGF0ZVgpOwotICAgIGJ1dHRvblJlY3QuaW5mbGF0
ZVkoaW5mbGF0ZVkpOwotICAgIG9wdGlvbi5yZWN0ID0gYnV0dG9uUmVjdDsKLQotICAgIHAuZHJh
d0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU3BpbkJveCwgb3B0aW9uKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0ZvY3VzKENv
bnRyb2xQYXJ0IGFwcGVhcmFuY2UpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7
Ci0gICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6Ci0gICAgY2Fz
ZSBUZXh0RmllbGRQYXJ0OgotICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgIGNhc2UgTGlzdGJv
eFBhcnQ6Ci0gICAgY2FzZSBNZW51bGlzdFBhcnQ6Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAg
Y2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKLSAgICBj
YXNlIFNsaWRlclZlcnRpY2FsUGFydDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVs
dDogLy8gTm8gZm9yIGFsbCBvdGhlcnMuLi4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0
cyhRUGFsZXR0ZSYgcGFsZXR0ZSkgY29uc3QKLXsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQot
ICAgIHN0YXRpYyBRUGFsZXR0ZSBsaWdodEdyYXlQYWxldHRlKFF0OjpsaWdodEdyYXkpOwotICAg
IHBhbGV0dGUgPSBsaWdodEdyYXlQYWxldHRlOwotICAgIHJldHVybjsKLSNlbmRpZgotICAgIC8v
IElmIHRoZSB3ZWJ2aWV3IGhhcyBhIGN1c3RvbSBwYWxldHRlLCB1c2UgaXQKLSAgICBpZiAoIW1f
cGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIENocm9tZSogY2hyb21lID0gbV9wYWdlLT5jaHJv
bWUoKTsKLSAgICBpZiAoIWNocm9tZSkKLSAgICAgICAgcmV0dXJuOwotICAgIENocm9tZUNsaWVu
dCogY2hyb21lQ2xpZW50ID0gY2hyb21lLT5jbGllbnQoKTsKLSAgICBpZiAoIWNocm9tZUNsaWVu
dCkKLSAgICAgICAgcmV0dXJuOwotICAgIFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gY2hy
b21lQ2xpZW50LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSAgICBpZiAoIXBhZ2VDbGllbnQpCi0g
ICAgICAgIHJldHVybjsKLSAgICBwYWxldHRlID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOwotfQot
Ci1Db250cm9sUGFydCBSZW5kZXJUaGVtZVF0Ojppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9u
cyhRU3R5bGVPcHRpb24mIG9wdGlvbiwgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIC8v
IERlZmF1bHQgYml0czogbm8gZm9jdXMsIG5vIG1vdXNlIG92ZXIKLSAgICBvcHRpb24uc3RhdGUg
Jj0gfihRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzIHwgUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXIpOwot
Ci0gICAgaWYgKGlzUmVhZE9ubHlDb250cm9sKG8pKQotICAgICAgICAvLyBSZWFkb25seSBpcyBz
dXBwb3J0ZWQgb24gdGV4dGZpZWxkcy4KLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6
U3RhdGVfUmVhZE9ubHk7Ci0KLSAgICBvcHRpb24uZGlyZWN0aW9uID0gUXQ6OkxlZnRUb1JpZ2h0
OwotCi0gICAgaWYgKGlzSG92ZXJlZChvKSkKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHls
ZTo6U3RhdGVfTW91c2VPdmVyOwotCi0gICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlz
dHMob3B0aW9uLnBhbGV0dGUpOwotCi0gICAgaWYgKCFpc0VuYWJsZWQobykpIHsKLSAgICAgICAg
b3B0aW9uLnBhbGV0dGUuc2V0Q3VycmVudENvbG9yR3JvdXAoUVBhbGV0dGU6OkRpc2FibGVkKTsK
LSAgICAgICAgb3B0aW9uLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0VuYWJsZWQ7Ci0gICAgfQot
Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gby0+c3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQot
ICAgICAgICByZXR1cm4gTm9Db250cm9sUGFydDsKLQotICAgIENvbnRyb2xQYXJ0IHJlc3VsdCA9
IHN0eWxlLT5hcHBlYXJhbmNlKCk7Ci0gICAgaWYgKHN1cHBvcnRzRm9jdXMocmVzdWx0KSAmJiBp
c0ZvY3VzZWQobykpIHsKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfSGFz
Rm9jdXM7Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0tleWJvYXJkRm9j
dXNDaGFuZ2U7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBXZWJDb3Jl
OjpSVEwpCi0gICAgICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6UmlnaHRUb0xlZnQ7Ci0KLSAg
ICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBT
cXVhcmVCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvbkJl
dmVsUGFydDoKLSAgICBjYXNlIExpc3RJdGVtUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0QnV0dG9u
UGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6Ci0gICAgY2FzZSBT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6IHsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChvKSkK
LSAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICAg
ICAgZWxzZSBpZiAocmVzdWx0ID09IFB1c2hCdXR0b25QYXJ0IHx8IHJlc3VsdCA9PSBCdXR0b25Q
YXJ0KQotICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmFpc2VkOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgY2FzZSBDaGVj
a2JveFBhcnQ6Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSAoaXNDaGVja2VkKG8pID8gUVN0eWxl
OjpTdGF0ZV9PbiA6IFFTdHlsZTo6U3RhdGVfT2ZmKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotCi1TdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0
cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCi17Ci0gICAgU3RyaW5nIHJlc3VsdCA9IFN0cmlu
ZyhtZWRpYUNvbnRyb2xzUXRVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9s
c1F0VXNlckFnZW50U3R5bGVTaGVldCkpOwotCi0gICAgaWYgKG1fcGFnZSAmJiBtX3BhZ2UtPmNo
cm9tZSgpLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpCi0gICAgICAgIHJl
c3VsdCArPSBTdHJpbmcobWVkaWFDb250cm9sc1F0RnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzUXRGdWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCkp
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gSGVscGVyIGNsYXNzIHRvIHRyYW5zZm9y
bSB0aGUgcGFpbnRlcidzIHdvcmxkIG1hdHJpeCB0byB0aGUgb2JqZWN0J3MgY29udGVudCBhcmVh
LCBzY2FsZWQgdG8gMCwwLDEwMCwxMDAKLWNsYXNzIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgewot
cHVibGljOgotICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIoUVBhaW50ZXIqIHBhaW50ZXIsIFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiByKSA6IG1fcGFpbnRlcihw
YWludGVyKQotICAgIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyT2JqZWN0
LT5zdHlsZSgpOwotICAgICAgICBtX29yaWdpbmFsVHJhbnNmb3JtID0gbV9wYWludGVyLT50cmFu
c2Zvcm0oKTsKLSAgICAgICAgbV9wYWludGVyLT50cmFuc2xhdGUoci54KCkgKyBzdHlsZS0+cGFk
ZGluZ0xlZnQoKS52YWx1ZSgpLCByLnkoKSArIHN0eWxlLT5wYWRkaW5nVG9wKCkudmFsdWUoKSk7
Ci0gICAgICAgIG1fcGFpbnRlci0+c2NhbGUoKHIud2lkdGgoKSAtIHN0eWxlLT5wYWRkaW5nTGVm
dCgpLnZhbHVlKCkgLSBzdHlsZS0+cGFkZGluZ1JpZ2h0KCkudmFsdWUoKSkgLyAxMDAuMCwKLSAg
ICAgICAgICAgICAoci5oZWlnaHQoKSAtIHN0eWxlLT5wYWRkaW5nVG9wKCkudmFsdWUoKSAtIHN0
eWxlLT5wYWRkaW5nQm90dG9tKCkudmFsdWUoKSkgLyAxMDAuMCk7Ci0gICAgfQotCi0gICAgfldv
cmxkTWF0cml4VHJhbnNmb3JtZXIoKSB7IG1fcGFpbnRlci0+c2V0VHJhbnNmb3JtKG1fb3JpZ2lu
YWxUcmFuc2Zvcm0pOyB9Ci0KLXByaXZhdGU6Ci0gICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsKLSAg
ICBRVHJhbnNmb3JtIG1fb3JpZ2luYWxUcmFuc2Zvcm07Ci19OwotCi1kb3VibGUgUmVuZGVyVGhl
bWVRdDo6bWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IDAuNDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhQmFja2dyb3VuZChRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKLXsKLSAgICBwYWludGVyLT5z
ZXRQZW4oUXQ6Ok5vUGVuKTsKLSAgICBzdGF0aWMgUUNvbG9yIHRyYW5zcGFyZW50QmxhY2soMCwg
MCwgMCwgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpICogMjU1KTsKLSAgICBwYWludGVy
LT5zZXRCcnVzaCh0cmFuc3BhcmVudEJsYWNrKTsKLSAgICBwYWludGVyLT5kcmF3Um91bmRlZFJl
Y3Qoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIDUuMCwgNS4wKTsKLX0KLQot
c3RhdGljIGJvb2wgbWVkaWFFbGVtZW50Q2FuUGxheShSZW5kZXJPYmplY3QqIG8pCi17Ci0gICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7
Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBtZWRpYUVsZW1lbnQtPnJlYWR5U3RhdGUoKSA+IEhUTUxNZWRpYUVsZW1lbnQ6OkhBVkVf
TUVUQURBVEEKLSAgICAgICAgICAgfHwgKG1lZGlhRWxlbWVudC0+cmVhZHlTdGF0ZSgpID09IEhU
TUxNZWRpYUVsZW1lbnQ6OkhBVkVfTk9USElORwotICAgICAgICAgICAgICAgJiYgby0+c3R5bGUo
KS0+YXBwZWFyYW5jZSgpID09IE1lZGlhUGxheUJ1dHRvblBhcnQgJiYgbWVkaWFFbGVtZW50LT5w
cmVsb2FkKCkgPT0gIm5vbmUiKTsKLX0KLQotUUNvbG9yIFJlbmRlclRoZW1lUXQ6OmdldE1lZGlh
Q29udHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJPYmplY3QqIG8pIGNvbnN0Ci17Ci0gICAgUUNv
bG9yIGZnQ29sb3IgPSBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwot
ICAgIGlmICghbykKLSAgICAgICAgcmV0dXJuIGZnQ29sb3I7Ci0KLSAgICBpZiAoby0+bm9kZSgp
LT5hY3RpdmUoKSkKLSAgICAgICAgZmdDb2xvciA9IGZnQ29sb3IubGlnaHRlcigpOwotCi0gICAg
aWYgKCFtZWRpYUVsZW1lbnRDYW5QbGF5KG8pKSB7Ci0gICAgICAgIFFQYWxldHRlIHBhbCA9IFFB
cHBsaWNhdGlvbjo6cGFsZXR0ZSgpOwotICAgICAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJ
ZkV4aXN0cyhwYWwpOwotICAgICAgICBmZ0NvbG9yID0gcGFsLmJydXNoKFFQYWxldHRlOjpEaXNh
YmxlZCwgUVBhbGV0dGU6OlRleHQpLmNvbG9yKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZnQ29s
b3I7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1l
ZGlhRWxlbWVudChvKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKLSAgICBpZiAoIXAu
aXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHAucGFpbnRlci0+c2V0UmVu
ZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKLQotICAgIHBhaW50TWVkaWFC
YWNrZ3JvdW5kKHAucGFpbnRlciwgcik7Ci0KLSAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRy
YW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7Ci0gICAgY29uc3QgUVBvaW50RiBhcnJvd1BvbHln
b25bOV0gPSB7IFFQb2ludEYoMjAsIDApLCBRUG9pbnRGKDEwMCwgMCksIFFQb2ludEYoMTAwLCA4
MCksCi0gICAgICAgICAgICBRUG9pbnRGKDgwLCA4MCksIFFQb2ludEYoODAsIDMwKSwgUVBvaW50
RigxMCwgMTAwKSwgUVBvaW50RigwLCA5MCksIFFQb2ludEYoNzAsIDIwKSwgUVBvaW50RigyMCwg
MjApfTsKLQotICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3Vu
ZENvbG9yKG8pKTsKLSAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKGFycm93UG9seWdvbiwgOSk7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRp
YU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQg
PSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsK
LSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHAucGFp
bnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKLQotICAg
IHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7Ci0KLSAgICBXb3JsZE1hdHJpeFRy
YW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7Ci0gICAgY29uc3QgUVBvaW50
RiBzcGVha2VyUG9seWdvbls2XSA9IHsgUVBvaW50RigyMCwgMzApLCBRUG9pbnRGKDUwLCAzMCks
IFFQb2ludEYoODAsIDApLAotICAgICAgICAgICAgUVBvaW50Rig4MCwgMTAwKSwgUVBvaW50Rig1
MCwgNzApLCBRUG9pbnRGKDIwLCA3MCl9OwotCi0gICAgcC5wYWludGVyLT5zZXRCcnVzaChtZWRp
YUVsZW1lbnQtPm11dGVkKCkgPyBRdDo6ZGFya1JlZCA6IGdldE1lZGlhQ29udHJvbEZvcmVncm91
bmRDb2xvcihvKSk7Ci0gICAgcC5wYWludGVyLT5kcmF3UG9seWdvbihzcGVha2VyUG9seWdvbiwg
Nik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRN
ZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZv
KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHAu
cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKLQot
ICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7Ci0KLSAgICBXb3JsZE1hdHJp
eFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7Ci0gICAgcC5wYWludGVy
LT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOwotICAgIGlmICht
ZWRpYUVsZW1lbnQtPmNhblBsYXkoKSkgewotICAgICAgICBjb25zdCBRUG9pbnRGIHBsYXlQb2x5
Z29uWzNdID0geyBRUG9pbnRGKDAsIDApLCBRUG9pbnRGKDEwMCwgNTApLCBRUG9pbnRGKDAsIDEw
MCl9OwotICAgICAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKHBsYXlQb2x5Z29uLCAzKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KDAsIDAsIDMwLCAxMDApOwot
ICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KDcwLCAwLCAzMCwgMTAwKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtC
YWNrQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KQotewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgdGhpcyBhdCB0aGUgbW9tZW50Lgot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2Vl
a0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCB0aGlzIGF0IHRoZSBtb21l
bnQuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVk
aWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5m
byk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBw
LnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0g
ICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50
VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGN1cnJlbnRUaW1lKSArICIgLyAiICsgZm9ybWF0
TWVkaWFDb250cm9sc1RpbWUoZHVyYXRpb24pOwotfQotCi1TdHJpbmcgUmVuZGVyVGhlbWVRdDo6
Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0
IGR1cmF0aW9uKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0ICpvLCBj
b25zdCBQYWludEluZm8gJnBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmcikKLXsKLSAgICBTdHls
ZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVy
OjpBbnRpYWxpYXNpbmcsIHRydWUpOwotCi0gICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWlu
dGVyLCByKTsKLQotICAgIGlmICghby0+aXNTbGlkZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgSW50UmVjdCBiID0gdG9SZW5kZXJCb3gobyktPmNvbnRlbnRCb3hSZWN0KCk7Ci0K
LSAgICAvLyBQb3NpdGlvbiB0aGUgb3V0ZXIgcmVjdGFuZ2xlCi0gICAgaW50IHRvcCA9IHIueSgp
ICsgYi55KCk7Ci0gICAgaW50IGxlZnQgPSByLngoKSArIGIueCgpOwotICAgIGludCB3aWR0aCA9
IGIud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gYi5oZWlnaHQoKTsKLQotICAgIC8vIEdldCB0
aGUgc2NhbGUgY29sb3IgZnJvbSB0aGUgcGFnZSBjbGllbnQKLSAgICBRUGFsZXR0ZSBwYWwgPSBR
QXBwbGljYXRpb246OnBhbGV0dGUoKTsKLSAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4
aXN0cyhwYWwpOwotICAgIGNvbnN0IFFDb2xvciBoaWdobGlnaHRUZXh0ID0gcGFsLmJydXNoKFFQ
YWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHRlZFRleHQpLmNvbG9yKCk7Ci0gICAg
Y29uc3QgUUNvbG9yIHNjYWxlQ29sb3IoaGlnaGxpZ2h0VGV4dC5yZWQoKSwgaGlnaGxpZ2h0VGV4
dC5ncmVlbigpLCBoaWdobGlnaHRUZXh0LmJsdWUoKSwgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3Bh
Y2l0eSgpICogMjU1KTsKLQotICAgIC8vIERyYXcgdGhlIG91dGVyIHJlY3RhbmdsZQotICAgIHAu
cGFpbnRlci0+c2V0QnJ1c2goc2NhbGVDb2xvcik7Ci0gICAgcC5wYWludGVyLT5kcmF3UmVjdChs
ZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYgKCFvLT5ub2RlKCkgfHwgIW8tPm5v
ZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHNsaWRlciA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
PihvLT5ub2RlKCkpOwotCi0gICAgLy8gUG9zaXRpb24gdGhlIGlubmVyIHJlY3RhbmdsZQotICAg
IGhlaWdodCA9IGhlaWdodCAqIHNsaWRlci0+dmFsdWVBc051bWJlcigpOwotICAgIHRvcCArPSBi
LmhlaWdodCgpIC0gaGVpZ2h0OwotCi0gICAgLy8gRHJhdyB0aGUgaW5uZXIgcmVjdGFuZ2xlCi0g
ICAgcC5wYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKLSAgICBwLnBhaW50ZXItPnNldEJydXNo
KGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7Ci0gICAgcC5wYWludGVyLT5kcmF3
UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJP
YmplY3QgKm8sIGNvbnN0IFBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQot
ewotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7Ci0gICAgaWYgKCFwLmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBOb3RoaW5nIHRvIGRyYXcgaGVy
ZSwgdGhpcyBpcyBhbGwgZG9uZSBpbiB0aGUgdHJhY2sKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7
Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0
eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50
ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0KLSAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBh
aW50ZXIsIHIpOwotCi0gICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBtZWRpYUVsZW1lbnQt
PnBsYXllcigpKSB7Ci0gICAgICAgIC8vIEdldCB0aGUgYnVmZmVyZWQgcGFydHMgb2YgdGhlIG1l
ZGlhCi0gICAgICAgIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBwbGF5ZXItPmJ1
ZmZlcmVkKCk7Ci0gICAgICAgIGlmIChidWZmZXJlZC0+bGVuZ3RoKCkgPiAwICYmIHBsYXllci0+
ZHVyYXRpb24oKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKSB7Ci0g
ICAgICAgICAgICAvLyBTZXQgdGhlIHRyYW5zZm9ybSBhbmQgYnJ1c2gKLSAgICAgICAgICAgIFdv
cmxkTWF0cml4VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIocC5wYWludGVyLCBvLCByKTsKLSAgICAg
ICAgICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9y
KCkpOwotCi0gICAgICAgICAgICAvLyBQYWludCBlYWNoIGJ1ZmZlcmVkIHNlY3Rpb24KLSAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZXg7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGJ1ZmZlcmVkLT5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRY
ID0gKGJ1ZmZlcmVkLT5zdGFydChpLCBleCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkpICogMTAwOwot
ICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoID0gKChidWZmZXJlZC0+ZW5kKGksIGV4KSAvIHBs
YXllci0+ZHVyYXRpb24oKSkgKiAxMDApIC0gc3RhcnRYOwotICAgICAgICAgICAgICAgIHAucGFp
bnRlci0+ZHJhd1JlY3Qoc3RhcnRYLCAzNywgd2lkdGgsIDI2KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZVF0OjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBBU1NFUlQoby0+bm9kZSgp
KTsKLSAgICBOb2RlKiBob3N0Tm9kZSA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7
Ci0gICAgQVNTRVJUKGhvc3ROb2RlKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChob3N0Tm9kZSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1l
bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBh
aW50SW5mbyk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1
ZSk7Ci0KLSAgICBwLnBhaW50ZXItPnNldFBlbihRdDo6Tm9QZW4pOwotICAgIHAucGFpbnRlci0+
c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKGhvc3ROb2RlLT5yZW5kZXJl
cigpKSk7Ci0gICAgcC5wYWludGVyLT5kcmF3UmVjdChyLngoKSwgci55KCksIHIud2lkdGgoKSwg
ci5oZWlnaHQoKSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotdm9pZCBSZW5k
ZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAotewotICAgIC8vIHRpbWVsaW5lVGh1bWJIZWlnaHQgc2hvdWxkIG1hdGNoIHRoZSBoZWlnaHQg
cHJvcGVydHkgb2YgLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSBpbiBtZWRpYUNvbnRy
b2xzUXQuY3NzLgotICAgIGNvbnN0IGludCB0aW1lbGluZVRodW1iSGVpZ2h0ID0gMTI7Ci0gICAg
Y29uc3QgaW50IHRpbWVsaW5lVGh1bWJXaWR0aCA9IHRpbWVsaW5lVGh1bWJIZWlnaHQgLyAzOwot
ICAgIC8vIHZvbHVtZVRodW1iV2lkdGggc2hvdWxkIG1hdGNoIHRoZSB3aWR0aCBwcm9wZXJ0eSBv
ZiAtd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgaW4gbWVkaWFDb250cm9sc1F0
LmNzcy4KLSAgICBjb25zdCBpbnQgdm9sdW1lVGh1bWJXaWR0aCA9IDEyOwotICAgIGNvbnN0IGlu
dCB2b2x1bWVUaHVtYkhlaWdodCA9IHZvbHVtZVRodW1iV2lkdGggLyAzOwotICAgIENvbnRyb2xQ
YXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOwotCi0gICAgaWYgKHBhcnQgPT0gTWVkaWFT
bGlkZXJUaHVtYlBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh0aW1lbGlu
ZVRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRp
bWVsaW5lVGh1bWJIZWlnaHQsIEZpeGVkKSk7Ci0gICAgfSBlbHNlIGlmIChwYXJ0ID09IE1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWJQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KHZvbHVtZVRodW1iSGVpZ2h0LCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKHZvbHVtZVRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgfSBlbHNlIGlmIChwYXJ0ID09IFNs
aWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFy
dCkgewotICAgICAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwotICAgICAgICBpZiAocGFy
dCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgICAgIG9wdGlvbi5vcmllbnRh
dGlvbiA9IFF0OjpWZXJ0aWNhbDsKLQotICAgICAgICBRU3R5bGUqIHFzdHlsZSA9IHFTdHlsZSgp
OwotCi0gICAgICAgIGludCBsZW5ndGggPSBxc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1f
U2xpZGVyTGVuZ3RoLCAmb3B0aW9uKTsKLSAgICAgICAgaW50IHRoaWNrbmVzcyA9IHFzdHlsZS0+
cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJUaGlja25lc3MsICZvcHRpb24pOwotICAgICAg
ICBpZiAob3B0aW9uLm9yaWVudGF0aW9uID09IFF0OjpWZXJ0aWNhbCkgewotICAgICAgICAgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aCh0aGlja25lc3MsIEZpeGVkKSk7Ci0gICAgICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKLSAg
ICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotZG91YmxlIFJlbmRlclRoZW1lUXQ6OmNhcmV0QmxpbmtJbnRl
cnZhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICBRQXBwbGljYXRpb246OmN1cnNvckZsYXNoVGlt
ZSgpIC8gMTAwMC4wIC8gMi4wOwotfQotCi1TdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZmlsZUxpc3RO
YW1lRm9yV2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgRm9udCYg
Zm9udCwgaW50IHdpZHRoKQotewotICAgIGlmICh3aWR0aCA8PSAwKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nOwotICAgIGlmIChmaWxlbmFtZXMuaXNFbXB0
eSgpKQotICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOwot
ICAgIGVsc2UgaWYgKGZpbGVuYW1lcy5zaXplKCkgPT0gMSkgewotICAgICAgICBTdHJpbmcgZm5h
bWUgPSBmaWxlbmFtZXNbMF07Ci0gICAgICAgIFFGb250TWV0cmljcyBmbShmb250LmZvbnQoKSk7
Ci0gICAgICAgIHN0cmluZyA9IGZtLmVsaWRlZFRleHQoZm5hbWUsIFF0OjpFbGlkZUxlZnQsIHdp
ZHRoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnQgbiA9IGZpbGVuYW1lcy5zaXplKCk7Ci0g
ICAgICAgIHN0cmluZyA9IFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYlBhZ2UiLCAi
JW4gZmlsZShzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAibnVtYmVyIG9mIGNob3NlbiBmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFFDb3JlQXBwbGljYXRpb246OkNvZGVjRm9yVHIsIG4pOwotICAgIH0K
LQotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMmJjMzE4NGQwYjdmNGY5MmUwNGFkY2Y0YjMwNDY5ZTAyOGQzMzJkYy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQg
KzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRh
dGlvbiBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgotICoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotI2lm
bmRlZiBSZW5kZXJUaGVtZVF0X2gKLSNkZWZpbmUgUmVuZGVyVGhlbWVRdF9oCi0KLSNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgotCi0jaW5jbHVkZSA8UVN0eWxlPgotCi1RVF9CRUdJTl9OQU1FU1BB
Q0UKLWNsYXNzIFFMaW5lRWRpdDsKLWNsYXNzIFFQYWludGVyOwotY2xhc3MgUVdpZGdldDsKLVFU
X0VORF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgRU5BQkxFKFBST0dS
RVNTX1RBRykKLWNsYXNzIFJlbmRlclByb2dyZXNzOwotI2VuZGlmCi1jbGFzcyBSZW5kZXJTdHls
ZTsKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7Ci1jbGFzcyBTY3JvbGxiYXJUaGVtZVF0OwotCi1j
bGFzcyBSZW5kZXJUaGVtZVF0IDogcHVibGljIFJlbmRlclRoZW1lIHsKLXByaXZhdGU6Ci0gICAg
UmVuZGVyVGhlbWVRdChQYWdlKiBwYWdlKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVF0KCk7
Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBh
Z2UqKTsKLQotICAgIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmpl
Y3QqIG8pIGNvbnN0OwotCi0gICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNo
YW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmly
dHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0
OwotCi0gICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGlu
ZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xU
aW50cygpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0
IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcik7Ci0KLSAgICAvLyBUaGUgcGxhdGZvcm0gc2Vs
ZWN0aW9uIGNvbG9yLgotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYp
IGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0OwotCi0gICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0
eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBi
YWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgdmly
dHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVk
aWFDb250cm9sc1N0eWxlU2hlZXQoKTsKLSNlbmRpZgotCi0gICAgUVN0eWxlKiBxU3R5bGUoKSBj
b25zdDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5k
ZXJTdHlsZSopIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxl
KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoUFJPR1JFU1Nf
VEFHKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJU
aHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0
aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotI2lmbmRlZiBRVF9OT19TUElOQk9YCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5l
clNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotICAgIC8vIFJldHVybnMg
dGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFy
LgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdDsKLSAgICAvLyBSZXR1cm5z
IHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFZJREVP
KQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vl
a0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNDdXJy
ZW50VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OwotICAgIHZp
cnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKGZsb2F0IGN1cnJl
bnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGhhc093bkRp
c2FibGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotcHJpdmF0ZToKLQotICAgIHZvaWQgcGFpbnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqIHBh
aW50ZXIsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0OwotICAgIGRvdWJsZSBtZWRpYUNvbnRyb2xz
QmFzZWxpbmVPcGFjaXR5KCkgY29uc3Q7Ci0gICAgUUNvbG9yIGdldE1lZGlhQ29udHJvbEZvcmVn
cm91bmRDb2xvcihSZW5kZXJPYmplY3QqIG8gPSAwKSBjb25zdDsKLSNlbmRpZgotICAgIHZvaWQg
Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBGb250JiwgaW50IHdpZHRoKTsKLQot
ICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCkgY29uc3Q7Ci0KLSAgICBDb250cm9s
UGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVPcHRpb24mLCBSZW5kZXJP
YmplY3QqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSop
IGNvbnN0OwotICAgIHZvaWQgc2V0UG9wdXBQYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0K
LSAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJikgY29u
c3Q7Ci0KLSAgICBpbnQgZmluZEZyYW1lTGluZVdpZHRoKFFTdHlsZSogc3R5bGUpIGNvbnN0Owot
Ci0gICAgUVN0eWxlKiBmYWxsYmFja1N0eWxlKCkgY29uc3Q7Ci0KLSAgICBJbnRSZWN0IGNvbnZl
cnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRl
ck9iamVjdCogcGFydFJlbmRlcmVyLCBJbnRSZWN0IHBhcnRSZWN0LCBjb25zdCBJbnRSZWN0JiBs
b2NhbE9mZnNldCkgY29uc3Q7Ci0KLSAgICBQYWdlKiBtX3BhZ2U7Ci0KLSNpZmRlZiBRX1dTX01B
QwotICAgIGludCBtX2J1dHRvbkZvbnRQaXhlbFNpemU7Ci0jZW5kaWYKLSAgICBRU3RyaW5nIG1f
YnV0dG9uRm9udEZhbWlseTsKLQotICAgIFFTdHlsZSogbV9mYWxsYmFja1N0eWxlOwotICAgIG11
dGFibGUgUUxpbmVFZGl0KiBtX2xpbmVFZGl0OwotfTsKLQotY2xhc3MgU3R5bGVQYWludGVyIHsK
LXB1YmxpYzoKLSAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVRdCosIGNvbnN0
IFBhaW50SW5mbyYpOwotICAgIGV4cGxpY2l0IFN0eWxlUGFpbnRlcihTY3JvbGxiYXJUaGVtZVF0
KiwgR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgflN0eWxlUGFpbnRlcigpOwotCi0gICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gcGFpbnRlciAmJiBzdHlsZTsgfQotCi0gICAgUVBhaW50
ZXIqIHBhaW50ZXI7Ci0gICAgUVdpZGdldCogd2lkZ2V0OwotICAgIFFTdHlsZSogc3R5bGU7Ci0K
LSAgICB2b2lkIGRyYXdQcmltaXRpdmUoUVN0eWxlOjpQcmltaXRpdmVFbGVtZW50IHBlLCBjb25z
dCBRU3R5bGVPcHRpb24mIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3UHJpbWl0aXZlKHBlLCAmb3B0
LCBwYWludGVyLCB3aWRnZXQpOyB9Ci0gICAgdm9pZCBkcmF3Q29udHJvbChRU3R5bGU6OkNvbnRy
b2xFbGVtZW50IGNlLCBjb25zdCBRU3R5bGVPcHRpb24mIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3
Q29udHJvbChjZSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQotICAgIHZvaWQgZHJhd0NvbXBs
ZXhDb250cm9sKFFTdHlsZTo6Q29tcGxleENvbnRyb2wgY2MsIGNvbnN0IFFTdHlsZU9wdGlvbkNv
bXBsZXgmIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woY2MsICZvcHQsIHBh
aW50ZXIsIHdpZGdldCk7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBRU3R5bGUqKTsKLQotICAgIFFCcnVzaCBvbGRCcnVzaDsKLSAgICBib29s
IG9sZEFudGlhbGlhc2luZzsKLQotICAgIFFfRElTQUJMRV9DT1BZKFN0eWxlUGFpbnRlcikKLX07
Ci0KLX0KLQotI2VuZGlmIC8vIFJlbmRlclRoZW1lUXRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNzVhMzA0
NzExNzY3ODVjNGEyYzk4MzMxOTQ0OTdlZTUzNjNmMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKQEAgLTAsMCAr
MSwxMzcxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0
LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5k
ZXJUaGVtZVF0TW9iaWxlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2lu
Y2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRl
ICJDaHJvbWVDbGllbnRRdC5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVu
dC5oIgorCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2lmIEVOQUJMRShWSURFTykK
KyNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2VuZGlmCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgi
CisjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJxd2Vic2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorI2luY2x1
ZGUgIlJlbmRlclByb2dyZXNzLmgiCisjZW5kaWYKKyNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlNsaWRlclRodW1iRWxlbWVudC5o
IgorI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKKyNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0
cy5oIgorCisjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFDb2xvcj4KKyNpbmNs
dWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFGb250
TWV0cmljcz4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUGl4bWFwQ2FjaGU+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworLy8g
VGhlc2UgdmFsdWVzIGFsbCBtYXRjaCBTYWZhcmkvV2luL0Nocm9taXVtCitzdGF0aWMgY29uc3Qg
ZmxvYXQgZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplID0gMTM7CitzdGF0aWMgY29uc3QgZmxv
YXQgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgPSA5Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pbkNh
bmNlbEJ1dHRvblNpemUgPSA1Oworc3RhdGljIGNvbnN0IGZsb2F0IG1heENhbmNlbEJ1dHRvblNp
emUgPSAyMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblNpemUgPSAxMzsKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5TZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU2l6ZSA9IDk7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblNpemUgPSAzMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggPSAxODsKKworbmFtZXNwYWNlIHsKKyAgICBmbG9h
dCBidXR0b25QYWRkaW5nTGVmdCA9IDE4OworICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdSaWdodCA9
IDE4OworICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdUb3AgPSAyOworICAgIGZsb2F0IGJ1dHRvblBh
ZGRpbmdCb3R0b20gPSAzOworICAgIGZsb2F0IG1lbnVMaXN0UGFkZGluZyA9IDk7CisgICAgZmxv
YXQgdGV4dEZpZWxkUGFkZGluZyA9IDU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UmVj
dGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVBlbiYg
cGVuLCBjb25zdCBRUmVjdCYgcmVjdCwgY29uc3QgUUJydXNoJiBicnVzaCkKK3sKKyAgICBRUGVu
IG9sZFBlbiA9IHBhaW50ZXItPnBlbigpOworICAgIFFCcnVzaCBvbGRCcnVzaCA9IHBhaW50ZXIt
PmJydXNoKCk7CisgICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFz
aW5nLCB0cnVlKTsKKyAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKKyAgICBwYWludGVyLT5zZXRC
cnVzaChicnVzaCk7CisKKyAgICBpbnQgbGluZSA9IDE7CisgICAgcGFpbnRlci0+ZHJhd1JvdW5k
ZWRSZWN0KHJlY3QuYWRqdXN0ZWQobGluZSwgbGluZSwgLWxpbmUsIC1saW5lKSwKKyAgICAgICAg
ICAgIC8qIHhSYWRpdXMgKi8gNS4wLCAvKiB5UmFkaW91cyAqLyA1LjApOworICAgIHBhaW50ZXIt
PnNldFBlbihvbGRQZW4pOworICAgIHBhaW50ZXItPnNldEJydXNoKG9sZEJydXNoKTsKK30KKwor
dm9pZCBTdHlsZVBhaW50ZXI6OmRyYXdDaGVja2VyKFFQYWludGVyKiBwYWludGVyLCBpbnQgc2l6
ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAoreworICAgIGludCBib3JkZXIgPSBxTWluKHFNYXgoMSwg
aW50KDAuMiAqIHNpemUpKSwgNik7CisgICAgaW50IGNoZWNrZXJTaXplID0gcU1heChzaXplIC0g
MiAqIGJvcmRlciwgMyk7CisgICAgaW50IHdpZHRoID0gY2hlY2tlclNpemUgLyAzOworICAgIGlu
dCBtaWRkbGUgPSBxTWF4KDMgKiBjaGVja2VyU2l6ZSAvIDcsIDMpOworICAgIGludCB4ID0gKChz
aXplIC0gY2hlY2tlclNpemUpID4+IDEpOworICAgIGludCB5ID0gKChzaXplIC0gY2hlY2tlclNp
emUpID4+IDEpICsgKGNoZWNrZXJTaXplIC0gd2lkdGggLSBtaWRkbGUpOworICAgIFFWZWN0b3I8
UUxpbmVGPiBsaW5lcyhjaGVja2VyU2l6ZSArIDEpOworICAgIHBhaW50ZXItPnNldFBlbihjb2xv
cik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaWRkbGU7ICsraSkgeworICAgICAgICBsaW5l
c1tpXSA9IFFMaW5lRih4LCB5LCB4LCB5ICsgd2lkdGgpOworICAgICAgICArK3g7CisgICAgICAg
ICsreTsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IG1pZGRsZTsgaSA8PSBjaGVja2VyU2l6ZTsg
KytpKSB7CisgICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgsIHksIHgsIHkgKyB3aWR0aCk7Cisg
ICAgICAgICsreDsKKyAgICAgICAgLS15OworICAgIH0KKyAgICBwYWludGVyLT5kcmF3TGluZXMo
bGluZXMuY29uc3REYXRhKCksIGxpbmVzLnNpemUoKSk7Cit9CisKK1FQaXhtYXAgU3R5bGVQYWlu
dGVyOjpmaW5kQ2hlY2tlcihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBkaXNhYmxlZCkgY29uc3QK
K3sKKyAgICBpbnQgc2l6ZSA9IHFNaW4ocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAg
ICBRUGl4bWFwIHJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0
aW4xU3RyaW5nKCIkcXQtbWFlbW81LW1vYmlsZS10aGVtZS1jaGVja2VyLSIpOworICAgIFFTdHJp
bmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUpICsgUUxhdGluMVN0cmluZygi
LSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFTdHJp
bmcoImVuYWJsZWQiKSk7CisgICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQp
KSB7CisgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSwgc2l6ZSk7CisgICAgICAgIHJlc3Vs
dC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3Vs
dCk7CisgICAgICAgIGRyYXdDaGVja2VyKCZwYWludGVyLCBzaXplLCBkaXNhYmxlZCA/IFF0Ojps
aWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOworICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChr
ZXksIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU3R5bGVQ
YWludGVyOjpkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBi
b29sIGNoZWNrZWQsIFFDb2xvciBjb2xvcikgY29uc3QKK3sKKyAgICBwYWludGVyLT5zZXRSZW5k
ZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworCisgICAgLy8gZ2V0IG1pbm9y
IHNpemUgdG8gZG8gbm90IHBhaW50IGEgd2lkZSBlbGlwc2UKKyAgICBxcmVhbCBzcXVhcmVTaXpl
ID0gcU1pbihzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgIC8vIGRlZmxhdGUgb25l
IHBpeGVsCisgICAgUVJlY3QgcmVjdCA9IFFSZWN0KFFQb2ludCgxLCAxKSwgUVNpemUoc3F1YXJl
U2l6ZSAtIDIsIHNxdWFyZVNpemUgLSAyKSk7CisgICAgY29uc3QgUVBvaW50IGNlbnRlckdyYWRp
ZW50KHJlY3QuYm90dG9tUmlnaHQoKSAqIDAuNyk7CisKKyAgICBRUmFkaWFsR3JhZGllbnQgcmFk
aWFsR3JhZGllbnQoY2VudGVyR3JhZGllbnQsIGNlbnRlckdyYWRpZW50LngoKSAtIDEpOworICAg
IHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6d2hpdGUpOworICAgIHJhZGlhbEdy
YWRpZW50LnNldENvbG9yQXQoMC42LCBRdDo6d2hpdGUpOworICAgIHJhZGlhbEdyYWRpZW50LnNl
dENvbG9yQXQoMS4wLCBjb2xvcik7CisKKyAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOworICAg
IHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKKyAgICBwYWludGVyLT5kcmF3RWxsaXBzZShyZWN0
KTsKKyAgICBwYWludGVyLT5zZXRCcnVzaChyYWRpYWxHcmFkaWVudCk7CisgICAgcGFpbnRlci0+
ZHJhd0VsbGlwc2UocmVjdCk7CisKKyAgICBpbnQgYm9yZGVyID0gMC4xICogKHJlY3Qud2lkdGgo
KSArIHJlY3QuaGVpZ2h0KCkpOworICAgIGJvcmRlciA9IHFNaW4ocU1heCgyLCBib3JkZXIpLCAx
MCk7CisgICAgcmVjdC5hZGp1c3QoYm9yZGVyLCBib3JkZXIsIC1ib3JkZXIsIC1ib3JkZXIpOwor
ICAgIGlmIChjaGVja2VkKSB7CisgICAgICAgIHBhaW50ZXItPnNldFBlbihRdDo6Tm9QZW4pOwor
ICAgICAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7CisgICAgICAgIHBhaW50ZXItPmRyYXdF
bGxpcHNlKHJlY3QpOworICAgIH0KK30KKworUVBpeG1hcCBTdHlsZVBhaW50ZXI6OmZpbmRSYWRp
byhjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBib29sIGRpc2FibGVkKSBjb25zdAor
eworICAgIFFQaXhtYXAgcmVzdWx0OworICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9
IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtbW9iaWxlLXRoZW1lLXJhZGlvLSIpOworICAgIFFT
dHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgoKSkgKyBRTGF0
aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWlnaHQoKSkgKyBRTGF0aW4x
U3RyaW5nKCItIikKKyAgICAgICAgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxl
ZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKSArIChjaGVja2VkID8gUUxhdGluMVN0cmlu
ZygiLWNoZWNrZWQiKSA6IFFMYXRpbjFTdHJpbmcoIiIpKTsKKyAgICBpZiAoIVFQaXhtYXBDYWNo
ZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplKTsK
KyAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgUVBhaW50ZXIg
cGFpbnRlcigmcmVzdWx0KTsKKyAgICAgICAgZHJhd1JhZGlvKCZwYWludGVyLCBzaXplLCBjaGVj
a2VkLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOworICAgICAgICBR
UGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjpkcmF3TXVsdGlwbGVDb21ib0J1dHRvbihRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIFFDb2xvciBjb2xvcikgY29uc3QKK3sK
KyAgICBpbnQgcmVjdFdpZHRoID0gc2l6ZS53aWR0aCgpIC0gMTsKKyAgICBpbnQgd2lkdGggPSBx
TWF4KDIsIHJlY3RXaWR0aCA+PiAzKTsKKyAgICBpbnQgZGlzdGFuY2UgPSAocmVjdFdpZHRoIC0g
MyAqIHdpZHRoKSA+PiAxOworICAgIGludCB0b3AgPSAoc2l6ZS5oZWlnaHQoKSAtIHdpZHRoKSA+
PiAxOworCisgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKKyAgICBwYWludGVyLT5zZXRCcnVz
aChjb2xvcik7CisKKyAgICBwYWludGVyLT5kcmF3UmVjdCgwLCB0b3AsIHdpZHRoLCB3aWR0aCk7
CisgICAgcGFpbnRlci0+ZHJhd1JlY3Qod2lkdGggKyBkaXN0YW5jZSwgdG9wLCB3aWR0aCwgd2lk
dGgpOworICAgIHBhaW50ZXItPmRyYXdSZWN0KDIgKiAod2lkdGggKyBkaXN0YW5jZSksIHRvcCwg
d2lkdGgsIHdpZHRoKTsKK30KKwordm9pZCBTdHlsZVBhaW50ZXI6OmRyYXdTaW1wbGVDb21ib0J1
dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIFFDb2xvciBjb2xvcikg
Y29uc3QKK3sKKyAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgaW50IG1pZGxlID0g
d2lkdGggPj4gMTsKKyAgICBRVmVjdG9yPFFMaW5lPiBsaW5lcyh3aWR0aCArIDEpOworCisgICAg
Zm9yIChpbnQgeCA9IDAsIHkgPSAwOyAgeCA8IG1pZGxlOyB4KyssIHkrKykgeworICAgICAgICBs
aW5lc1t4XSA9IFFMaW5lKHgsIHksIHgsIHkgKyAyKTsKKyAgICAgICAgbGluZXNbeCArIG1pZGxl
XSA9IFFMaW5lKHdpZHRoIC0geCAtIDEsIHksIHdpZHRoIC0geCAtIDEsIHkgKyAyKTsKKyAgICB9
CisgICAgLy8gSnVzdCB0byBlbnN1cmUgdGhlIGxpbmVzJyBpbnRlcnNlY3Rpb24uCisgICAgbGlu
ZXNbd2lkdGhdID0gUUxpbmUobWlkbGUsIG1pZGxlLCBtaWRsZSwgbWlkbGUgKyAyKTsKKworICAg
IHBhaW50ZXItPnNldFBlbihjb2xvcik7CisgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOwor
ICAgIHBhaW50ZXItPmRyYXdMaW5lcyhsaW5lcyk7Cit9CisKK1FTaXplIFN0eWxlUGFpbnRlcjo6
Z2V0QnV0dG9uSW1hZ2VTaXplKGNvbnN0IFFTaXplJiBidXR0b25TaXplKSBjb25zdAoreworICAg
IGNvbnN0IGludCBib3JkZXIgPSBxTWF4KDMsIGJ1dHRvblNpemUud2lkdGgoKSA+PiAzKSA8PCAx
OworCisgICAgaW50IHdpZHRoID0gYnV0dG9uU2l6ZS53aWR0aCgpIC0gYm9yZGVyOworICAgIGlu
dCBoZWlnaHQgPSBidXR0b25TaXplLmhlaWdodCgpIC0gYm9yZGVyOworCisgICAgaWYgKHdpZHRo
IDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICByZXR1cm4gUVNpemUoKTsKKworICAgIGlmICho
ZWlnaHQgPj0gKHdpZHRoID4+IDEpKQorICAgICAgICB3aWR0aCA9IHdpZHRoID4+IDEgPDwgMTsK
KyAgICBlbHNlCisgICAgICAgIHdpZHRoID0gaGVpZ2h0IDw8IDE7CisKKyAgICByZXR1cm4gUVNp
emUod2lkdGggKyAxLCB3aWR0aCk7Cit9CisKK1FQaXhtYXAgU3R5bGVQYWludGVyOjpmaW5kQ29t
Ym9CdXR0b24oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZGlzYWJsZWQp
IGNvbnN0Cit7CisgICAgUVBpeG1hcCByZXN1bHQ7CisgICAgUVNpemUgaW1hZ2VTaXplID0gZ2V0
QnV0dG9uSW1hZ2VTaXplKHNpemUpOworCisgICAgaWYgKGltYWdlU2l6ZS5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIFFQaXhtYXAoKTsKKyAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXgg
PSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFlbW81LW1vYmlsZS10aGVtZS1jb21iby0iKTsKKyAgICBR
U3RyaW5nIGtleSA9IHByZWZpeCArIChtdWx0aXBsZSA/IFFMYXRpbjFTdHJpbmcoIm11bHRpcGxl
LSIpIDogUUxhdGluMVN0cmluZygic2ltcGxlLSIpKQorICAgICAgICArIFFTdHJpbmc6Om51bWJl
cihpbWFnZVNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1i
ZXIoaW1hZ2VTaXplLmhlaWdodCgpKQorICAgICAgICArIFFMYXRpbjFTdHJpbmcoIi0iKSArIChk
aXNhYmxlZCA/IFFMYXRpbjFTdHJpbmcoImRpc2FibGVkIikgOiBRTGF0aW4xU3RyaW5nKCJlbmFi
bGVkIikpOworICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAg
ICAgICByZXN1bHQgPSBRUGl4bWFwKGltYWdlU2l6ZSk7CisgICAgICAgIHJlc3VsdC5maWxsKFF0
Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7CisgICAg
ICAgIGlmIChtdWx0aXBsZSkKKyAgICAgICAgICAgIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKCZw
YWludGVyLCBpbWFnZVNpemUsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3Jh
eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRyYXdTaW1wbGVDb21ib0J1dHRvbigmcGFp
bnRlciwgaW1hZ2VTaXplLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkp
OworICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1N0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKFJlbmRlclRo
ZW1lUXRNb2JpbGUqIHRoZW1lLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKK3sKKyAgICBR
X1VOVVNFRCh0aGVtZSk7CisgICAgaW5pdChwYWludEluZm8uY29udGV4dCA/IHBhaW50SW5mby5j
b250ZXh0IDogMCk7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjppbml0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBwYWludGVyID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisKKyAgICBpZiAocGFpbnRlcikgeworICAgICAgICAv
LyB0aGUgc3R5bGVzIG9mdGVuIGFzc3VtZSBiZWluZyBjYWxsZWQgd2l0aCBhIHByaXN0aW5lIHBh
aW50ZXIgd2hlcmUgbm8gYnJ1c2ggaXMgc2V0LAorICAgICAgICAvLyBzbyByZXNldCBpdCBtYW51
YWxseQorICAgICAgICBvbGRCcnVzaCA9IHBhaW50ZXItPmJydXNoKCk7CisgICAgICAgIHBhaW50
ZXItPnNldEJydXNoKFF0OjpOb0JydXNoKTsKKworICAgICAgICAvLyBwYWludGluZyB0aGUgd2lk
Z2V0IHdpdGggYW50aS1hbGlhc2luZyB3aWxsIG1ha2UgaXQgYmx1cnJ5CisgICAgICAgIC8vIGRp
c2FibGUgaXQgaGVyZSBhbmQgcmVzdG9yZSBpdCBsYXRlcgorICAgICAgICBvbGRBbnRpYWxpYXNp
bmcgPSBwYWludGVyLT50ZXN0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nKTsKKyAg
ICAgICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBmYWxz
ZSk7CisgICAgfQorfQorCitTdHlsZVBhaW50ZXI6On5TdHlsZVBhaW50ZXIoKQoreworICAgIGlm
IChwYWludGVyKSB7CisgICAgICAgIHBhaW50ZXItPnNldEJydXNoKG9sZEJydXNoKTsKKyAgICAg
ICAgcGFpbnRlci0+c2V0UmVuZGVySGludHMoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgb2xkQW50
aWFsaWFzaW5nKTsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjpkcmF3TGluZUVkaXQo
Y29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQpCit7CisgICAgY29u
c3QgYm9vbCBkaXNhYmxlZCA9ICFlbmFibGVkOworICAgIFFQZW4gcGVuKFF0OjpkYXJrR3JheSwg
MS4wLCBRdDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpvaW4pOworICAgIHBh
aW50ZXItPnNldFBlbihwZW4pOworCisgICAgaWYgKHN1bmtlbikgeworICAgICAgICBkcmF3UmVj
dGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIFFCcnVzaChRdDo6
ZGFya0dyYXkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFFMaW5lYXJHcmFkaWVu
dCBsaW5lYXJHcmFkaWVudDsKKyAgICBpZiAoZGlzYWJsZWQpIHsKKyAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0U3RhcnQocmVjdC50b3BMZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRGaW5hbFN0b3AocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDAuMCwgUXQ6OmxpZ2h0R3JheSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNl
dENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldFN0YXJ0KHJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0RmluYWxTdG9wKFFQb2ludChyZWN0LnRvcExlZnQoKS54KCksCisgICAgICAgICAgICAgICAg
ICAgIHJlY3QudG9wTGVmdCgpLnkoKSArIC8qIG9mZnNldCBsaW1pdCBmb3IgZ3JhZGllbnQgKi8g
MjApKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpkYXJrR3Jh
eSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4zNSwgUXQ6OndoaXRlKTsK
KyAgICB9CisKKyAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBw
ZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsKK30KKwordm9pZCBTdHlsZVBhaW50ZXI6OmRyYXdD
aGVja0JveChjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpCit7
CisgICAgY29uc3QgYm9vbCBkaXNhYmxlZCA9ICFlbmFibGVkOworCisgICAgUUxpbmVhckdyYWRp
ZW50IGxpbmVhckdyYWRpZW50KHJlY3QudG9wTGVmdCgpLCByZWN0LmJvdHRvbUxlZnQoKSk7Cisg
ICAgaWYgKGRpc2FibGVkKSB7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4w
LCBRdDo6bGlnaHRHcmF5KTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjUs
IFF0Ojp3aGl0ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29s
b3JBdCgwLjAsIFF0OjpkYXJrR3JheSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9y
QXQoMC41LCBRdDo6d2hpdGUpOworICAgIH0KKworICAgIHBhaW50ZXItPnNldFBlbihRUGVuKGRp
c2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSkpOworICAgIHBhaW50ZXItPnNl
dEJydXNoKGxpbmVhckdyYWRpZW50KTsKKyAgICBwYWludGVyLT5kcmF3UmVjdChyZWN0KTsKKyAg
ICBjb25zdCBRUmVjdCByID0gcmVjdC5hZGp1c3RlZCgxLCAxLCAtMSwgLTEpOworCisgICAgaWYg
KCFjaGVja2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGl4bWFwIGNoZWNrZXIgPSBmaW5k
Q2hlY2tlcihyLCBkaXNhYmxlZCk7CisgICAgaWYgKGNoZWNrZXIuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGludCB4ID0gKHIud2lkdGgoKSAtIGNoZWNrZXIud2lkdGgoKSkgPj4g
MTsKKyAgICBpbnQgeSA9IChyLmhlaWdodCgpIC0gY2hlY2tlci5oZWlnaHQoKSkgPj4gMTsKKyAg
ICBwYWludGVyLT5kcmF3UGl4bWFwKHIueCgpICsgeCwgci55KCkgKyB5LCBjaGVja2VyKTsKK30K
Kwordm9pZCBTdHlsZVBhaW50ZXI6OmRyYXdSYWRpb0J1dHRvbihjb25zdCBRUmVjdCYgcmVjdCwg
Ym9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpCit7CisgICAgUVBpeG1hcCByYWRpbyA9IGZpbmRS
YWRpbyhyZWN0LnNpemUoKSwgY2hlY2tlZCwgIWVuYWJsZWQpOworICAgIGlmIChyYWRpby5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdC54KCks
IHJlY3QueSgpLCByYWRpbyk7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjpkcmF3UHVzaEJ1dHRv
bihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBzdW5rZW4sIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBR
UGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBR
dDo6Um91bmRKb2luKTsKKyAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKKworICAgIGlmIChzdW5r
ZW4pIHsKKyAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwg
cGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtHcmF5KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQ7CisgICAgaWYgKCFlbmFibGVk
KSB7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsK
KyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKHJlY3QudG9wTGVmdCgpKTsKKyAg
ICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKKyAgICAgICAg
bGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAg
ICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QuYm90dG9tTGVmdCgp
LngoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVjdC5ib3R0b21MZWZ0KCkueSgpIC0gLyogb2Zm
c2V0IGxpbWl0IGZvciBncmFkaWVudCAqLyAyMCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xv
ckF0KDAuNCwgUXQ6OndoaXRlKTsKKyAgICB9CisKKyAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9s
QmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsKK30KKwordm9p
ZCBTdHlsZVBhaW50ZXI6OmRyYXdDb21ib0JveChjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBtdWx0
aXBsZSwgYm9vbCBlbmFibGVkKQoreworICAgIFFQZW4gcGVuKFF0OjpkYXJrR3JheSwgMS4wLCBR
dDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpvaW4pOworICAgIFFMaW5lYXJH
cmFkaWVudCBsaW5lYXJHcmFkaWVudDsKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAgICAgICAgbGlu
ZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDEuMCwgUXQ6OndoaXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldEZpbmFsU3RvcChRUG9pbnQocmVjdC5ib3R0b21MZWZ0KCkueCgpLAorICAgICAgICAg
ICAgICAgICAgICByZWN0LmJvdHRvbUxlZnQoKS55KCkgLSAvKiBvZmZzZXQgbGltaXQgZm9yIGdy
YWRpZW50ICovIDIwKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBR
dDo6Z3JheSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC40LCBRdDo6d2hp
dGUpOworICAgIH0KKworICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50
ZXIsIHBlbiwgcmVjdCwgbGluZWFyR3JhZGllbnQpOworCisgICAgLy8gQ29uc3RhbnRzIGV4dHJh
Y3RlZCBmcm9tIFFDb21tb25TdHlsZTo6c3ViQ29udHJvbFJlY3QuCisgICAgY29uc3QgaW50IGFy
cm93Qm94V2lkdGggPSAxNjsKKyAgICBjb25zdCBpbnQgZnJhbWVXaWR0aCA9IDI7CisgICAgY29u
c3QgUVJlY3QgcihyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIGZyYW1lV2lkdGggLSBhcnJvd0Jv
eFdpZHRoLCByZWN0LnkoKSArIGZyYW1lV2lkdGgKKyAgICAgICAgICAgICAgICAgICAsIGFycm93
Qm94V2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSAyICogZnJhbWVXaWR0aCk7CisgICAgUVBpeG1hcCBw
aWMgPSBmaW5kQ29tYm9CdXR0b24oci5zaXplKCksIG11bHRpcGxlLCAhZW5hYmxlZCk7CisKKyAg
ICBpZiAocGljLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgeCA9IChyLndp
ZHRoKCkgLSBwaWMud2lkdGgoKSkgPj4gMTsKKyAgICBpbnQgeSA9IChyLmhlaWdodCgpIC0gcGlj
LmhlaWdodCgpKSA+PiAxOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAoci54KCkgKyB4LCByLnko
KSArIHksIHBpYyk7CisKKyAgICBwYWludGVyLT5zZXRQZW4oZW5hYmxlZCA/IFF0OjpkYXJrR3Jh
eSA6IFF0OjpncmF5KTsKKyAgICBwYWludGVyLT5kcmF3TGluZShyLmxlZnQoKSAtIDIsIHIudG9w
KCkgKyAyLCByLmxlZnQoKSAtIDIsIHIuYm90dG9tKCkgLSAyKTsKK30KKworCitQYXNzUmVmUHRy
PFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjcmVhdGUoUGFnZSogcGFnZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lUXRNb2JpbGUocGFnZSkpOworfQor
CitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2Uq
IHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZVF0TW9i
aWxlOjpjcmVhdGUocGFnZSk7CisKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIGZhbGxiYWNrID0g
UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y3JlYXRlKDApLnJlbGVhc2VSZWYoKTsKKyAgICByZXR1cm4g
ZmFsbGJhY2s7Cit9CisKK1JlbmRlclRoZW1lUXRNb2JpbGU6OlJlbmRlclRoZW1lUXRNb2JpbGUo
UGFnZSogcGFnZSkKKyAgICA6IFJlbmRlclRoZW1lKCkKKyAgICAsIG1fcGFnZShwYWdlKQorewor
ICAgIG1fYnV0dG9uRm9udEZhbWlseSA9IFFBcHBsaWNhdGlvbjo6Zm9udCgpLmZhbWlseSgpOwor
fQorCitSZW5kZXJUaGVtZVF0TW9iaWxlOjp+UmVuZGVyVGhlbWVRdE1vYmlsZSgpCit7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGZp
bGwsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChz
dHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNl
IEJ1dHRvblBhcnQ6CisgICAgY2FzZSBNZW51bGlzdFBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVs
ZFBhcnQ6CisgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEFyZWFQYXJ0Ogor
ICAgICAgICAvLyBUZXN0IHRoZSBzdHlsZSB0byBzZWUgaWYgdGhlIFVBIGJvcmRlciBhbmQgYmFj
a2dyb3VuZCBtYXRjaC4KKyAgICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVy
CisgICAgICAgICAgICAgICAgfHwgKnN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gZmlsbAor
ICAgICAgICAgICAgICAgIHx8IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcik7CisgICAgY2FzZSBDaGVja2Jv
eFBhcnQ6CisgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHls
ZSwgYm9yZGVyLCBmaWxsLCBiYWNrZ3JvdW5kQ29sb3IpOworICAgIH0KK30KKworaW50IFJlbmRl
clRoZW1lUXRNb2JpbGU6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9i
aWxlOjpzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzdXBwb3J0c0ZvY3VzUmlu
Zyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChzdHlsZS0+
YXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgY2FzZSBSYWRpb1Bh
cnQ6CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6
CisgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uQmV2ZWxQYXJ0OgorICAgIGNh
c2UgTGlzdGJveFBhcnQ6CisgICAgY2FzZSBMaXN0SXRlbVBhcnQ6CisgICAgY2FzZSBNZW51bGlz
dFBhcnQ6CisgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6CisgICAgY2FzZSBTbGlkZXJIb3Jp
em9udGFsUGFydDoKKyAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFydDoKKyAgICBjYXNlIFNsaWRl
clRodW1iSG9yaXpvbnRhbFBhcnQ6CisgICAgY2FzZSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydDoK
KyAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKKyAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6CisgICAgY2Fz
ZSBUZXh0RmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitp
bnQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmpl
Y3QqIG8pIGNvbnN0Cit7CisgICAgaWYgKCFvLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IG8t
PnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpCisgICAgICAgIHJldHVybiB0b1Jl
bmRlckJveChvKS0+bWFyZ2luVG9wKCkgKyB0b1JlbmRlckJveChvKS0+aGVpZ2h0KCkgLSAyOyAv
LyBTYW1lIGFzIGluIG9sZCBraHRtbAorICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQ
b3NpdGlvbihvKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjb250cm9sU3VwcG9y
dHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgaWYgKCFpc0VuYWJs
ZWQobykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrYm94ZXMgb25seSBo
YXZlIHRpbnQgd2hlbiBjaGVja2VkLgorICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkg
PT0gQ2hlY2tib3hQYXJ0KQorICAgICAgICByZXR1cm4gaXNDaGVja2VkKG8pOworCisgICAgLy8g
Rm9yIG5vdyBhc3N1bWUgb3RoZXIgY29udHJvbHMgaGF2ZSB0aW50IGlmIGVuYWJsZWQuCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c3VwcG9ydHNDb250
cm9sVGludHMoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitDb2xvciBSZW5kZXJU
aGVtZVF0TW9iaWxlOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0Cit7CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAg
c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFsLmJy
dXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7Cit9CisK
K0NvbG9yIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbCA9IFFBcHBsaWNhdGlvbjo6
cGFsZXR0ZSgpOworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKHBhbCk7Cisg
ICAgcmV0dXJuIHBhbC5icnVzaChRUGFsZXR0ZTo6SW5hY3RpdmUsIFFQYWxldHRlOjpIaWdobGln
aHQpLmNvbG9yKCk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBsYXRmb3JtQWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBRUGFsZXR0ZSBwYWwg
PSBRQXBwbGljYXRpb246OnBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJ
ZkV4aXN0cyhwYWwpOworICAgIHJldHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwgUVBh
bGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0
Cit7CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0
UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFsLmJydXNo
KFFQYWxldHRlOjpJbmFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKTsK
K30KKworQ29sb3IgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigp
IGNvbnN0Cit7CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7Cisg
ICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFs
LmJydXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c3lzdGVtRm9udChpbnQsIEZvbnREZXNjcmlw
dGlvbiYpIGNvbnN0Cit7CisgICAgLy8gbm8tb3AKK30KKworQ29sb3IgUmVuZGVyVGhlbWVRdE1v
YmlsZTo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Cit7CisgICAgUVBhbGV0dGUg
cGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7
CisgICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6CisgICAgICAgIHJldHVybiBwYWwuYnJ1c2go
UVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OkJ1dHRvblRleHQpLmNvbG9yKCk7CisgICAgY2Fz
ZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgorICAgICAgICByZXR1cm4gcGFsLmJydXNoKFFQYWxldHRl
OjpBY3RpdmUsIFFQYWxldHRlOjpUZXh0KS5jb2xvcigpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7CisgICAgfQorfQor
CitpbnQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0Cit7CisgICAgY29uc3QgUUZvbnRNZXRyaWNzICZmbSA9IFFBcHBsaWNhdGlvbjo6
Zm9udE1ldHJpY3MoKTsKKyAgICByZXR1cm4gZm0ud2lkdGgoUUxhdGluMUNoYXIoJ3gnKSk7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAoreworICAgIFFTaXplIHNpemUoMCwgMCk7Cisg
ICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5mb250KCkuZm9udCgpKTsKKwor
ICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgVGV4dEFy
ZWFQYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFy
dDogeworICAgICAgICBpbnQgcGFkZGluZyA9IGZpbmRGcmFtZUxpbmVXaWR0aCgpOworICAgICAg
ICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Cisg
ICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVk
KSk7CisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBG
aXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFk
ZGluZywgRml4ZWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90
aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghcmVuZGVy
U3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdo
dCgpLmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxl
LT5hcHBlYXJhbmNlKCkpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICAvLyBF
eHRyYWN0ZWQgZnJvbSBRQ29tbW9uU3R5bGUuCisgICAgICAgIGludCBjaGVja0JveFdpZHRoID0g
MTM7CisgICAgICAgIGNoZWNrQm94V2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20o
KTsKKyAgICAgICAgc2l6ZSA9IFFTaXplKGNoZWNrQm94V2lkdGgsIGNoZWNrQm94V2lkdGgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBSYWRpb1BhcnQ6IHsKKyAgICAgICAgLy8g
RXh0cmFjdGVkIGZyb20gUUNvbW1vblN0eWxlLgorICAgICAgICBpbnQgcmFkaW9XaWR0aCA9IDEy
OworICAgICAgICByYWRpb1dpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7Cisg
ICAgICAgIHNpemUgPSBRU2l6ZShyYWRpb1dpZHRoLCByYWRpb1dpZHRoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8v
IEZJWE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgv
bWF4LXdpZHRoIGludG8gYWNjb3VudC4KKyAgICBpZiAocmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAwKQorICAgICAgICByZW5kZXJTdHls
ZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBpZiAocmVu
ZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQorICAgICAg
ICByZW5kZXJTdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkp
OworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OnNldENoZWNrYm94U2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUp
OworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50Q2hlY2tib3goUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0
dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6
OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBh
aW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworfQorCit2b2lkIFJl
bmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIERp
dGNoIHRoZSBib3JkZXIuCisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisKKyAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKKworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKKworICAgIHN0eWxl
LT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBz
ZXRCdXR0b25TaXplKHN0eWxlKTsKKyAgICBzZXRCdXR0b25QYWRkaW5nKHN0eWxlKTsKK30KKwor
dm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK3sKKyAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Cit9CisKKwor
dm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm47CisgICAgc3R5
bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChidXR0b25QYWRkaW5nTGVmdCwgRml4ZWQpKTsKKyAg
ICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChidXR0b25QYWRkaW5nUmlnaHQsIEZpeGVk
KSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKGJ1dHRvblBhZGRpbmdUb3AsIEZp
eGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKGJ1dHRvblBhZGRpbmdC
b3R0b20sIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkK
KyAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBvLT5z
dHlsZSgpLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBh
cnQgfHwgYXBwZWFyYW5jZSA9PSBCdXR0b25QYXJ0KSB7CisgICAgICAgIHAuZHJhd1B1c2hCdXR0
b24ociwgaXNQcmVzc2VkKG8pKTsKKyAgICB9IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gUmFkaW9Q
YXJ0KQorICAgICAgIHAuZHJhd1JhZGlvQnV0dG9uKHIsIGlzQ2hlY2tlZChvKSk7CisgICAgZWxz
ZSBpZiAoYXBwZWFyYW5jZSA9PSBDaGVja2JveFBhcnQpCisgICAgICAgcC5kcmF3Q2hlY2tCb3go
ciwgaXNDaGVja2VkKG8pKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICAvLyBSZXNldHRpbmcgdGhl
IHN0eWxlIGxpa2UgdGhpcyBsZWFkcyB0byBkaWZmZXJlbmNlcyBsaWtlOgorICAgIC8vIC0gUmVu
ZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2OHgyNSBbYmdjb2xvcj0jRkZG
RkZGXSBib3JkZXI6ICgycHggaW5zZXQgIzAwMDAwMCldCisgICAgLy8gKyBSZW5kZXJUZXh0Q29u
dHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUgMTY2eDI2CisgICAgLy8gaW4gbGF5b3V0IHRlc3Rz
IHdoZW4gYSBDU1Mgc3R5bGUgaXMgYXBwbGllZCB0aGF0IGRvZXNuJ3QgYWZmZWN0IGJhY2tncm91
bmQgY29sb3IsIGJvcmRlciBvcgorICAgIC8vIHBhZGRpbmcuIEp1c3Qgd29ydGgga2VlcGluZyBp
biBtaW5kIQorICAgIHN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50
KTsKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7
CisgICAgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOworICAgIHN0eWxlLT5zZXRQYWRk
aW5nTGVmdChMZW5ndGgodGV4dEZpZWxkUGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0
UGFkZGluZ1JpZ2h0KExlbmd0aCh0ZXh0RmllbGRQYWRkaW5nLCBGaXhlZCkpOworfQorCitib29s
IFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlciBw
KHRoaXMsIGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsK
KyAgICBpZiAoYXBwZWFyYW5jZSAhPSBUZXh0RmllbGRQYXJ0CisgICAgICAgICYmIGFwcGVhcmFu
Y2UgIT0gU2VhcmNoRmllbGRQYXJ0CisgICAgICAgICYmIGFwcGVhcmFuY2UgIT0gVGV4dEFyZWFQ
YXJ0CisgICAgICAgICYmIGFwcGVhcmFuY2UgIT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgLy8gTm93IHBhaW50IHRoZSB0ZXh0IGZpZWxkLgorICAgIHAuZHJhd0xp
bmVFZGl0KHIsIC8qc3Vua2VuID0gKi9pc1ByZXNzZWQobykpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0Cit7CisgICAgYWRqdXN0VGV4dEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBl
bGVtZW50KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRBcmVhKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIHN0eWxlLT5yZXNldEJvcmRlcigp
OworCisgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgorICAgIHN0eWxlLT5zZXRIZWln
aHQoTGVuZ3RoKEF1dG8pKTsKKworICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUK
KyAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworCisgICAgY29tcHV0ZVNpemVCYXNlZE9u
U3R5bGUoc3R5bGUpOworCisgICAgLy8gQWRkIGluIHRoZSBwYWRkaW5nIHRoYXQgd2UnZCBsaWtl
IHRvIHVzZS4KKyAgICBzZXRQb3B1cFBhZGRpbmcoc3R5bGUpOworICAgIHN0eWxlLT5zZXRQYWRk
aW5nTGVmdChMZW5ndGgobWVudUxpc3RQYWRkaW5nLCBGaXhlZCkpOworfQorCit2b2lkIFJlbmRl
clRoZW1lUXRNb2JpbGU6OnNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Cit7CisgICAgY29uc3QgaW50IHBhZGRpbmdMZWZ0ID0gNDsKKyAgICBjb25zdCBpbnQgcGFkZGlu
Z1JpZ2h0ID0gc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgpIHx8IHN0eWxlLT53aWR0aCgpLmlzUGVy
Y2VudCgpID8gNSA6IDg7CisKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRp
bmdMZWZ0LCBGaXhlZCkpOworCisgICAgLy8gZXh0cmFjdGVkIGZyb20gUUNvbW1vblN0eWxlCisg
ICAgY29uc3QgaW50IHcgPSAxNjsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChw
YWRkaW5nUmlnaHQgKyB3LCBGaXhlZCkpOworCisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVu
Z3RoKDIsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDIsIEZp
eGVkKSk7Cit9CisKKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lbnVMaXN0KFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSByLmxvY2F0aW9u
KCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisgICAgY29uc3QgUVJlY3Qg
cmVjdChRUG9pbnQoMCwgMCksIHIuc2l6ZSgpKTsKKworICAgIHAuZHJhd0NvbWJvQm94KHJlY3Qs
IGNoZWNrTXVsdGlwbGUobykpOworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3sKKworICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0by4K
KyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisKKyAgICAvLyBXaGl0ZS1zcGFj
ZSBpcyBsb2NrZWQgdG8gcHJlCisgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKworICAg
IGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKKworICAgIC8vIEFkZCBpbiB0aGUgcGFk
ZGluZyB0aGF0IHdlJ2QgbGlrZSB0byB1c2UuCisgICAgc2V0UG9wdXBQYWRkaW5nKHN0eWxlKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyIHAo
dGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBwLmRyYXdDb21ib0JveChyLCBjaGVja011bHRpcGxlKG8pKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCitkb3VibGUgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMC47Cit9CisKK2RvdWJsZSBSZW5kZXJUaGVtZVF0TW9iaWxlOjphbmltYXRpb25E
dXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwLjsKK30KKwordm9pZCBS
ZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRQcm9ncmVzc0Jh
cihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgor
Citib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTbGlkZXJU
cmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAoreworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Cit9CisKK2Jvb2wg
UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW50UmVjdCYgcikKK3sKKyAgICAvLyBXZSd2ZSBhbHJlYWR5IHBhaW50ZWQgaXQgaW4g
cGFpbnRTbGlkZXJUcmFjaygpLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNsaWRlclRo
dW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVy
VGh1bWJTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOworICAgIHN0eWxlLT5zZXRCb3hT
aGFkb3cobnVsbHB0cik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTZWFy
Y2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1
cm4gcGFpbnRUZXh0RmllbGQobywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2Jp
bGU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFbGVtZW50KiBlKSBjb25zdAoreworICAgIC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlr
ZSB0aGlzIGxlYWRzIHRvIGRpZmZlcmVuY2VzIGxpa2U6CisgICAgLy8gLSBSZW5kZXJUZXh0Q29u
dHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUgMTY4eDI1IFtiZ2NvbG9yPSNGRkZGRkZdIGJvcmRl
cjogKDJweCBpbnNldCAjMDAwMDAwKV0KKyAgICAvLyArIFJlbmRlclRleHRDb250cm9sIHtJTlBV
VH0gYXQgKDIsMikgc2l6ZSAxNjZ4MjYKKyAgICAvLyBpbiBsYXlvdXQgdGVzdHMgd2hlbiBhIENT
UyBzdHlsZSBpcyBhcHBsaWVkIHRoYXQgZG9lc24ndCBhZmZlY3QgYmFja2dyb3VuZCBjb2xvciwg
Ym9yZGVyIG9yCisgICAgLy8gcGFkZGluZy4gSnVzdCB3b3J0aCBrZWVwaW5nIGluIG1pbmQhCisg
ICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIHN0
eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBjb21w
dXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmls
ZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgLy8g
TG9naWMgdGFrZW4gZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtLmNwcC4KKyAgICAvLyBTY2FsZSB0
aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4KKyAgICBmbG9hdCBmb250U2Nh
bGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAg
ICBpbnQgY2FuY2VsQnV0dG9uU2l6ZSA9IGxyb3VuZGYocU1pbihxTWF4KG1pbkNhbmNlbEJ1dHRv
blNpemUsIGRlZmF1bHRDYW5jZWxCdXR0b25TaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2VsQnV0
dG9uU2l6ZSkpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwg
Rml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBG
aXhlZCkpOworfQorCisvLyBGdW5jdGlvbiB0YWtlbiBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW0u
Y3BwCitJbnRSZWN0IFJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChS
ZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRl
cmVyLCBJbnRSZWN0IHBhcnRSZWN0LCBjb25zdCBJbnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3QK
K3sKKyAgICAvLyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVuIHRoZSBwYXJ0IHJlbmRlcmVyIGFu
ZCB0aGUgaW5wdXQgcmVuZGVyZXIuCisgICAgSW50U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJl
ciA9IC0ocGFydFJlbmRlcmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5k
ZXJlcikpOworICAgIC8vIE1vdmUgdGhlIHJlY3QgaW50byBwYXJ0UmVuZGVyZXIncyBjb29yZHMu
CisgICAgcGFydFJlY3QubW92ZShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7CisgICAgLy8gQWNj
b3VudCBmb3IgdGhlIGxvY2FsIGRyYXdpbmcgb2Zmc2V0LgorICAgIHBhcnRSZWN0Lm1vdmUobG9j
YWxPZmZzZXQueCgpLCBsb2NhbE9mZnNldC55KCkpOworCisgICAgcmV0dXJuIHBhcnRSZWN0Owor
fQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7Cisg
ICAgLy8gTG9naWMgY29waWVkIGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bS5jcHAuCisKKyAgICAv
LyBHZXQgdGhlIHJlbmRlcmVyIG9mIDxpbnB1dD4gZWxlbWVudC4KKyAgICBOb2RlKiBpbnB1dCA9
IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVy
ZXIoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJlbmRlckJveCogaW5w
dXRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChpbnB1dC0+cmVuZGVyZXIoKSk7CisgICAgSW50UmVj
dCBpbnB1dENvbnRlbnRCb3ggPSBpbnB1dFJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKKwor
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGJ1dHRvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwg
Zml0IGluIGl0cyBwYXJlbnQncyBib3guCisgICAgaW50IGNhbmNlbEJ1dHRvblNpemUgPSBxTWlu
KGlucHV0Q29udGVudEJveC53aWR0aCgpLCBxTWluKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwg
ci5oZWlnaHQoKSkpOworICAgIC8vIENhbGN1bGF0ZSBjYW5jZWwgYnV0dG9uJ3MgY29vcmRpbmF0
ZXMgcmVsYXRpdmUgdG8gdGhlIGlucHV0IGVsZW1lbnQuCisgICAgLy8gQ2VudGVyIHRoZSBidXR0
b24gdmVydGljYWxseS4gUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBp
eGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKKyAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRo
ZSBib3R0b20gb2YgdGhlIGZpZWxkLiBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhl
IHRleHQuCisgICAgSW50UmVjdCBjYW5jZWxCdXR0b25SZWN0KG8tPm9mZnNldEZyb21BbmNlc3Rv
ckNvbnRhaW5lcihpbnB1dFJlbmRlckJveCkud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRDb250ZW50Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkg
LSBjYW5jZWxCdXR0b25TaXplICsgMSkgLyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYW5jZWxCdXR0b25TaXplLCBjYW5jZWxCdXR0b25TaXplKTsKKyAgICBJbnRSZWN0IHBhaW50
aW5nUmVjdCA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dFJlbmRlckJveCwgbywgY2FuY2Vs
QnV0dG9uUmVjdCwgcik7CisgICAgc3RhdGljIEltYWdlKiBjYW5jZWxJbWFnZSA9IEltYWdlOjps
b2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uIikucmVsZWFzZVJlZigpOwor
ICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsUHJlc3NlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b25QcmVzc2VkIikucmVsZWFzZVJlZigpOworICAg
IHBpLmNvbnRleHQtPmRyYXdJbWFnZShpc1ByZXNzZWQobykgPyBjYW5jZWxQcmVzc2VkSW1hZ2Ug
OiBjYW5jZWxJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tPnN0eWxl
KCktPmNvbG9yU3BhY2UoKSwgcGFpbnRpbmdSZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCog
ZSkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOworfQorCiti
b29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29y
YXRpb24obywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKK30KKworYm9vbCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uKG8sIHBpLCByKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpj
aGVja011bHRpcGxlKFJlbmRlck9iamVjdCogbykKK3sKKyAgICBIVE1MU2VsZWN0RWxlbWVudCog
c2VsZWN0ID0gbyA/IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oby0+bm9kZSgpKSA6
IDA7CisgICAgcmV0dXJuIHNlbGVjdCA/IHNlbGVjdC0+bXVsdGlwbGUoKSA6IGZhbHNlOworfQor
Citib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBw
ZWFyYW5jZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICBjYXNlIFB1
c2hCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBh
cnQ6CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBMaXN0Ym94UGFydDoKKyAgICBj
YXNlIE1lbnVsaXN0UGFydDoKKyAgICBjYXNlIFJhZGlvUGFydDoKKyAgICBjYXNlIENoZWNrYm94
UGFydDoKKyAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0OgorICAgIGNhc2UgU2xpZGVyVmVy
dGljYWxQYXJ0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OiAvLyBObyBmb3Ig
YWxsIG90aGVycy4uLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFJl
bmRlclRoZW1lUXRNb2JpbGU6OnNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxl
dHRlJiBwYWxldHRlKSBjb25zdAoreworICAgIHN0YXRpYyBRUGFsZXR0ZSBsaWdodEdyYXlQYWxl
dHRlKFF0OjpsaWdodEdyYXkpOworICAgIHBhbGV0dGUgPSBsaWdodEdyYXlQYWxldHRlOworICAg
IHJldHVybjsKK30KKworI2lmIEVOQUJMRShWSURFTykKKworU3RyaW5nIFJlbmRlclRoZW1lUXRN
b2JpbGU6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQoreworICAgIFN0cmluZyByZXN1
bHQgPSBTdHJpbmcobWVkaWFDb250cm9sc1F0VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1l
ZGlhQ29udHJvbHNRdFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKworICAgIGlmIChtX3BhZ2UgJiYg
bV9wYWdlLT5jaHJvbWUoKS0+cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpKQor
ICAgICAgICByZXN1bHQgKz0gU3RyaW5nKG1lZGlhQ29udHJvbHNRdEZ1bGxzY3JlZW5Vc2VyQWdl
bnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1F0RnVsbHNjcmVlblVzZXJBZ2VudFN0
eWxlU2hlZXQpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEhlbHBlciBjbGFzcyB0
byB0cmFuc2Zvcm0gdGhlIHBhaW50ZXIncyB3b3JsZCBtYXRyaXggdG8gdGhlIG9iamVjdCdzIGNv
bnRlbnQgYXJlYSwgc2NhbGVkIHRvIDAsMCwxMDAsMTAwCitjbGFzcyBXb3JsZE1hdHJpeFRyYW5z
Zm9ybWVyIHsKK3B1YmxpYzoKKyAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyKFFQYWludGVyKiBw
YWludGVyLCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgcikgOiBt
X3BhaW50ZXIocGFpbnRlcikKKyAgICB7CisgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJl
bmRlck9iamVjdC0+c3R5bGUoKTsKKyAgICAgICAgbV9vcmlnaW5hbFRyYW5zZm9ybSA9IG1fcGFp
bnRlci0+dHJhbnNmb3JtKCk7CisgICAgICAgIG1fcGFpbnRlci0+dHJhbnNsYXRlKHIueCgpICsg
c3R5bGUtPnBhZGRpbmdMZWZ0KCkudmFsdWUoKSwgci55KCkgKyBzdHlsZS0+cGFkZGluZ1RvcCgp
LnZhbHVlKCkpOworICAgICAgICBtX3BhaW50ZXItPnNjYWxlKChyLndpZHRoKCkgLSBzdHlsZS0+
cGFkZGluZ0xlZnQoKS52YWx1ZSgpIC0gc3R5bGUtPnBhZGRpbmdSaWdodCgpLnZhbHVlKCkpIC8g
MTAwLjAsCisgICAgICAgICAgICAgKHIuaGVpZ2h0KCkgLSBzdHlsZS0+cGFkZGluZ1RvcCgpLnZh
bHVlKCkgLSBzdHlsZS0+cGFkZGluZ0JvdHRvbSgpLnZhbHVlKCkpIC8gMTAwLjApOworICAgIH0K
KworICAgIH5Xb3JsZE1hdHJpeFRyYW5zZm9ybWVyKCkgeyBtX3BhaW50ZXItPnNldFRyYW5zZm9y
bShtX29yaWdpbmFsVHJhbnNmb3JtKTsgfQorCitwcml2YXRlOgorICAgIFFQYWludGVyKiBtX3Bh
aW50ZXI7CisgICAgUVRyYW5zZm9ybSBtX29yaWdpbmFsVHJhbnNmb3JtOworfTsKKworZG91Ymxl
IFJlbmRlclRoZW1lUXRNb2JpbGU6Om1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSBjb25z
dAoreworICAgIHJldHVybiAwLjQ7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFp
bnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIHIpIGNv
bnN0Cit7CisgICAgcGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7CisgICAgc3RhdGljIFFDb2xv
ciB0cmFuc3BhcmVudEJsYWNrKDAsIDAsIDAsIG1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHko
KSAqIDI1NSk7CisgICAgcGFpbnRlci0+c2V0QnJ1c2godHJhbnNwYXJlbnRCbGFjayk7CisgICAg
cGFpbnRlci0+ZHJhd1JvdW5kZWRSZWN0KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdo
dCgpLCA1LjAsIDUuMCk7Cit9CisKK3N0YXRpYyBib29sIG1lZGlhRWxlbWVudENhblBsYXkoUmVu
ZGVyT2JqZWN0KiBvKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRv
UGFyZW50TWVkaWFFbGVtZW50KG8pOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5yZWFkeVN0YXRlKCkgPiBI
VE1MTWVkaWFFbGVtZW50OjpIQVZFX01FVEFEQVRBCisgICAgICAgICAgIHx8IChtZWRpYUVsZW1l
bnQtPnJlYWR5U3RhdGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50OjpIQVZFX05PVEhJTkcKKyAgICAg
ICAgICAgICAgICYmIG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVBsYXlCdXR0b25Q
YXJ0ICYmIG1lZGlhRWxlbWVudC0+cHJlbG9hZCgpID09ICJub25lIik7Cit9CisKK1FDb2xvciBS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoUmVuZGVy
T2JqZWN0KiBvKSBjb25zdAoreworICAgIFFDb2xvciBmZ0NvbG9yID0gcGxhdGZvcm1BY3RpdmVT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBpZiAoIW8pCisgICAgICAgIHJldHVybiBm
Z0NvbG9yOworCisgICAgaWYgKG8tPm5vZGUoKS0+YWN0aXZlKCkpCisgICAgICAgIGZnQ29sb3Ig
PSBmZ0NvbG9yLmxpZ2h0ZXIoKTsKKworICAgIGlmICghbWVkaWFFbGVtZW50Q2FuUGxheShvKSkg
eworICAgICAgICBRUGFsZXR0ZSBwYWwgPSBRQXBwbGljYXRpb246OnBhbGV0dGUoKTsKKyAgICAg
ICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICAgICAgZmdDb2xv
ciA9IHBhbC5icnVzaChRUGFsZXR0ZTo6RGlzYWJsZWQsIFFQYWxldHRlOjpUZXh0KS5jb2xvcigp
OworICAgIH0KKworICAgIHJldHVybiBmZ0NvbG9yOworfQorCitib29sIFJlbmRlclRoZW1lUXRN
b2JpbGU6OnBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7CisgICAgaWYg
KCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0eWxlUGFpbnRl
ciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlh
bGlhc2luZywgdHJ1ZSk7CisKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIp
OworCisgICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcihwLnBhaW50ZXIsIG8s
IHIpOworICAgIGNvbnN0IFFQb2ludEYgYXJyb3dQb2x5Z29uWzldID0geyBRUG9pbnRGKDIwLCAw
KSwgUVBvaW50RigxMDAsIDApLCBRUG9pbnRGKDEwMCwgODApLAorICAgICAgICAgICAgUVBvaW50
Rig4MCwgODApLCBRUG9pbnRGKDgwLCAzMCksIFFQb2ludEYoMTAsIDEwMCksIFFQb2ludEYoMCwg
OTApLCBRUG9pbnRGKDcwLCAyMCksIFFQb2ludEYoMjAsIDIwKX07CisKKyAgICBwLnBhaW50ZXIt
PnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7CisgICAgcC5wYWlu
dGVyLT5kcmF3UG9seWdvbihhcnJvd1BvbHlnb24sIDkpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVs
ZW1lbnQobyk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhp
bnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICBwYWludE1lZGlhQmFja2dy
b3VuZChwLnBhaW50ZXIsIHIpOworCisgICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zv
cm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAgIGNvbnN0IFFQb2ludEYgc3BlYWtlclBvbHlnb25b
Nl0gPSB7IFFQb2ludEYoMjAsIDMwKSwgUVBvaW50Rig1MCwgMzApLCBRUG9pbnRGKDgwLCAwKSwK
KyAgICAgICAgICAgIFFQb2ludEYoODAsIDEwMCksIFFQb2ludEYoNTAsIDcwKSwgUVBvaW50Rigy
MCwgNzApfTsKKworICAgIHAucGFpbnRlci0+c2V0QnJ1c2gobWVkaWFFbGVtZW50LT5tdXRlZCgp
ID8gUXQ6OmRhcmtSZWQgOiBnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAg
IHAucGFpbnRlci0+ZHJhd1BvbHlnb24oc3BlYWtlclBvbHlnb24sIDYpOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFQbGF5QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJl
bnRNZWRpYUVsZW1lbnQobyk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYg
KCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNl
dFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICBwYWludE1l
ZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworCisgICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1l
ciB0cmFuc2Zvcm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAgIHAucGFpbnRlci0+c2V0QnJ1c2go
Z2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBpZiAobWVkaWFFbGVtZW50
LT5jYW5QbGF5KCkpIHsKKyAgICAgICAgY29uc3QgUVBvaW50RiBwbGF5UG9seWdvblszXSA9IHsg
UVBvaW50RigwLCAwKSwgUVBvaW50RigxMDAsIDUwKSwgUVBvaW50RigwLCAxMDApfTsKKyAgICAg
ICAgcC5wYWludGVyLT5kcmF3UG9seWdvbihwbGF5UG9seWdvbiwgMyk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcC5wYWludGVyLT5kcmF3UmVjdCgwLCAwLCAzMCwgMTAwKTsKKyAgICAgICAgcC5w
YWludGVyLT5kcmF3UmVjdCg3MCwgMCwgMzAsIDEwMCk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFTZWVrQmFja0J1
dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKK3sK
KyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IHRoaXMgYXQgdGhlIG1vbWVudC4KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYVNl
ZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKQoreworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgdGhpcyBhdCB0aGUgbW9t
ZW50LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpw
YWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBw
YWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRy
dWUpOworICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0TW9iaWxlOjpmb3JtYXRNZWRpYUNv
bnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25z
dAoreworICAgIHJldHVybiBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShjdXJyZW50VGltZSkgKyAi
IC8gIiArIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGR1cmF0aW9uKTsKK30KKworU3RyaW5nIFJl
bmRlclRoZW1lUXRNb2JpbGU6OmZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKGZsb2F0
IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRyYWNrKFJlbmRlck9iamVjdCAqbywgY29uc3QgUGFpbnRJbmZvICZwYWludEluZm8sIGNvbnN0
IEludFJlY3QgJnIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAg
ICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRl
ci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKworICAgIHBh
aW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBpZiAoIW8tPmlzU2xpZGVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFJlY3QgYiA9IHRvUmVuZGVyQm94
KG8pLT5jb250ZW50Qm94UmVjdCgpOworCisgICAgLy8gUG9zaXRpb24gdGhlIG91dGVyIHJlY3Rh
bmdsZQorICAgIGludCB0b3AgPSByLnkoKSArIGIueSgpOworICAgIGludCBsZWZ0ID0gci54KCkg
KyBiLngoKTsKKyAgICBpbnQgd2lkdGggPSBiLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGIu
aGVpZ2h0KCk7CisKKyAgICAvLyBHZXQgdGhlIHNjYWxlIGNvbG9yIGZyb20gdGhlIHBhZ2UgY2xp
ZW50CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0
UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICBjb25zdCBRQ29sb3IgaGln
aGxpZ2h0VGV4dCA9IHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxp
Z2h0ZWRUZXh0KS5jb2xvcigpOworICAgIGNvbnN0IFFDb2xvciBzY2FsZUNvbG9yKGhpZ2hsaWdo
dFRleHQucmVkKCksIGhpZ2hsaWdodFRleHQuZ3JlZW4oKSwgaGlnaGxpZ2h0VGV4dC5ibHVlKCks
IG1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSAqIDI1NSk7CisKKyAgICAvLyBEcmF3IHRo
ZSBvdXRlciByZWN0YW5nbGUKKyAgICBwLnBhaW50ZXItPnNldEJydXNoKHNjYWxlQ29sb3IpOwor
ICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKKworICAg
IGlmICghby0+bm9kZSgpIHx8ICFvLT5ub2RlKCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBzbGlkZXIgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oby0+bm9kZSgpKTsKKworICAgIC8vIFBvc2l0aW9u
IHRoZSBpbm5lciByZWN0YW5nbGUKKyAgICBoZWlnaHQgPSBoZWlnaHQgKiBzbGlkZXItPnZhbHVl
QXNOdW1iZXIoKTsKKyAgICB0b3AgKz0gYi5oZWlnaHQoKSAtIGhlaWdodDsKKworICAgIC8vIERy
YXcgdGhlIGlubmVyIHJlY3RhbmdsZQorICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7
CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3Io
bykpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0ICpvLCBjb25zdCBQYWludEluZm8g
JnBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmcikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlz
LCBwYWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgLy8gTm90aGluZyB0byBkcmF3IGhlcmUsIHRoaXMgaXMgYWxsIGRvbmUgaW4gdGhl
IHRyYWNrCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6
OnBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG8pOworICAgIGlmICghbWVkaWFFbGVt
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBw
YWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRy
dWUpOworCisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKworICAgIGlm
IChNZWRpYVBsYXllciogcGxheWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkgeworICAgICAg
ICAvLyBHZXQgdGhlIGJ1ZmZlcmVkIHBhcnRzIG9mIHRoZSBtZWRpYQorICAgICAgICBSZWZQdHI8
VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBwbGF5ZXItPmJ1ZmZlcmVkKCk7CisgICAgICAgIGlmIChi
dWZmZXJlZC0+bGVuZ3RoKCkgPiAwICYmIHBsYXllci0+ZHVyYXRpb24oKSA8IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIHRy
YW5zZm9ybSBhbmQgYnJ1c2gKKyAgICAgICAgICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgdHJh
bnNmb3JtZXIocC5wYWludGVyLCBvLCByKTsKKyAgICAgICAgICAgIHAucGFpbnRlci0+c2V0QnJ1
c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKCkpOworCisgICAgICAgICAgICAvLyBQ
YWludCBlYWNoIGJ1ZmZlcmVkIHNlY3Rpb24KKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZXg7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlcmVkLT5sZW5ndGgoKTsgaSsr
KSB7CisgICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRYID0gKGJ1ZmZlcmVkLT5zdGFydChpLCBl
eCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkpICogMTAwOworICAgICAgICAgICAgICAgIGZsb2F0IHdp
ZHRoID0gKChidWZmZXJlZC0+ZW5kKGksIGV4KSAvIHBsYXllci0+ZHVyYXRpb24oKSkgKiAxMDAp
IC0gc3RhcnRYOworICAgICAgICAgICAgICAgIHAucGFpbnRlci0+ZHJhd1JlY3Qoc3RhcnRYLCAz
Nywgd2lkdGgsIDI2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhU2xp
ZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKK3sKKyAgICBBU1NFUlQoby0+bm9kZSgpKTsKKyAgICBOb2RlKiBob3N0
Tm9kZSA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgQVNTRVJUKGhvc3RO
b2RlKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlh
RWxlbWVudChob3N0Tm9kZSk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYg
KCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNl
dFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICBwLnBhaW50
ZXItPnNldFBlbihRdDo6Tm9QZW4pOworICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFD
b250cm9sRm9yZWdyb3VuZENvbG9yKGhvc3ROb2RlLT5yZW5kZXJlcigpKSk7CisgICAgcC5wYWlu
dGVyLT5kcmF3UmVjdChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjph
ZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8v
IHRpbWVsaW5lVGh1bWJIZWlnaHQgc2hvdWxkIG1hdGNoIHRoZSBoZWlnaHQgcHJvcGVydHkgb2Yg
LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSBpbiBtZWRpYUNvbnRyb2xzUXQuY3NzLgor
ICAgIGNvbnN0IGludCB0aW1lbGluZVRodW1iSGVpZ2h0ID0gMTI7CisgICAgY29uc3QgaW50IHRp
bWVsaW5lVGh1bWJXaWR0aCA9IHRpbWVsaW5lVGh1bWJIZWlnaHQgLyAzOworICAgIC8vIHZvbHVt
ZVRodW1iV2lkdGggc2hvdWxkIG1hdGNoIHRoZSB3aWR0aCBwcm9wZXJ0eSBvZiAtd2Via2l0LW1l
ZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgaW4gbWVkaWFDb250cm9sc1F0LmNzcy4KKyAgICBj
b25zdCBpbnQgdm9sdW1lVGh1bWJXaWR0aCA9IDEyOworICAgIGNvbnN0IGludCB2b2x1bWVUaHVt
YkhlaWdodCA9IHZvbHVtZVRodW1iV2lkdGggLyAzOworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBz
dHlsZS0+YXBwZWFyYW5jZSgpOworCisgICAgaWYgKHBhcnQgPT0gTWVkaWFTbGlkZXJUaHVtYlBh
cnQpIHsKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh0aW1lbGluZVRodW1iV2lkdGgs
IEZpeGVkKSk7CisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRpbWVsaW5lVGh1bWJI
ZWlnaHQsIEZpeGVkKSk7CisgICAgfSBlbHNlIGlmIChwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVy
VGh1bWJQYXJ0KSB7CisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHZvbHVtZVRodW1i
SGVpZ2h0LCBGaXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHZvbHVtZVRo
dW1iV2lkdGgsIEZpeGVkKSk7CisgICAgfSBlbHNlIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9y
aXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgeworCisgICAg
ICAgIC8vIGV4dHJhY3RlZCBmcm9tIFFXaW5kb3dzU3R5bGUKKyAgICAgICAgY29uc3QgaW50IHdp
ZHRoID0gMTE7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSAwOworICAgICAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChoZWlnaHQsIEZpeGVkKSk7CisgICAgfQorfQorCitkb3VibGUgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUUFwcGxp
Y2F0aW9uOjpjdXJzb3JGbGFzaFRpbWUoKSAvIDEwMDAuMCAvIDIuMDsKK30KKworU3RyaW5nIFJl
bmRlclRoZW1lUXRNb2JpbGU6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlbmFtZXMsIGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCkKK3sKKyAgICBpZiAo
d2lkdGggPD0gMCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIHN0cmlu
ZzsKKyAgICBpZiAoZmlsZW5hbWVzLmlzRW1wdHkoKSkKKyAgICAgICAgc3RyaW5nID0gZmlsZUJ1
dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKKyAgICBlbHNlIGlmIChmaWxlbmFtZXMuc2l6ZSgp
ID09IDEpIHsKKyAgICAgICAgU3RyaW5nIGZuYW1lID0gZmlsZW5hbWVzWzBdOworICAgICAgICBR
Rm9udE1ldHJpY3MgZm0oZm9udC5mb250KCkpOworICAgICAgICBzdHJpbmcgPSBmbS5lbGlkZWRU
ZXh0KGZuYW1lLCBRdDo6RWxpZGVMZWZ0LCB3aWR0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aW50IG4gPSBmaWxlbmFtZXMuc2l6ZSgpOworICAgICAgICBzdHJpbmcgPSBRQ29yZUFwcGxpY2F0
aW9uOjp0cmFuc2xhdGUoIlFXZWJQYWdlIiwgIiVuIGZpbGUocykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm51bWJlciBvZiBjaG9zZW4gZmlsZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRQ29yZUFwcGxpY2F0
aW9uOjpDb2RlY0ZvclRyLCBuKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCit9
CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ4ZGRiMzM1OTdlNDNiY2MxNjhh
NGM2YmIxYmI4YWFjZGIyNDE4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaApAQCAtMCwwICsxLDIyMCBAQAorCisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3Jt
IGNvbnRyb2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFJlbmRlclRo
ZW1lUXRNb2JpbGVfaAorI2RlZmluZSBSZW5kZXJUaGVtZVF0TW9iaWxlX2gKKworI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKworI2luY2x1ZGUg
PFFCcnVzaD4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRQ29sb3I7CitjbGFzcyBRUGFp
bnRlcjsKK2NsYXNzIFFQaXhtYXA7CitjbGFzcyBRU2l6ZTsKK1FUX0VORF9OQU1FU1BBQ0UKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKK2NsYXNzIFJl
bmRlclByb2dyZXNzOworI2VuZGlmCitjbGFzcyBSZW5kZXJTdHlsZTsKK2NsYXNzIEhUTUxNZWRp
YUVsZW1lbnQ7CisKK2NsYXNzIFJlbmRlclRoZW1lUXRNb2JpbGUgOiBwdWJsaWMgUmVuZGVyVGhl
bWUgeworcHJpdmF0ZToKKyAgICBSZW5kZXJUaGVtZVF0TW9iaWxlKFBhZ2UqKTsKKyAgICB2aXJ0
dWFsIH5SZW5kZXJUaGVtZVF0TW9iaWxlKCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBhZ2UqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAg
Ly8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0
aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCisgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBw
b3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgLy8gQSBnZW5lcmFs
IG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxs
LgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0OworCisgICAg
Ly8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRm
b3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZvY3VzUmlu
Z0NvbG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElk
LCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9y
KGludCBjc3NWYWx1ZUlkKSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlz
dFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgZG91YmxlIGNh
cmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5
ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKworICAgIHZpcnR1YWwg
aW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyNp
ZiBFTkFCTEUoVklERU8pCisgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5
bGVTaGVldCgpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRD
aGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0Owor
CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorICAgIC8vIFJl
dHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jl
c3MgYmFyLgorICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJv
Z3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRoZSBkdXJh
dGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHZpcnR1YWwg
ZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBj
b25zdDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0Jh
Y2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9s
dW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50VGlt
ZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlh
Q29udHJvbHNSZW1haW5pbmdUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihD
b250cm9sUGFydCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorcHJpdmF0ZToKKworICAgIHZvaWQg
cGFpbnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Cisg
ICAgZG91YmxlIG1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSBjb25zdDsKKyAgICBRQ29s
b3IgZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKFJlbmRlck9iamVjdCogPSAwKSBjb25z
dDsKKyNlbmRpZgorICAgIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUq
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JX
aWR0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBGb250JiwgaW50IHdp
ZHRoKTsKKworICAgIGJvb2wgY2hlY2tNdWx0aXBsZShSZW5kZXJPYmplY3QqKTsKKyAgICBib29s
IHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQpIGNvbnN0OworICAgIHZvaWQgc2V0QnV0dG9uUGFk
ZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZvaWQgc2V0UG9wdXBQYWRkaW5nKFJlbmRl
clN0eWxlKikgY29uc3Q7CisKKyAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhp
c3RzKFFQYWxldHRlJikgY29uc3Q7CisKKyAgICBpbnQgZmluZEZyYW1lTGluZVdpZHRoKCkgY29u
c3QgeyByZXR1cm4gMjsgfSAvLyBUYWtlbiBkaXJlY3RseSBmcm9tIFFDb21tb25TdHlsZS4KKwor
ICAgIEludFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KFJlbmRlck9iamVjdCogaW5wdXRSZW5k
ZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIEludFJlY3QgcGFydFJlY3Qs
IGNvbnN0IEludFJlY3QmIGxvY2FsT2Zmc2V0KSBjb25zdDsKKworICAgIFBhZ2UqIG1fcGFnZTsK
KworICAgIFFTdHJpbmcgbV9idXR0b25Gb250RmFtaWx5OworfTsKKworY2xhc3MgU3R5bGVQYWlu
dGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVRdE1v
YmlsZSosIGNvbnN0IFBhaW50SW5mbyYpOworICAgIH5TdHlsZVBhaW50ZXIoKTsKKworICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHBhaW50ZXI7fQorCisgICAgUVBhaW50ZXIqIHBh
aW50ZXI7CisKKyAgICB2b2lkIGRyYXdMaW5lRWRpdChjb25zdCBRUmVjdCYsIGJvb2wgc3Vua2Vu
LCBib29sIGVuYWJsZWQgPSB0cnVlKTsKKyAgICB2b2lkIGRyYXdDaGVja0JveChjb25zdCBRUmVj
dCYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7CisgICAgdm9pZCBkcmF3UmFk
aW9CdXR0b24oY29uc3QgUVJlY3QmLCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCA9IHRydWUp
OworICAgIHZvaWQgZHJhd1B1c2hCdXR0b24oY29uc3QgUVJlY3QmLCBib29sIHN1bmtlbiwgYm9v
bCBlbmFibGVkID0gdHJ1ZSk7CisgICAgdm9pZCBkcmF3Q29tYm9Cb3goY29uc3QgUVJlY3QmLCBi
b29sIG11bHRpcGxlLCBib29sIGVuYWJsZWQgPSB0cnVlKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGluaXQoR3JhcGhpY3NDb250ZXh0Kik7CisKKyAgICB2b2lkIGRyYXdDaGVja2VyKFFQYWludGVy
KiwgaW50IHNpemUsIFFDb2xvcikgY29uc3Q7CisgICAgUVBpeG1hcCBmaW5kQ2hlY2tlcihjb25z
dCBRUmVjdCYsIGJvb2wgZGlzYWJsZWQpIGNvbnN0OworCisgICAgdm9pZCBkcmF3UmFkaW8oUVBh
aW50ZXIqLCBjb25zdCBRU2l6ZSYsIGJvb2wgY2hlY2tlZCwgUUNvbG9yKSBjb25zdDsKKyAgICBR
UGl4bWFwIGZpbmRSYWRpbyhjb25zdCBRU2l6ZSYsIGJvb2wgY2hlY2tlZCwgYm9vbCBkaXNhYmxl
ZCkgY29uc3Q7CisKKyAgICBRU2l6ZSBnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNpemUmKSBj
b25zdDsKKyAgICB2b2lkIGRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFT
aXplJiwgUUNvbG9yKSBjb25zdDsKKyAgICB2b2lkIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQ
YWludGVyKiwgY29uc3QgUVNpemUmLCBRQ29sb3IpIGNvbnN0OworICAgIFFQaXhtYXAgZmluZENv
bWJvQnV0dG9uKGNvbnN0IFFTaXplJiwgYm9vbCBtdWx0aXBsZSwgYm9vbCBkaXNhYmxlZCkgY29u
c3Q7CisKKyAgICBRQnJ1c2ggb2xkQnJ1c2g7CisgICAgYm9vbCBvbGRBbnRpYWxpYXNpbmc7CisK
KyAgICBRX0RJU0FCTEVfQ09QWShTdHlsZVBhaW50ZXIpOworfTsKK30KKworI2VuZGlmIC8vIFJl
bmRlclRoZW1lUXRNb2JpbGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3Jv
bGxiYXJUaGVtZVF0LmNwcAppbmRleCA2ZWQwMmVhNTFlMWM1NjUzYTk0OTVjNzEzOTEzMTU4YTE3
Y2YzNTIwLi5kZjdkYWIzMzlmMTQ0YzNjODdkY2JmMmNkOTk3ODVkYzIxNzRlMTk2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcApAQCAtMjYs
NiArMjYsMTAgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgVVNFKFFUX01PQklM
RV9USEVNRSkKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorCisjZWxzZQogI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lUXQuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAt
NDIsMTUgKzQ2LDI0IEBACiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UVN0eWxlPgog
I2luY2x1ZGUgPFFTdHlsZU9wdGlvblNsaWRlcj4KKyNlbmRpZiAvLyBVU0UoUVRfTU9CSUxFX1RI
RU1FKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQor
U2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCit7CisgICAgc3Rh
dGljIFNjcm9sbGJhclRoZW1lIHRoZW1lOworICAgIHJldHVybiAmdGhlbWU7Cit9CisjZWxzZQog
U2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCiB7CiAgICAgc3Rh
dGljIFNjcm9sbGJhclRoZW1lUXQgdGhlbWU7CiAgICAgcmV0dXJuICZ0aGVtZTsKIH0KIAorCiBT
Y3JvbGxiYXJUaGVtZVF0Ojp+U2Nyb2xsYmFyVGhlbWVRdCgpCiB7CiB9CkBAIC0yNjIsNSArMjc1
LDYgQEAgUVN0eWxlKiBTY3JvbGxiYXJUaGVtZVF0OjpzdHlsZSgpIGNvbnN0CiAgICAgcmV0dXJu
IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKIH0KIAorI2VuZGlmIC8vIFVTRShRVF9NT0JJTEVfVEhF
TUUpCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcAppbmRleCAzNzZlZTcwZTZlY2E5ZjQ5
ZDNmMTQ2MjJkZjIwZmY2MGVjMTA5MGFhLi4zZDMyOGQ1ZjUyYTBhMjcyNjFkY2ZhYjQ2NGQ0N2My
MDY0NzQwYTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCkBAIC0zMjY4LDExICszMjY4
LDEzIEBAIGJvb2wgUVdlYlBhZ2U6OnN3YWxsb3dDb250ZXh0TWVudUV2ZW50KFFDb250ZXh0TWVu
dUV2ZW50ICpldmVudCkKIHsKICAgICBkLT5wYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+
Y2xlYXJDb250ZXh0TWVudSgpOwogCisjaWYgIVVTRShRVF9NT0JJTEVfVEhFTUUpCiAgICAgaWYg
KFFXZWJGcmFtZSogd2ViRnJhbWUgPSBmcmFtZUF0KGV2ZW50LT5wb3MoKSkpIHsKICAgICAgICAg
RnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJpdmF0ZTo6Y29yZSh3ZWJGcmFtZSk7CiAgICAgICAg
IGlmIChTY3JvbGxiYXIqIHNjcm9sbGJhciA9IGZyYW1lLT52aWV3KCktPnNjcm9sbGJhckF0UG9p
bnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCAxKS5wb3MoKSkpCiAgICAgICAgICAgICByZXR1
cm4gc2Nyb2xsYmFyLT5jb250ZXh0TWVudShQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIDEpKTsK
ICAgICB9CisjZW5kaWYKIAogICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2VkRnJhbWUgPSBkLT5w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgZm9jdXNl
ZEZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZENvbnRleHRNZW51RXZlbnQoUGxhdGZvcm1Nb3Vz
ZUV2ZW50KGV2ZW50LCAxKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDM1MDBiZDA0MjAyODZhY2FhODQz
ODgxMGNmYmQzZDU0ZTEzYmU4NmUuLmE5NTg4N2Q5ZjhkOWQ4OGM5Yjk5MDNjMTZhOGY3NTExNGQw
NTJmMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDktMDggIFBpZXJy
ZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CisKKyAgICAgICAgW1F0XSBSZW1vdmUg
dGhlIFFTdHlsZSBkZXBlbmRlbmN5IGluIFF0J3MgbW9iaWxlIHRoZW1lCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc3MworCisgICAgICAgIFJlbW92
YWwgb2YgdGhlIFFTdHlsZSBkZXBlbmRlbmN5IGZvciB0aGUgbW9iaWxlIHRoZW1lLgorCisgICAg
ICAgIFRoaXMgcmVmYWN0b3Jpbmcgc3BsaXRzIHVwIFJlbmRlclRoZW1lUXQgaW50byB0d28KKyAg
ICAgICAgaW1wbGVtZW50YXRpb24gZmlsZXMsIGEgUVN0eWxlLWJhY2tlZCBvbmUsIGFuZCBhCisg
ICAgICAgIFJlbmRlclRoZW1lUXRNb2JpbGUgb25lIHRoYXQgdXNlcyBRUGFpbnRlciBkaXJlY3Rs
eS4KKworICAgICAgICBVc2Ugb2YgdGhlIG1vYmlsZSB0aGVtZSBjYW4gYmUgdHJpZ2dlcmVkIHZp
YSBhIGNvbXBpbGUgZmxhZy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAgICAgIChRV2ViUGFnZTo6c3dhbGxv
d0NvbnRleHRNZW51RXZlbnQpOgorCiAyMDExLTA5LTA1ICBKb2NlbHluIFR1cmNvdHRlICA8am9j
ZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XVtXSzJdIE1ha2UgVGlsZWRE
cmF3aW5nQXJlYSByZXF1ZXN0IHRpbGVzIG9ubHkgaW4gdGhlIGRpcmVjdGlvbiB0aGUgdmlld3Bv
cnQgaXMgcGFubmVkIHRvLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IGJmZTU1ZDc0NmJhYTdlNjQ0YWM4YjUwZDkwNjIyZTI2YmUxN2FlYTQuLjEy
MjhmOTNmYjBhNmVkNmY3MTAyNTlmOTEzMDQ1Mzc1YzFjYWQxYzkgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxMS0w
OS0wOCAgUGllcnJlIFJvc3NpICA8cGllcnJlLnJvc3NpQGdtYWlsLmNvbT4KKworICAgICAgICBb
UXRdIFJlbW92ZSB0aGUgUVN0eWxlIGRlcGVuZGVuY3kgaW4gUXQncyBtb2JpbGUgdGhlbWUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3NzczCisKKyAg
ICAgICAgUmVtb3ZhbCBvZiB0aGUgUVN0eWxlIGRlcGVuZGVuY3kgZm9yIHRoZSBtb2JpbGUgdGhl
bWUuCisKKyAgICAgICAgVGhpcyByZWZhY3RvcmluZyBzcGxpdHMgdXAgUmVuZGVyVGhlbWVRdCBp
bnRvIHR3bworICAgICAgICBpbXBsZW1lbnRhdGlvbiBmaWxlcywgYSBRU3R5bGUtYmFja2VkIG9u
ZSwgYW5kIGEKKyAgICAgICAgUmVuZGVyVGhlbWVRdE1vYmlsZSBvbmUgdGhhdCB1c2VzIFFQYWlu
dGVyIGRpcmVjdGx5LgorCisgICAgICAgIFVzZSBvZiB0aGUgbW9iaWxlIHRoZW1lIGNhbiBiZSB0
cmlnZ2VyZWQgdmlhIGEgY29tcGlsZSBmbGFnLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6CisKIDIwMTEtMDkt
MDcgIEVyaWMgQm9yZW4gIDxib3JlbmV0QGdtYWlsLmNvbT4KIAogICAgICAgICBbQ2hyb21pdW1d
IE1vZGlmeSBXZWJUb3VjaEV2ZW50IHN0cnVjdHVyZSB0byBtYXRjaCBXZWJDb3JlOjpUb3VjaEV2
ZW50CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBiL1Rvb2xzL1Njcmlw
dHMvYnVpbGQtd2Via2l0CmluZGV4IDNmNWIwOTJhMTgxZWI1MDljZmI4N2FlZTZlM2M4ZjU4NTY0
OWJhZTMuLmJhN2Q3ZmU0MWRmNTYxMmIwMmZiNjMzYTBjZjJhNjcyZDNlN2U3NjcgMTAwNzU1Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CkBAIC01NSw2ICs1NSw3IEBAIG15ICRjbGVhbiA9IDA7CiBteSAkdXNlR1lQID0gMDsK
IG15ICRtaW5pbWFsID0gMDsKIG15ICR2OCA9IDA7CitteSAkbW9iaWxlVGhlbWUgPSAwOwogbXkg
JGluc3RhbGxIZWFkZXJzOwogbXkgJGluc3RhbGxMaWJzOwogbXkgJHByZWZpeFBhdGg7CkBAIC0z
NDksNiArMzUwLDggQEAgZm9yZWFjaCAoQEFSR1YpIHsKICAgICAgICAgJG1pbmltYWwgPSAxOwog
ICAgIH0gZWxzaWYgKCRfIGVxICctLXY4JykgewogICAgICAgICAkdjggPSAxOworICAgIH0gZWxz
aWYgKCRfIGVxICctLW1vYmlsZS10aGVtZScpIHsKKyAgICAgICAgJG1vYmlsZVRoZW1lID0gMTsK
ICAgICB9CiB9CiAKQEAgLTM4NSw2ICszODgsNyBAQCBVc2FnZTogJHByb2dyYW1OYW1lIFtvcHRp
b25zXSBbb3B0aW9ucyB0byBwYXNzIHRvIGJ1aWxkIHN5c3RlbV0KICAgLS1pbnN0YWxsLWhlYWRl
cnM9PHBhdGg+ICAgICAgICAgIFNldCBpbnN0YWxsYXRpb24gcGF0aCBmb3IgdGhlIGhlYWRlcnMg
KFF0IG9ubHkpCiAgIC0taW5zdGFsbC1saWJzPTxwYXRoPiAgICAgICAgICAgICBTZXQgaW5zdGFs
bGF0aW9uIHBhdGggZm9yIHRoZSBsaWJyYXJpZXMgKFF0IG9ubHkpCiAgIC0tdjggICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBVc2UgVjggYXMgSmF2YVNjcmlwdCBlbmdpbmUgKFF0IG9ubHkp
CisgIC0tbW9iaWxlLXRoZW1lICAgICAgICAgICAgICAgICAgICBVc2UgbW9iaWxlIHRoZW1lIGlu
c3RlYWQgb2YgUVN0eWxlIChRdCBvbmx5KQogICAtMiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnVpbGQgV2ViS2l0MiAoUXQgb25seSkKIAogICAtLXByZWZpeD08cGF0aD4gICAgICAg
ICAgICAgICAgICAgU2V0IGluc3RhbGxhdGlvbiBwcmVmaXggdG8gdGhlIGdpdmVuIHBhdGggKEd0
ay9FZmwgb25seSkKQEAgLTQwOCw2ICs0MTIsNyBAQCBteSAlb3B0aW9ucyA9ICgKICAgICAnbWFr
ZWFyZ3M9cycgPT4gXCRtYWtlQXJncywKICAgICAnbWluaW1hbCcgPT4gXCRtaW5pbWFsLAogICAg
ICd2OCcgPT4gXCR2OCwKKyAgICAnbW9iaWxlLXRoZW1lJyA9PiBcJG1vYmlsZVRoZW1lLAogICAg
ICdvbmx5LXdlYmtpdCcgPT4gXCRvbmx5V2ViS2l0UHJvamVjdCwKICAgICAnbm8td2Via2l0Micg
PT4gXCRub1dlYktpdDIsCiApOwpAQCAtNTU5LDYgKzU2NCwxMCBAQCBpZiAoaXNHdGsoKSkgewog
ICAgIGlmICgkdjgpIHsKICAgICAgICAgcHVzaCBAb3B0aW9ucywgIkNPTkZJRys9djgiOwogICAg
IH0KKworICAgIGlmICgkbW9iaWxlVGhlbWUpIHsKKyAgICAgICAgcHVzaCBAb3B0aW9ucywgIkNP
TkZJRys9dXNlX3F0X21vYmlsZV90aGVtZSI7CisgICAgfQogfQogCiAjIElmIGFza2VkIHRvIGJ1
aWxkIGp1c3QgdGhlIFdlYktpdCBwcm9qZWN0LCBvdmVyd3JpdGUgdGhlIHByb2plY3RzCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106725</attachid>
            <date>2011-09-08 04:55:09 -0700</date>
            <delta_ts>2011-09-08 09:54:06 -0700</delta_ts>
            <desc>More readable version (still pretty huge)</desc>
            <filename>0001-Removal-of-the-QStyle-dependency-for-the-mobile-them.patch</filename>
            <type>text/plain</type>
            <size>109761</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">RnJvbSBhM2I0NzZjYzViZDcxN2VkODM2NDVjYmRjNmI5YTBlYWNiNzY0OGJkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaWVycmUgUm9zc2kgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+
CkRhdGU6IFdlZCwgNyBTZXAgMjAxMSAyMToyMjoxNyArMDIwMApTdWJqZWN0OiBSZW1vdmFsIG9m
IHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBmb3IgdGhlIG1vYmlsZSB0aGVtZS4KClRoaXMgcmVmYWN0
b3Jpbmcgc3BsaXRzIHVwIFJlbmRlclRoZW1lUXQgaW50byB0d28KaW1wbGVtZW50YXRpb24gZmls
ZXMsIGEgUVN0eWxlLWJhY2tlZCBvbmUsIGFuZCBhClJlbmRlclRoZW1lUXRNb2JpbGUgb25lIHRo
YXQgdXNlcyBRUGFpbnRlciBkaXJlY3RseS4KClVzZSBvZiB0aGUgbW9iaWxlIHRoZW1lIGNhbiBi
ZSB0cmlnZ2VyZWQgdmlhIGEgY29tcGlsZSBmbGFnLgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIyMSArKysrCiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKy0KIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuY3BwICAgIHwgIDM4MSAtLS0tLS0K
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuaCAgICAgIHwgICA0
OCAtCiAuLi4ve1JlbmRlclRoZW1lUXQuY3BwID0+IFJlbmRlclRoZW1lUVN0eWxlLmNwcH0gICB8
ICAgOTkgKy0tCiAuLi4vcXQve1JlbmRlclRoZW1lUXQuaCA9PiBSZW5kZXJUaGVtZVFTdHlsZS5o
fSAgICB8ICAgMzcgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRN
b2JpbGUuY3BwIHwgMTM3MSArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oICAgfCAgMjIwICsrKysKIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwICAgIHwgICAxNCArCiBTb3VyY2Uv
V2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgICAgICAgICAgICAgICAgICB8ICAgIDIgKwogU291
cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE4ICsK
IFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAx
NyArCiBUb29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDkgKwogMTMgZmlsZXMgY2hhbmdlZCwgMTkwMiBpbnNlcnRpb25zKCspLCA1NDcgZGVsZXRp
b25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRN
b2JpbGVXZWJTdHlsZS5jcHAKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9RdE1vYmlsZVdlYlN0eWxlLmgKIHJlbmFtZSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC97UmVuZGVyVGhlbWVRdC5jcHAgPT4gUmVuZGVyVGhlbWVRU3R5bGUuY3BwfSAoOTQlKQog
cmVuYW1lIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L3tSZW5kZXJUaGVtZVF0LmggPT4gUmVu
ZGVyVGhlbWVRU3R5bGUuaH0gKDg4JSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaAoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCBjOTUzY2UwLi5iM2Q4NThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjI0IEBACisy
MDExLTA5LTA4ICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAg
ICAgIFtRdF0gUmVtb3ZlIHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBpbiBRdCdzIG1vYmlsZSB0aGVt
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NzMK
KworICAgICAgICBSZW1vdmFsIG9mIHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBmb3IgdGhlIG1vYmls
ZSB0aGVtZS4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIHNwbGl0cyB1cCBSZW5kZXJUaGVt
ZVF0IGludG8gdHdvCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLCBhIFFTdHlsZS1iYWNr
ZWQgb25lLCBhbmQgYQorICAgICAgICBSZW5kZXJUaGVtZVF0TW9iaWxlIG9uZSB0aGF0IHVzZXMg
UVBhaW50ZXIgZGlyZWN0bHkuCisKKyAgICAgICAgVXNlIG9mIHRoZSBtb2JpbGUgdGhlbWUgY2Fu
IGJlIHRyaWdnZXJlZCB2aWEgYSBjb21waWxlIGZsYWcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGlzIGp1c3QgcmVm
YWN0b3JpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9x
dC9RdE1vYmlsZVdlYlN0eWxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9R
dE1vYmlsZVdlYlN0eWxlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRU3R5bGUuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UmVuZGVyVGhlbWVRdC5jcHAuCisgICAgICAgIChXZWJDb3JlOjppbml0U3R5bGVPcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFp
bnRlcjo6flN0eWxlUGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpSZW5kZXJUaGVtZVF0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6On5SZW5kZXJUaGVtZVF0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0OjpmYWxsYmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OnFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpleHRyYURl
ZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnN1cHBv
cnRzSG92ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNGb2N1
c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YmFzZWxpbmVQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpjb250cm9sU3VwcG9ydHNUaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0NvbnRyb2xUaW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpmaW5kRnJhbWVMaW5lV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6aW5mbGF0ZUJ1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0OjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3lzdGVtRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzeXN0ZW1Db2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXQ6OmNvbXB1dGVTaXplQmFzZWRPblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0OjpwYWludENoZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpw
YWludFJhZGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdEJ1dHRv
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldEJ1dHRvblNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c2V0QnV0dG9uUGFkZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludEJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RUZXh0RmllbGRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXQ6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdDo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0OjpzZXRQb3B1cFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
dDo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmNvbnZlcnRUb1BhaW50aW5nUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJjaEZp
ZWxkRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBh
aW50U2VhcmNoRmllbGREZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXQ6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0SW5uZXJTcGluQnV0dG9u
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRJbm5lclNwaW5C
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNGb2N1cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRQYWxldHRlRnJvbVBhZ2VDbGll
bnRJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojppbml0aWFsaXpl
Q29tbW9uUVN0eWxlT3B0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpl
eHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmxkTWF0
cml4VHJhbnNmb3JtZXI6OldvcmxkTWF0cml4VHJhbnNmb3JtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ybGRNYXRyaXhUcmFuc2Zvcm1lcjo6fldvcmxkTWF0cml4VHJhbnNmb3JtZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6bWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0
eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhQmFja2dyb3Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjptZWRpYUVsZW1lbnRDYW5QbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXQ6OmdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhTXV0ZUJ1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhUGxheUJ1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2Vla0JhY2tC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtG
b3J3YXJkQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVk
aWFDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpmb3JtYXRN
ZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
dDo6Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRodW1iKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpjYXJldEJsaW5rSW50ZXJ2YWwpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgpOgorICAg
ICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXQ6Omhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0Zvcik6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVQYWludGVyOjpkcmF3UHJpbWl0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRl
cjo6ZHJhd0NvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3Q29t
cGxleENvbnRyb2wpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZHJhd0NoZWNrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpmaW5kQ2hlY2tlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmRyYXdSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVBhaW50ZXI6OmZpbmRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmRy
YXdNdWx0aXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6
ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6
Z2V0QnV0dG9uSW1hZ2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6Zmlu
ZENvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6U3R5bGVQYWlu
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6aW5pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXI6On5TdHlsZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQYWludGVyOjpkcmF3TGluZUVkaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWlu
dGVyOjpkcmF3Q2hlY2tCb3gpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3
UmFkaW9CdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3UHVzaEJ1
dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmRyYXdDb21ib0JveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpSZW5kZXJUaGVtZVF0TW9iaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6On5SZW5kZXJUaGVtZVF0TW9iaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRv
bSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzdXBwb3J0c0hvdmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnN1cHBvcnRzRm9jdXNS
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmJhc2VsaW5lUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29udHJvbFN1
cHBvcnRzVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c3Vw
cG9ydHNDb250cm9sVGludHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmls
ZTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBsYXRmb3JtRm9j
dXNSaW5nQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c3lz
dGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzeXN0ZW1D
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjptaW5pbXVtTWVu
dUxpc3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbXB1
dGVTaXplQmFzZWRPblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2Jp
bGU6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjpwYWludENoZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2Jp
bGU6OnNldFJhZGlvU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxl
OjpwYWludFJhZGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFk
anVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6
OnNldEJ1dHRvblNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6
c2V0QnV0dG9uUGFkZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxl
OjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjph
ZGp1c3RUZXh0RmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
dE1vYmlsZTo6YWRqdXN0TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0TW9iaWxlOjpzZXRQb3B1cFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdE1vYmlsZTo6cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0TW9iaWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQ
cm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphbmlt
YXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXRNb2JpbGU6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2VhcmNoRmll
bGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2VhcmNo
RmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1
c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXRNb2JpbGU6OmNvbnZlcnRUb1BhaW50aW5nUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNlYXJjaEZpZWxkRGVj
b3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBh
aW50U2VhcmNoRmllbGREZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y2hl
Y2tNdWx0aXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzdXBw
b3J0c0ZvY3VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldFBh
bGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXRNb2JpbGU6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ybGRNYXRyaXhUcmFuc2Zvcm1lcjo6V29ybGRNYXRyaXhUcmFuc2Zvcm1lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JsZE1hdHJpeFRyYW5zZm9ybWVyOjp+V29ybGRNYXRyaXhUcmFu
c2Zvcm1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjptZWRpYUNv
bnRyb2xzQmFzZWxpbmVPcGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRN
b2JpbGU6OnBhaW50TWVkaWFCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhRWxl
bWVudENhblBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Z2V0
TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFTZWVrQmFja0J1
dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlh
U2Vla0ZvcndhcmRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmls
ZTo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGlt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhVm9s
dW1lU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6
cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmNhcmV0QmxpbmtJbnRlcnZhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpmaWxlTGlzdE5hbWVGb3JXaWR0
aCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oOiBSZW5hbWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRs
aW5nRm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmZpbmRGcmFt
ZUxpbmVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmlzVmFsaWQpOgor
ICAgICAgICAqIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKToKKwogMjAxMS0wOS0wNiAgQWJoaXNo
ZWsgQXJ5YSAgPGluZmVybm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE51bGwgb3duaW5nUmVu
ZGVyZXIgY3Jhc2ggaW4gUmVuZGVyU2Nyb2xsYmFyOjp1cGRhdGVTY3JvbGxiYXJQYXJ0cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KaW5kZXggNTg0OTYyYWQuLmVlN2FlZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0yMDkw
LDggKzIwOTAsNiBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5o
IFwKICAgICBwbGF0Zm9ybS9xdC9RV2ViUGFnZUNsaWVudC5oIFwKICAgICBwbGF0Zm9ybS9xdC9R
dFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCBcCi0gICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dC5oIFwKLSAgICBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmggXAogICAgIHBsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmggXAogICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggXAogICAg
IHBsYXRmb3JtL1Njcm9sbGJhci5oIFwKQEAgLTI2MjEsNyArMjYxOSw2IEBAIFNPVVJDRVMgKz0g
XAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtU2NyZWVuUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9x
dC9QbGF0Zm9ybVRvdWNoRXZlbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtVG91
Y2hQb2ludFF0LmNwcCBcCi0gICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgXAogICAg
IHBsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvU2Nyb2xsYmFy
VGhlbWVRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Njcm9sbFZpZXdRdC5jcHAgXApAQCAtMjY0
Miw4ICsyNjM5LDEzIEBAIFNPVVJDRVMgKz0gXAogfQogCiBjb250YWlucyhERUZJTkVTLCBXVEZf
VVNFX1FUX01PQklMRV9USEVNRT0xKSB7Ci0gICAgSEVBREVSUyArPSBwbGF0Zm9ybS9xdC9RdE1v
YmlsZVdlYlN0eWxlLmgKLSAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5
bGUuY3BwCisgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgK
KyAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwCisgICAg
U09VUkNFUyAtPSBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAKK30gZWxzZSB7CisgICAgSEVB
REVSUyArPSBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIFwKKyAgICAgICAgICAgICAg
IHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuaAorICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0v
cXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9T
TU9PVEhfU0NST0xMSU5HPTEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1F0TW9iaWxlV2ViU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRN
b2JpbGVXZWJTdHlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYTE4MTcu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRNb2JpbGVXZWJTdHls
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0g
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUXRNb2JpbGVXZWJTdHlsZS5oIgotCi0jaW5j
bHVkZSAiUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94LmgiCi0KLSNpbmNsdWRlIDxRUGFpbnRlcj4K
LSNpbmNsdWRlIDxRUGl4bWFwQ2FjaGU+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uPgotCi1RdE1v
YmlsZVdlYlN0eWxlOjpRdE1vYmlsZVdlYlN0eWxlKCkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2
b2lkIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWludGVyLCBj
b25zdCBRUGVuJiBwZW4sIGNvbnN0IFFSZWN0JiByZWN0LCBjb25zdCBRQnJ1c2gmIGJydXNoKQot
ewotICAgIFFQZW4gb2xkUGVuID0gcGFpbnRlci0+cGVuKCk7Ci0gICAgUUJydXNoIG9sZEJydXNo
ID0gcGFpbnRlci0+YnJ1c2goKTsKLSAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVy
OjpBbnRpYWxpYXNpbmcsIHRydWUpOwotICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwotICAgIHBh
aW50ZXItPnNldEJydXNoKGJydXNoKTsKLQotICAgIGludCBsaW5lID0gMTsKLSAgICBwYWludGVy
LT5kcmF3Um91bmRlZFJlY3QocmVjdC5hZGp1c3RlZChsaW5lLCBsaW5lLCAtbGluZSwgLWxpbmUp
LAotICAgICAgICAgICAgLyogeFJhZGl1cyAqLyA1LjAsIC8qIHlSYWRpb3VzICovIDUuMCk7Ci0g
ICAgcGFpbnRlci0+c2V0UGVuKG9sZFBlbik7Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2gob2xkQnJ1
c2gpOwotfQotCi12b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdDaGVja2VyKFFQYWludGVyKiBw
YWludGVyLCBpbnQgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAotewotICAgIGludCBib3JkZXIg
PSBxTWluKHFNYXgoMSwgaW50KDAuMiAqIHNpemUpKSwgNik7Ci0gICAgaW50IGNoZWNrZXJTaXpl
ID0gcU1heChzaXplIC0gMiAqIGJvcmRlciwgMyk7Ci0gICAgaW50IHdpZHRoID0gY2hlY2tlclNp
emUgLyAzOwotICAgIGludCBtaWRkbGUgPSBxTWF4KDMgKiBjaGVja2VyU2l6ZSAvIDcsIDMpOwot
ICAgIGludCB4ID0gKChzaXplIC0gY2hlY2tlclNpemUpID4+IDEpOwotICAgIGludCB5ID0gKChz
aXplIC0gY2hlY2tlclNpemUpID4+IDEpICsgKGNoZWNrZXJTaXplIC0gd2lkdGggLSBtaWRkbGUp
OwotICAgIFFWZWN0b3I8UUxpbmVGPiBsaW5lcyhjaGVja2VyU2l6ZSArIDEpOwotICAgIHBhaW50
ZXItPnNldFBlbihjb2xvcik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaWRkbGU7ICsraSkg
ewotICAgICAgICBsaW5lc1tpXSA9IFFMaW5lRih4LCB5LCB4LCB5ICsgd2lkdGgpOwotICAgICAg
ICArK3g7Ci0gICAgICAgICsreTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IG1pZGRsZTsgaSA8
PSBjaGVja2VyU2l6ZTsgKytpKSB7Ci0gICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgsIHksIHgs
IHkgKyB3aWR0aCk7Ci0gICAgICAgICsreDsKLSAgICAgICAgLS15OwotICAgIH0KLSAgICBwYWlu
dGVyLT5kcmF3TGluZXMobGluZXMuY29uc3REYXRhKCksIGxpbmVzLnNpemUoKSk7Ci19Ci0KLVFQ
aXhtYXAgUXRNb2JpbGVXZWJTdHlsZTo6ZmluZENoZWNrZXIoY29uc3QgUVJlY3QmIHJlY3QsIGJv
b2wgZGlzYWJsZWQpIGNvbnN0Ci17Ci0gICAgaW50IHNpemUgPSBxTWluKHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7Ci0gICAgUVBpeG1hcCByZXN1bHQ7Ci0gICAgc3RhdGljIGNvbnN0IFFT
dHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS0iKSArIFFMYXRpbjFTdHJp
bmcobWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkrIFFMYXRpbjFTdHJpbmcoIi1jaGVja2VyLSIp
OwotICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUpICsgUUxh
dGluMVN0cmluZygiLSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6
IFFMYXRpbjFTdHJpbmcoImVuYWJsZWQiKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQo
a2V5LCByZXN1bHQpKSB7Ci0gICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSwgc2l6ZSk7Ci0g
ICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIFFQYWludGVyIHBh
aW50ZXIoJnJlc3VsdCk7Ci0gICAgICAgIGRyYXdDaGVja2VyKCZwYWludGVyLCBzaXplLCBkaXNh
YmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBRUGl4bWFwQ2Fj
aGU6Omluc2VydChrZXksIHJlc3VsdCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd1JhZGlvKFFQYWludGVyKiBwYWludGVyLCBjb25z
dCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBRQ29sb3IgY29sb3IpIGNvbnN0Ci17Ci0gICAg
cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKLQot
ICAgIC8vIGdldCBtaW5vciBzaXplIHRvIGRvIG5vdCBwYWludCBhIHdpZGUgZWxpcHNlCi0gICAg
cXJlYWwgc3F1YXJlU2l6ZSA9IHFNaW4oc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLSAg
ICAvLyBkZWZsYXRlIG9uZSBwaXhlbAotICAgIFFSZWN0IHJlY3QgPSBRUmVjdChRUG9pbnQoMSwg
MSksIFFTaXplKHNxdWFyZVNpemUgLSAyLCBzcXVhcmVTaXplIC0gMikpOwotICAgIGNvbnN0IFFQ
b2ludCBjZW50ZXJHcmFkaWVudChyZWN0LmJvdHRvbVJpZ2h0KCkgKiAwLjcpOwotCi0gICAgUVJh
ZGlhbEdyYWRpZW50IHJhZGlhbEdyYWRpZW50KGNlbnRlckdyYWRpZW50LCBjZW50ZXJHcmFkaWVu
dC54KCkgLSAxKTsKLSAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OndoaXRl
KTsKLSAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDAuNiwgUXQ6OndoaXRlKTsKLSAgICBy
YWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwgY29sb3IpOwotCi0gICAgcGFpbnRlci0+c2V0
UGVuKGNvbG9yKTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0gICAgcGFpbnRlci0+
ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2gocmFkaWFsR3JhZGllbnQp
OwotICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOwotCi0gICAgaW50IGJvcmRlciA9IDAu
MSAqIChyZWN0LndpZHRoKCkgKyByZWN0LmhlaWdodCgpKTsKLSAgICBib3JkZXIgPSBxTWluKHFN
YXgoMiwgYm9yZGVyKSwgMTApOwotICAgIHJlY3QuYWRqdXN0KGJvcmRlciwgYm9yZGVyLCAtYm9y
ZGVyLCAtYm9yZGVyKTsKLSAgICBpZiAoY2hlY2tlZCkgewotICAgICAgICBwYWludGVyLT5zZXRQ
ZW4oUXQ6Ok5vUGVuKTsKLSAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOwotICAgICAg
ICBwYWludGVyLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICB9Ci19Ci0KLVFQaXhtYXAgUXRNb2Jp
bGVXZWJTdHlsZTo6ZmluZFJhZGlvKGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIGJv
b2wgZGlzYWJsZWQpIGNvbnN0Ci17Ci0gICAgUVBpeG1hcCByZXN1bHQ7Ci0gICAgc3RhdGljIGNv
bnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS0iKSArIFFMYXRp
bjFTdHJpbmcobWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkgKyBRTGF0aW4xU3RyaW5nKCItcmFk
aW8tIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53
aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKSArIFFTdHJpbmc6Om51bWJlcihzaXplLmhlaWdo
dCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKQotICAgICAgICArIChkaXNhYmxlZCA/IFFMYXRpbjFT
dHJpbmcoImRpc2FibGVkIikgOiBRTGF0aW4xU3RyaW5nKCJlbmFibGVkIikpICsgKGNoZWNrZWQg
PyBRTGF0aW4xU3RyaW5nKCItY2hlY2tlZCIpIDogUUxhdGluMVN0cmluZygiIikpOwotICAgIGlm
ICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgewotICAgICAgICByZXN1bHQgPSBR
UGl4bWFwKHNpemUpOwotICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAg
ICAgICBRUGFpbnRlciBwYWludGVyKCZyZXN1bHQpOwotICAgICAgICBkcmF3UmFkaW8oJnBhaW50
ZXIsIHNpemUsIGNoZWNrZWQsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3Jh
eSk7Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3Q29udHJv
bChDb250cm9sRWxlbWVudCBlbGVtZW50LCBjb25zdCBRU3R5bGVPcHRpb24qIG9wdGlvbiwgUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFXaWRnZXQqIHdpZGdldCkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKGVsZW1lbnQpIHsKLSAgICBjYXNlIENFX0NoZWNrQm94OiB7Ci0gICAgICAgIFFSZWN0IHJl
Y3QgPSBvcHRpb24tPnJlY3Q7Ci0gICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZWQgPSAhKG9wdGlv
bi0+c3RhdGUgJiBTdGF0ZV9FbmFibGVkKTsKLQotICAgICAgICBRTGluZWFyR3JhZGllbnQgbGlu
ZWFyR3JhZGllbnQocmVjdC50b3BMZWZ0KCksIHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAg
aWYgKGRpc2FibGVkKSB7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAu
MCwgUXQ6OmxpZ2h0R3JheSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0
KDAuNSwgUXQ6OndoaXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOwotICAgICAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0Q29sb3JBdCgwLjUsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBwYWludGVyLT5zZXRQZW4oUVBlbihkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFy
a0dyYXkpKTsKLSAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2gobGluZWFyR3JhZGllbnQpOwotICAg
ICAgICBwYWludGVyLT5kcmF3UmVjdChyZWN0KTsKLSAgICAgICAgcmVjdC5hZGp1c3QoMSwgMSwg
LTEsIC0xKTsKLQotICAgICAgICBpZiAob3B0aW9uLT5zdGF0ZSAmIFN0YXRlX09mZikKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIFFQaXhtYXAgY2hlY2tlciA9IGZpbmRDaGVja2VyKHJl
Y3QsIGRpc2FibGVkKTsKLSAgICAgICAgaWYgKGNoZWNrZXIuaXNOdWxsKCkpCi0gICAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBpbnQgeCA9IChyZWN0LndpZHRoKCkgLSBjaGVja2VyLndpZHRo
KCkpID4+IDE7Ci0gICAgICAgIGludCB5ID0gKHJlY3QuaGVpZ2h0KCkgLSBjaGVja2VyLmhlaWdo
dCgpKSA+PiAxOwotICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QueCgpICsgeCwgcmVj
dC55KCkgKyB5LCBjaGVja2VyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ0Vf
UmFkaW9CdXR0b246IHsKLSAgICAgICAgY29uc3QgYm9vbCBkaXNhYmxlZCA9ICEob3B0aW9uLT5z
dGF0ZSAmIFN0YXRlX0VuYWJsZWQpOwotICAgICAgICBRUGl4bWFwIHJhZGlvID0gZmluZFJhZGlv
KG9wdGlvbi0+cmVjdC5zaXplKCksIG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9PbiwgZGlzYWJsZWQp
OwotICAgICAgICBpZiAocmFkaW8uaXNOdWxsKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgcGFpbnRlci0+ZHJhd1BpeG1hcChvcHRpb24tPnJlY3QueCgpLCBvcHRpb24tPnJlY3QueSgp
LCByYWRpbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENFX1B1c2hCdXR0b246
IHsKLSAgICAgICAgY29uc3QgYm9vbCBkaXNhYmxlZCA9ICEob3B0aW9uLT5zdGF0ZSAmIFN0YXRl
X0VuYWJsZWQpOwotICAgICAgICBRUmVjdCByZWN0ID0gb3B0aW9uLT5yZWN0OwotICAgICAgICBR
UGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBR
dDo6Um91bmRKb2luKTsKLSAgICAgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7Ci0KLSAgICAgICAg
Y29uc3QgYm9vbCBzdW5rZW4gPSAob3B0aW9uLT5zdGF0ZSAmIFN0YXRlX1N1bmtlbik7Ci0gICAg
ICAgIGlmIChzdW5rZW4pIHsKLSAgICAgICAgICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNr
Z3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgUUJydXNoKFF0OjpkYXJrR3JheSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBRTGluZWFyR3JhZGllbnQgbGluZWFy
R3JhZGllbnQ7Ci0gICAgICAgIGlmIChkaXNhYmxlZCkgewotICAgICAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0RmluYWxTdG9wKHJlY3QudG9wTGVmdCgpKTsKLSAgICAgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRDb2xvckF0KDEuMCwgUXQ6OndoaXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAg
ICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChRUG9pbnQocmVjdC5ib3R0b21MZWZ0
KCkueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ib3R0b21MZWZ0KCkueSgpIC0g
Lyogb2Zmc2V0IGxpbWl0IGZvciBncmFkaWVudCAqLyAyMCkpOwotICAgICAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMC40LCBRdDo6d2hpdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAg
ZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBsaW5l
YXJHcmFkaWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBRV2luZG93c1N0eWxlOjpkcmF3Q29udHJvbChlbGVtZW50LCBvcHRpb24sIHBhaW50ZXIsIHdp
ZGdldCk7Ci0gICAgfQotfQotdm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3UHJpbWl0aXZlKFBy
aW1pdGl2ZUVsZW1lbnQgZWxlbWVudCwgY29uc3QgUVN0eWxlT3B0aW9uKiBvcHRpb24sIFFQYWlu
dGVyKiBwYWludGVyLCBjb25zdCBRV2lkZ2V0KiB3aWRnZXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNo
IChlbGVtZW50KSB7Ci0gICAgY2FzZSBRU3R5bGU6OlBFX1BhbmVsTGluZUVkaXQ6IHsKLSAgICAg
ICAgY29uc3QgYm9vbCBkaXNhYmxlZCA9ICEob3B0aW9uLT5zdGF0ZSAmIFN0YXRlX0VuYWJsZWQp
OwotICAgICAgICBjb25zdCBib29sIHN1bmtlbiA9IChvcHRpb24tPnN0YXRlICYgU3RhdGVfU3Vu
a2VuKTsKLSAgICAgICAgUVJlY3QgcmVjdCA9IG9wdGlvbi0+cmVjdDsKLSAgICAgICAgUVBlbiBw
ZW4oUXQ6OmRhcmtHcmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJv
dW5kSm9pbik7Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwotCi0gICAgICAgIGlmIChz
dW5rZW4pIHsKLSAgICAgICAgICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBh
aW50ZXIsIHBlbiwgcmVjdCwgUUJydXNoKFF0OjpkYXJrR3JheSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQ7
Ci0gICAgICAgIGlmIChkaXNhYmxlZCkgewotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0
U3RhcnQocmVjdC50b3BMZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Rmlu
YWxTdG9wKHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNl
dENvbG9yQXQoMC4wLCBRdDo6bGlnaHRHcmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50
LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC50b3BMZWZ0KCkpOwotICAgICAgICAgICAg
bGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKFFQb2ludChyZWN0LnRvcExlZnQoKS54KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZWN0LnRvcExlZnQoKS55KCkgKyAvKiBvZmZzZXQgbGlt
aXQgZm9yIGdyYWRpZW50ICovIDIwKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRD
b2xvckF0KDAuMCwgUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNl
dENvbG9yQXQoMC4zNSwgUXQ6OndoaXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRyYXdSZWN0
YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgbGluZWFyR3JhZGll
bnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUVdpbmRv
d3NTdHlsZTo6ZHJhd1ByaW1pdGl2ZShlbGVtZW50LCBvcHRpb24sIHBhaW50ZXIsIHdpZGdldCk7
Ci0gICAgfQotfQotCi12b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0
dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBj
b25zdAotewotICAgIGludCByZWN0V2lkdGggPSBzaXplLndpZHRoKCkgLSAxOwotICAgIGludCB3
aWR0aCA9IHFNYXgoMiwgcmVjdFdpZHRoID4+IDMpOwotICAgIGludCBkaXN0YW5jZSA9IChyZWN0
V2lkdGggLSAzICogd2lkdGgpID4+IDE7Ci0gICAgaW50IHRvcCA9IChzaXplLmhlaWdodCgpIC0g
d2lkdGgpID4+IDE7Ci0KLSAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOwotICAgIHBhaW50ZXIt
PnNldEJydXNoKGNvbG9yKTsKLQotICAgIHBhaW50ZXItPmRyYXdSZWN0KDAsIHRvcCwgd2lkdGgs
IHdpZHRoKTsKLSAgICBwYWludGVyLT5kcmF3UmVjdCh3aWR0aCArIGRpc3RhbmNlLCB0b3AsIHdp
ZHRoLCB3aWR0aCk7Ci0gICAgcGFpbnRlci0+ZHJhd1JlY3QoMiAqICh3aWR0aCArIGRpc3RhbmNl
KSwgdG9wLCB3aWR0aCwgd2lkdGgpOwotfQotCi12b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdT
aW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIFFD
b2xvciBjb2xvcikgY29uc3QKLXsKLSAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAg
aW50IG1pZGxlID0gd2lkdGggPj4gMTsKLSAgICBRVmVjdG9yPFFMaW5lPiBsaW5lcyh3aWR0aCAr
IDEpOwotCi0gICAgZm9yIChpbnQgeCA9IDAsIHkgPSAwOyAgeCA8IG1pZGxlOyB4KyssIHkrKykg
ewotICAgICAgICBsaW5lc1t4XSA9IFFMaW5lKHgsIHksIHgsIHkgKyAyKTsKLSAgICAgICAgbGlu
ZXNbeCArIG1pZGxlXSA9IFFMaW5lKHdpZHRoIC0geCAtIDEsIHksIHdpZHRoIC0geCAtIDEsIHkg
KyAyKTsKLSAgICB9Ci0gICAgLy8gSnVzdCB0byBlbnN1cmUgdGhlIGxpbmVzJyBpbnRlcnNlY3Rp
b24uCi0gICAgbGluZXNbd2lkdGhdID0gUUxpbmUobWlkbGUsIG1pZGxlLCBtaWRsZSwgbWlkbGUg
KyAyKTsKLQotICAgIHBhaW50ZXItPnNldFBlbihjb2xvcik7Ci0gICAgcGFpbnRlci0+c2V0QnJ1
c2goY29sb3IpOwotICAgIHBhaW50ZXItPmRyYXdMaW5lcyhsaW5lcyk7Ci19Ci0KLVFTaXplIFF0
TW9iaWxlV2ViU3R5bGU6OmdldEJ1dHRvbkltYWdlU2l6ZShjb25zdCBRU2l6ZSYgYnV0dG9uU2l6
ZSkgY29uc3QKLXsKLSAgICBjb25zdCBpbnQgYm9yZGVyID0gcU1heCgzLCBidXR0b25TaXplLndp
ZHRoKCkgPj4gMykgPDwgMTsKLQotICAgIGludCB3aWR0aCA9IGJ1dHRvblNpemUud2lkdGgoKSAt
IGJvcmRlcjsKLSAgICBpbnQgaGVpZ2h0ID0gYnV0dG9uU2l6ZS5oZWlnaHQoKSAtIGJvcmRlcjsK
LQotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgcmV0dXJuIFFTaXpl
KCk7Ci0KLSAgICBpZiAoaGVpZ2h0ID49ICh3aWR0aCA+PiAxKSkKLSAgICAgICAgd2lkdGggPSB3
aWR0aCA+PiAxIDw8IDE7Ci0gICAgZWxzZQotICAgICAgICB3aWR0aCA9IGhlaWdodCA8PCAxOwot
Ci0gICAgcmV0dXJuIFFTaXplKHdpZHRoICsgMSwgd2lkdGgpOwotfQotCi1RUGl4bWFwIFF0TW9i
aWxlV2ViU3R5bGU6OmZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBtdWx0
aXBsZSwgYm9vbCBkaXNhYmxlZCkgY29uc3QKLXsKLSAgICBRUGl4bWFwIHJlc3VsdDsKLSAgICBR
U2l6ZSBpbWFnZVNpemUgPSBnZXRCdXR0b25JbWFnZVNpemUoc2l6ZSk7Ci0KLSAgICBpZiAoaW1h
Z2VTaXplLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gUVBpeG1hcCgpOwotICAgIHN0YXRpYyBj
b25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtIikgKyBRTGF0
aW4xU3RyaW5nKG1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpICsgUUxhdGluMVN0cmluZygiLWNv
bWJvLSIpOwotICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgKG11bHRpcGxlID8gUUxhdGluMVN0
cmluZygibXVsdGlwbGUtIikgOiBRTGF0aW4xU3RyaW5nKCJzaW1wbGUtIikpCi0gICAgICAgICsg
UVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKSAr
IFFTdHJpbmc6Om51bWJlcihpbWFnZVNpemUuaGVpZ2h0KCkpCi0gICAgICAgICsgUUxhdGluMVN0
cmluZygiLSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6IFFMYXRp
bjFTdHJpbmcoImVuYWJsZWQiKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCBy
ZXN1bHQpKSB7Ci0gICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoaW1hZ2VTaXplKTsKLSAgICAgICAg
cmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigm
cmVzdWx0KTsKLSAgICAgICAgaWYgKG11bHRpcGxlKQotICAgICAgICAgICAgZHJhd011bHRpcGxl
Q29tYm9CdXR0b24oJnBhaW50ZXIsIGltYWdlU2l6ZSwgZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5
IDogUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhd1NpbXBsZUNv
bWJvQnV0dG9uKCZwYWludGVyLCBpbWFnZVNpemUsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6
IFF0OjpkYXJrR3JheSk7Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBRdE1vYmlsZVdlYlN0eWxl
OjpkcmF3Q29tcGxleENvbnRyb2woQ29tcGxleENvbnRyb2wgY29udHJvbCwgY29uc3QgUVN0eWxl
T3B0aW9uQ29tcGxleCogb3B0aW9uLCBRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVdpZGdldCog
d2lkZ2V0KSBjb25zdAotewotICAgIHN3aXRjaCAoY29udHJvbCkgewotICAgIGNhc2UgQ0NfQ29t
Ym9Cb3g6IHsKLSAgICAgICAgYm9vbCBtdWx0aXBsZSA9IGZhbHNlOwotICAgICAgICBjb25zdCBi
b29sIGRpc2FibGVkID0gIShvcHRpb24tPnN0YXRlICYgU3RhdGVfRW5hYmxlZCk7Ci0KLSAgICAg
ICAgY29uc3QgUVN0eWxlT3B0aW9uQ29tYm9Cb3gqIGNtYiA9IDA7Ci0gICAgICAgIGNvbnN0IFdl
YkNvcmU6OlF0U3R5bGVPcHRpb25XZWJDb21ib0JveCogd2ViQ29tYm8gPSBzdGF0aWNfY2FzdDxj
b25zdCBXZWJDb3JlOjpRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3gqPihvcHRpb24pOwotCi0gICAg
ICAgIGlmICh3ZWJDb21ibykgewotICAgICAgICAgICAgbXVsdGlwbGUgPSB3ZWJDb21iby0+bXVs
dGlwbGUoKTsKLSAgICAgICAgICAgIGNtYiA9IHdlYkNvbWJvOwotICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGNtYiA9IHFzdHlsZW9wdGlvbl9jYXN0PGNvbnN0IFFTdHlsZU9wdGlvbkNvbWJv
Qm94Kj4ob3B0aW9uKTsKLQotICAgICAgICBpZiAoIWNtYikgewotICAgICAgICAgICAgUVdpbmRv
d3NTdHlsZTo6ZHJhd0NvbXBsZXhDb250cm9sKGNvbnRyb2wsIG9wdGlvbiwgcGFpbnRlciwgd2lk
Z2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCEoY21i
LT5zdWJDb250cm9scyAmIFNDX0NvbWJvQm94QXJyb3cpKQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgUVJlY3QgcmVjdCA9IG9wdGlvbi0+cmVjdDsKLSAgICAgICAgUVBlbiBwZW4oUXQ6
OmRhcmtHcmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9p
bik7Ci0gICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudDsKLSAgICAgICAgaWYg
KGRpc2FibGVkKSB7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJv
dHRvbUxlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AocmVj
dC50b3BMZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAs
IFF0OjpncmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBR
dDo6d2hpdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0RmluYWxTdG9wKFFQb2ludChyZWN0LmJvdHRvbUxlZnQoKS54KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZWN0LmJvdHRvbUxlZnQoKS55KCkgLSAvKiBvZmZzZXQgbGltaXQgZm9yIGdy
YWRpZW50ICovIDIwKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAu
MCwgUXQ6OmdyYXkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjQs
IFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9s
QmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsKLQotICAgICAg
ICByZWN0ID0gc3ViQ29udHJvbFJlY3QoQ0NfQ29tYm9Cb3gsIGNtYiwgU0NfQ29tYm9Cb3hBcnJv
dywgd2lkZ2V0KTsKLSAgICAgICAgUVBpeG1hcCBwaWMgPSBmaW5kQ29tYm9CdXR0b24ocmVjdC5z
aXplKCksIG11bHRpcGxlLCBkaXNhYmxlZCk7Ci0KLSAgICAgICAgaWYgKHBpYy5pc051bGwoKSkK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGludCB4ID0gKHJlY3Qud2lkdGgoKSAtIHBp
Yy53aWR0aCgpKSA+PiAxOwotICAgICAgICBpbnQgeSA9IChyZWN0LmhlaWdodCgpIC0gcGljLmhl
aWdodCgpKSA+PiAxOwotICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QueCgpICsgeCwg
cmVjdC55KCkgKyB5LCBwaWMpOwotCi0gICAgICAgIHBhaW50ZXItPnNldFBlbihkaXNhYmxlZCA/
IFF0OjpncmF5IDogUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgcGFpbnRlci0+ZHJhd0xpbmUocmVj
dC5sZWZ0KCkgLSAyLCByZWN0LnRvcCgpICsgMiwgcmVjdC5sZWZ0KCkgLSAyLCByZWN0LmJvdHRv
bSgpIC0gMik7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IFFXaW5kb3dzU3R5bGU6OmRyYXdDb21wbGV4Q29udHJvbChjb250cm9sLCBvcHRpb24sIHBhaW50
ZXIsIHdpZGdldCk7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9RdE1vYmlsZVdlYlN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9R
dE1vYmlsZVdlYlN0eWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiOTlkMmIu
LjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRNb2JpbGVXZWJTdHls
ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICovCi0KLSNp
Zm5kZWYgUXRNb2JpbGVXZWJTdHlsZV9oCi0jZGVmaW5lIFF0TW9iaWxlV2ViU3R5bGVfaAotCi0j
aW5jbHVkZSA8UVdpbmRvd3NTdHlsZT4KLQotY2xhc3MgUXRNb2JpbGVXZWJTdHlsZSA6IHB1Ymxp
YyBRV2luZG93c1N0eWxlIHsKLXB1YmxpYzoKLSAgICBRdE1vYmlsZVdlYlN0eWxlKCk7Ci0KLSAg
ICB2b2lkIGRyYXdDb250cm9sKENvbnRyb2xFbGVtZW50LCBjb25zdCBRU3R5bGVPcHRpb24qLCBR
UGFpbnRlciosIGNvbnN0IFFXaWRnZXQqKSBjb25zdDsKLSAgICB2b2lkIGRyYXdDb21wbGV4Q29u
dHJvbChDb21wbGV4Q29udHJvbCwgY29uc3QgUVN0eWxlT3B0aW9uQ29tcGxleCosIFFQYWludGVy
KiwgY29uc3QgUVdpZGdldCopIGNvbnN0OwotICAgIHZvaWQgZHJhd1ByaW1pdGl2ZShQcmltaXRp
dmVFbGVtZW50LCBjb25zdCBRU3R5bGVPcHRpb24qLCBRUGFpbnRlciosIGNvbnN0IFFXaWRnZXQq
KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGRyYXdDaGVja2VyKFFQYWludGVyKiBwYWlu
dGVyLCBpbnQgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdDsKLSAgICBRUGl4bWFwIGZpbmRDaGVj
a2VyKGNvbnN0IFFSZWN0JiByZWN0LCBib29sIGRpc2FibGVkKSBjb25zdDsKLQotICAgIHZvaWQg
ZHJhd1JhZGlvKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVj
a2VkLCBRQ29sb3IgY29sb3IpIGNvbnN0OwotICAgIFFQaXhtYXAgZmluZFJhZGlvKGNvbnN0IFFT
aXplJiBzaXplLCBib29sIGNoZWNrZWQsIGJvb2wgZGlzYWJsZWQpIGNvbnN0OwotCi0gICAgUVNp
emUgZ2V0QnV0dG9uSW1hZ2VTaXplKGNvbnN0IFFTaXplJiBidXR0b25TaXplKSBjb25zdDsKLSAg
ICB2b2lkIGRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNp
emUmIHNpemUsIFFDb2xvciBjb2xvcikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3TXVsdGlwbGVDb21i
b0J1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIFFDb2xvciBjb2xv
cikgY29uc3Q7Ci0gICAgUVBpeG1hcCBmaW5kQ29tYm9CdXR0b24oY29uc3QgUVNpemUmIHNpemUs
IGJvb2wgbXVsdGlwbGUsIGJvb2wgZGlzYWJsZWQpIGNvbnN0OwotCi19OwotCi0jZW5kaWYgLy8g
UXRNb2JpbGVXZWJTdHlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUVN0eWxlLmNwcApzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcApyZW5hbWUgdG8gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCmluZGV4IGJkNDY1ZjAuLjBjMDk2
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNw
cApAQCAtMjgsNyArMjgsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJSZW5kZXJUaGVtZVF0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKIAogI2lu
Y2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
QEAgLTQ0LDE2ICs0NCwxMyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaWYgVVNF
KFFUX01PQklMRV9USEVNRSkKLSNpbmNsdWRlICJRdE1vYmlsZVdlYlN0eWxlLmgiCi0jZW5kaWYK
ICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1
ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjZW5kaWYKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgogI2luY2x1ZGUg
IlF0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIgogI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5oIgpA
QCAtMTEzLDE3ICsxMTAsNiBAQCBzdGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblNpemUgPSA5Owogc3RhdGljIGNvbnN0IGZsb2F0IG1heFNlYXJjaEZpZWxk
UmVzdWx0c0RlY29yYXRpb25TaXplID0gMzA7CiBzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNl
YXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoID0gMTg7CiAKLSNpZiBVU0UoUVRfTU9CSUxFX1RI
RU1FKQotbmFtZXNwYWNlIHsKLSAgICBmbG9hdCBidXR0b25QYWRkaW5nTGVmdCA9IDE4OwotICAg
IGZsb2F0IGJ1dHRvblBhZGRpbmdSaWdodCA9IDE4OwotICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdU
b3AgPSAyOwotICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdCb3R0b20gPSAzOwotICAgIGZsb2F0IG1l
bnVMaXN0UGFkZGluZyA9IDk7Ci0gICAgZmxvYXQgdGV4dEZpZWxkUGFkZGluZyA9IDU7Ci19Ci0j
ZW5kaWYKLQogU3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVRdCogdGhlbWUs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQogewogICAgIGluaXQocGFpbnRJbmZvLmNvbnRl
eHQgPyBwYWludEluZm8uY29udGV4dCA6IDAsIHRoZW1lLT5xU3R5bGUoKSk7CkBAIC0xOTQsMTEg
KzE4MCw3IEBAIFJlbmRlclRoZW1lUXQ6OlJlbmRlclRoZW1lUXQoUGFnZSogcGFnZSkKICAgICBt
X2J1dHRvbkZvbnRQaXhlbFNpemUgPSBmb250SW5mby5waXhlbFNpemUoKTsKICNlbmRpZgogCi0j
aWYgVVNFKFFUX01PQklMRV9USEVNRSkKLSAgICBtX2ZhbGxiYWNrU3R5bGUgPSBuZXcgUXRNb2Jp
bGVXZWJTdHlsZTsKLSNlbHNlCiAgICAgbV9mYWxsYmFja1N0eWxlID0gUVN0eWxlRmFjdG9yeTo6
Y3JlYXRlKFFMYXRpbjFTdHJpbmcoIndpbmRvd3MiKSk7Ci0jZW5kaWYKIH0KIAogUmVuZGVyVGhl
bWVRdDo6flJlbmRlclRoZW1lUXQoKQpAQCAtMjA5LDMzICsxOTEsNiBAQCBSZW5kZXJUaGVtZVF0
Ojp+UmVuZGVyVGhlbWVRdCgpCiAjZW5kaWYKIH0KIAotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUp
Ci1ib29sIFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBmaWxsLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAotewotICAgIHN3aXRjaCAoc3R5bGUt
PmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0
b25QYXJ0OgotICAgIGNhc2UgTWVudWxpc3RQYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0
OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICAg
ICAgLy8gVGVzdCB0aGUgc3R5bGUgdG8gc2VlIGlmIHRoZSBVQSBib3JkZXIgYW5kIGJhY2tncm91
bmQgbWF0Y2guCi0gICAgICAgIHJldHVybiAoc3R5bGUtPmJvcmRlcigpICE9IGJvcmRlcgotICAg
ICAgICAgICAgICAgIHx8ICpzdHlsZS0+YmFja2dyb3VuZExheWVycygpICE9IGZpbGwKLSAgICAg
ICAgICAgICAgICB8fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFj
a2dyb3VuZENvbG9yKSAhPSBiYWNrZ3JvdW5kQ29sb3IpOwotICAgIGNhc2UgQ2hlY2tib3hQYXJ0
OgotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJv
cmRlciwgZmlsbCwgYmFja2dyb3VuZENvbG9yKTsKLSAgICB9Ci19Ci0KLWludCBSZW5kZXJUaGVt
ZVF0Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIDE7Ci19Ci0jZWxzZQogLy8gUmVtb3ZlIHRoaXMgd2hlbiBTZWFyY2hG
aWVsZFBhcnQgaXMgc3R5bGUtYWJsZSBpbiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKCkK
IGJvb2wgUmVuZGVyVGhlbWVRdDo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGZpbGwsIGNv
bnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CkBAIC0yNDksNyArMjA0LDYgQEAg
Ym9vbCBSZW5kZXJUaGVtZVF0Ojppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlLCBjb25zdCBCb3JkZXJEYXRhJgogICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29u
dHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBmaWxsLCBiYWNrZ3JvdW5kQ29sb3IpOwogICAgIH0K
IH0KLSNlbmRpZgogCiAvLyBmb3Igc29tZSB3aWRnZXQgcGFpbnRpbmcsIHdlIG5lZWQgdG8gZmFs
bGJhY2sgdG8gV2luZG93cyBzdHlsZQogUVN0eWxlKiBSZW5kZXJUaGVtZVF0OjpmYWxsYmFja1N0
eWxlKCkgY29uc3QKQEAgLTI1OSwxMCArMjEzLDYgQEAgUVN0eWxlKiBSZW5kZXJUaGVtZVF0Ojpm
YWxsYmFja1N0eWxlKCkgY29uc3QKIAogUVN0eWxlKiBSZW5kZXJUaGVtZVF0OjpxU3R5bGUoKSBj
b25zdAogewotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgcmV0dXJuIGZhbGxiYWNrU3R5
bGUoKTsKLSNlbmRpZgotCiAgICAgaWYgKG1fcGFnZSkgewogICAgICAgICBRV2ViUGFnZUNsaWVu
dCogcGFnZUNsaWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wbGF0Zm9ybVBhZ2VD
bGllbnQoKTsKIApAQCAtNDk3LDcgKzQ0Nyw2IEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6Y29tcHV0
ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAogICAgICAg
ICBzaXplID0gUVNpemUocmFkaW9XaWR0aCwgcmFkaW9XaWR0aCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSNpZiAhVVNFKFFUX01PQklMRV9USEVNRSkKICAgICBjYXNlIFB1c2hCdXR0b25QYXJ0
OgogICAgIGNhc2UgQnV0dG9uUGFydDogewogICAgICAgICBRU3R5bGVPcHRpb25CdXR0b24gc3R5
bGVPcHRpb247CkBAIC01MjcsNyArNDc2LDYgQEAgdm9pZCBSZW5kZXJUaGVtZVF0Ojpjb21wdXRl
U2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0CiAgICAgICAg
IHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTU4
MywxMyArNTMxLDExIEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzCiAgICAgZm9udERlc2NyaXB0
aW9uLnNldENvbXB1dGVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7CiAjZW5kaWYKIAotI2lmICFV
U0UoUVRfTU9CSUxFX1RIRU1FKQogICAgIEZvbnRGYW1pbHkgZm9udEZhbWlseTsKICAgICBmb250
RmFtaWx5LnNldEZhbWlseShtX2J1dHRvbkZvbnRGYW1pbHkpOwogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRGYW1pbHkoZm9udEZhbWlseSk7CiAgICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihm
b250RGVzY3JpcHRpb24pOwogICAgIHN0eWxlLT5mb250KCkudXBkYXRlKHNlbGVjdG9yLT5mb250
U2VsZWN0b3IoKSk7Ci0jZW5kaWYKICAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHls
ZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CiAgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7CiAgICAg
c2V0QnV0dG9uUGFkZGluZyhzdHlsZSk7CkBAIC02MDAsNyArNTQ2LDYgQEAgdm9pZCBSZW5kZXJU
aGVtZVF0OjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICBjb21w
dXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7CiB9CiAKLSNpZiAhVVNFKFFUX01PQklMRV9USEVN
RSkKIHZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0CiB7CiAgICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwpAQCAtNjM1
LDE3ICs1ODAsNiBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OnNldEJ1dHRvblBhZGRpbmcoUmVuZGVy
U3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRk
aW5nVG9wLCBGaXhlZCkpOwogICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRk
aW5nQm90dG9tLCBGaXhlZCkpOwogfQotI2Vsc2UKLXZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0QnV0
dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgaWYgKCFzdHlsZSkK
LSAgICAgICAgcmV0dXJuOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoYnV0dG9u
UGFkZGluZ0xlZnQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgo
YnV0dG9uUGFkZGluZ1JpZ2h0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExl
bmd0aChidXR0b25QYWRkaW5nVG9wLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90
dG9tKExlbmd0aChidXR0b25QYWRkaW5nQm90dG9tLCBGaXhlZCkpOwotfQotI2VuZGlmCiAKIGJv
b2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWlu
dEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCiB7CkBAIC02ODEsMTAgKzYxNSw2IEBAIHZvaWQg
UmVuZGVyVGhlbWVRdDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiBzdHlsZSwKICAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKICAgICBzdHlsZS0+
cmVzZXRQYWRkaW5nKCk7CiAgICAgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOwotI2lm
IFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aCh0
ZXh0RmllbGRQYWRkaW5nLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVu
Z3RoKHRleHRGaWVsZFBhZGRpbmcsIEZpeGVkKSk7Ci0jZW5kaWYKIH0KIAogYm9vbCBSZW5kZXJU
aGVtZVF0OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikKQEAgLTY5NywxMiArNjI3LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZVF0OjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwg
Y29uc3QgSW4KICAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIHBhbmVsKTsKICAgICBwYW5l
bC5yZWN0ID0gcjsKICAgICBwYW5lbC5saW5lV2lkdGggPSBmaW5kRnJhbWVMaW5lV2lkdGgocVN0
eWxlKCkpOwotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgaWYgKGlzUHJlc3NlZChvKSkK
LSAgICAgICAgcGFuZWwuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0jZWxzZQogICAg
IHBhbmVsLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotI2VuZGlmCiAgICAgcGFuZWwu
ZmVhdHVyZXMgPSBRU3R5bGVPcHRpb25GcmFtZVYyOjpOb25lOwogCiAgICAgLy8gR2V0IHRoZSBj
b3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgdGV4dCBmaWVsZApAQCAtNzQyLDkgKzY2Nyw2IEBAIHZv
aWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBFCiAKICAgICAvLyBBZGQgaW4gdGhlIHBhZGRpbmcgdGhhdCB3
ZSdkIGxpa2UgdG8gdXNlLgogICAgIHNldFBvcHVwUGFkZGluZyhzdHlsZSk7Ci0jaWYgVVNFKFFU
X01PQklMRV9USEVNRSkKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKG1lbnVMaXN0
UGFkZGluZywgRml4ZWQpKTsKLSNlbmRpZgogfQogCiB2b2lkIFJlbmRlclRoZW1lUXQ6OnNldFBv
cHVwUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CkBAIC03OTUsMTMgKzcxNyw5IEBA
IGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgaSwgY29uc3QgSW50CiAKIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKIHsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIC8vIE1vYmls
ZSB0aGVtZSB1c2VzIGJvcmRlciByYWRpdXMuCi0jZWxzZQogICAgIC8vIFdPUktBUk9VTkQgYmVj
YXVzZSBodG1sLmNzcyBzcGVjaWZpZXMgLXdlYmtpdC1ib3JkZXItcmFkaXVzIGZvciA8c2VsZWN0
PiBzbyB3ZSBvdmVycmlkZSBpdCBoZXJlCiAgICAgLy8gc2VlIGFsc28gaHR0cDovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzOTkKICAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRp
dXMoKTsKLSNlbmRpZgogCiAgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgogICAgIHN0
eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKQEAgLTEwMjgsOCArOTQ2LDggQEAgYm9vbCBS
ZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmYKICAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0b24gc3Rh
eXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94LgogICAgIGludCBjYW5j
ZWxCdXR0b25TaXplID0gcU1pbihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgcU1pbihpbnB1dENv
bnRlbnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKICAgICAvLyBDYWxjdWxhdGUgY2FuY2Vs
IGJ1dHRvbidzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCBlbGVtZW50LgotICAg
IC8vIENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuICBSb3VuZCB1cCB0aG91Z2gsIHNvIGlm
IGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAotICAgIC8vIGJlIG9u
ZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuICBUaGlzIHRlbmRzIHRv
IGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCisgICAgLy8gQ2VudGVyIHRoZSBidXR0b24gdmVy
dGljYWxseS4gUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9m
Zi1jZW50ZXIsIGl0IHdpbGwKKyAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0
b20gb2YgdGhlIGZpZWxkLiBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQu
CiAgICAgSW50UmVjdCBjYW5jZWxCdXR0b25SZWN0KG8tPm9mZnNldEZyb21BbmNlc3RvckNvbnRh
aW5lcihpbnB1dFJlbmRlckJveCkud2lkdGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5wdXRDb250ZW50Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBjYW5j
ZWxCdXR0b25TaXplICsgMSkgLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5j
ZWxCdXR0b25TaXplLCBjYW5jZWxCdXR0b25TaXplKTsKQEAgLTExNTUsMTEgKzEwNzMsNiBAQCBi
b29sIFJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkg
Y29uc3QKIAogdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4
aXN0cyhRUGFsZXR0ZSYgcGFsZXR0ZSkgY29uc3QKIHsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1F
KQotICAgIHN0YXRpYyBRUGFsZXR0ZSBsaWdodEdyYXlQYWxldHRlKFF0OjpsaWdodEdyYXkpOwot
ICAgIHBhbGV0dGUgPSBsaWdodEdyYXlQYWxldHRlOwotICAgIHJldHVybjsKLSNlbmRpZgogICAg
IC8vIElmIHRoZSB3ZWJ2aWV3IGhhcyBhIGN1c3RvbSBwYWxldHRlLCB1c2UgaXQKICAgICBpZiAo
IW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ4OCw3ICsxNDAxLDcgQEAgYm9vbCBSZW5k
ZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBhaW4KIAogICAgIGlmIChNZWRpYVBsYXllciogcGxheWVyID0gbWVkaWFFbGVt
ZW50LT5wbGF5ZXIoKSkgewogICAgICAgICAvLyBHZXQgdGhlIGJ1ZmZlcmVkIHBhcnRzIG9mIHRo
ZSBtZWRpYQotICAgICAgICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkID0gcGxheWVy
LT5idWZmZXJlZCgpOworICAgICAgICBSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBwbGF5
ZXItPmJ1ZmZlcmVkKCk7CiAgICAgICAgIGlmIChidWZmZXJlZC0+bGVuZ3RoKCkgPiAwICYmIHBs
YXllci0+ZHVyYXRpb24oKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgp
KSB7CiAgICAgICAgICAgICAvLyBTZXQgdGhlIHRyYW5zZm9ybSBhbmQgYnJ1c2gKICAgICAgICAg
ICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIocC5wYWludGVyLCBvLCByKTsK
QEAgLTE1NjcsNyArMTQ4MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1
bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIAogZG91YmxlIFJlbmRlclRoZW1lUXQ6
OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICBRQXBwbGljYXRpb246
OmN1cnNvckZsYXNoVGltZSgpIC8gMTAwMC4wIC8gMi4wOworICAgIHJldHVybiBRQXBwbGljYXRp
b246OmN1cnNvckZsYXNoVGltZSgpIC8gMTAwMC4wIC8gMi4wOwogfQogCiBTdHJpbmcgUmVuZGVy
VGhlbWVRdDo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVu
YW1lcywgY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApzaW1pbGFyaXR5IGluZGV4IDg4JQpyZW5hbWUgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgKcmVuYW1lIHRvIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmgKaW5kZXggMmJjMzE4
NC4uNTExMzlkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0
eWxlLmgKQEAgLTE5LDggKzE5LDggQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgog
ICoKICAqLwotI2lmbmRlZiBSZW5kZXJUaGVtZVF0X2gKLSNkZWZpbmUgUmVuZGVyVGhlbWVRdF9o
CisjaWZuZGVmIFJlbmRlclRoZW1lUVN0eWxlX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVf
aAogCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKIApAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBT
Y3JvbGxiYXJUaGVtZVF0OwogCiBjbGFzcyBSZW5kZXJUaGVtZVF0IDogcHVibGljIFJlbmRlclRo
ZW1lIHsKIHByaXZhdGU6Ci0gICAgUmVuZGVyVGhlbWVRdChQYWdlKiBwYWdlKTsKKyAgICBSZW5k
ZXJUaGVtZVF0KFBhZ2UqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVF0KCk7CiAKIHB1Ymxp
YzoKQEAgLTUyLDkgKzUyLDkgQEAgcHVibGljOgogICAgIFN0cmluZyBleHRyYURlZmF1bHRTdHls
ZVNoZWV0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJT
dHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3Vz
UmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCBpbnQgYmFzZWxp
bmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0OworICAgIHZpcnR1YWwgaW50
IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAKICAgICAvLyBB
IG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3
aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KICAgICB2aXJ0dWFsIGJvb2wgY29udHJvbFN1cHBvcnRz
VGludHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CkBAIC02Miw3ICs2Miw3IEBAIHB1Ymxp
YzoKICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5n
IGlzIHN1cHBvcnRlZCBhdCBhbGwuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRp
bnRzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3Qg
UmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UmVw
YWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYpOwogCiAgICAgLy8gVGhlIHBs
YXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CkBAIC04MSwxMCArODEsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikgY29uc3Q7Ci0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkKLSAgICB2aXJ0dWFsIGludCBw
b3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OwotI2VuZGlmCisg
ICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYpIGNvbnN0OwogCiAj
aWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFDb250cm9sc1N0
eWxlU2hlZXQoKTsKQEAgLTkzLDEwICs5MCwxMCBAQCBwdWJsaWM6CiAgICAgUVN0eWxlKiBxU3R5
bGUoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6
ZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworICAg
IHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0
eWxlKikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwpAQCAtMTA5LDcgKzEw
Niw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwg
RWxlbWVudCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CkBAIC0xNDUsOSArMTQyLDkgQEAgcHJvdGVjdGVkOgog
CiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKICAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50
ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFs
IGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3Q7CisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9u
UmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OwogICAg
IC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVz
cyBiYXIuCi0gICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jh
cihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0OworICAgIHZpcnR1YWwgZG91
YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25z
dDsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTY2LDExICsxNjMsMTEgQEAgcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3Io
Q29udHJvbFBhcnQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIHByaXZhdGU6CiAKLSAgICB2b2lk
IHBhaW50TWVkaWFCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBJbnRSZWN0JiBy
KSBjb25zdDsKKyAgICB2b2lkIHBhaW50TWVkaWFCYWNrZ3JvdW5kKFFQYWludGVyKiwgY29uc3Qg
SW50UmVjdCYpIGNvbnN0OwogICAgIGRvdWJsZSBtZWRpYUNvbnRyb2xzQmFzZWxpbmVPcGFjaXR5
KCkgY29uc3Q7Ci0gICAgUUNvbG9yIGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihSZW5k
ZXJPYmplY3QqIG8gPSAwKSBjb25zdDsKKyAgICBRQ29sb3IgZ2V0TWVkaWFDb250cm9sRm9yZWdy
b3VuZENvbG9yKFJlbmRlck9iamVjdCogPSAwKSBjb25zdDsKICNlbmRpZgotICAgIHZvaWQgY29t
cHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdDsKKyAg
ICB2b2lkIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgRm9udCYsIGludCB3aWR0aCk7CkBAIC0xODQs
NyArMTgxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50
SWZFeGlzdHMoUVBhbGV0dGUmKSBjb25zdDsKIAotICAgIGludCBmaW5kRnJhbWVMaW5lV2lkdGgo
UVN0eWxlKiBzdHlsZSkgY29uc3Q7CisgICAgaW50IGZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUq
KSBjb25zdDsKIAogICAgIFFTdHlsZSogZmFsbGJhY2tTdHlsZSgpIGNvbnN0OwogCkBAIC0yMjEs
NyArMjE4LDcgQEAgcHVibGljOgogICAgIHsgc3R5bGUtPmRyYXdDb21wbGV4Q29udHJvbChjYywg
Jm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgaW5pdChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIFFTdHlsZSopOworICAgIHZvaWQgaW5pdChHcmFwaGljc0Nv
bnRleHQqLCBRU3R5bGUqKTsKIAogICAgIFFCcnVzaCBvbGRCcnVzaDsKICAgICBib29sIG9sZEFu
dGlhbGlhc2luZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXRNb2JpbGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdE1vYmlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc1YTMw
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXRNb2JpbGUuY3BwCkBAIC0wLDAgKzEsMTM3MSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdE1vYmlsZS5oIgorCisjaW5jbHVkZSAi
Q1NTRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1
ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5j
bHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50UXQuaCIKKyNpbmNsdWRlICJD
b2xvci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1
ZGUgIkZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkxvY2FsaXplZFN0cmlu
Z3MuaCIKKyNpZiBFTkFCTEUoVklERU8pCisjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMu
aCIKKyNlbmRpZgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisj
aW5jbHVkZSAicXdlYnNldHRpbmdzLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaWYgRU5B
QkxFKFBST0dSRVNTX1RBRykKKyNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgorI2VuZGlmCisj
aW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNs
dWRlICJTbGlkZXJUaHVtYkVsZW1lbnQuaCIKKyNpbmNsdWRlICJUaW1lUmFuZ2VzLmgiCisjaW5j
bHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKKworI2luY2x1ZGUgPFFBcHBsaWNhdGlvbj4K
KyNpbmNsdWRlIDxRQ29sb3I+CisjaW5jbHVkZSA8UUNvcmVBcHBsaWNhdGlvbj4KKyNpbmNsdWRl
IDxRRmlsZT4KKyNpbmNsdWRlIDxRRm9udE1ldHJpY3M+CisjaW5jbHVkZSA8UVBhaW50ZXI+Cisj
aW5jbHVkZSA8UVBpeG1hcENhY2hlPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CisKKy8vIFRoZXNlIHZhbHVlcyBhbGwgbWF0Y2ggU2FmYXJpL1dp
bi9DaHJvbWl1bQorc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6
ZSA9IDEzOworc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRDYW5jZWxCdXR0b25TaXplID0gOTsK
K3N0YXRpYyBjb25zdCBmbG9hdCBtaW5DYW5jZWxCdXR0b25TaXplID0gNTsKK3N0YXRpYyBjb25z
dCBmbG9hdCBtYXhDYW5jZWxCdXR0b25TaXplID0gMjE7CitzdGF0aWMgY29uc3QgZmxvYXQgZGVm
YXVsdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gMTM7CitzdGF0aWMgY29uc3Qg
ZmxvYXQgbWluU2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSA5Oworc3RhdGljIGNv
bnN0IGZsb2F0IG1heFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gMzA7CitzdGF0
aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoID0gMTg7
CisKK25hbWVzcGFjZSB7CisgICAgZmxvYXQgYnV0dG9uUGFkZGluZ0xlZnQgPSAxODsKKyAgICBm
bG9hdCBidXR0b25QYWRkaW5nUmlnaHQgPSAxODsKKyAgICBmbG9hdCBidXR0b25QYWRkaW5nVG9w
ID0gMjsKKyAgICBmbG9hdCBidXR0b25QYWRkaW5nQm90dG9tID0gMzsKKyAgICBmbG9hdCBtZW51
TGlzdFBhZGRpbmcgPSA5OworICAgIGZsb2F0IHRleHRGaWVsZFBhZGRpbmcgPSA1OworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQoUVBhaW50
ZXIqIHBhaW50ZXIsIGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0IFFC
cnVzaCYgYnJ1c2gpCit7CisgICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5wZW4oKTsKKyAgICBR
QnJ1c2ggb2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOworICAgIHBhaW50ZXItPnNldFJlbmRl
ckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisgICAgcGFpbnRlci0+c2V0UGVu
KHBlbik7CisgICAgcGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gpOworCisgICAgaW50IGxpbmUgPSAx
OworICAgIHBhaW50ZXItPmRyYXdSb3VuZGVkUmVjdChyZWN0LmFkanVzdGVkKGxpbmUsIGxpbmUs
IC1saW5lLCAtbGluZSksCisgICAgICAgICAgICAvKiB4UmFkaXVzICovIDUuMCwgLyogeVJhZGlv
dXMgKi8gNS4wKTsKKyAgICBwYWludGVyLT5zZXRQZW4ob2xkUGVuKTsKKyAgICBwYWludGVyLT5z
ZXRCcnVzaChvbGRCcnVzaCk7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjpkcmF3Q2hlY2tlcihR
UGFpbnRlciogcGFpbnRlciwgaW50IHNpemUsIFFDb2xvciBjb2xvcikgY29uc3QKK3sKKyAgICBp
bnQgYm9yZGVyID0gcU1pbihxTWF4KDEsIGludCgwLjIgKiBzaXplKSksIDYpOworICAgIGludCBj
aGVja2VyU2l6ZSA9IHFNYXgoc2l6ZSAtIDIgKiBib3JkZXIsIDMpOworICAgIGludCB3aWR0aCA9
IGNoZWNrZXJTaXplIC8gMzsKKyAgICBpbnQgbWlkZGxlID0gcU1heCgzICogY2hlY2tlclNpemUg
LyA3LCAzKTsKKyAgICBpbnQgeCA9ICgoc2l6ZSAtIGNoZWNrZXJTaXplKSA+PiAxKTsKKyAgICBp
bnQgeSA9ICgoc2l6ZSAtIGNoZWNrZXJTaXplKSA+PiAxKSArIChjaGVja2VyU2l6ZSAtIHdpZHRo
IC0gbWlkZGxlKTsKKyAgICBRVmVjdG9yPFFMaW5lRj4gbGluZXMoY2hlY2tlclNpemUgKyAxKTsK
KyAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWlk
ZGxlOyArK2kpIHsKKyAgICAgICAgbGluZXNbaV0gPSBRTGluZUYoeCwgeSwgeCwgeSArIHdpZHRo
KTsKKyAgICAgICAgKyt4OworICAgICAgICArK3k7CisgICAgfQorICAgIGZvciAoaW50IGkgPSBt
aWRkbGU7IGkgPD0gY2hlY2tlclNpemU7ICsraSkgeworICAgICAgICBsaW5lc1tpXSA9IFFMaW5l
Rih4LCB5LCB4LCB5ICsgd2lkdGgpOworICAgICAgICArK3g7CisgICAgICAgIC0teTsKKyAgICB9
CisgICAgcGFpbnRlci0+ZHJhd0xpbmVzKGxpbmVzLmNvbnN0RGF0YSgpLCBsaW5lcy5zaXplKCkp
OworfQorCitRUGl4bWFwIFN0eWxlUGFpbnRlcjo6ZmluZENoZWNrZXIoY29uc3QgUVJlY3QmIHJl
Y3QsIGJvb2wgZGlzYWJsZWQpIGNvbnN0Cit7CisgICAgaW50IHNpemUgPSBxTWluKHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgUVBpeG1hcCByZXN1bHQ7CisgICAgc3RhdGljIGNv
bnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS1tb2JpbGUtdGhl
bWUtY2hlY2tlci0iKTsKKyAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJl
cihzaXplKSArIFFMYXRpbjFTdHJpbmcoIi0iKSArIChkaXNhYmxlZCA/IFFMYXRpbjFTdHJpbmco
ImRpc2FibGVkIikgOiBRTGF0aW4xU3RyaW5nKCJlbmFibGVkIikpOworICAgIGlmICghUVBpeG1h
cENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgICAgICByZXN1bHQgPSBRUGl4bWFwKHNp
emUsIHNpemUpOworICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAg
ICBRUGFpbnRlciBwYWludGVyKCZyZXN1bHQpOworICAgICAgICBkcmF3Q2hlY2tlcigmcGFpbnRl
ciwgc2l6ZSwgZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKKyAgICAg
ICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIFN0eWxlUGFpbnRlcjo6ZHJhd1JhZGlvKFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBRQ29sb3IgY29sb3IpIGNvbnN0
Cit7CisgICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0
cnVlKTsKKworICAgIC8vIGdldCBtaW5vciBzaXplIHRvIGRvIG5vdCBwYWludCBhIHdpZGUgZWxp
cHNlCisgICAgcXJlYWwgc3F1YXJlU2l6ZSA9IHFNaW4oc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpKTsKKyAgICAvLyBkZWZsYXRlIG9uZSBwaXhlbAorICAgIFFSZWN0IHJlY3QgPSBRUmVjdChR
UG9pbnQoMSwgMSksIFFTaXplKHNxdWFyZVNpemUgLSAyLCBzcXVhcmVTaXplIC0gMikpOworICAg
IGNvbnN0IFFQb2ludCBjZW50ZXJHcmFkaWVudChyZWN0LmJvdHRvbVJpZ2h0KCkgKiAwLjcpOwor
CisgICAgUVJhZGlhbEdyYWRpZW50IHJhZGlhbEdyYWRpZW50KGNlbnRlckdyYWRpZW50LCBjZW50
ZXJHcmFkaWVudC54KCkgLSAxKTsKKyAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwg
UXQ6OndoaXRlKTsKKyAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDAuNiwgUXQ6OndoaXRl
KTsKKyAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwgY29sb3IpOworCisgICAgcGFp
bnRlci0+c2V0UGVuKGNvbG9yKTsKKyAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7CisgICAg
cGFpbnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7CisgICAgcGFpbnRlci0+c2V0QnJ1c2gocmFkaWFs
R3JhZGllbnQpOworICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOworCisgICAgaW50IGJv
cmRlciA9IDAuMSAqIChyZWN0LndpZHRoKCkgKyByZWN0LmhlaWdodCgpKTsKKyAgICBib3JkZXIg
PSBxTWluKHFNYXgoMiwgYm9yZGVyKSwgMTApOworICAgIHJlY3QuYWRqdXN0KGJvcmRlciwgYm9y
ZGVyLCAtYm9yZGVyLCAtYm9yZGVyKTsKKyAgICBpZiAoY2hlY2tlZCkgeworICAgICAgICBwYWlu
dGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3Ip
OworICAgICAgICBwYWludGVyLT5kcmF3RWxsaXBzZShyZWN0KTsKKyAgICB9Cit9CisKK1FQaXht
YXAgU3R5bGVQYWludGVyOjpmaW5kUmFkaW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tl
ZCwgYm9vbCBkaXNhYmxlZCkgY29uc3QKK3sKKyAgICBRUGl4bWFwIHJlc3VsdDsKKyAgICBzdGF0
aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFlbW81LW1vYmls
ZS10aGVtZS1yYWRpby0iKTsKKyAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51
bWJlcihzaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVy
KHNpemUuaGVpZ2h0KCkpICsgUUxhdGluMVN0cmluZygiLSIpCisgICAgICAgICsgKGRpc2FibGVk
ID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFTdHJpbmcoImVuYWJsZWQiKSkg
KyAoY2hlY2tlZCA/IFFMYXRpbjFTdHJpbmcoIi1jaGVja2VkIikgOiBRTGF0aW4xU3RyaW5nKCIi
KSk7CisgICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7CisgICAgICAg
IHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSk7CisgICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3Bh
cmVudCk7CisgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7CisgICAgICAgIGRyYXdS
YWRpbygmcGFpbnRlciwgc2l6ZSwgY2hlY2tlZCwgZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5IDog
UXQ6OmRhcmtHcmF5KTsKKyAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQp
OworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFN0eWxlUGFpbnRlcjo6ZHJh
d011bHRpcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXpl
LCBRQ29sb3IgY29sb3IpIGNvbnN0Cit7CisgICAgaW50IHJlY3RXaWR0aCA9IHNpemUud2lkdGgo
KSAtIDE7CisgICAgaW50IHdpZHRoID0gcU1heCgyLCByZWN0V2lkdGggPj4gMyk7CisgICAgaW50
IGRpc3RhbmNlID0gKHJlY3RXaWR0aCAtIDMgKiB3aWR0aCkgPj4gMTsKKyAgICBpbnQgdG9wID0g
KHNpemUuaGVpZ2h0KCkgLSB3aWR0aCkgPj4gMTsKKworICAgIHBhaW50ZXItPnNldFBlbihjb2xv
cik7CisgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOworCisgICAgcGFpbnRlci0+ZHJhd1Jl
Y3QoMCwgdG9wLCB3aWR0aCwgd2lkdGgpOworICAgIHBhaW50ZXItPmRyYXdSZWN0KHdpZHRoICsg
ZGlzdGFuY2UsIHRvcCwgd2lkdGgsIHdpZHRoKTsKKyAgICBwYWludGVyLT5kcmF3UmVjdCgyICog
KHdpZHRoICsgZGlzdGFuY2UpLCB0b3AsIHdpZHRoLCB3aWR0aCk7Cit9CisKK3ZvaWQgU3R5bGVQ
YWludGVyOjpkcmF3U2ltcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFT
aXplJiBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0Cit7CisgICAgaW50IHdpZHRoID0gc2l6ZS53
aWR0aCgpOworICAgIGludCBtaWRsZSA9IHdpZHRoID4+IDE7CisgICAgUVZlY3RvcjxRTGluZT4g
bGluZXMod2lkdGggKyAxKTsKKworICAgIGZvciAoaW50IHggPSAwLCB5ID0gMDsgIHggPCBtaWRs
ZTsgeCsrLCB5KyspIHsKKyAgICAgICAgbGluZXNbeF0gPSBRTGluZSh4LCB5LCB4LCB5ICsgMik7
CisgICAgICAgIGxpbmVzW3ggKyBtaWRsZV0gPSBRTGluZSh3aWR0aCAtIHggLSAxLCB5LCB3aWR0
aCAtIHggLSAxLCB5ICsgMik7CisgICAgfQorICAgIC8vIEp1c3QgdG8gZW5zdXJlIHRoZSBsaW5l
cycgaW50ZXJzZWN0aW9uLgorICAgIGxpbmVzW3dpZHRoXSA9IFFMaW5lKG1pZGxlLCBtaWRsZSwg
bWlkbGUsIG1pZGxlICsgMik7CisKKyAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOworICAgIHBh
aW50ZXItPnNldEJydXNoKGNvbG9yKTsKKyAgICBwYWludGVyLT5kcmF3TGluZXMobGluZXMpOwor
fQorCitRU2l6ZSBTdHlsZVBhaW50ZXI6OmdldEJ1dHRvbkltYWdlU2l6ZShjb25zdCBRU2l6ZSYg
YnV0dG9uU2l6ZSkgY29uc3QKK3sKKyAgICBjb25zdCBpbnQgYm9yZGVyID0gcU1heCgzLCBidXR0
b25TaXplLndpZHRoKCkgPj4gMykgPDwgMTsKKworICAgIGludCB3aWR0aCA9IGJ1dHRvblNpemUu
d2lkdGgoKSAtIGJvcmRlcjsKKyAgICBpbnQgaGVpZ2h0ID0gYnV0dG9uU2l6ZS5oZWlnaHQoKSAt
IGJvcmRlcjsKKworICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgcmV0
dXJuIFFTaXplKCk7CisKKyAgICBpZiAoaGVpZ2h0ID49ICh3aWR0aCA+PiAxKSkKKyAgICAgICAg
d2lkdGggPSB3aWR0aCA+PiAxIDw8IDE7CisgICAgZWxzZQorICAgICAgICB3aWR0aCA9IGhlaWdo
dCA8PCAxOworCisgICAgcmV0dXJuIFFTaXplKHdpZHRoICsgMSwgd2lkdGgpOworfQorCitRUGl4
bWFwIFN0eWxlUGFpbnRlcjo6ZmluZENvbWJvQnV0dG9uKGNvbnN0IFFTaXplJiBzaXplLCBib29s
IG11bHRpcGxlLCBib29sIGRpc2FibGVkKSBjb25zdAoreworICAgIFFQaXhtYXAgcmVzdWx0Owor
ICAgIFFTaXplIGltYWdlU2l6ZSA9IGdldEJ1dHRvbkltYWdlU2l6ZShzaXplKTsKKworICAgIGlm
IChpbWFnZVNpemUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBRUGl4bWFwKCk7CisgICAgc3Rh
dGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS1tb2Jp
bGUtdGhlbWUtY29tYm8tIik7CisgICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyAobXVsdGlwbGUg
PyBRTGF0aW4xU3RyaW5nKCJtdWx0aXBsZS0iKSA6IFFMYXRpbjFTdHJpbmcoInNpbXBsZS0iKSkK
KyAgICAgICAgKyBRU3RyaW5nOjpudW1iZXIoaW1hZ2VTaXplLndpZHRoKCkpICsgUUxhdGluMVN0
cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAg
KyBRTGF0aW4xU3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxl
ZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKTsKKyAgICBpZiAoIVFQaXhtYXBDYWNoZTo6
ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChpbWFnZVNpemUp
OworICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAgICBRUGFpbnRl
ciBwYWludGVyKCZyZXN1bHQpOworICAgICAgICBpZiAobXVsdGlwbGUpCisgICAgICAgICAgICBk
cmF3TXVsdGlwbGVDb21ib0J1dHRvbigmcGFpbnRlciwgaW1hZ2VTaXplLCBkaXNhYmxlZCA/IFF0
OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBk
cmF3U2ltcGxlQ29tYm9CdXR0b24oJnBhaW50ZXIsIGltYWdlU2l6ZSwgZGlzYWJsZWQgPyBRdDo6
bGlnaHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKKyAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQo
a2V5LCByZXN1bHQpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdHlsZVBhaW50
ZXI6OlN0eWxlUGFpbnRlcihSZW5kZXJUaGVtZVF0TW9iaWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8pCit7CisgICAgUV9VTlVTRUQodGhlbWUpOworICAgIGluaXQocGFpbnRJ
bmZvLmNvbnRleHQgPyBwYWludEluZm8uY29udGV4dCA6IDApOworfQorCit2b2lkIFN0eWxlUGFp
bnRlcjo6aW5pdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRlciA9IHN0
YXRpY19jYXN0PFFQYWludGVyKj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworCisgICAg
aWYgKHBhaW50ZXIpIHsKKyAgICAgICAgLy8gdGhlIHN0eWxlcyBvZnRlbiBhc3N1bWUgYmVpbmcg
Y2FsbGVkIHdpdGggYSBwcmlzdGluZSBwYWludGVyIHdoZXJlIG5vIGJydXNoIGlzIHNldCwKKyAg
ICAgICAgLy8gc28gcmVzZXQgaXQgbWFudWFsbHkKKyAgICAgICAgb2xkQnJ1c2ggPSBwYWludGVy
LT5icnVzaCgpOworICAgICAgICBwYWludGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7CisKKyAg
ICAgICAgLy8gcGFpbnRpbmcgdGhlIHdpZGdldCB3aXRoIGFudGktYWxpYXNpbmcgd2lsbCBtYWtl
IGl0IGJsdXJyeQorICAgICAgICAvLyBkaXNhYmxlIGl0IGhlcmUgYW5kIHJlc3RvcmUgaXQgbGF0
ZXIKKyAgICAgICAgb2xkQW50aWFsaWFzaW5nID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBh
aW50ZXI6OkFudGlhbGlhc2luZyk7CisgICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBh
aW50ZXI6OkFudGlhbGlhc2luZywgZmFsc2UpOworICAgIH0KK30KKworU3R5bGVQYWludGVyOjp+
U3R5bGVQYWludGVyKCkKK3sKKyAgICBpZiAocGFpbnRlcikgeworICAgICAgICBwYWludGVyLT5z
ZXRCcnVzaChvbGRCcnVzaCk7CisgICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnRzKFFQYWlu
dGVyOjpBbnRpYWxpYXNpbmcsIG9sZEFudGlhbGlhc2luZyk7CisgICAgfQorfQorCit2b2lkIFN0
eWxlUGFpbnRlcjo6ZHJhd0xpbmVFZGl0KGNvbnN0IFFSZWN0JiByZWN0LCBib29sIHN1bmtlbiwg
Ym9vbCBlbmFibGVkKQoreworICAgIGNvbnN0IGJvb2wgZGlzYWJsZWQgPSAhZW5hYmxlZDsKKyAg
ICBRUGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2Fw
LCBRdDo6Um91bmRKb2luKTsKKyAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKKworICAgIGlmIChz
dW5rZW4pIHsKKyAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRl
ciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtHcmF5KSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQ7CisgICAgaWYgKGRpc2Fi
bGVkKSB7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QudG9wTGVmdCgpKTsK
KyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKHJlY3QuYm90dG9tTGVmdCgpKTsK
KyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpsaWdodEdyYXkpOwor
ICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwgUXQ6OndoaXRlKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LnRvcExlZnQoKSk7
CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChRUG9pbnQocmVjdC50b3BMZWZ0
KCkueCgpLAorICAgICAgICAgICAgICAgICAgICByZWN0LnRvcExlZnQoKS55KCkgKyAvKiBvZmZz
ZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNl
dENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRD
b2xvckF0KDAuMzUsIFF0Ojp3aGl0ZSk7CisgICAgfQorCisgICAgZHJhd1JlY3Rhbmd1bGFyQ29u
dHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBsaW5lYXJHcmFkaWVudCk7Cit9CisK
K3ZvaWQgU3R5bGVQYWludGVyOjpkcmF3Q2hlY2tCb3goY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wg
Y2hlY2tlZCwgYm9vbCBlbmFibGVkKQoreworICAgIGNvbnN0IGJvb2wgZGlzYWJsZWQgPSAhZW5h
YmxlZDsKKworICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudChyZWN0LnRvcExlZnQo
KSwgcmVjdC5ib3R0b21MZWZ0KCkpOworICAgIGlmIChkaXNhYmxlZCkgeworICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmxpZ2h0R3JheSk7CisgICAgICAgIGxpbmVh
ckdyYWRpZW50LnNldENvbG9yQXQoMC41LCBRdDo6d2hpdGUpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOworICAgICAg
ICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRlKTsKKyAgICB9CisKKyAg
ICBwYWludGVyLT5zZXRQZW4oUVBlbihkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFy
a0dyYXkpKTsKKyAgICBwYWludGVyLT5zZXRCcnVzaChsaW5lYXJHcmFkaWVudCk7CisgICAgcGFp
bnRlci0+ZHJhd1JlY3QocmVjdCk7CisgICAgY29uc3QgUVJlY3QgciA9IHJlY3QuYWRqdXN0ZWQo
MSwgMSwgLTEsIC0xKTsKKworICAgIGlmICghY2hlY2tlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUVBpeG1hcCBjaGVja2VyID0gZmluZENoZWNrZXIociwgZGlzYWJsZWQpOworICAgIGlmIChj
aGVja2VyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgeCA9IChyLndpZHRo
KCkgLSBjaGVja2VyLndpZHRoKCkpID4+IDE7CisgICAgaW50IHkgPSAoci5oZWlnaHQoKSAtIGNo
ZWNrZXIuaGVpZ2h0KCkpID4+IDE7CisgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChyLngoKSArIHgs
IHIueSgpICsgeSwgY2hlY2tlcik7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjpkcmF3UmFkaW9C
dXR0b24oY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKQorewor
ICAgIFFQaXhtYXAgcmFkaW8gPSBmaW5kUmFkaW8ocmVjdC5zaXplKCksIGNoZWNrZWQsICFlbmFi
bGVkKTsKKyAgICBpZiAocmFkaW8uaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICBwYWlu
dGVyLT5kcmF3UGl4bWFwKHJlY3QueCgpLCByZWN0LnkoKSwgcmFkaW8pOworfQorCit2b2lkIFN0
eWxlUGFpbnRlcjo6ZHJhd1B1c2hCdXR0b24oY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgc3Vua2Vu
LCBib29sIGVuYWJsZWQpCit7CisgICAgUVBlbiBwZW4oUXQ6OmRhcmtHcmF5LCAxLjAsIFF0OjpT
b2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJvdW5kSm9pbik7CisgICAgcGFpbnRlci0+c2V0
UGVuKHBlbik7CisKKyAgICBpZiAoc3Vua2VuKSB7CisgICAgICAgIGRyYXdSZWN0YW5ndWxhckNv
bnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgUUJydXNoKFF0OjpkYXJrR3JheSkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdy
YWRpZW50OworICAgIGlmICghZW5hYmxlZCkgeworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRT
dGFydChyZWN0LmJvdHRvbUxlZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFs
U3RvcChyZWN0LnRvcExlZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQo
MC4wLCBRdDo6Z3JheSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBR
dDo6d2hpdGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0
KHJlY3QuYm90dG9tTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9w
KFFQb2ludChyZWN0LmJvdHRvbUxlZnQoKS54KCksCisgICAgICAgICAgICAgICAgICAgIHJlY3Qu
Ym90dG9tTGVmdCgpLnkoKSAtIC8qIG9mZnNldCBsaW1pdCBmb3IgZ3JhZGllbnQgKi8gMjApKTsK
KyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKKyAgICAg
ICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjQsIFF0Ojp3aGl0ZSk7CisgICAgfQorCisg
ICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBs
aW5lYXJHcmFkaWVudCk7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjpkcmF3Q29tYm9Cb3goY29u
c3QgUVJlY3QmIHJlY3QsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBRUGVu
IHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6
Um91bmRKb2luKTsKKyAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQ7CisgICAgaWYg
KCFlbmFibGVkKSB7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9t
TGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKHJlY3QudG9wTGVm
dCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsK
KyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0
KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QuYm90
dG9tTGVmdCgpLngoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVjdC5ib3R0b21MZWZ0KCkueSgp
IC0gLyogb2Zmc2V0IGxpbWl0IGZvciBncmFkaWVudCAqLyAyMCkpOworICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVu
dC5zZXRDb2xvckF0KDAuNCwgUXQ6OndoaXRlKTsKKyAgICB9CisKKyAgICBkcmF3UmVjdGFuZ3Vs
YXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsK
KworICAgIC8vIENvbnN0YW50cyBleHRyYWN0ZWQgZnJvbSBRQ29tbW9uU3R5bGU6OnN1YkNvbnRy
b2xSZWN0LgorICAgIGNvbnN0IGludCBhcnJvd0JveFdpZHRoID0gMTY7CisgICAgY29uc3QgaW50
IGZyYW1lV2lkdGggPSAyOworICAgIGNvbnN0IFFSZWN0IHIocmVjdC54KCkgKyByZWN0LndpZHRo
KCkgLSBmcmFtZVdpZHRoIC0gYXJyb3dCb3hXaWR0aCwgcmVjdC55KCkgKyBmcmFtZVdpZHRoCisg
ICAgICAgICAgICAgICAgICAgLCBhcnJvd0JveFdpZHRoLCByZWN0LmhlaWdodCgpIC0gMiAqIGZy
YW1lV2lkdGgpOworICAgIFFQaXhtYXAgcGljID0gZmluZENvbWJvQnV0dG9uKHIuc2l6ZSgpLCBt
dWx0aXBsZSwgIWVuYWJsZWQpOworCisgICAgaWYgKHBpYy5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaW50IHggPSAoci53aWR0aCgpIC0gcGljLndpZHRoKCkpID4+IDE7CisgICAg
aW50IHkgPSAoci5oZWlnaHQoKSAtIHBpYy5oZWlnaHQoKSkgPj4gMTsKKyAgICBwYWludGVyLT5k
cmF3UGl4bWFwKHIueCgpICsgeCwgci55KCkgKyB5LCBwaWMpOworCisgICAgcGFpbnRlci0+c2V0
UGVuKGVuYWJsZWQgPyBRdDo6ZGFya0dyYXkgOiBRdDo6Z3JheSk7CisgICAgcGFpbnRlci0+ZHJh
d0xpbmUoci5sZWZ0KCkgLSAyLCByLnRvcCgpICsgMiwgci5sZWZ0KCkgLSAyLCByLmJvdHRvbSgp
IC0gMik7Cit9CisKKworUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVRdE1vYmls
ZTo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJU
aGVtZVF0TW9iaWxlKHBhZ2UpKTsKK30KKworUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVy
VGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKiBwYWdlKQoreworICAgIGlmIChwYWdlKQorICAgICAg
ICByZXR1cm4gUmVuZGVyVGhlbWVRdE1vYmlsZTo6Y3JlYXRlKHBhZ2UpOworCisgICAgc3RhdGlj
IFJlbmRlclRoZW1lKiBmYWxsYmFjayA9IFJlbmRlclRoZW1lUXRNb2JpbGU6OmNyZWF0ZSgwKS5y
ZWxlYXNlUmVmKCk7CisgICAgcmV0dXJuIGZhbGxiYWNrOworfQorCitSZW5kZXJUaGVtZVF0TW9i
aWxlOjpSZW5kZXJUaGVtZVF0TW9iaWxlKFBhZ2UqIHBhZ2UpCisgICAgOiBSZW5kZXJUaGVtZSgp
CisgICAgLCBtX3BhZ2UocGFnZSkKK3sKKyAgICBtX2J1dHRvbkZvbnRGYW1pbHkgPSBRQXBwbGlj
YXRpb246OmZvbnQoKS5mYW1pbHkoKTsKK30KKworUmVuZGVyVGhlbWVRdE1vYmlsZTo6flJlbmRl
clRoZW1lUXRNb2JpbGUoKQoreworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OmlzQ29u
dHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJv
cmRlciwgY29uc3QgRmlsbExheWVyJiBmaWxsLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9y
KSBjb25zdAoreworICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2Ug
UHVzaEJ1dHRvblBhcnQ6CisgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgIGNhc2UgTWVudWxpc3RQ
YXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDoK
KyAgICBjYXNlIFRleHRBcmVhUGFydDoKKyAgICAgICAgLy8gVGVzdCB0aGUgc3R5bGUgdG8gc2Vl
IGlmIHRoZSBVQSBib3JkZXIgYW5kIGJhY2tncm91bmQgbWF0Y2guCisgICAgICAgIHJldHVybiAo
c3R5bGUtPmJvcmRlcigpICE9IGJvcmRlcgorICAgICAgICAgICAgICAgIHx8ICpzdHlsZS0+YmFj
a2dyb3VuZExheWVycygpICE9IGZpbGwKKyAgICAgICAgICAgICAgICB8fCBzdHlsZS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSAhPSBiYWNrZ3JvdW5k
Q29sb3IpOworICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFJlbmRlclRo
ZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dyb3VuZENvbG9y
KTsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwb3B1cEludGVybmFsUGFk
ZGluZ0JvdHRvbShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIDE7Cit9
CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJT
dHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAoreworICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgQ2hlY2ti
b3hQYXJ0OgorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Cisg
ICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNl
IEJ1dHRvbkJldmVsUGFydDoKKyAgICBjYXNlIExpc3Rib3hQYXJ0OgorICAgIGNhc2UgTGlzdEl0
ZW1QYXJ0OgorICAgIGNhc2UgTWVudWxpc3RQYXJ0OgorICAgIGNhc2UgTWVudWxpc3RCdXR0b25Q
YXJ0OgorICAgIGNhc2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6CisgICAgY2FzZSBTbGlkZXJWZXJ0
aWNhbFBhcnQ6CisgICAgY2FzZSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0OgorICAgIGNhc2Ug
U2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6CisgICAg
Y2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25QYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRD
YW5jZWxCdXR0b25QYXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKKyAgICBjYXNlIFRleHRB
cmVhUGFydDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworaW50IFJlbmRlclRoZW1lUXRNb2JpbGU6OmJhc2VsaW5l
UG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIGlmICghby0+aXNC
b3goKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5j
ZSgpID09IENoZWNrYm94UGFydCB8fCBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gUmFkaW9Q
YXJ0KQorICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3gobyktPm1hcmdpblRvcCgpICsgdG9SZW5k
ZXJCb3gobyktPmhlaWdodCgpIC0gMjsgLy8gU2FtZSBhcyBpbiBvbGQga2h0bWwKKyAgICByZXR1
cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24obyk7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVRdE1vYmlsZTo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBj
b25zdAoreworICAgIGlmICghaXNFbmFibGVkKG8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBDaGVja2JveGVzIG9ubHkgaGF2ZSB0aW50IHdoZW4gY2hlY2tlZC4KKyAgICBpZiAo
by0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCkKKyAgICAgICAgcmV0dXJu
IGlzQ2hlY2tlZChvKTsKKworICAgIC8vIEZvciBub3cgYXNzdW1lIG90aGVyIGNvbnRyb2xzIGhh
dmUgdGludCBpZiBlbmFibGVkLgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlclRo
ZW1lUXRNb2JpbGU6OnN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGxhdGZvcm1BY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbCA9IFFBcHBs
aWNhdGlvbjo6cGFsZXR0ZSgpOworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3Rz
KHBhbCk7CisgICAgcmV0dXJuIHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6
SGlnaGxpZ2h0KS5jb2xvcigpOworfQorCitDb2xvciBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwbGF0
Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBRUGFs
ZXR0ZSBwYWwgPSBRQXBwbGljYXRpb246OnBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBh
Z2VDbGllbnRJZkV4aXN0cyhwYWwpOworICAgIHJldHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6Oklu
YWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxpZ2h0KS5jb2xvcigpOworfQorCitDb2xvciBSZW5kZXJU
aGVtZVF0TW9iaWxlOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNv
bnN0Cit7CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAg
c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFsLmJy
dXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHRlZFRleHQpLmNvbG9yKCk7
Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbCA9IFFBcHBsaWNh
dGlvbjo6cGFsZXR0ZSgpOworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKHBh
bCk7CisgICAgcmV0dXJuIHBhbC5icnVzaChRUGFsZXR0ZTo6SW5hY3RpdmUsIFFQYWxldHRlOjpI
aWdobGlnaHRlZFRleHQpLmNvbG9yKCk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lUXRNb2JpbGU6
OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbCA9IFFB
cHBsaWNhdGlvbjo6cGFsZXR0ZSgpOworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhp
c3RzKHBhbCk7CisgICAgcmV0dXJuIHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0
ZTo6SGlnaGxpZ2h0KS5jb2xvcigpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OnN5
c3RlbUZvbnQoaW50LCBGb250RGVzY3JpcHRpb24mKSBjb25zdAoreworICAgIC8vIG5vLW9wCit9
CisKK0NvbG9yIFJlbmRlclRoZW1lUXRNb2JpbGU6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlk
KSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbCA9IFFBcHBsaWNhdGlvbjo6cGFsZXR0ZSgpOwor
ICAgIHN3aXRjaCAoY3NzVmFsdWVJZCkgeworICAgIGNhc2UgQ1NTVmFsdWVCdXR0b250ZXh0Ogor
ICAgICAgICByZXR1cm4gcGFsLmJydXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpCdXR0
b25UZXh0KS5jb2xvcigpOworICAgIGNhc2UgQ1NTVmFsdWVDYXB0aW9udGV4dDoKKyAgICAgICAg
cmV0dXJuIHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6VGV4dCkuY29sb3Io
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9y
KGNzc1ZhbHVlSWQpOworICAgIH0KK30KKworaW50IFJlbmRlclRoZW1lUXRNb2JpbGU6Om1pbmlt
dW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdAoreworICAgIGNvbnN0IFFGb250TWV0
cmljcyAmZm0gPSBRQXBwbGljYXRpb246OmZvbnRNZXRyaWNzKCk7CisgICAgcmV0dXJuIGZtLndp
ZHRoKFFMYXRpbjFDaGFyKCd4JykpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmNv
bXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkgY29uc3QKK3sK
KyAgICBRU2l6ZSBzaXplKDAsIDApOworICAgIGNvbnN0IFFGb250TWV0cmljcyBmbShyZW5kZXJT
dHlsZS0+Zm9udCgpLmZvbnQoKSk7CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJh
bmNlKCkpIHsKKyAgICBjYXNlIFRleHRBcmVhUGFydDoKKyAgICBjYXNlIFNlYXJjaEZpZWxkUGFy
dDoKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6IHsKKyAgICAgICAgaW50IHBhZGRpbmcgPSBmaW5k
RnJhbWVMaW5lV2lkdGgoKTsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdMZWZ0KExl
bmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ1Jp
Z2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFk
ZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNl
dFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gSWYgdGhl
IHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGlu
ZyB0byBkby4KKyAgICBpZiAoIXJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRv
KCkgJiYgIXJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBDaGVj
a2JveFBhcnQ6IHsKKyAgICAgICAgLy8gRXh0cmFjdGVkIGZyb20gUUNvbW1vblN0eWxlLgorICAg
ICAgICBpbnQgY2hlY2tCb3hXaWR0aCA9IDEzOworICAgICAgICBjaGVja0JveFdpZHRoICo9IHJl
bmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgIHNpemUgPSBRU2l6ZShjaGVja0Jv
eFdpZHRoLCBjaGVja0JveFdpZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
UmFkaW9QYXJ0OiB7CisgICAgICAgIC8vIEV4dHJhY3RlZCBmcm9tIFFDb21tb25TdHlsZS4KKyAg
ICAgICAgaW50IHJhZGlvV2lkdGggPSAxMjsKKyAgICAgICAgcmFkaW9XaWR0aCAqPSByZW5kZXJT
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBzaXplID0gUVNpemUocmFkaW9XaWR0aCwg
cmFkaW9XaWR0aCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBp
dCBkb2Vzbid0IHRha2UgbWluLXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCisgICAgaWYg
KHJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgp
ID4gMCkKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChzaXplLndpZHRo
KCksIEZpeGVkKSk7CisgICAgaWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBz
aXplLmhlaWdodCgpID4gMCkKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhlaWdodChMZW5n
dGgoc2l6ZS5oZWlnaHQoKSwgRml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxl
OjpzZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGNvbXB1
dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxl
OjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25z
dCBJbnRSZWN0JiByKQoreworICAgIHJldHVybiBwYWludEJ1dHRvbihvLCBpLCByKTsKK30KKwor
dm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUqIHN0eWxl
KSBjb25zdAoreworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKK30KKworYm9v
bCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIHJldHVybiBwYWludEJ1dHRv
bihvLCBpLCByKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RCdXR0b25T
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKK3sKKyAgICAvLyBEaXRjaCB0aGUgYm9yZGVyLgorICAgIHN0eWxlLT5yZXNl
dEJvcmRlcigpOworCisgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNp
emUodHJ1ZSk7CisKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzdHlsZS0+
Zm9udFNpemUoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdHlsZS0+
Zm9udFNpemUoKSk7CisKKyAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7CisgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7CisgICAgc2V0QnV0
dG9uUGFkZGluZyhzdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0QnV0
dG9uU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29tcHV0ZVNpemVCYXNl
ZE9uU3R5bGUoc3R5bGUpOworfQorCisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0QnV0
dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgaWYgKCFzdHlsZSkK
KyAgICAgICAgcmV0dXJuOworICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoYnV0dG9u
UGFkZGluZ0xlZnQsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgo
YnV0dG9uUGFkZGluZ1JpZ2h0LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExl
bmd0aChidXR0b25QYWRkaW5nVG9wLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90
dG9tKExlbmd0aChidXR0b25QYWRkaW5nQm90dG9tLCBGaXhlZCkpOworfQorCitib29sIFJlbmRl
clRoZW1lUXRNb2JpbGU6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIGkp
OworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBDb250
cm9sUGFydCBhcHBlYXJhbmNlID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIGlmIChh
cHBlYXJhbmNlID09IFB1c2hCdXR0b25QYXJ0IHx8IGFwcGVhcmFuY2UgPT0gQnV0dG9uUGFydCkg
eworICAgICAgICBwLmRyYXdQdXNoQnV0dG9uKHIsIGlzUHJlc3NlZChvKSk7CisgICAgfSBlbHNl
IGlmIChhcHBlYXJhbmNlID09IFJhZGlvUGFydCkKKyAgICAgICBwLmRyYXdSYWRpb0J1dHRvbihy
LCBpc0NoZWNrZWQobykpOworICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hlY2tib3hQYXJ0
KQorICAgICAgIHAuZHJhd0NoZWNrQm94KHIsIGlzQ2hlY2tlZChvKSk7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0VGV4dEZpZWxkU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
Cit7CisgICAgLy8gUmVzZXR0aW5nIHRoZSBzdHlsZSBsaWtlIHRoaXMgbGVhZHMgdG8gZGlmZmVy
ZW5jZXMgbGlrZToKKyAgICAvLyAtIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikg
c2l6ZSAxNjh4MjUgW2JnY29sb3I9I0ZGRkZGRl0gYm9yZGVyOiAoMnB4IGluc2V0ICMwMDAwMDAp
XQorICAgIC8vICsgUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2Nngy
NgorICAgIC8vIGluIGxheW91dCB0ZXN0cyB3aGVuIGEgQ1NTIHN0eWxlIGlzIGFwcGxpZWQgdGhh
dCBkb2Vzbid0IGFmZmVjdCBiYWNrZ3JvdW5kIGNvbG9yLCBib3JkZXIgb3IKKyAgICAvLyBwYWRk
aW5nLiBKdXN0IHdvcnRoIGtlZXBpbmcgaW4gbWluZCEKKyAgICBzdHlsZS0+c2V0QmFja2dyb3Vu
ZENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Cisg
ICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0
eWxlKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHRleHRGaWVsZFBhZGRpbmcs
IEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgodGV4dEZpZWxkUGFk
ZGluZywgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRG
aWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBv
LT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKGFwcGVhcmFuY2UgIT0gVGV4dEZpZWxk
UGFydAorICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAorICAgICAgICAm
JiBhcHBlYXJhbmNlICE9IFRleHRBcmVhUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNlICE9IExp
c3Rib3hQYXJ0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBwYWludCB0aGUg
dGV4dCBmaWVsZC4KKyAgICBwLmRyYXdMaW5lRWRpdChyLCAvKnN1bmtlbiA9ICovaXNQcmVzc2Vk
KG8pKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6
YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIGFkanVzdFRleHRGaWVs
ZFN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwg
cik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0TWVudUxpc3RTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sK
KyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKworICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8g
YXV0by4KKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisKKyAgICAvLyBXaGl0
ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCisgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsK
KworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKKworICAgIC8vIEFkZCBpbiB0
aGUgcGFkZGluZyB0aGF0IHdlJ2QgbGlrZSB0byB1c2UuCisgICAgc2V0UG9wdXBQYWRkaW5nKHN0
eWxlKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKG1lbnVMaXN0UGFkZGluZywg
Rml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRQb3B1cFBhZGRpbmco
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGNvbnN0IGludCBwYWRkaW5nTGVmdCA9
IDQ7CisgICAgY29uc3QgaW50IHBhZGRpbmdSaWdodCA9IHN0eWxlLT53aWR0aCgpLmlzRml4ZWQo
KSB8fCBzdHlsZS0+d2lkdGgoKS5pc1BlcmNlbnQoKSA/IDUgOiA4OworCisgICAgc3R5bGUtPnNl
dFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKKworICAgIC8vIGV4dHJh
Y3RlZCBmcm9tIFFDb21tb25TdHlsZQorICAgIGNvbnN0IGludCB3ID0gMTY7CisgICAgc3R5bGUt
PnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0ICsgdywgRml4ZWQpKTsKKworICAg
IHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aCgyLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQ
YWRkaW5nQm90dG9tKExlbmd0aCgyLCBGaXhlZCkpOworfQorCisKK2Jvb2wgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBpKTsKKyAg
ICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFFQ
b2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRv
cExlZnQpOworICAgIGNvbnN0IFFSZWN0IHJlY3QoUVBvaW50KDAsIDApLCByLnNpemUoKSk7CisK
KyAgICBwLmRyYXdDb21ib0JveChyZWN0LCBjaGVja011bHRpcGxlKG8pKTsKKyAgICBwLnBhaW50
ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJl
bmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisKKyAgICAvLyBI
ZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0
bykpOworCisgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQorICAgIHN0eWxlLT5z
ZXRXaGl0ZVNwYWNlKFBSRSk7CisKKyAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7
CisKKyAgICAvLyBBZGQgaW4gdGhlIHBhZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNlLgorICAg
IHNldFBvcHVwUGFkZGluZyhzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6
cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBy
KQoreworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5kcmF3Q29tYm9Cb3gociwgY2hlY2tNdWx0
aXBsZShvKSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoUFJPR1JFU1Nf
VEFHKQorZG91YmxlIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDAuOworfQorCitkb3VibGUgUmVuZGVy
VGhlbWVRdE1vYmlsZTo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMC47Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0UHJvZ3Jl
c3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIFJlbmRlclRoZW1l
UXRNb2JpbGU6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWlu
dFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyVGhl
bWVRdE1vYmlsZTo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0Qm94U2hh
ZG93KG51bGxwdHIpOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2xpZGVy
VGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgLy8gV2Un
dmUgYWxyZWFkeSBwYWludGVkIGl0IGluIHBhaW50U2xpZGVyVHJhY2soKSwgbm8gbmVlZCB0byBk
byBhbnl0aGluZyBoZXJlLgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAg
UmVuZGVyVGhlbWU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVt
ZW50KTsKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworfQorCitib29sIFJlbmRl
clRoZW1lUXRNb2JpbGU6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEludFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIHBpLCByKTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICAv
LyBSZXNldHRpbmcgdGhlIHN0eWxlIGxpa2UgdGhpcyBsZWFkcyB0byBkaWZmZXJlbmNlcyBsaWtl
OgorICAgIC8vIC0gUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2OHgy
NSBbYmdjb2xvcj0jRkZGRkZGXSBib3JkZXI6ICgycHggaW5zZXQgIzAwMDAwMCldCisgICAgLy8g
KyBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUgMTY2eDI2CisgICAgLy8g
aW4gbGF5b3V0IHRlc3RzIHdoZW4gYSBDU1Mgc3R5bGUgaXMgYXBwbGllZCB0aGF0IGRvZXNuJ3Qg
YWZmZWN0IGJhY2tncm91bmQgY29sb3IsIGJvcmRlciBvcgorICAgIC8vIHBhZGRpbmcuIEp1c3Qg
d29ydGgga2VlcGluZyBpbiBtaW5kIQorICAgIHN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29s
b3I6OnRyYW5zcGFyZW50KTsKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS0+
cmVzZXRQYWRkaW5nKCk7CisgICAgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOworfQor
Cit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVt
ZW50KiBlKSBjb25zdAoreworICAgIC8vIExvZ2ljIHRha2VuIGZyb20gUmVuZGVyVGhlbWVDaHJv
bWl1bS5jcHAuCisgICAgLy8gU2NhbGUgdGhlIGJ1dHRvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250
IHNpemUuCisgICAgZmxvYXQgZm9udFNjYWxlID0gc3R5bGUtPmZvbnRTaXplKCkgLyBkZWZhdWx0
Q29udHJvbEZvbnRQaXhlbFNpemU7CisgICAgaW50IGNhbmNlbEJ1dHRvblNpemUgPSBscm91bmRm
KHFNaW4ocU1heChtaW5DYW5jZWxCdXR0b25TaXplLCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSAq
IGZvbnRTY2FsZSksIG1heENhbmNlbEJ1dHRvblNpemUpKTsKKyAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldEhlaWdodChM
ZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKK30KKworLy8gRnVuY3Rpb24gdGFrZW4g
ZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtLmNwcAorSW50UmVjdCBSZW5kZXJUaGVtZVF0TW9iaWxl
Ojpjb252ZXJ0VG9QYWludGluZ1JlY3QoUmVuZGVyT2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25z
dCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgSW50UmVjdCBwYXJ0UmVjdCwgY29uc3QgSW50
UmVjdCYgbG9jYWxPZmZzZXQpIGNvbnN0Cit7CisgICAgLy8gQ29tcHV0ZSBhbiBvZmZzZXQgYmV0
d2VlbiB0aGUgcGFydCByZW5kZXJlciBhbmQgdGhlIGlucHV0IHJlbmRlcmVyLgorICAgIEludFNp
emUgb2Zmc2V0RnJvbUlucHV0UmVuZGVyZXIgPSAtKHBhcnRSZW5kZXJlci0+b2Zmc2V0RnJvbUFu
Y2VzdG9yQ29udGFpbmVyKGlucHV0UmVuZGVyZXIpKTsKKyAgICAvLyBNb3ZlIHRoZSByZWN0IGlu
dG8gcGFydFJlbmRlcmVyJ3MgY29vcmRzLgorICAgIHBhcnRSZWN0Lm1vdmUob2Zmc2V0RnJvbUlu
cHV0UmVuZGVyZXIpOworICAgIC8vIEFjY291bnQgZm9yIHRoZSBsb2NhbCBkcmF3aW5nIG9mZnNl
dC4KKyAgICBwYXJ0UmVjdC5tb3ZlKGxvY2FsT2Zmc2V0LngoKSwgbG9jYWxPZmZzZXQueSgpKTsK
KworICAgIHJldHVybiBwYXJ0UmVjdDsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpw
YWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIC8vIExvZ2ljIGNvcGllZCBmcm9tIFJlbmRlclRo
ZW1lQ2hyb21pdW0uY3BwLgorCisgICAgLy8gR2V0IHRoZSByZW5kZXJlciBvZiA8aW5wdXQ+IGVs
ZW1lbnQuCisgICAgTm9kZSogaW5wdXQgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9yTm9kZSgp
OworICAgIGlmICghaW5wdXQtPnJlbmRlcmVyKCktPmlzQm94KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBSZW5kZXJCb3gqIGlucHV0UmVuZGVyQm94ID0gdG9SZW5kZXJCb3goaW5wdXQt
PnJlbmRlcmVyKCkpOworICAgIEludFJlY3QgaW5wdXRDb250ZW50Qm94ID0gaW5wdXRSZW5kZXJC
b3gtPmNvbnRlbnRCb3hSZWN0KCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHNjYWxlZCBidXR0
b24gc3RheXMgc3F1YXJlIGFuZCB3aWxsIGZpdCBpbiBpdHMgcGFyZW50J3MgYm94LgorICAgIGlu
dCBjYW5jZWxCdXR0b25TaXplID0gcU1pbihpbnB1dENvbnRlbnRCb3gud2lkdGgoKSwgcU1pbihp
bnB1dENvbnRlbnRCb3guaGVpZ2h0KCksIHIuaGVpZ2h0KCkpKTsKKyAgICAvLyBDYWxjdWxhdGUg
Y2FuY2VsIGJ1dHRvbidzIGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCBlbGVtZW50
LgorICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHZlcnRpY2FsbHkuIFJvdW5kIHVwIHRob3VnaCwg
c28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCisgICAgLy8g
YmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gVGhpcyB0ZW5k
cyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgorICAgIEludFJlY3QgY2FuY2VsQnV0dG9u
UmVjdChvLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5kZXJCb3gpLndpZHRo
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q29udGVudEJveC55KCkgKyAo
aW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gY2FuY2VsQnV0dG9uU2l6ZSArIDEpIC8gMiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uU2l6ZSwgY2FuY2VsQnV0dG9u
U2l6ZSk7CisgICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBjb252ZXJ0VG9QYWludGluZ1JlY3Qo
aW5wdXRSZW5kZXJCb3gsIG8sIGNhbmNlbEJ1dHRvblJlY3QsIHIpOworICAgIHN0YXRpYyBJbWFn
ZSogY2FuY2VsSW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNl
bEJ1dHRvbiIpLnJlbGVhc2VSZWYoKTsKKyAgICBzdGF0aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJ
bWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uUHJl
c3NlZCIpLnJlbGVhc2VSZWYoKTsKKyAgICBwaS5jb250ZXh0LT5kcmF3SW1hZ2UoaXNQcmVzc2Vk
KG8pID8gY2FuY2VsUHJlc3NlZEltYWdlIDogY2FuY2VsSW1hZ2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvLT5zdHlsZSgpLT5jb2xvclNwYWNlKCksIHBhaW50aW5nUmVjdCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVz
dFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoc2Vs
ZWN0b3IsIHN0eWxlLCBlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNl
YXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFJlY3QmIHIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUmVuZGVyVGhl
bWU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKG8sIHBpLCByKTsKK30KKwordm9pZCBSZW5k
ZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1l
bnQqIGUpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZW5kZXJUaGVtZTo6
YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwg
ZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IElu
dFJlY3QmIHIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUmVuZGVyVGhl
bWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihvLCBwaSwgcik7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6Y2hlY2tNdWx0aXBsZShSZW5kZXJPYmplY3QqIG8pCit7
CisgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IG8gPyBzdGF0aWNfY2FzdDxIVE1MU2Vs
ZWN0RWxlbWVudCo+KG8tPm5vZGUoKSkgOiAwOworICAgIHJldHVybiBzZWxlY3QgPyBzZWxlY3Qt
Pm11bHRpcGxlKCkgOiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzdXBw
b3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpIGNvbnN0Cit7CisgICAgc3dpdGNoIChh
cHBlYXJhbmNlKSB7CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBh
cnQ6CisgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAg
IGNhc2UgTGlzdGJveFBhcnQ6CisgICAgY2FzZSBNZW51bGlzdFBhcnQ6CisgICAgY2FzZSBSYWRp
b1BhcnQ6CisgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgY2FzZSBTbGlkZXJIb3Jpem9udGFs
UGFydDoKKyAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFydDoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDogLy8gTm8gZm9yIGFsbCBvdGhlcnMuLi4KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRQYWxldHRlRnJv
bVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYgcGFsZXR0ZSkgY29uc3QKK3sKKyAgICBzdGF0
aWMgUVBhbGV0dGUgbGlnaHRHcmF5UGFsZXR0ZShRdDo6bGlnaHRHcmF5KTsKKyAgICBwYWxldHRl
ID0gbGlnaHRHcmF5UGFsZXR0ZTsKKyAgICByZXR1cm47Cit9CisKKyNpZiBFTkFCTEUoVklERU8p
CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0TW9iaWxlOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNo
ZWV0KCkKK3sKKyAgICBTdHJpbmcgcmVzdWx0ID0gU3RyaW5nKG1lZGlhQ29udHJvbHNRdFVzZXJB
Z2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzUXRVc2VyQWdlbnRTdHlsZVNoZWV0
KSk7CisKKyAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+Y2hyb21lKCktPnJlcXVpcmVzRnVsbHNj
cmVlbkZvclZpZGVvUGxheWJhY2soKSkKKyAgICAgICAgcmVzdWx0ICs9IFN0cmluZyhtZWRpYUNv
bnRyb2xzUXRGdWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJv
bHNRdEZ1bGxzY3JlZW5Vc2VyQWdlbnRTdHlsZVNoZWV0KSk7CisKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCisvLyBIZWxwZXIgY2xhc3MgdG8gdHJhbnNmb3JtIHRoZSBwYWludGVyJ3Mgd29ybGQg
bWF0cml4IHRvIHRoZSBvYmplY3QncyBjb250ZW50IGFyZWEsIHNjYWxlZCB0byAwLDAsMTAwLDEw
MAorY2xhc3MgV29ybGRNYXRyaXhUcmFuc2Zvcm1lciB7CitwdWJsaWM6CisgICAgV29ybGRNYXRy
aXhUcmFuc2Zvcm1lcihRUGFpbnRlciogcGFpbnRlciwgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGNvbnN0IEludFJlY3QmIHIpIDogbV9wYWludGVyKHBhaW50ZXIpCisgICAgeworICAgICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJPYmplY3QtPnN0eWxlKCk7CisgICAgICAgIG1f
b3JpZ2luYWxUcmFuc2Zvcm0gPSBtX3BhaW50ZXItPnRyYW5zZm9ybSgpOworICAgICAgICBtX3Bh
aW50ZXItPnRyYW5zbGF0ZShyLngoKSArIHN0eWxlLT5wYWRkaW5nTGVmdCgpLnZhbHVlKCksIHIu
eSgpICsgc3R5bGUtPnBhZGRpbmdUb3AoKS52YWx1ZSgpKTsKKyAgICAgICAgbV9wYWludGVyLT5z
Y2FsZSgoci53aWR0aCgpIC0gc3R5bGUtPnBhZGRpbmdMZWZ0KCkudmFsdWUoKSAtIHN0eWxlLT5w
YWRkaW5nUmlnaHQoKS52YWx1ZSgpKSAvIDEwMC4wLAorICAgICAgICAgICAgIChyLmhlaWdodCgp
IC0gc3R5bGUtPnBhZGRpbmdUb3AoKS52YWx1ZSgpIC0gc3R5bGUtPnBhZGRpbmdCb3R0b20oKS52
YWx1ZSgpKSAvIDEwMC4wKTsKKyAgICB9CisKKyAgICB+V29ybGRNYXRyaXhUcmFuc2Zvcm1lcigp
IHsgbV9wYWludGVyLT5zZXRUcmFuc2Zvcm0obV9vcmlnaW5hbFRyYW5zZm9ybSk7IH0KKworcHJp
dmF0ZToKKyAgICBRUGFpbnRlciogbV9wYWludGVyOworICAgIFFUcmFuc2Zvcm0gbV9vcmlnaW5h
bFRyYW5zZm9ybTsKK307CisKK2RvdWJsZSBSZW5kZXJUaGVtZVF0TW9iaWxlOjptZWRpYUNvbnRy
b2xzQmFzZWxpbmVPcGFjaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gMC40OworfQorCit2b2lk
IFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBJbnRSZWN0JiByKSBjb25zdAoreworICAgIHBhaW50ZXItPnNldFBlbihRdDo6
Tm9QZW4pOworICAgIHN0YXRpYyBRQ29sb3IgdHJhbnNwYXJlbnRCbGFjaygwLCAwLCAwLCBtZWRp
YUNvbnRyb2xzQmFzZWxpbmVPcGFjaXR5KCkgKiAyNTUpOworICAgIHBhaW50ZXItPnNldEJydXNo
KHRyYW5zcGFyZW50QmxhY2spOworICAgIHBhaW50ZXItPmRyYXdSb3VuZGVkUmVjdChyLngoKSwg
ci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSwgNS4wLCA1LjApOworfQorCitzdGF0aWMgYm9v
bCBtZWRpYUVsZW1lbnRDYW5QbGF5KFJlbmRlck9iamVjdCogbykKK3sKKyAgICBIVE1MTWVkaWFF
bGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKKyAgICBpZiAo
IW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1lZGlh
RWxlbWVudC0+cmVhZHlTdGF0ZSgpID4gSFRNTE1lZGlhRWxlbWVudDo6SEFWRV9NRVRBREFUQQor
ICAgICAgICAgICB8fCAobWVkaWFFbGVtZW50LT5yZWFkeVN0YXRlKCkgPT0gSFRNTE1lZGlhRWxl
bWVudDo6SEFWRV9OT1RISU5HCisgICAgICAgICAgICAgICAmJiBvLT5zdHlsZSgpLT5hcHBlYXJh
bmNlKCkgPT0gTWVkaWFQbGF5QnV0dG9uUGFydCAmJiBtZWRpYUVsZW1lbnQtPnByZWxvYWQoKSA9
PSAibm9uZSIpOworfQorCitRQ29sb3IgUmVuZGVyVGhlbWVRdE1vYmlsZTo6Z2V0TWVkaWFDb250
cm9sRm9yZWdyb3VuZENvbG9yKFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICBRQ29sb3Ig
ZmdDb2xvciA9IHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CisgICAg
aWYgKCFvKQorICAgICAgICByZXR1cm4gZmdDb2xvcjsKKworICAgIGlmIChvLT5ub2RlKCktPmFj
dGl2ZSgpKQorICAgICAgICBmZ0NvbG9yID0gZmdDb2xvci5saWdodGVyKCk7CisKKyAgICBpZiAo
IW1lZGlhRWxlbWVudENhblBsYXkobykpIHsKKyAgICAgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxp
Y2F0aW9uOjpwYWxldHRlKCk7CisgICAgICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhp
c3RzKHBhbCk7CisgICAgICAgIGZnQ29sb3IgPSBwYWwuYnJ1c2goUVBhbGV0dGU6OkRpc2FibGVk
LCBRUGFsZXR0ZTo6VGV4dCkuY29sb3IoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmdDb2xvcjsK
K30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRS
ZWN0JiByKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRvUGFyZW50
TWVkaWFFbGVtZW50KG8pOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOworICAgIGlmICgh
cC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5wYWludGVyLT5zZXRS
ZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworCisgICAgcGFpbnRNZWRp
YUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKworICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIg
dHJhbnNmb3JtZXIocC5wYWludGVyLCBvLCByKTsKKyAgICBjb25zdCBRUG9pbnRGIGFycm93UG9s
eWdvbls5XSA9IHsgUVBvaW50RigyMCwgMCksIFFQb2ludEYoMTAwLCAwKSwgUVBvaW50RigxMDAs
IDgwKSwKKyAgICAgICAgICAgIFFQb2ludEYoODAsIDgwKSwgUVBvaW50Rig4MCwgMzApLCBRUG9p
bnRGKDEwLCAxMDApLCBRUG9pbnRGKDAsIDkwKSwgUVBvaW50Rig3MCwgMjApLCBRUG9pbnRGKDIw
LCAyMCl9OworCisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3Jv
dW5kQ29sb3IobykpOworICAgIHAucGFpbnRlci0+ZHJhd1BvbHlnb24oYXJyb3dQb2x5Z29uLCA5
KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpw
YWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG8pOworICAgIGlmICghbWVkaWFFbGVtZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWlu
dEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUp
OworCisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKworICAgIFdvcmxk
TWF0cml4VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIocC5wYWludGVyLCBvLCByKTsKKyAgICBjb25z
dCBRUG9pbnRGIHNwZWFrZXJQb2x5Z29uWzZdID0geyBRUG9pbnRGKDIwLCAzMCksIFFQb2ludEYo
NTAsIDMwKSwgUVBvaW50Rig4MCwgMCksCisgICAgICAgICAgICBRUG9pbnRGKDgwLCAxMDApLCBR
UG9pbnRGKDUwLCA3MCksIFFQb2ludEYoMjAsIDcwKX07CisKKyAgICBwLnBhaW50ZXItPnNldEJy
dXNoKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IFF0OjpkYXJrUmVkIDogZ2V0TWVkaWFDb250cm9s
Rm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKHNwZWFrZXJQ
b2x5Z29uLCA2KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0
TW9iaWxlOjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEhUTUxNZWRpYUVsZW1l
bnQqIG1lZGlhRWxlbWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG8pOworICAgIGlmICghbWVk
aWFFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHlsZVBhaW50ZXIgcCh0
aGlzLCBwYWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNp
bmcsIHRydWUpOworCisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKwor
ICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIocC5wYWludGVyLCBvLCByKTsK
KyAgICBwLnBhaW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihv
KSk7CisgICAgaWYgKG1lZGlhRWxlbWVudC0+Y2FuUGxheSgpKSB7CisgICAgICAgIGNvbnN0IFFQ
b2ludEYgcGxheVBvbHlnb25bM10gPSB7IFFQb2ludEYoMCwgMCksIFFQb2ludEYoMTAwLCA1MCks
IFFQb2ludEYoMCwgMTAwKX07CisgICAgICAgIHAucGFpbnRlci0+ZHJhd1BvbHlnb24ocGxheVBv
bHlnb24sIDMpOworICAgIH0gZWxzZSB7CisgICAgICAgIHAucGFpbnRlci0+ZHJhd1JlY3QoMCwg
MCwgMzAsIDEwMCk7CisgICAgICAgIHAucGFpbnRlci0+ZHJhd1JlY3QoNzAsIDAsIDMwLCAxMDAp
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9i
aWxlOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCB0
aGlzIGF0IHRoZSBtb21lbnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRo
ZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICAvLyBXZSBkb24ndCB3YW50
IHRvIHBhaW50IHRoaXMgYXQgdGhlIG1vbWVudC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7Cisg
ICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChR
UGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChw
LnBhaW50ZXIsIHIpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgUmVuZGVyVGhl
bWVRdE1vYmlsZTo6Zm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRU
aW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gZm9ybWF0TWVkaWFDb250
cm9sc1RpbWUoY3VycmVudFRpbWUpICsgIiAvICIgKyBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShk
dXJhdGlvbik7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0TW9iaWxlOjpmb3JtYXRNZWRpYUNv
bnRyb2xzUmVtYWluaW5nVGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNv
bnN0Cit7CisgICAgcmV0dXJuIFN0cmluZygpOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2Jp
bGU6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QgKm8sIGNvbnN0IFBh
aW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQoreworICAgIFN0eWxlUGFpbnRl
ciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlh
bGlhc2luZywgdHJ1ZSk7CisKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIp
OworCisgICAgaWYgKCFvLT5pc1NsaWRlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBJbnRSZWN0IGIgPSB0b1JlbmRlckJveChvKS0+Y29udGVudEJveFJlY3QoKTsKKworICAgIC8v
IFBvc2l0aW9uIHRoZSBvdXRlciByZWN0YW5nbGUKKyAgICBpbnQgdG9wID0gci55KCkgKyBiLnko
KTsKKyAgICBpbnQgbGVmdCA9IHIueCgpICsgYi54KCk7CisgICAgaW50IHdpZHRoID0gYi53aWR0
aCgpOworICAgIGludCBoZWlnaHQgPSBiLmhlaWdodCgpOworCisgICAgLy8gR2V0IHRoZSBzY2Fs
ZSBjb2xvciBmcm9tIHRoZSBwYWdlIGNsaWVudAorICAgIFFQYWxldHRlIHBhbCA9IFFBcHBsaWNh
dGlvbjo6cGFsZXR0ZSgpOworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKHBh
bCk7CisgICAgY29uc3QgUUNvbG9yIGhpZ2hsaWdodFRleHQgPSBwYWwuYnJ1c2goUVBhbGV0dGU6
OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKTsKKyAgICBjb25zdCBR
Q29sb3Igc2NhbGVDb2xvcihoaWdobGlnaHRUZXh0LnJlZCgpLCBoaWdobGlnaHRUZXh0LmdyZWVu
KCksIGhpZ2hsaWdodFRleHQuYmx1ZSgpLCBtZWRpYUNvbnRyb2xzQmFzZWxpbmVPcGFjaXR5KCkg
KiAyNTUpOworCisgICAgLy8gRHJhdyB0aGUgb3V0ZXIgcmVjdGFuZ2xlCisgICAgcC5wYWludGVy
LT5zZXRCcnVzaChzY2FsZUNvbG9yKTsKKyAgICBwLnBhaW50ZXItPmRyYXdSZWN0KGxlZnQsIHRv
cCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICBpZiAoIW8tPm5vZGUoKSB8fCAhby0+bm9kZSgpLT5o
YXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTElu
cHV0RWxlbWVudCogc2xpZGVyID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG8tPm5v
ZGUoKSk7CisKKyAgICAvLyBQb3NpdGlvbiB0aGUgaW5uZXIgcmVjdGFuZ2xlCisgICAgaGVpZ2h0
ID0gaGVpZ2h0ICogc2xpZGVyLT52YWx1ZUFzTnVtYmVyKCk7CisgICAgdG9wICs9IGIuaGVpZ2h0
KCkgLSBoZWlnaHQ7CisKKyAgICAvLyBEcmF3IHRoZSBpbm5lciByZWN0YW5nbGUKKyAgICBwLnBh
aW50ZXItPnNldFBlbihRdDo6Tm9QZW4pOworICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVk
aWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBwLnBhaW50ZXItPmRyYXdSZWN0KGxl
ZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wg
UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9i
amVjdCAqbywgY29uc3QgUGFpbnRJbmZvICZwYWludEluZm8sIGNvbnN0IEludFJlY3QgJnIpCit7
CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdGhpbmcgdG8gZHJhdyBoZXJl
LCB0aGlzIGlzIGFsbCBkb25lIGluIHRoZSB0cmFjaworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sK
KyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVu
dChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChR
UGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKworICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5k
KHAucGFpbnRlciwgcik7CisKKyAgICBpZiAoTWVkaWFQbGF5ZXIqIHBsYXllciA9IG1lZGlhRWxl
bWVudC0+cGxheWVyKCkpIHsKKyAgICAgICAgLy8gR2V0IHRoZSBidWZmZXJlZCBwYXJ0cyBvZiB0
aGUgbWVkaWEKKyAgICAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkID0gcGxheWVyLT5i
dWZmZXJlZCgpOworICAgICAgICBpZiAoYnVmZmVyZWQtPmxlbmd0aCgpID4gMCAmJiBwbGF5ZXIt
PmR1cmF0aW9uKCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKSkgewor
ICAgICAgICAgICAgLy8gU2V0IHRoZSB0cmFuc2Zvcm0gYW5kIGJydXNoCisgICAgICAgICAgICBX
b3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAg
ICAgICAgICBwLnBhaW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xv
cigpKTsKKworICAgICAgICAgICAgLy8gUGFpbnQgZWFjaCBidWZmZXJlZCBzZWN0aW9uCisgICAg
ICAgICAgICBFeGNlcHRpb25Db2RlIGV4OworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBidWZmZXJlZC0+bGVuZ3RoKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0
WCA9IChidWZmZXJlZC0+c3RhcnQoaSwgZXgpIC8gcGxheWVyLT5kdXJhdGlvbigpKSAqIDEwMDsK
KyAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCA9ICgoYnVmZmVyZWQtPmVuZChpLCBleCkgLyBw
bGF5ZXItPmR1cmF0aW9uKCkpICogMTAwKSAtIHN0YXJ0WDsKKyAgICAgICAgICAgICAgICBwLnBh
aW50ZXItPmRyYXdSZWN0KHN0YXJ0WCwgMzcsIHdpZHRoLCAyNik7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhl
bWVRdE1vYmlsZTo6cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgQVNTRVJUKG8t
Pm5vZGUoKSk7CisgICAgTm9kZSogaG9zdE5vZGUgPSBvLT5ub2RlKCktPnNoYWRvd0FuY2VzdG9y
Tm9kZSgpOworICAgIEFTU0VSVChob3N0Tm9kZSk7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVk
aWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQoaG9zdE5vZGUpOworICAgIGlmICghbWVk
aWFFbGVtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHlsZVBhaW50ZXIgcCh0
aGlzLCBwYWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNp
bmcsIHRydWUpOworCisgICAgcC5wYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBwLnBh
aW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihob3N0Tm9kZS0+
cmVuZGVyZXIoKSkpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3Qoci54KCksIHIueSgpLCByLndp
ZHRoKCksIHIuaGVpZ2h0KCkpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK3Zv
aWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxl
KiBzdHlsZSkgY29uc3QKK3sKKyAgICAvLyB0aW1lbGluZVRodW1iSGVpZ2h0IHNob3VsZCBtYXRj
aCB0aGUgaGVpZ2h0IHByb3BlcnR5IG9mIC13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUg
aW4gbWVkaWFDb250cm9sc1F0LmNzcy4KKyAgICBjb25zdCBpbnQgdGltZWxpbmVUaHVtYkhlaWdo
dCA9IDEyOworICAgIGNvbnN0IGludCB0aW1lbGluZVRodW1iV2lkdGggPSB0aW1lbGluZVRodW1i
SGVpZ2h0IC8gMzsKKyAgICAvLyB2b2x1bWVUaHVtYldpZHRoIHNob3VsZCBtYXRjaCB0aGUgd2lk
dGggcHJvcGVydHkgb2YgLXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyIGluIG1l
ZGlhQ29udHJvbHNRdC5jc3MuCisgICAgY29uc3QgaW50IHZvbHVtZVRodW1iV2lkdGggPSAxMjsK
KyAgICBjb25zdCBpbnQgdm9sdW1lVGh1bWJIZWlnaHQgPSB2b2x1bWVUaHVtYldpZHRoIC8gMzsK
KyAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKworICAgIGlmIChw
YXJ0ID09IE1lZGlhU2xpZGVyVGh1bWJQYXJ0KSB7CisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChM
ZW5ndGgodGltZWxpbmVUaHVtYldpZHRoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aCh0aW1lbGluZVRodW1iSGVpZ2h0LCBGaXhlZCkpOworICAgIH0gZWxzZSBpZiAo
cGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkgeworICAgICAgICBzdHlsZS0+c2V0
SGVpZ2h0KExlbmd0aCh2b2x1bWVUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUt
PnNldFdpZHRoKExlbmd0aCh2b2x1bWVUaHVtYldpZHRoLCBGaXhlZCkpOworICAgIH0gZWxzZSBp
ZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1
bWJWZXJ0aWNhbFBhcnQpIHsKKworICAgICAgICAvLyBleHRyYWN0ZWQgZnJvbSBRV2luZG93c1N0
eWxlCisgICAgICAgIGNvbnN0IGludCB3aWR0aCA9IDExOworICAgICAgICBjb25zdCBpbnQgaGVp
Z2h0ID0gMDsKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsK
KyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoaGVpZ2h0LCBGaXhlZCkpOworICAgIH0K
K30KKworZG91YmxlIFJlbmRlclRoZW1lUXRNb2JpbGU6OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6Y3Vyc29yRmxhc2hUaW1lKCkgLyAxMDAw
LjAgLyAyLjA7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0TW9iaWxlOjpmaWxlTGlzdE5hbWVG
b3JXaWR0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBGb250JiBmb250
LCBpbnQgd2lkdGgpCit7CisgICAgaWYgKHdpZHRoIDw9IDApCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIFN0cmluZyBzdHJpbmc7CisgICAgaWYgKGZpbGVuYW1lcy5pc0VtcHR5KCkp
CisgICAgICAgIHN0cmluZyA9IGZpbGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCk7CisgICAg
ZWxzZSBpZiAoZmlsZW5hbWVzLnNpemUoKSA9PSAxKSB7CisgICAgICAgIFN0cmluZyBmbmFtZSA9
IGZpbGVuYW1lc1swXTsKKyAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQuZm9udCgpKTsKKyAg
ICAgICAgc3RyaW5nID0gZm0uZWxpZGVkVGV4dChmbmFtZSwgUXQ6OkVsaWRlTGVmdCwgd2lkdGgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBuID0gZmlsZW5hbWVzLnNpemUoKTsKKyAgICAg
ICAgc3RyaW5nID0gUUNvcmVBcHBsaWNhdGlvbjo6dHJhbnNsYXRlKCJRV2ViUGFnZSIsICIlbiBm
aWxlKHMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJu
dW1iZXIgb2YgY2hvc2VuIGZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6Q29kZWNGb3JUciwgbik7CisgICAgfQorCisg
ICAgcmV0dXJuIHN0cmluZzsKK30KKworfQorCisvLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkOGRkYjMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgKQEAgLTAsMCAr
MSwyMjAgQEAKKworLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1l
bnRhdGlvbiBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
I2lmbmRlZiBSZW5kZXJUaGVtZVF0TW9iaWxlX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVRdE1vYmls
ZV9oCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1l
LmgiCisKKyNpbmNsdWRlIDxRQnJ1c2g+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUUNv
bG9yOworY2xhc3MgUVBhaW50ZXI7CitjbGFzcyBRUGl4bWFwOworY2xhc3MgUVNpemU7CitRVF9F
TkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIEVOQUJMRShQUk9HUkVT
U19UQUcpCitjbGFzcyBSZW5kZXJQcm9ncmVzczsKKyNlbmRpZgorY2xhc3MgUmVuZGVyU3R5bGU7
CitjbGFzcyBIVE1MTWVkaWFFbGVtZW50OworCitjbGFzcyBSZW5kZXJUaGVtZVF0TW9iaWxlIDog
cHVibGljIFJlbmRlclRoZW1lIHsKK3ByaXZhdGU6CisgICAgUmVuZGVyVGhlbWVRdE1vYmlsZShQ
YWdlKik7CisgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVRdE1vYmlsZSgpOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZShQYWdlKik7CisKKyAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0
OworCisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3Qq
KSBjb25zdDsKKworICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2Vz
IGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgorICAgIHZpcnR1YWwg
Ym9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKKwor
ICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMg
c3VwcG9ydGVkIGF0IGFsbC4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMo
KSBjb25zdDsKKworICAgIC8vIFRoZSBwbGF0Zm9ybSBzZWxlY3Rpb24gY29sb3IuCisgICAgdmly
dHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0
OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKworICAgIHZpcnR1YWwgQ29sb3Ig
cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHN5c3Rl
bUZvbnQoaW50IHByb3BJZCwgRm9udERlc2NyaXB0aW9uJikgY29uc3Q7CisgICAgdmlydHVhbCBD
b2xvciBzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGlu
dCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdDsKKworICAgIHZpcnR1YWwg
Ym9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRh
JiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIGludCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHls
ZSopIGNvbnN0OworCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJh
TWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNpemUoUmVuZGVy
U3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIHNldEJ1dHRv
blNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRG
aWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFRl
eHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworI2lmIEVOQUJM
RShQUk9HUkVTU19UQUcpCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZp
cnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyNlbmRpZgorCisgICAgdmlydHVhbCBib29sIHBhaW50U2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBw
YWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAg
dmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hG
aWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9u
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisjaWYgRU5BQkxFKFBST0dSRVNT
X1RBRykKKyAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlv
biBmb3IgdGhlIHByb2dyZXNzIGJhci4KKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBl
YXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CisgICAgLy8g
UmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJh
ci4KKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKikgY29uc3Q7CisjZW5kaWYKKworI2lmIEVOQUJMRShWSURFTykKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNlZWtGb3J3YXJk
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1lKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYVZvbHVt
ZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUo
ZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0
cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShmbG9hdCBjdXJyZW50VGltZSwg
ZmxvYXQgZHVyYXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxlZFN0
YXRlSGFuZGxpbmdGb3IoQ29udHJvbFBhcnQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KK3ByaXZh
dGU6CisKKyAgICB2b2lkIHBhaW50TWVkaWFCYWNrZ3JvdW5kKFFQYWludGVyKiwgY29uc3QgSW50
UmVjdCYpIGNvbnN0OworICAgIGRvdWJsZSBtZWRpYUNvbnRyb2xzQmFzZWxpbmVPcGFjaXR5KCkg
Y29uc3Q7CisgICAgUUNvbG9yIGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJP
YmplY3QqID0gMCkgY29uc3Q7CisjZW5kaWYKKyAgICB2b2lkIGNvbXB1dGVTaXplQmFzZWRPblN0
eWxlKFJlbmRlclN0eWxlKikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCBTdHJpbmcg
ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29u
c3QgRm9udCYsIGludCB3aWR0aCk7CisKKyAgICBib29sIGNoZWNrTXVsdGlwbGUoUmVuZGVyT2Jq
ZWN0Kik7CisgICAgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0KSBjb25zdDsKKyAgICB2
b2lkIHNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICB2b2lkIHNldFBv
cHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdm9pZCBzZXRQYWxldHRlRnJv
bVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYpIGNvbnN0OworCisgICAgaW50IGZpbmRGcmFt
ZUxpbmVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDI7IH0gLy8gVGFrZW4gZGlyZWN0bHkgZnJvbSBR
Q29tbW9uU3R5bGUuCisKKyAgICBJbnRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJP
YmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBJ
bnRSZWN0IHBhcnRSZWN0LCBjb25zdCBJbnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3Q7CisKKyAg
ICBQYWdlKiBtX3BhZ2U7CisKKyAgICBRU3RyaW5nIG1fYnV0dG9uRm9udEZhbWlseTsKK307CisK
K2NsYXNzIFN0eWxlUGFpbnRlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3R5bGVQYWludGVy
KFJlbmRlclRoZW1lUXRNb2JpbGUqLCBjb25zdCBQYWludEluZm8mKTsKKyAgICB+U3R5bGVQYWlu
dGVyKCk7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBwYWludGVyO30KKwor
ICAgIFFQYWludGVyKiBwYWludGVyOworCisgICAgdm9pZCBkcmF3TGluZUVkaXQoY29uc3QgUVJl
Y3QmLCBib29sIHN1bmtlbiwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7CisgICAgdm9pZCBkcmF3Q2hl
Y2tCb3goY29uc3QgUVJlY3QmLCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCA9IHRydWUpOwor
ICAgIHZvaWQgZHJhd1JhZGlvQnV0dG9uKGNvbnN0IFFSZWN0JiwgYm9vbCBjaGVja2VkLCBib29s
IGVuYWJsZWQgPSB0cnVlKTsKKyAgICB2b2lkIGRyYXdQdXNoQnV0dG9uKGNvbnN0IFFSZWN0Jiwg
Ym9vbCBzdW5rZW4sIGJvb2wgZW5hYmxlZCA9IHRydWUpOworICAgIHZvaWQgZHJhd0NvbWJvQm94
KGNvbnN0IFFSZWN0JiwgYm9vbCBtdWx0aXBsZSwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7CisKK3By
aXZhdGU6CisgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dCopOworCisgICAgdm9pZCBkcmF3
Q2hlY2tlcihRUGFpbnRlciosIGludCBzaXplLCBRQ29sb3IpIGNvbnN0OworICAgIFFQaXhtYXAg
ZmluZENoZWNrZXIoY29uc3QgUVJlY3QmLCBib29sIGRpc2FibGVkKSBjb25zdDsKKworICAgIHZv
aWQgZHJhd1JhZGlvKFFQYWludGVyKiwgY29uc3QgUVNpemUmLCBib29sIGNoZWNrZWQsIFFDb2xv
cikgY29uc3Q7CisgICAgUVBpeG1hcCBmaW5kUmFkaW8oY29uc3QgUVNpemUmLCBib29sIGNoZWNr
ZWQsIGJvb2wgZGlzYWJsZWQpIGNvbnN0OworCisgICAgUVNpemUgZ2V0QnV0dG9uSW1hZ2VTaXpl
KGNvbnN0IFFTaXplJikgY29uc3Q7CisgICAgdm9pZCBkcmF3U2ltcGxlQ29tYm9CdXR0b24oUVBh
aW50ZXIqLCBjb25zdCBRU2l6ZSYsIFFDb2xvcikgY29uc3Q7CisgICAgdm9pZCBkcmF3TXVsdGlw
bGVDb21ib0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTaXplJiwgUUNvbG9yKSBjb25zdDsKKyAg
ICBRUGl4bWFwIGZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYsIGJvb2wgbXVsdGlwbGUsIGJv
b2wgZGlzYWJsZWQpIGNvbnN0OworCisgICAgUUJydXNoIG9sZEJydXNoOworICAgIGJvb2wgb2xk
QW50aWFsaWFzaW5nOworCisgICAgUV9ESVNBQkxFX0NPUFkoU3R5bGVQYWludGVyKTsKK307Cit9
CisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZVF0TW9iaWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAKaW5kZXggNmVkMDJlYS4uZGY3ZGFiMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAK
QEAgLTI2LDYgKzI2LDEwIEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFVTRShR
VF9NT0JJTEVfVEhFTUUpCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKworI2Vsc2UKICNp
bmNsdWRlICJTY3JvbGxiYXJUaGVtZVF0LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKQEAgLTQyLDE1ICs0NiwyNCBAQAogI2luY2x1ZGUgPFFQYWludGVyPgogI2luY2x1ZGUgPFFT
dHlsZT4KICNpbmNsdWRlIDxRU3R5bGVPcHRpb25TbGlkZXI+CisjZW5kaWYgLy8gVVNFKFFUX01P
QklMRV9USEVNRSkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgVVNFKFFUX01PQklMRV9U
SEVNRSkKK1Njcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQorewor
ICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZSB0aGVtZTsKKyAgICByZXR1cm4gJnRoZW1lOworfQor
I2Vsc2UKIFNjcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQogewog
ICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZVF0IHRoZW1lOwogICAgIHJldHVybiAmdGhlbWU7CiB9
CiAKKwogU2Nyb2xsYmFyVGhlbWVRdDo6flNjcm9sbGJhclRoZW1lUXQoKQogewogfQpAQCAtMjYy
LDUgKzI3NSw2IEBAIFFTdHlsZSogU2Nyb2xsYmFyVGhlbWVRdDo6c3R5bGUoKSBjb25zdAogICAg
IHJldHVybiBRQXBwbGljYXRpb246OnN0eWxlKCk7CiB9CiAKKyNlbmRpZiAvLyBVU0UoUVRfTU9C
SUxFX1RIRU1FKQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXggMzc2ZWU3MC4u
M2QzMjhkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAtMzI2OCwxMSArMzI2OCwx
MyBAQCBib29sIFFXZWJQYWdlOjpzd2FsbG93Q29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVF
dmVudCAqZXZlbnQpCiB7CiAgICAgZC0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNs
ZWFyQ29udGV4dE1lbnUoKTsKIAorI2lmICFVU0UoUVRfTU9CSUxFX1RIRU1FKQogICAgIGlmIChR
V2ViRnJhbWUqIHdlYkZyYW1lID0gZnJhbWVBdChldmVudC0+cG9zKCkpKSB7CiAgICAgICAgIEZy
YW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUod2ViRnJhbWUpOwogICAgICAgICBp
ZiAoU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBmcmFtZS0+dmlldygpLT5zY3JvbGxiYXJBdFBvaW50
KFBsYXRmb3JtTW91c2VFdmVudChldmVudCwgMSkucG9zKCkpKQogICAgICAgICAgICAgcmV0dXJu
IHNjcm9sbGJhci0+Y29udGV4dE1lbnUoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCAxKSk7CiAg
ICAgfQorI2VuZGlmCiAKICAgICBXZWJDb3JlOjpGcmFtZSogZm9jdXNlZEZyYW1lID0gZC0+cGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGZvY3VzZWRG
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0TWVudUV2ZW50KFBsYXRmb3JtTW91c2VF
dmVudChldmVudCwgMSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCAzNTAwYmQwLi5hOTU4ODdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDExLTA5LTA4ICBQaWVycmUgUm9zc2kgIDxw
aWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3ZlIHRoZSBRU3R5bGUg
ZGVwZW5kZW5jeSBpbiBRdCdzIG1vYmlsZSB0aGVtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NzMKKworICAgICAgICBSZW1vdmFsIG9mIHRoZSBR
U3R5bGUgZGVwZW5kZW5jeSBmb3IgdGhlIG1vYmlsZSB0aGVtZS4KKworICAgICAgICBUaGlzIHJl
ZmFjdG9yaW5nIHNwbGl0cyB1cCBSZW5kZXJUaGVtZVF0IGludG8gdHdvCisgICAgICAgIGltcGxl
bWVudGF0aW9uIGZpbGVzLCBhIFFTdHlsZS1iYWNrZWQgb25lLCBhbmQgYQorICAgICAgICBSZW5k
ZXJUaGVtZVF0TW9iaWxlIG9uZSB0aGF0IHVzZXMgUVBhaW50ZXIgZGlyZWN0bHkuCisKKyAgICAg
ICAgVXNlIG9mIHRoZSBtb2JpbGUgdGhlbWUgY2FuIGJlIHRyaWdnZXJlZCB2aWEgYSBjb21waWxl
IGZsYWcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBBcGkvcXdlYnBhZ2UuY3BwOgorICAgICAgICAoUVdlYlBhZ2U6OnN3YWxsb3dDb250ZXh0TWVu
dUV2ZW50KToKKwogMjAxMS0wOS0wNSAgSm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290
dGVAbm9raWEuY29tPgogCiAgICAgICAgIFtRdF1bV0syXSBNYWtlIFRpbGVkRHJhd2luZ0FyZWEg
cmVxdWVzdCB0aWxlcyBvbmx5IGluIHRoZSBkaXJlY3Rpb24gdGhlIHZpZXdwb3J0IGlzIHBhbm5l
ZCB0by4KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCBiZmU1NWQ3Li4xMjI4ZjkzIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDktMDggIFBpZXJyZSBSb3NzaSAg
PHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CisKKyAgICAgICAgW1F0XSBSZW1vdmUgdGhlIFFTdHls
ZSBkZXBlbmRlbmN5IGluIFF0J3MgbW9iaWxlIHRoZW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc3MworCisgICAgICAgIFJlbW92YWwgb2YgdGhl
IFFTdHlsZSBkZXBlbmRlbmN5IGZvciB0aGUgbW9iaWxlIHRoZW1lLgorCisgICAgICAgIFRoaXMg
cmVmYWN0b3Jpbmcgc3BsaXRzIHVwIFJlbmRlclRoZW1lUXQgaW50byB0d28KKyAgICAgICAgaW1w
bGVtZW50YXRpb24gZmlsZXMsIGEgUVN0eWxlLWJhY2tlZCBvbmUsIGFuZCBhCisgICAgICAgIFJl
bmRlclRoZW1lUXRNb2JpbGUgb25lIHRoYXQgdXNlcyBRUGFpbnRlciBkaXJlY3RseS4KKworICAg
ICAgICBVc2Ugb2YgdGhlIG1vYmlsZSB0aGVtZSBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBhIGNvbXBp
bGUgZmxhZy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFNjcmlwdHMvYnVpbGQtd2Via2l0OgorCiAyMDExLTA5LTA3ICBFcmljIEJvcmVuICA8Ym9y
ZW5ldEBnbWFpbC5jb20+CiAKICAgICAgICAgW0Nocm9taXVtXSBNb2RpZnkgV2ViVG91Y2hFdmVu
dCBzdHJ1Y3R1cmUgdG8gbWF0Y2ggV2ViQ29yZTo6VG91Y2hFdmVudApkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy9idWlsZC13ZWJraXQgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRl
eCAzZjViMDkyLi5iYTdkN2ZlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtp
dAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtNTUsNiArNTUsNyBAQCBteSAk
Y2xlYW4gPSAwOwogbXkgJHVzZUdZUCA9IDA7CiBteSAkbWluaW1hbCA9IDA7CiBteSAkdjggPSAw
OworbXkgJG1vYmlsZVRoZW1lID0gMDsKIG15ICRpbnN0YWxsSGVhZGVyczsKIG15ICRpbnN0YWxs
TGliczsKIG15ICRwcmVmaXhQYXRoOwpAQCAtMzQ5LDYgKzM1MCw4IEBAIGZvcmVhY2ggKEBBUkdW
KSB7CiAgICAgICAgICRtaW5pbWFsID0gMTsKICAgICB9IGVsc2lmICgkXyBlcSAnLS12OCcpIHsK
ICAgICAgICAgJHY4ID0gMTsKKyAgICB9IGVsc2lmICgkXyBlcSAnLS1tb2JpbGUtdGhlbWUnKSB7
CisgICAgICAgICRtb2JpbGVUaGVtZSA9IDE7CiAgICAgfQogfQogCkBAIC0zODUsNiArMzg4LDcg
QEAgVXNhZ2U6ICRwcm9ncmFtTmFtZSBbb3B0aW9uc10gW29wdGlvbnMgdG8gcGFzcyB0byBidWls
ZCBzeXN0ZW1dCiAgIC0taW5zdGFsbC1oZWFkZXJzPTxwYXRoPiAgICAgICAgICBTZXQgaW5zdGFs
bGF0aW9uIHBhdGggZm9yIHRoZSBoZWFkZXJzIChRdCBvbmx5KQogICAtLWluc3RhbGwtbGlicz08
cGF0aD4gICAgICAgICAgICAgU2V0IGluc3RhbGxhdGlvbiBwYXRoIGZvciB0aGUgbGlicmFyaWVz
IChRdCBvbmx5KQogICAtLXY4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIFY4IGFz
IEphdmFTY3JpcHQgZW5naW5lIChRdCBvbmx5KQorICAtLW1vYmlsZS10aGVtZSAgICAgICAgICAg
ICAgICAgICAgVXNlIG1vYmlsZSB0aGVtZSBpbnN0ZWFkIG9mIFFTdHlsZSAoUXQgb25seSkKICAg
LTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIFdlYktpdDIgKFF0IG9ubHkp
CiAKICAgLS1wcmVmaXg9PHBhdGg+ICAgICAgICAgICAgICAgICAgIFNldCBpbnN0YWxsYXRpb24g
cHJlZml4IHRvIHRoZSBnaXZlbiBwYXRoIChHdGsvRWZsIG9ubHkpCkBAIC00MDgsNiArNDEyLDcg
QEAgbXkgJW9wdGlvbnMgPSAoCiAgICAgJ21ha2VhcmdzPXMnID0+IFwkbWFrZUFyZ3MsCiAgICAg
J21pbmltYWwnID0+IFwkbWluaW1hbCwKICAgICAndjgnID0+IFwkdjgsCisgICAgJ21vYmlsZS10
aGVtZScgPT4gXCRtb2JpbGVUaGVtZSwKICAgICAnb25seS13ZWJraXQnID0+IFwkb25seVdlYktp
dFByb2plY3QsCiAgICAgJ25vLXdlYmtpdDInID0+IFwkbm9XZWJLaXQyLAogKTsKQEAgLTU1OSw2
ICs1NjQsMTAgQEAgaWYgKGlzR3RrKCkpIHsKICAgICBpZiAoJHY4KSB7CiAgICAgICAgIHB1c2gg
QG9wdGlvbnMsICJDT05GSUcrPXY4IjsKICAgICB9CisKKyAgICBpZiAoJG1vYmlsZVRoZW1lKSB7
CisgICAgICAgIHB1c2ggQG9wdGlvbnMsICJDT05GSUcrPXVzZV9xdF9tb2JpbGVfdGhlbWUiOwor
ICAgIH0KIH0KIAogIyBJZiBhc2tlZCB0byBidWlsZCBqdXN0IHRoZSBXZWJLaXQgcHJvamVjdCwg
b3ZlcndyaXRlIHRoZSBwcm9qZWN0cwotLSAKMS43LjYuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106751</attachid>
            <date>2011-09-08 09:54:15 -0700</date>
            <delta_ts>2011-11-11 04:19:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67773-20110908185300.patch</filename>
            <type>text/plain</type>
            <size>220160</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ2OTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOTUzY2UwZDg1NzdhMjky
NTY3NDY1Y2E3OGM0MGUzYzgyYmY1MWRkLi5iM2Q4NThhZTUwMWIzZTc5ZDY3ZGQ3NzE3ZjZmZGRl
NThkNTYxMmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjI0IEBACisyMDExLTA5LTA4ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3Zl
IHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBpbiBRdCdzIG1vYmlsZSB0aGVtZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NzMKKworICAgICAgICBSZW1v
dmFsIG9mIHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBmb3IgdGhlIG1vYmlsZSB0aGVtZS4KKworICAg
ICAgICBUaGlzIHJlZmFjdG9yaW5nIHNwbGl0cyB1cCBSZW5kZXJUaGVtZVF0IGludG8gdHdvCisg
ICAgICAgIGltcGxlbWVudGF0aW9uIGZpbGVzLCBhIFFTdHlsZS1iYWNrZWQgb25lLCBhbmQgYQor
ICAgICAgICBSZW5kZXJUaGVtZVF0TW9iaWxlIG9uZSB0aGF0IHVzZXMgUVBhaW50ZXIgZGlyZWN0
bHkuCisKKyAgICAgICAgVXNlIG9mIHRoZSBtb2JpbGUgdGhlbWUgY2FuIGJlIHRyaWdnZXJlZCB2
aWEgYSBjb21waWxlIGZsYWcuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIGlzIGp1c3QgcmVmYWN0b3JpbmcuCisKKyAg
ICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0
eWxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0eWxl
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3Bw
OiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5j
cHAuCisgICAgICAgIChXZWJDb3JlOjppbml0U3R5bGVPcHRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQ
YWludGVyOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6flN0eWxlUGFp
bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpSZW5kZXJUaGVtZVF0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXQ6On5SZW5kZXJUaGVtZVF0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXQ6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpm
YWxsYmFja1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnFTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzSG92ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNGb2N1c1JpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YmFzZWxpbmVQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpjb250cm9sU3VwcG9ydHNUaW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0NvbnRyb2xUaW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpmaW5kRnJhbWVMaW5lV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6aW5mbGF0ZUJ1dHRvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
dDo6YWRqdXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpw
bGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdDo6c3lzdGVtRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0OjpzeXN0ZW1Db2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
OjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OmNvbXB1dGVTaXplQmFzZWRPblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXQ6OnNldENoZWNrYm94U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpw
YWludENoZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldFJhZGlv
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFJhZGlvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldEJ1dHRvblNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdDo6c2V0QnV0dG9uUGFkZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0OjphZGp1c3RUZXh0RmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0OjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
OjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0
TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRQb3B1
cFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZW51TGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRv
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVudUxpc3RC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YW5pbWF0aW9uUmVwZWF0
SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
OjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lUXQ6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0OjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdDo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVR
dDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OmNvbnZlcnRUb1BhaW50aW5nUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50U2VhcmNoRmllbGRE
ZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRJbm5lclNwaW5CdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpleHRyYU1lZGlhQ29udHJv
bHNTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmxkTWF0cml4VHJhbnNmb3JtZXI6
OldvcmxkTWF0cml4VHJhbnNmb3JtZXIpOgorICAgICAgICAoV2ViQ29yZTo6V29ybGRNYXRyaXhU
cmFuc2Zvcm1lcjo6fldvcmxkTWF0cml4VHJhbnNmb3JtZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6bWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhQmFja2dyb3VuZCk6CisgICAgICAgIChX
ZWJDb3JlOjptZWRpYUVsZW1lbnRDYW5QbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OmdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhTXV0ZUJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhUGxheUJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFDdXJyZW50VGltZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRyb2xzQ3Vy
cmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFD
b250cm9sc1JlbWFpbmluZ1RpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpjYXJldEJsaW5rSW50ZXJ2YWwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgpOgorICAgICAgICAqIHBsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUVN0eWxlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuaC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
Omhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0Zvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVBhaW50ZXI6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3
UHJpbWl0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZHJhd0NvbnRyb2wp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3Q29tcGxleENvbnRyb2wpOgor
ICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZHJhd0NoZWNrZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVQYWludGVyOjpmaW5kQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBh
aW50ZXI6OmRyYXdSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmZpbmRS
YWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmRyYXdNdWx0aXBsZUNvbWJv
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZHJhd1NpbXBsZUNvbWJv
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6Z2V0QnV0dG9uSW1hZ2VT
aXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZmluZENvbWJvQnV0dG9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBh
aW50ZXI6On5TdHlsZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpk
cmF3TGluZUVkaXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3Q2hlY2tC
b3gpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3UmFkaW9CdXR0b24pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3UHVzaEJ1dHRvbik6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmRyYXdDb21ib0JveCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWU6OnRoZW1lRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjpSZW5kZXJUaGVtZVF0TW9iaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6On5SZW5kZXJUaGVtZVF0TW9iaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXRNb2JpbGU6OmlzQ29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0TW9iaWxlOjpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzdXBwb3J0c0hvdmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnN1cHBvcnRzRm9jdXNSaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmJhc2VsaW5lUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29udHJvbFN1cHBvcnRzVGludHMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c3VwcG9ydHNDb250cm9sVGlu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdE1vYmlsZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c3lzdGVtRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzeXN0ZW1Db2xvcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjptaW5pbXVtTWVudUxpc3RTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbXB1dGVTaXplQmFzZWRPblN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldENoZWNrYm94
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludENoZWNr
Ym94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldFJhZGlvU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdEJ1dHRvblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldEJ1dHRvblNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0QnV0dG9uUGFkZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludEJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0RmllbGRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRG
aWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0
QXJlYVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50
VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0
TWVudUxpc3RTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpz
ZXRQb3B1cFBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6
cGFpbnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjph
ZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdE1vYmlsZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphbmltYXRpb25EdXJhdGlvbkZv
clByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFk
anVzdFByb2dyZXNzQmFyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1v
YmlsZTo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
TW9iaWxlOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTZWFyY2hGaWVsZENh
bmNlbEJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6
OmNvbnZlcnRUb1BhaW50aW5nUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
TW9iaWxlOjpwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2VhcmNoRmllbGRE
ZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y2hlY2tNdWx0aXBsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzdXBwb3J0c0ZvY3VzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldFBhbGV0dGVGcm9tUGFnZUNs
aWVudElmRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmV4
dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6V29ybGRNYXRy
aXhUcmFuc2Zvcm1lcjo6V29ybGRNYXRyaXhUcmFuc2Zvcm1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JsZE1hdHJpeFRyYW5zZm9ybWVyOjp+V29ybGRNYXRyaXhUcmFuc2Zvcm1lcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjptZWRpYUNvbnRyb2xzQmFzZWxpbmVP
cGFjaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVk
aWFCYWNrZ3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhRWxlbWVudENhblBsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Z2V0TWVkaWFDb250cm9sRm9y
ZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBh
aW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6OnBhaW50TWVkaWFNdXRlQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFQbGF5QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYUN1
cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmZvcm1h
dE1lZGlhQ29udHJvbHNDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYVZvbHVt
ZVNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBh
aW50TWVkaWFTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjpwYWludE1lZGlhU2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdE1vYmlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lUXRNb2JpbGU6OmNhcmV0QmxpbmtJbnRlcnZhbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpmaWxlTGlzdE5hbWVGb3JXaWR0aCk6CisgICAgICAgICog
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6aGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmZpbmRGcmFtZUxpbmVXaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmlzVmFsaWQpOgorICAgICAgICAqIHBsYXRm
b3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWU6Om5hdGl2ZVRoZW1lKToKKwogMjAxMS0wOS0wNiAgQWJoaXNoZWsgQXJ5YSAgPGluZmVy
bm9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE51bGwgb3duaW5nUmVuZGVyZXIgY3Jhc2ggaW4g
UmVuZGVyU2Nyb2xsYmFyOjp1cGRhdGVTY3JvbGxiYXJQYXJ0cy4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXgg
NTg0OTYyYWRjZGNhOTQ2ZmE5ZWZiN2QyMDhhMGQ4ZDIzYjM2MDQwZS4uZWU3YWVmNGI4OTk0Y2My
ZmI5ZDlmOTRmY2JjZDgwYzM5MzkwYmI3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTIwOTAsOCArMjA5
MCw2IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggXAogICAg
IHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmggXAogICAgIHBsYXRmb3JtL3F0L1F0U3R5bGVP
cHRpb25XZWJDb21ib0JveC5oIFwKLSAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmggXAot
ICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xs
YWJsZUFyZWEuaCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaCBcCiAgICAgcGxhdGZv
cm0vU2Nyb2xsYmFyLmggXApAQCAtMjYyMSw3ICsyNjE5LDYgQEAgU09VUkNFUyArPSBcCiAgICAg
cGxhdGZvcm0vcXQvUGxhdGZvcm1TY3JlZW5RdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1BsYXRm
b3JtVG91Y2hFdmVudFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUGxhdGZvcm1Ub3VjaFBvaW50
UXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcCBcCiAgICAgcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0
LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvU2Nyb2xsVmlld1F0LmNwcCBcCkBAIC0yNjQyLDggKzI2
MzksMTMgQEAgU09VUkNFUyArPSBcCiB9CiAKIGNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRf
TU9CSUxFX1RIRU1FPTEpIHsKLSAgICBIRUFERVJTICs9IHBsYXRmb3JtL3F0L1F0TW9iaWxlV2Vi
U3R5bGUuaAotICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vcXQvUXRNb2JpbGVXZWJTdHlsZS5jcHAK
KyAgICBIRUFERVJTICs9IHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaAorICAgIFNP
VVJDRVMgKz0gcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKKyAgICBTT1VSQ0VT
IC09IHBsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAorfSBlbHNlIHsKKyAgICBIRUFERVJTICs9
IHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmggXAorICAgICAgICAgICAgICAgcGxhdGZv
cm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9xdC9SZW5k
ZXJUaGVtZVFTdHlsZS5jcHAKIH0KIAogY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NNT09USF9T
Q1JPTExJTkc9MSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRN
b2JpbGVXZWJTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdE1vYmlsZVdl
YlN0eWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNhMTgxN2Q3MjJiOTVl
ZTkyMmY3Y2Y2NDhmY2RiNGU1MTkxY2E4NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0
eWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJRdE1vYmlsZVdlYlN0eWxlLmgiCi0KLSNp
bmNsdWRlICJRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCIKLQotI2luY2x1ZGUgPFFQYWludGVy
PgotI2luY2x1ZGUgPFFQaXhtYXBDYWNoZT4KLSNpbmNsdWRlIDxRU3R5bGVPcHRpb24+Ci0KLVF0
TW9iaWxlV2ViU3R5bGU6OlF0TW9iaWxlV2ViU3R5bGUoKQotewotfQotCi1zdGF0aWMgaW5saW5l
IHZvaWQgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50ZXIs
IGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0IFFCcnVzaCYgYnJ1c2gp
Ci17Ci0gICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5wZW4oKTsKLSAgICBRQnJ1c2ggb2xkQnJ1
c2ggPSBwYWludGVyLT5icnVzaCgpOwotICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50
ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0gICAgcGFpbnRlci0+c2V0UGVuKHBlbik7Ci0gICAg
cGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gpOwotCi0gICAgaW50IGxpbmUgPSAxOwotICAgIHBhaW50
ZXItPmRyYXdSb3VuZGVkUmVjdChyZWN0LmFkanVzdGVkKGxpbmUsIGxpbmUsIC1saW5lLCAtbGlu
ZSksCi0gICAgICAgICAgICAvKiB4UmFkaXVzICovIDUuMCwgLyogeVJhZGlvdXMgKi8gNS4wKTsK
LSAgICBwYWludGVyLT5zZXRQZW4ob2xkUGVuKTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChvbGRC
cnVzaCk7Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd0NoZWNrZXIoUVBhaW50ZXIq
IHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0Ci17Ci0gICAgaW50IGJvcmRl
ciA9IHFNaW4ocU1heCgxLCBpbnQoMC4yICogc2l6ZSkpLCA2KTsKLSAgICBpbnQgY2hlY2tlclNp
emUgPSBxTWF4KHNpemUgLSAyICogYm9yZGVyLCAzKTsKLSAgICBpbnQgd2lkdGggPSBjaGVja2Vy
U2l6ZSAvIDM7Ci0gICAgaW50IG1pZGRsZSA9IHFNYXgoMyAqIGNoZWNrZXJTaXplIC8gNywgMyk7
Ci0gICAgaW50IHggPSAoKHNpemUgLSBjaGVja2VyU2l6ZSkgPj4gMSk7Ci0gICAgaW50IHkgPSAo
KHNpemUgLSBjaGVja2VyU2l6ZSkgPj4gMSkgKyAoY2hlY2tlclNpemUgLSB3aWR0aCAtIG1pZGRs
ZSk7Ci0gICAgUVZlY3RvcjxRTGluZUY+IGxpbmVzKGNoZWNrZXJTaXplICsgMSk7Ci0gICAgcGFp
bnRlci0+c2V0UGVuKGNvbG9yKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1pZGRsZTsgKytp
KSB7Ci0gICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgsIHksIHgsIHkgKyB3aWR0aCk7Ci0gICAg
ICAgICsreDsKLSAgICAgICAgKyt5OwotICAgIH0KLSAgICBmb3IgKGludCBpID0gbWlkZGxlOyBp
IDw9IGNoZWNrZXJTaXplOyArK2kpIHsKLSAgICAgICAgbGluZXNbaV0gPSBRTGluZUYoeCwgeSwg
eCwgeSArIHdpZHRoKTsKLSAgICAgICAgKyt4OwotICAgICAgICAtLXk7Ci0gICAgfQotICAgIHBh
aW50ZXItPmRyYXdMaW5lcyhsaW5lcy5jb25zdERhdGEoKSwgbGluZXMuc2l6ZSgpKTsKLX0KLQot
UVBpeG1hcCBRdE1vYmlsZVdlYlN0eWxlOjpmaW5kQ2hlY2tlcihjb25zdCBRUmVjdCYgcmVjdCwg
Ym9vbCBkaXNhYmxlZCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9IHFNaW4ocmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKLSAgICBRUGl4bWFwIHJlc3VsdDsKLSAgICBzdGF0aWMgY29uc3Qg
UVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFlbW81LSIpICsgUUxhdGluMVN0
cmluZyhtZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSsgUUxhdGluMVN0cmluZygiLWNoZWNrZXIt
Iik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZSkgKyBR
TGF0aW4xU3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIp
IDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKTsKLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6Zmlu
ZChrZXksIHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplLCBzaXplKTsK
LSAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICAgICAgUVBhaW50ZXIg
cGFpbnRlcigmcmVzdWx0KTsKLSAgICAgICAgZHJhd0NoZWNrZXIoJnBhaW50ZXIsIHNpemUsIGRp
c2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7Ci0gICAgICAgIFFQaXhtYXBD
YWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNv
bnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIFFDb2xvciBjb2xvcikgY29uc3QKLXsKLSAg
ICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwot
Ci0gICAgLy8gZ2V0IG1pbm9yIHNpemUgdG8gZG8gbm90IHBhaW50IGEgd2lkZSBlbGlwc2UKLSAg
ICBxcmVhbCBzcXVhcmVTaXplID0gcU1pbihzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwot
ICAgIC8vIGRlZmxhdGUgb25lIHBpeGVsCi0gICAgUVJlY3QgcmVjdCA9IFFSZWN0KFFQb2ludCgx
LCAxKSwgUVNpemUoc3F1YXJlU2l6ZSAtIDIsIHNxdWFyZVNpemUgLSAyKSk7Ci0gICAgY29uc3Qg
UVBvaW50IGNlbnRlckdyYWRpZW50KHJlY3QuYm90dG9tUmlnaHQoKSAqIDAuNyk7Ci0KLSAgICBR
UmFkaWFsR3JhZGllbnQgcmFkaWFsR3JhZGllbnQoY2VudGVyR3JhZGllbnQsIGNlbnRlckdyYWRp
ZW50LngoKSAtIDEpOwotICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6d2hp
dGUpOwotICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC42LCBRdDo6d2hpdGUpOwotICAg
IHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBjb2xvcik7Ci0KLSAgICBwYWludGVyLT5z
ZXRQZW4oY29sb3IpOwotICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKLSAgICBwYWludGVy
LT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChyYWRpYWxHcmFkaWVu
dCk7Ci0gICAgcGFpbnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0KLSAgICBpbnQgYm9yZGVyID0g
MC4xICogKHJlY3Qud2lkdGgoKSArIHJlY3QuaGVpZ2h0KCkpOwotICAgIGJvcmRlciA9IHFNaW4o
cU1heCgyLCBib3JkZXIpLCAxMCk7Ci0gICAgcmVjdC5hZGp1c3QoYm9yZGVyLCBib3JkZXIsIC1i
b3JkZXIsIC1ib3JkZXIpOwotICAgIGlmIChjaGVja2VkKSB7Ci0gICAgICAgIHBhaW50ZXItPnNl
dFBlbihRdDo6Tm9QZW4pOwotICAgICAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0gICAg
ICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIH0KLX0KLQotUVBpeG1hcCBRdE1v
YmlsZVdlYlN0eWxlOjpmaW5kUmFkaW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwg
Ym9vbCBkaXNhYmxlZCkgY29uc3QKLXsKLSAgICBRUGl4bWFwIHJlc3VsdDsKLSAgICBzdGF0aWMg
Y29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFlbW81LSIpICsgUUxh
dGluMVN0cmluZyhtZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSArIFFMYXRpbjFTdHJpbmcoIi1y
YWRpby0iKTsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihzaXpl
LndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVyKHNpemUuaGVp
Z2h0KCkpICsgUUxhdGluMVN0cmluZygiLSIpCi0gICAgICAgICsgKGRpc2FibGVkID8gUUxhdGlu
MVN0cmluZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFTdHJpbmcoImVuYWJsZWQiKSkgKyAoY2hlY2tl
ZCA/IFFMYXRpbjFTdHJpbmcoIi1jaGVja2VkIikgOiBRTGF0aW4xU3RyaW5nKCIiKSk7Ci0gICAg
aWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7Ci0gICAgICAgIHJlc3VsdCA9
IFFQaXhtYXAoc2l6ZSk7Ci0gICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0g
ICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7Ci0gICAgICAgIGRyYXdSYWRpbygmcGFp
bnRlciwgc2l6ZSwgY2hlY2tlZCwgZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5IDogUXQ6OmRhcmtH
cmF5KTsKLSAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOwotICAgIH0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdDb250
cm9sKENvbnRyb2xFbGVtZW50IGVsZW1lbnQsIGNvbnN0IFFTdHlsZU9wdGlvbiogb3B0aW9uLCBR
UGFpbnRlciogcGFpbnRlciwgY29uc3QgUVdpZGdldCogd2lkZ2V0KSBjb25zdAotewotICAgIHN3
aXRjaCAoZWxlbWVudCkgewotICAgIGNhc2UgQ0VfQ2hlY2tCb3g6IHsKLSAgICAgICAgUVJlY3Qg
cmVjdCA9IG9wdGlvbi0+cmVjdDsKLSAgICAgICAgY29uc3QgYm9vbCBkaXNhYmxlZCA9ICEob3B0
aW9uLT5zdGF0ZSAmIFN0YXRlX0VuYWJsZWQpOwotCi0gICAgICAgIFFMaW5lYXJHcmFkaWVudCBs
aW5lYXJHcmFkaWVudChyZWN0LnRvcExlZnQoKSwgcmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAg
ICBpZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQo
MC4wLCBRdDo6bGlnaHRHcmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9y
QXQoMC41LCBRdDo6d2hpdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpkYXJrR3JheSk7Ci0gICAgICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHBhaW50ZXItPnNldFBlbihRUGVuKGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0Ojpk
YXJrR3JheSkpOwotICAgICAgICBwYWludGVyLT5zZXRCcnVzaChsaW5lYXJHcmFkaWVudCk7Ci0g
ICAgICAgIHBhaW50ZXItPmRyYXdSZWN0KHJlY3QpOwotICAgICAgICByZWN0LmFkanVzdCgxLCAx
LCAtMSwgLTEpOwotCi0gICAgICAgIGlmIChvcHRpb24tPnN0YXRlICYgU3RhdGVfT2ZmKQotICAg
ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgUVBpeG1hcCBjaGVja2VyID0gZmluZENoZWNrZXIo
cmVjdCwgZGlzYWJsZWQpOwotICAgICAgICBpZiAoY2hlY2tlci5pc051bGwoKSkKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGludCB4ID0gKHJlY3Qud2lkdGgoKSAtIGNoZWNrZXIud2lk
dGgoKSkgPj4gMTsKLSAgICAgICAgaW50IHkgPSAocmVjdC5oZWlnaHQoKSAtIGNoZWNrZXIuaGVp
Z2h0KCkpID4+IDE7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdC54KCkgKyB4LCBy
ZWN0LnkoKSArIHksIGNoZWNrZXIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBD
RV9SYWRpb0J1dHRvbjogewotICAgICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRpb24t
PnN0YXRlICYgU3RhdGVfRW5hYmxlZCk7Ci0gICAgICAgIFFQaXhtYXAgcmFkaW8gPSBmaW5kUmFk
aW8ob3B0aW9uLT5yZWN0LnNpemUoKSwgb3B0aW9uLT5zdGF0ZSAmIFN0YXRlX09uLCBkaXNhYmxl
ZCk7Ci0gICAgICAgIGlmIChyYWRpby5pc051bGwoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBwYWludGVyLT5kcmF3UGl4bWFwKG9wdGlvbi0+cmVjdC54KCksIG9wdGlvbi0+cmVjdC55
KCksIHJhZGlvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ0VfUHVzaEJ1dHRv
bjogewotICAgICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRpb24tPnN0YXRlICYgU3Rh
dGVfRW5hYmxlZCk7Ci0gICAgICAgIFFSZWN0IHJlY3QgPSBvcHRpb24tPnJlY3Q7Ci0gICAgICAg
IFFQZW4gcGVuKFF0OjpkYXJrR3JheSwgMS4wLCBRdDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAs
IFF0OjpSb3VuZEpvaW4pOwotICAgICAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKLQotICAgICAg
ICBjb25zdCBib29sIHN1bmtlbiA9IChvcHRpb24tPnN0YXRlICYgU3RhdGVfU3Vua2VuKTsKLSAg
ICAgICAgaWYgKHN1bmtlbikgewotICAgICAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJh
Y2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtHcmF5KSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5l
YXJHcmFkaWVudDsKLSAgICAgICAgaWYgKGRpc2FibGVkKSB7Ci0gICAgICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOwotICAg
ICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKFFQb2ludChyZWN0LmJvdHRvbUxl
ZnQoKS54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICByZWN0LmJvdHRvbUxlZnQoKS55KCkg
LSAvKiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7Ci0gICAgICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOwotICAgICAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0Q29sb3JBdCgwLjQsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIGxp
bmVhckdyYWRpZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFFXaW5kb3dzU3R5bGU6OmRyYXdDb250cm9sKGVsZW1lbnQsIG9wdGlvbiwgcGFpbnRlciwg
d2lkZ2V0KTsKLSAgICB9Ci19Ci12b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdQcmltaXRpdmUo
UHJpbWl0aXZlRWxlbWVudCBlbGVtZW50LCBjb25zdCBRU3R5bGVPcHRpb24qIG9wdGlvbiwgUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFXaWRnZXQqIHdpZGdldCkgY29uc3QKLXsKLSAgICBzd2l0
Y2ggKGVsZW1lbnQpIHsKLSAgICBjYXNlIFFTdHlsZTo6UEVfUGFuZWxMaW5lRWRpdDogewotICAg
ICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRpb24tPnN0YXRlICYgU3RhdGVfRW5hYmxl
ZCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgc3Vua2VuID0gKG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9T
dW5rZW4pOwotICAgICAgICBRUmVjdCByZWN0ID0gb3B0aW9uLT5yZWN0OwotICAgICAgICBRUGVu
IHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6
Um91bmRKb2luKTsKLSAgICAgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7Ci0KLSAgICAgICAgaWYg
KHN1bmtlbikgewotICAgICAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQo
cGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtHcmF5KSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVu
dDsKLSAgICAgICAgaWYgKGRpc2FibGVkKSB7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRTdGFydChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRG
aW5hbFN0b3AocmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0Q29sb3JBdCgwLjAsIFF0OjpsaWdodEdyYXkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGll
bnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAg
ICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QudG9wTGVmdCgpLngoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QudG9wTGVmdCgpLnkoKSArIC8qIG9mZnNldCBs
aW1pdCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNl
dENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0Q29sb3JBdCgwLjM1LCBRdDo6d2hpdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd1Jl
Y3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBsaW5lYXJHcmFk
aWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBRV2lu
ZG93c1N0eWxlOjpkcmF3UHJpbWl0aXZlKGVsZW1lbnQsIG9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0
KTsKLSAgICB9Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd011bHRpcGxlQ29tYm9C
dXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBRQ29sb3IgY29sb3Ip
IGNvbnN0Ci17Ci0gICAgaW50IHJlY3RXaWR0aCA9IHNpemUud2lkdGgoKSAtIDE7Ci0gICAgaW50
IHdpZHRoID0gcU1heCgyLCByZWN0V2lkdGggPj4gMyk7Ci0gICAgaW50IGRpc3RhbmNlID0gKHJl
Y3RXaWR0aCAtIDMgKiB3aWR0aCkgPj4gMTsKLSAgICBpbnQgdG9wID0gKHNpemUuaGVpZ2h0KCkg
LSB3aWR0aCkgPj4gMTsKLQotICAgIHBhaW50ZXItPnNldFBlbihjb2xvcik7Ci0gICAgcGFpbnRl
ci0+c2V0QnJ1c2goY29sb3IpOwotCi0gICAgcGFpbnRlci0+ZHJhd1JlY3QoMCwgdG9wLCB3aWR0
aCwgd2lkdGgpOwotICAgIHBhaW50ZXItPmRyYXdSZWN0KHdpZHRoICsgZGlzdGFuY2UsIHRvcCwg
d2lkdGgsIHdpZHRoKTsKLSAgICBwYWludGVyLT5kcmF3UmVjdCgyICogKHdpZHRoICsgZGlzdGFu
Y2UpLCB0b3AsIHdpZHRoLCB3aWR0aCk7Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJh
d1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwg
UUNvbG9yIGNvbG9yKSBjb25zdAotewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAg
ICBpbnQgbWlkbGUgPSB3aWR0aCA+PiAxOwotICAgIFFWZWN0b3I8UUxpbmU+IGxpbmVzKHdpZHRo
ICsgMSk7Ci0KLSAgICBmb3IgKGludCB4ID0gMCwgeSA9IDA7ICB4IDwgbWlkbGU7IHgrKywgeSsr
KSB7Ci0gICAgICAgIGxpbmVzW3hdID0gUUxpbmUoeCwgeSwgeCwgeSArIDIpOwotICAgICAgICBs
aW5lc1t4ICsgbWlkbGVdID0gUUxpbmUod2lkdGggLSB4IC0gMSwgeSwgd2lkdGggLSB4IC0gMSwg
eSArIDIpOwotICAgIH0KLSAgICAvLyBKdXN0IHRvIGVuc3VyZSB0aGUgbGluZXMnIGludGVyc2Vj
dGlvbi4KLSAgICBsaW5lc1t3aWR0aF0gPSBRTGluZShtaWRsZSwgbWlkbGUsIG1pZGxlLCBtaWRs
ZSArIDIpOwotCi0gICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKLSAgICBwYWludGVyLT5zZXRC
cnVzaChjb2xvcik7Ci0gICAgcGFpbnRlci0+ZHJhd0xpbmVzKGxpbmVzKTsKLX0KLQotUVNpemUg
UXRNb2JpbGVXZWJTdHlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKGNvbnN0IFFTaXplJiBidXR0b25T
aXplKSBjb25zdAotewotICAgIGNvbnN0IGludCBib3JkZXIgPSBxTWF4KDMsIGJ1dHRvblNpemUu
d2lkdGgoKSA+PiAzKSA8PCAxOwotCi0gICAgaW50IHdpZHRoID0gYnV0dG9uU2l6ZS53aWR0aCgp
IC0gYm9yZGVyOwotICAgIGludCBoZWlnaHQgPSBidXR0b25TaXplLmhlaWdodCgpIC0gYm9yZGVy
OwotCi0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQotICAgICAgICByZXR1cm4gUVNp
emUoKTsKLQotICAgIGlmIChoZWlnaHQgPj0gKHdpZHRoID4+IDEpKQotICAgICAgICB3aWR0aCA9
IHdpZHRoID4+IDEgPDwgMTsKLSAgICBlbHNlCi0gICAgICAgIHdpZHRoID0gaGVpZ2h0IDw8IDE7
Ci0KLSAgICByZXR1cm4gUVNpemUod2lkdGggKyAxLCB3aWR0aCk7Ci19Ci0KLVFQaXhtYXAgUXRN
b2JpbGVXZWJTdHlsZTo6ZmluZENvbWJvQnV0dG9uKGNvbnN0IFFTaXplJiBzaXplLCBib29sIG11
bHRpcGxlLCBib29sIGRpc2FibGVkKSBjb25zdAotewotICAgIFFQaXhtYXAgcmVzdWx0OwotICAg
IFFTaXplIGltYWdlU2l6ZSA9IGdldEJ1dHRvbkltYWdlU2l6ZShzaXplKTsKLQotICAgIGlmIChp
bWFnZVNpemUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBRUGl4bWFwKCk7Ci0gICAgc3RhdGlj
IGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS0iKSArIFFM
YXRpbjFTdHJpbmcobWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkgKyBRTGF0aW4xU3RyaW5nKCIt
Y29tYm8tIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyAobXVsdGlwbGUgPyBRTGF0aW4x
U3RyaW5nKCJtdWx0aXBsZS0iKSA6IFFMYXRpbjFTdHJpbmcoInNpbXBsZS0iKSkKLSAgICAgICAg
KyBRU3RyaW5nOjpudW1iZXIoaW1hZ2VTaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIp
ICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgKyBRTGF0aW4x
U3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIpIDogUUxh
dGluMVN0cmluZygiZW5hYmxlZCIpKTsKLSAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXks
IHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChpbWFnZVNpemUpOwotICAgICAg
ICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAgICAgICBRUGFpbnRlciBwYWludGVy
KCZyZXN1bHQpOwotICAgICAgICBpZiAobXVsdGlwbGUpCi0gICAgICAgICAgICBkcmF3TXVsdGlw
bGVDb21ib0J1dHRvbigmcGFpbnRlciwgaW1hZ2VTaXplLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdy
YXkgOiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkcmF3U2ltcGxl
Q29tYm9CdXR0b24oJnBhaW50ZXIsIGltYWdlU2l6ZSwgZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5
IDogUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5LCByZXN1
bHQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFF0TW9iaWxlV2ViU3R5
bGU6OmRyYXdDb21wbGV4Q29udHJvbChDb21wbGV4Q29udHJvbCBjb250cm9sLCBjb25zdCBRU3R5
bGVPcHRpb25Db21wbGV4KiBvcHRpb24sIFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRV2lkZ2V0
KiB3aWRnZXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChjb250cm9sKSB7Ci0gICAgY2FzZSBDQ19D
b21ib0JveDogewotICAgICAgICBib29sIG11bHRpcGxlID0gZmFsc2U7Ci0gICAgICAgIGNvbnN0
IGJvb2wgZGlzYWJsZWQgPSAhKG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9FbmFibGVkKTsKLQotICAg
ICAgICBjb25zdCBRU3R5bGVPcHRpb25Db21ib0JveCogY21iID0gMDsKLSAgICAgICAgY29uc3Qg
V2ViQ29yZTo6UXRTdHlsZU9wdGlvbldlYkNvbWJvQm94KiB3ZWJDb21ibyA9IHN0YXRpY19jYXN0
PGNvbnN0IFdlYkNvcmU6OlF0U3R5bGVPcHRpb25XZWJDb21ib0JveCo+KG9wdGlvbik7Ci0KLSAg
ICAgICAgaWYgKHdlYkNvbWJvKSB7Ci0gICAgICAgICAgICBtdWx0aXBsZSA9IHdlYkNvbWJvLT5t
dWx0aXBsZSgpOwotICAgICAgICAgICAgY21iID0gd2ViQ29tYm87Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgY21iID0gcXN0eWxlb3B0aW9uX2Nhc3Q8Y29uc3QgUVN0eWxlT3B0aW9uQ29t
Ym9Cb3gqPihvcHRpb24pOwotCi0gICAgICAgIGlmICghY21iKSB7Ci0gICAgICAgICAgICBRV2lu
ZG93c1N0eWxlOjpkcmF3Q29tcGxleENvbnRyb2woY29udHJvbCwgb3B0aW9uLCBwYWludGVyLCB3
aWRnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIShj
bWItPnN1YkNvbnRyb2xzICYgU0NfQ29tYm9Cb3hBcnJvdykpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBRUmVjdCByZWN0ID0gb3B0aW9uLT5yZWN0OwotICAgICAgICBRUGVuIHBlbihR
dDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRK
b2luKTsKLSAgICAgICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50OwotICAgICAgICBp
ZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3Qu
Ym90dG9tTGVmdCgpKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChy
ZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAu
MCwgUXQ6OmdyYXkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAs
IFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVu
dC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVu
dC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QuYm90dG9tTGVmdCgpLngoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlY3QuYm90dG9tTGVmdCgpLnkoKSAtIC8qIG9mZnNldCBsaW1pdCBmb3Ig
Z3JhZGllbnQgKi8gMjApKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQo
MC4wLCBRdDo6Z3JheSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAu
NCwgUXQ6OndoaXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRyYXdSZWN0YW5ndWxhckNvbnRy
b2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgbGluZWFyR3JhZGllbnQpOwotCi0gICAg
ICAgIHJlY3QgPSBzdWJDb250cm9sUmVjdChDQ19Db21ib0JveCwgY21iLCBTQ19Db21ib0JveEFy
cm93LCB3aWRnZXQpOwotICAgICAgICBRUGl4bWFwIHBpYyA9IGZpbmRDb21ib0J1dHRvbihyZWN0
LnNpemUoKSwgbXVsdGlwbGUsIGRpc2FibGVkKTsKLQotICAgICAgICBpZiAocGljLmlzTnVsbCgp
KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaW50IHggPSAocmVjdC53aWR0aCgpIC0g
cGljLndpZHRoKCkpID4+IDE7Ci0gICAgICAgIGludCB5ID0gKHJlY3QuaGVpZ2h0KCkgLSBwaWMu
aGVpZ2h0KCkpID4+IDE7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdC54KCkgKyB4
LCByZWN0LnkoKSArIHksIHBpYyk7Ci0KLSAgICAgICAgcGFpbnRlci0+c2V0UGVuKGRpc2FibGVk
ID8gUXQ6OmdyYXkgOiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBwYWludGVyLT5kcmF3TGluZShy
ZWN0LmxlZnQoKSAtIDIsIHJlY3QudG9wKCkgKyAyLCByZWN0LmxlZnQoKSAtIDIsIHJlY3QuYm90
dG9tKCkgLSAyKTsKLQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgUVdpbmRvd3NTdHlsZTo6ZHJhd0NvbXBsZXhDb250cm9sKGNvbnRyb2wsIG9wdGlvbiwgcGFp
bnRlciwgd2lkZ2V0KTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1F0TW9iaWxlV2ViU3R5bGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI5OWQy
YjhiNWEzOWM5NGMwYjlhMTcyYTE4ZmU0YmFlYzA0MjY5MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9RdE1v
YmlsZVdlYlN0eWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
Ci0gKi8KLQotI2lmbmRlZiBRdE1vYmlsZVdlYlN0eWxlX2gKLSNkZWZpbmUgUXRNb2JpbGVXZWJT
dHlsZV9oCi0KLSNpbmNsdWRlIDxRV2luZG93c1N0eWxlPgotCi1jbGFzcyBRdE1vYmlsZVdlYlN0
eWxlIDogcHVibGljIFFXaW5kb3dzU3R5bGUgewotcHVibGljOgotICAgIFF0TW9iaWxlV2ViU3R5
bGUoKTsKLQotICAgIHZvaWQgZHJhd0NvbnRyb2woQ29udHJvbEVsZW1lbnQsIGNvbnN0IFFTdHls
ZU9wdGlvbiosIFFQYWludGVyKiwgY29uc3QgUVdpZGdldCopIGNvbnN0OwotICAgIHZvaWQgZHJh
d0NvbXBsZXhDb250cm9sKENvbXBsZXhDb250cm9sLCBjb25zdCBRU3R5bGVPcHRpb25Db21wbGV4
KiwgUVBhaW50ZXIqLCBjb25zdCBRV2lkZ2V0KikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3UHJpbWl0
aXZlKFByaW1pdGl2ZUVsZW1lbnQsIGNvbnN0IFFTdHlsZU9wdGlvbiosIFFQYWludGVyKiwgY29u
c3QgUVdpZGdldCopIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZvaWQgZHJhd0NoZWNrZXIoUVBh
aW50ZXIqIHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0OwotICAgIFFQaXht
YXAgZmluZENoZWNrZXIoY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgZGlzYWJsZWQpIGNvbnN0Owot
Ci0gICAgdm9pZCBkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXpl
LCBib29sIGNoZWNrZWQsIFFDb2xvciBjb2xvcikgY29uc3Q7Ci0gICAgUVBpeG1hcCBmaW5kUmFk
aW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7
Ci0KLSAgICBRU2l6ZSBnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNpemUmIGJ1dHRvblNpemUp
IGNvbnN0OwotICAgIHZvaWQgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVy
LCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdDsKLSAgICB2b2lkIGRyYXdN
dWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwg
UUNvbG9yIGNvbG9yKSBjb25zdDsKLSAgICBRUGl4bWFwIGZpbmRDb21ib0J1dHRvbihjb25zdCBR
U2l6ZSYgc2l6ZSwgYm9vbCBtdWx0aXBsZSwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7Ci0KLX07Ci0K
LSNlbmRpZiAvLyBRdE1vYmlsZVdlYlN0eWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzA5NjE5OTM5NzFjOGQ2
M2MzNGEzYjNjMmE0NDBiZDNkMmJmZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuY3BwCkBAIC0wLDAgKzEsMTUxMCBAQAor
LyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9y
Zz4KKyAqICAgICAgICAgICAgICAgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4K
KyAqICAgICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgor
ICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKKworI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5o
IgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0
LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgor
I2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJGb250U2VsZWN0b3Iu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpZiBFTkFCTEUoVklERU8pCisj
aW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKKyNlbmRpZgorI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhaW50SW5mby5oIgor
I2luY2x1ZGUgIlFXZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUXRTdHlsZU9wdGlvbldlYkNv
bWJvQm94LmgiCisjaW5jbHVkZSAicXdlYnNldHRpbmdzLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94
LmgiCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKKyNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5o
IgorI2VuZGlmCisjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVF0LmgiCisjaW5jbHVkZSAiU2xpZGVyVGh1
bWJFbGVtZW50LmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2luY2x1ZGUgIlVzZXJBZ2Vu
dFN0eWxlU2hlZXRzLmgiCisKKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UUNv
bG9yPgorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CisjaW5jbHVkZSA8UUZpbGU+CisjaW5j
bHVkZSA8UUZvbnRNZXRyaWNzPgorI2luY2x1ZGUgPFFMaW5lRWRpdD4KKyNpbmNsdWRlIDxRTWFj
U3R5bGU+CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVBsYXN0aXF1ZVN0eWxlPgor
I2luY2x1ZGUgPFFQdXNoQnV0dG9uPgorI2luY2x1ZGUgPFFTdHlsZUZhY3Rvcnk+CisjaW5jbHVk
ZSA8UVN0eWxlT3B0aW9uQnV0dG9uPgorI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkZyYW1lVjI+Cisj
aWYgRU5BQkxFKFBST0dSRVNTX1RBRykKKyNpbmNsdWRlIDxRU3R5bGVPcHRpb25Qcm9ncmVzc0Jh
clYyPgorI2VuZGlmCisjaW5jbHVkZSA8UVN0eWxlT3B0aW9uU2xpZGVyPgorI2luY2x1ZGUgPFFX
aWRnZXQ+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKKworaW5saW5lIHN0YXRpYyB2b2lkIGluaXRTdHlsZU9wdGlvbihRV2lkZ2V0ICp3aWRnZXQs
IFFTdHlsZU9wdGlvbiYgb3B0aW9uKQoreworICAgIGlmICh3aWRnZXQpCisgICAgICAgIG9wdGlv
bi5pbml0RnJvbSh3aWRnZXQpOworICAgIGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgIElm
IGEgd2lkZ2V0IGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUgZm9yIHJlbmRlcmluZywgd2UgZmFs
bGJhY2sgdG8gZGVmYXVsdAorICAgICAgICAgIHZhbHVlIGZvciBhbiBhY3RpdmUgd2lkZ2V0Lgor
ICAgICAgICAgKi8KKyAgICAgICAgb3B0aW9uLnN0YXRlID0gUVN0eWxlOjpTdGF0ZV9BY3RpdmUg
fCBRU3R5bGU6OlN0YXRlX0VuYWJsZWQ7CisgICAgfQorfQorLy8gVGhlc2UgdmFsdWVzIGFsbCBt
YXRjaCBTYWZhcmkvV2luL0Nocm9taXVtCitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdENvbnRy
b2xGb250UGl4ZWxTaXplID0gMTM7CitzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdENhbmNlbEJ1
dHRvblNpemUgPSA5Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pbkNhbmNlbEJ1dHRvblNpemUgPSA1
Oworc3RhdGljIGNvbnN0IGZsb2F0IG1heENhbmNlbEJ1dHRvblNpemUgPSAyMTsKK3N0YXRpYyBj
b25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSAxMzsK
K3N0YXRpYyBjb25zdCBmbG9hdCBtaW5TZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9
IDk7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblNp
emUgPSAzMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzQnV0
dG9uV2lkdGggPSAxODsKKworU3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVR
dCogdGhlbWUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIGluaXQocGFpbnRJ
bmZvLmNvbnRleHQgPyBwYWludEluZm8uY29udGV4dCA6IDAsIHRoZW1lLT5xU3R5bGUoKSk7Cit9
CisKK1N0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKFNjcm9sbGJhclRoZW1lUXQqIHRoZW1lLCBH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgaW5pdChjb250ZXh0LCB0aGVtZS0+c3R5
bGUoKSk7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjppbml0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgUVN0eWxlKiB0aGVtZVN0eWxlKQoreworICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxR
UGFpbnRlcio+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICB3aWRnZXQgPSAwOwor
ICAgIFFQYWludERldmljZSogZGV2ID0gMDsKKyAgICBpZiAocGFpbnRlcikKKyAgICAgICAgZGV2
ID0gcGFpbnRlci0+ZGV2aWNlKCk7CisgICAgaWYgKGRldiAmJiBkZXYtPmRldlR5cGUoKSA9PSBR
SW50ZXJuYWw6OldpZGdldCkKKyAgICAgICAgd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UVdpZGdldCo+
KGRldik7CisgICAgc3R5bGUgPSB0aGVtZVN0eWxlOworCisgICAgaWYgKHBhaW50ZXIpIHsKKyAg
ICAgICAgLy8gdGhlIHN0eWxlcyBvZnRlbiBhc3N1bWUgYmVpbmcgY2FsbGVkIHdpdGggYSBwcmlz
dGluZSBwYWludGVyIHdoZXJlIG5vIGJydXNoIGlzIHNldCwKKyAgICAgICAgLy8gc28gcmVzZXQg
aXQgbWFudWFsbHkKKyAgICAgICAgb2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOworICAgICAg
ICBwYWludGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7CisKKyAgICAgICAgLy8gcGFpbnRpbmcg
dGhlIHdpZGdldCB3aXRoIGFudGktYWxpYXNpbmcgd2lsbCBtYWtlIGl0IGJsdXJyeQorICAgICAg
ICAvLyBkaXNhYmxlIGl0IGhlcmUgYW5kIHJlc3RvcmUgaXQgbGF0ZXIKKyAgICAgICAgb2xkQW50
aWFsaWFzaW5nID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2lu
Zyk7CisgICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2lu
ZywgZmFsc2UpOworICAgIH0KK30KKworU3R5bGVQYWludGVyOjp+U3R5bGVQYWludGVyKCkKK3sK
KyAgICBpZiAocGFpbnRlcikgeworICAgICAgICBwYWludGVyLT5zZXRCcnVzaChvbGRCcnVzaCk7
CisgICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnRzKFFQYWludGVyOjpBbnRpYWxpYXNpbmcs
IG9sZEFudGlhbGlhc2luZyk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBS
ZW5kZXJUaGVtZVF0OjpjcmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFJlbmRlclRoZW1lUXQocGFnZSkpOworfQorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBS
ZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpCisg
ICAgICAgIHJldHVybiBSZW5kZXJUaGVtZVF0OjpjcmVhdGUocGFnZSk7CisKKyAgICBzdGF0aWMg
UmVuZGVyVGhlbWUqIGZhbGxiYWNrID0gUmVuZGVyVGhlbWVRdDo6Y3JlYXRlKDApLnJlbGVhc2VS
ZWYoKTsKKyAgICByZXR1cm4gZmFsbGJhY2s7Cit9CisKK1JlbmRlclRoZW1lUXQ6OlJlbmRlclRo
ZW1lUXQoUGFnZSogcGFnZSkKKyAgICA6IFJlbmRlclRoZW1lKCkKKyAgICAsIG1fcGFnZShwYWdl
KQorICAgICwgbV9saW5lRWRpdCgwKQoreworICAgIFFQdXNoQnV0dG9uIGJ1dHRvbjsKKyAgICBi
dXR0b24uc2V0QXR0cmlidXRlKFF0OjpXQV9NYWNTbWFsbFNpemUpOworICAgIFFGb250IGRlZmF1
bHRCdXR0b25Gb250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOworICAgIFFGb250SW5m
byBmb250SW5mbyhkZWZhdWx0QnV0dG9uRm9udCk7CisgICAgbV9idXR0b25Gb250RmFtaWx5ID0g
ZGVmYXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7CisjaWZkZWYgUV9XU19NQUMKKyAgICBtX2J1dHRv
bkZvbnRQaXhlbFNpemUgPSBmb250SW5mby5waXhlbFNpemUoKTsKKyNlbmRpZgorCisgICAgbV9m
YWxsYmFja1N0eWxlID0gUVN0eWxlRmFjdG9yeTo6Y3JlYXRlKFFMYXRpbjFTdHJpbmcoIndpbmRv
d3MiKSk7Cit9CisKK1JlbmRlclRoZW1lUXQ6On5SZW5kZXJUaGVtZVF0KCkKK3sKKyAgICBkZWxl
dGUgbV9mYWxsYmFja1N0eWxlOworI2lmbmRlZiBRVF9OT19MSU5FRURJVAorICAgIGRlbGV0ZSBt
X2xpbmVFZGl0OworI2VuZGlmCit9CisKKy8vIFJlbW92ZSB0aGlzIHdoZW4gU2VhcmNoRmllbGRQ
YXJ0IGlzIHN0eWxlLWFibGUgaW4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZCgpCitib29s
IFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUs
IGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBmaWxsLCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAoreworICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVh
cmFuY2UoKSkgeworICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAgICAgICAvLyBUZXN0IHRo
ZSBzdHlsZSB0byBzZWUgaWYgdGhlIFVBIGJvcmRlciBhbmQgYmFja2dyb3VuZCBtYXRjaC4KKyAg
ICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVyCisgICAgICAgICAgICAgICAg
fHwgKnN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gZmlsbAorICAgICAgICAgICAgICAgIHx8
IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3Ip
ICE9IGJhY2tncm91bmRDb2xvcik7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFJlbmRl
clRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dyb3VuZENv
bG9yKTsKKyAgICB9Cit9CisKKy8vIGZvciBzb21lIHdpZGdldCBwYWludGluZywgd2UgbmVlZCB0
byBmYWxsYmFjayB0byBXaW5kb3dzIHN0eWxlCitRU3R5bGUqIFJlbmRlclRoZW1lUXQ6OmZhbGxi
YWNrU3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiAobV9mYWxsYmFja1N0eWxlKSA/IG1fZmFs
bGJhY2tTdHlsZSA6IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKK30KKworUVN0eWxlKiBSZW5kZXJU
aGVtZVF0OjpxU3R5bGUoKSBjb25zdAoreworICAgIGlmIChtX3BhZ2UpIHsKKyAgICAgICAgUVdl
YlBhZ2VDbGllbnQqIHBhZ2VDbGllbnQgPSBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxh
dGZvcm1QYWdlQ2xpZW50KCk7CisKKyAgICAgICAgaWYgKHBhZ2VDbGllbnQpCisgICAgICAgICAg
ICByZXR1cm4gcGFnZUNsaWVudC0+c3R5bGUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gUUFwcGxp
Y2F0aW9uOjpzdHlsZSgpOworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0cmFEZWZhdWx0
U3R5bGVTaGVldCgpCit7CisgICAgU3RyaW5nIHJlc3VsdCA9IFJlbmRlclRoZW1lOjpleHRyYURl
ZmF1bHRTdHlsZVNoZWV0KCk7CisjaWYgRU5BQkxFKE5PX0xJU1RCT1hfUkVOREVSSU5HKQorICAg
IHJlc3VsdCArPSBTdHJpbmcodGhlbWVRdE5vTGlzdGJveGVzVXNlckFnZW50U3R5bGVTaGVldCwg
c2l6ZW9mKHRoZW1lUXROb0xpc3Rib3hlc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKyNlbmRpZgor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNIb3Zl
cihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAoreworICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNh
c2UgQ2hlY2tib3hQYXJ0OgorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgIGNhc2UgUHVzaEJ1dHRv
blBhcnQ6CisgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoK
KyAgICBjYXNlIEJ1dHRvbkJldmVsUGFydDoKKyAgICBjYXNlIExpc3Rib3hQYXJ0OgorICAgIGNh
c2UgTGlzdEl0ZW1QYXJ0OgorICAgIGNhc2UgTWVudWxpc3RQYXJ0OgorICAgIGNhc2UgTWVudWxp
c3RCdXR0b25QYXJ0OgorICAgIGNhc2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6CisgICAgY2FzZSBT
bGlkZXJWZXJ0aWNhbFBhcnQ6CisgICAgY2FzZSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0Ogor
ICAgIGNhc2UgU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBh
cnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25QYXJ0OgorICAgIGNhc2UgU2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25QYXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKKyAgICBj
YXNlIFRleHRBcmVhUGFydDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW50IFJlbmRlclRoZW1lUXQ6OmJhc2Vs
aW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIGlmICghby0+
aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFy
YW5jZSgpID09IENoZWNrYm94UGFydCB8fCBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gUmFk
aW9QYXJ0KQorICAgICAgICByZXR1cm4gdG9SZW5kZXJCb3gobyktPm1hcmdpblRvcCgpICsgdG9S
ZW5kZXJCb3gobyktPmhlaWdodCgpIC0gMjsgLy8gU2FtZSBhcyBpbiBvbGQga2h0bWwKKyAgICBy
ZXR1cm4gUmVuZGVyVGhlbWU6OmJhc2VsaW5lUG9zaXRpb24obyk7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVRdDo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25z
dAoreworICAgIGlmICghaXNFbmFibGVkKG8pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBDaGVja2JveGVzIG9ubHkgaGF2ZSB0aW50IHdoZW4gY2hlY2tlZC4KKyAgICBpZiAoby0+
c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFydCkKKyAgICAgICAgcmV0dXJuIGlz
Q2hlY2tlZChvKTsKKworICAgIC8vIEZvciBub3cgYXNzdW1lIG90aGVyIGNvbnRyb2xzIGhhdmUg
dGludCBpZiBlbmFibGVkLgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlclRoZW1l
UXQ6OnN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworaW50IFJlbmRlclRoZW1lUXQ6OmZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqIHN0eWxlKSBj
b25zdAoreworI2lmbmRlZiBRVF9OT19MSU5FRURJVAorICAgIGlmICghbV9saW5lRWRpdCkKKyAg
ICAgICAgbV9saW5lRWRpdCA9IG5ldyBRTGluZUVkaXQoKTsKKyNlbmRpZgorCisgICAgUVN0eWxl
T3B0aW9uRnJhbWVWMiBvcHQ7CisgICAgUVdpZGdldCogd2lkZ2V0ID0gMDsKKyNpZm5kZWYgUVRf
Tk9fTElORUVESVQKKyAgICB3aWRnZXQgPSBtX2xpbmVFZGl0OworI2VuZGlmCisgICAgcmV0dXJu
IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0RlZmF1bHRGcmFtZVdpZHRoLCAmb3B0LCB3
aWRnZXQpOworfQorCitzdGF0aWMgUVJlY3QgaW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3Qm
IG9yaWdpbmFsUmVjdCwgUVN0eWxlKiBzdHlsZSkKK3sKKyAgICBRU3R5bGVPcHRpb25CdXR0b24g
b3B0aW9uOworICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOworICAgIG9w
dGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OworCisgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHN0eWxl
LT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLCAmb3B0aW9u
LCAwKTsKKyAgICBpZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgaW50IHBhZGRp
bmdMZWZ0ID0gbGF5b3V0UmVjdC5sZWZ0KCkgLSBvcmlnaW5hbFJlY3QubGVmdCgpOworICAgICAg
ICBpbnQgcGFkZGluZ1JpZ2h0ID0gb3JpZ2luYWxSZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJp
Z2h0KCk7CisgICAgICAgIGludCBwYWRkaW5nVG9wID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdp
bmFsUmVjdC50b3AoKTsKKyAgICAgICAgaW50IHBhZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3Qu
Ym90dG9tKCkgLSBsYXlvdXRSZWN0LmJvdHRvbSgpOworCisgICAgICAgIHJldHVybiBvcmlnaW5h
bFJlY3QuYWRqdXN0ZWQoLXBhZGRpbmdMZWZ0LCAtcGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBw
YWRkaW5nQm90dG9tKTsKKyAgICB9CisgICAgcmV0dXJuIG9yaWdpbmFsUmVjdDsKK30KKwordm9p
ZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8s
IEludFJlY3QmIHJlY3QpCit7CisgICAgc3dpdGNoIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkp
IHsKKyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSYWRp
b1BhcnQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgY2Fz
ZSBCdXR0b25QYXJ0OiB7CisgICAgICAgIFFSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVCdXR0
b25SZWN0KHJlY3QsIHFTdHlsZSgpKTsKKyAgICAgICAgcmVjdCA9IEludFJlY3QoaW5mbGF0ZWRS
ZWN0LngoKSwgaW5mbGF0ZWRSZWN0LnkoKSwgaW5mbGF0ZWRSZWN0LndpZHRoKCksIGluZmxhdGVk
UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIE1lbnVsaXN0
UGFydDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorfQorCitDb2xvciBSZW5kZXJUaGVtZVF0OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpw
YWxldHRlKCk7CisgICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAg
ICByZXR1cm4gcGFsLmJydXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQp
LmNvbG9yKCk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lUXQ6OnBsYXRmb3JtSW5hY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbCA9IFFBcHBs
aWNhdGlvbjo6cGFsZXR0ZSgpOworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3Rz
KHBhbCk7CisgICAgcmV0dXJuIHBhbC5icnVzaChRUGFsZXR0ZTo6SW5hY3RpdmUsIFFQYWxldHRl
OjpIaWdobGlnaHQpLmNvbG9yKCk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lUXQ6OnBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBRUGFsZXR0ZSBw
YWwgPSBRQXBwbGljYXRpb246OnBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGll
bnRJZkV4aXN0cyhwYWwpOworICAgIHJldHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwg
UVBhbGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKTsKK30KKworQ29sb3IgUmVuZGVyVGhl
bWVRdDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7
CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0UGFs
ZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFsLmJydXNoKFFQ
YWxldHRlOjpJbmFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKTsKK30K
KworQ29sb3IgUmVuZGVyVGhlbWVRdDo6cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpIGNvbnN0Cit7
CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0UGFs
ZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFsLmJydXNoKFFQ
YWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVRdDo6c3lzdGVtRm9udChpbnQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0Cit7
CisgICAgLy8gbm8tb3AKK30KKworQ29sb3IgUmVuZGVyVGhlbWVRdDo6c3lzdGVtQ29sb3IoaW50
IGNzc1ZhbHVlSWQpIGNvbnN0Cit7CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpw
YWxldHRlKCk7CisgICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAg
ICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKKyAgICBjYXNlIENTU1ZhbHVlQnV0dG9udGV4dDoKKyAg
ICAgICAgcmV0dXJuIHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6QnV0dG9u
VGV4dCkuY29sb3IoKTsKKyAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6CisgICAgICAgIHJl
dHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OlRleHQpLmNvbG9yKCk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihj
c3NWYWx1ZUlkKTsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJUaGVtZVF0OjptaW5pbXVtTWVudUxp
c3RTaXplKFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICBjb25zdCBRRm9udE1ldHJpY3MgJmZt
ID0gUUFwcGxpY2F0aW9uOjpmb250TWV0cmljcygpOworICAgIHJldHVybiBmbS53aWR0aChRTGF0
aW4xQ2hhcigneCcpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0Ojpjb21wdXRlU2l6ZUJhc2Vk
T25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0Cit7CisgICAgUVNpemUgc2l6
ZSgwLCAwKTsKKyAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5m
b250KCkpOworICAgIFFTdHlsZSogc3R5bGUgPSBxU3R5bGUoKTsKKworICAgIHN3aXRjaCAocmVu
ZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAgIGNh
c2UgU2VhcmNoRmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDogeworICAgICAgICBp
bnQgcGFkZGluZyA9IGZpbmRGcmFtZUxpbmVXaWR0aChzdHlsZSk7CisgICAgICAgIHJlbmRlclN0
eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICAgICAgcmVu
ZGVyU3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICAg
ICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Cisg
ICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhl
ZCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmll
ZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCFyZW5kZXJTdHlsZS0+d2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFyZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRv
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFu
Y2UoKSkgeworICAgIGNhc2UgQ2hlY2tib3hQYXJ0OiB7CisgICAgICAgIFFTdHlsZU9wdGlvbiBz
dHlsZU9wdGlvbjsKKyAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9T
bWFsbDsKKyAgICAgICAgaW50IGNoZWNrQm94V2lkdGggPSBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0
eWxlOjpQTV9JbmRpY2F0b3JXaWR0aCwgJnN0eWxlT3B0aW9uKTsKKyAgICAgICAgY2hlY2tCb3hX
aWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBzaXplID0gUVNp
emUoY2hlY2tCb3hXaWR0aCwgY2hlY2tCb3hXaWR0aCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIFJhZGlvUGFydDogeworICAgICAgICBRU3R5bGVPcHRpb24gc3R5bGVPcHRpb247
CisgICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7CisgICAg
ICAgIGludCByYWRpb1dpZHRoID0gc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fRXhjbHVz
aXZlSW5kaWNhdG9yV2lkdGgsICZzdHlsZU9wdGlvbik7CisgICAgICAgIHJhZGlvV2lkdGggKj0g
cmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgc2l6ZSA9IFFTaXplKHJhZGlv
V2lkdGgsIHJhZGlvV2lkdGgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQdXNo
QnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBhcnQ6IHsKKyAgICAgICAgUVN0eWxlT3B0aW9u
QnV0dG9uIHN0eWxlT3B0aW9uOworICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6
OlN0YXRlX1NtYWxsOworICAgICAgICBRU2l6ZSBjb250ZW50U2l6ZSA9IGZtLnNpemUoUXQ6OlRl
eHRTaG93TW5lbW9uaWMsIFFTdHJpbmc6OmZyb21MYXRpbjEoIlgiKSk7CisgICAgICAgIFFTaXpl
IHB1c2hCdXR0b25TaXplID0gc3R5bGUtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlOjpDVF9QdXNo
QnV0dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZzdHlsZU9wdGlvbiwgY29udGVudFNpemUsIDApOworICAgICAgICBzdHlsZU9wdGlv
bi5yZWN0ID0gUVJlY3QoMCwgMCwgcHVzaEJ1dHRvblNpemUud2lkdGgoKSwgcHVzaEJ1dHRvblNp
emUuaGVpZ2h0KCkpOworICAgICAgICBRUmVjdCBsYXlvdXRSZWN0ID0gc3R5bGUtPnN1YkVsZW1l
bnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCAwKTsKKworICAg
ICAgICAvLyBJZiB0aGUgc3R5bGUgc3VwcG9ydHMgbGF5b3V0IHJlY3RzIHdlIHVzZSB0aGF0LCBh
bmQgIGNvbXBlbnNhdGUgYWNjb3JkaW5nbHkKKyAgICAgICAgLy8gaW4gcGFpbnRCdXR0b24oKSBi
ZWxvdy4KKyAgICAgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKQorICAgICAgICAgICAgc2l6
ZS5zZXRIZWlnaHQobGF5b3V0UmVjdC5oZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHNpemUuc2V0SGVpZ2h0KHB1c2hCdXR0b25TaXplLmhlaWdodCgpKTsKKworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBNZW51bGlzdFBhcnQ6IHsKKyAgICAgICAgUVN0eWxlT3B0
aW9uQ29tYm9Cb3ggc3R5bGVPcHRpb247CisgICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFT
dHlsZTo6U3RhdGVfU21hbGw7CisgICAgICAgIGludCBjb250ZW50SGVpZ2h0ID0gcU1heChmbS5s
aW5lU3BhY2luZygpLCAxNCkgKyAyOworICAgICAgICBRU2l6ZSBtZW51TGlzdFNpemUgPSBzdHls
ZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGU6OkNUX0NvbWJvQm94LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIFFTaXpl
KDAsIGNvbnRlbnRIZWlnaHQpLCAwKTsKKyAgICAgICAgc2l6ZS5zZXRIZWlnaHQobWVudUxpc3RT
aXplLmhlaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIEZJWE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNl
IGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNjb3VudC4KKyAgICBp
ZiAocmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRo
KCkgPiAwKQorICAgICAgICByZW5kZXJTdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHNpemUud2lk
dGgoKSwgRml4ZWQpKTsKKyAgICBpZiAocmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYm
IHNpemUuaGVpZ2h0KCkgPiAwKQorICAgICAgICByZW5kZXJTdHlsZS0+c2V0TWluSGVpZ2h0KExl
bmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OnNl
dENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50Q2hl
Y2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworfQorCit2b2lkIFJlbmRl
clRoZW1lUXQ6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAg
Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6
OnBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IElu
dFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworfQorCit2b2lk
IFJlbmRlclRoZW1lUXQ6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIERpdGNo
IHRoZSBib3JkZXIuCisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisKKyNpZmRlZiBRX1dTX01B
QworICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0KSB7CisgICAg
ICAgIC8vIFRoZSBNYWMgcG9ydHMgaWdub3JlIHRoZSBzcGVjaWZpZWQgaGVpZ2h0IGZvciA8aW5w
dXQgdHlwZT0iYnV0dG9uIj4gZWxlbWVudHMKKyAgICAgICAgLy8gdW5sZXNzIGEgYm9yZGVyIGFu
ZC9vciBiYWNrZ3JvdW5kIENTUyBwcm9wZXJ0eSBpcyBhbHNvIHNwZWNpZmllZC4KKyAgICAgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworICAgIH0KKyNlbmRpZgorCisgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7CisKKyNpZmRlZiBR
X1dTX01BQyAvLyBVc2UgZml4ZWQgZm9udCBzaXplIGFuZCBmYW1pbHkgb24gTWFjIChsaWtlIFNh
ZmFyaSBkb2VzKQorICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKG1fYnV0dG9u
Rm9udFBpeGVsU2l6ZSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShtX2J1
dHRvbkZvbnRQaXhlbFNpemUpOworI2Vsc2UKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lm
aWVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7CisjZW5kaWYKKworICAgIEZvbnRGYW1pbHkgZm9u
dEZhbWlseTsKKyAgICBmb250RmFtaWx5LnNldEZhbWlseShtX2J1dHRvbkZvbnRGYW1pbHkpOwor
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoZm9udEZhbWlseSk7CisgICAgc3R5bGUtPnNl
dEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRpb24pOworICAgIHN0eWxlLT5mb250KCkudXBk
YXRlKHNlbGVjdG9yLT5mb250U2VsZWN0b3IoKSk7CisgICAgc3R5bGUtPnNldExpbmVIZWlnaHQo
UmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHNldEJ1dHRvblNpemUoc3R5
bGUpOworICAgIHNldEJ1dHRvblBhZGRpbmcoc3R5bGUpOworfQorCit2b2lkIFJlbmRlclRoZW1l
UXQ6OnNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGNvbXB1
dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRC
dXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBRU3R5bGVPcHRp
b25CdXR0b24gc3R5bGVPcHRpb247CisgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpT
dGF0ZV9TbWFsbDsKKworICAgIC8vIEZha2UgYSBidXR0b24gcmVjdCBoZXJlLCBzaW5jZSB3ZSdy
ZSBqdXN0IGNvbXB1dGluZyBkZWx0YXMKKyAgICBRUmVjdCBvcmlnaW5hbFJlY3QgPSBRUmVjdCgw
LCAwLCAxMDAsIDMwKTsKKyAgICBzdHlsZU9wdGlvbi5yZWN0ID0gb3JpZ2luYWxSZWN0OworCisg
ICAgLy8gRGVmYXVsdCBwYWRkaW5nIGlzIGJhc2VkIG9uIHRoZSBidXR0b24gbWFyZ2luIHBpeGVs
IG1ldHJpYworICAgIGludCBidXR0b25NYXJnaW4gPSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0
eWxlOjpQTV9CdXR0b25NYXJnaW4sICZzdHlsZU9wdGlvbiwgMCk7CisgICAgaW50IHBhZGRpbmdM
ZWZ0ID0gYnV0dG9uTWFyZ2luOworICAgIGludCBwYWRkaW5nUmlnaHQgPSBidXR0b25NYXJnaW47
CisgICAgaW50IHBhZGRpbmdUb3AgPSBidXR0b25NYXJnaW47CisgICAgaW50IHBhZGRpbmdCb3R0
b20gPSBidXR0b25NYXJnaW47CisKKyAgICAvLyBUaGVuIGNoZWNrIGlmIHRoZSBzdHlsZSB1c2Vz
IGxheW91dCBtYXJnaW5zCisgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVt
ZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCAwKTsKKyAgICBp
ZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpIHsKKyAgICAgICAgUVJlY3QgY29udGVudHNSZWN0ID0g
cVN0eWxlKCktPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkNvbnRlbnRzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0
eWxlT3B0aW9uLCAwKTsKKyAgICAgICAgcGFkZGluZ0xlZnQgPSBjb250ZW50c1JlY3QubGVmdCgp
IC0gbGF5b3V0UmVjdC5sZWZ0KCk7CisgICAgICAgIHBhZGRpbmdSaWdodCA9IGxheW91dFJlY3Qu
cmlnaHQoKSAtIGNvbnRlbnRzUmVjdC5yaWdodCgpOworICAgICAgICBwYWRkaW5nVG9wID0gY29u
dGVudHNSZWN0LnRvcCgpIC0gbGF5b3V0UmVjdC50b3AoKTsKKworICAgICAgICAvLyBDYW4ndCB1
c2UgdGhpcyByaWdodCBub3cgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoZSBiYXNlbGluZSB0byBj
b21wZW5zYXRlCisgICAgICAgIC8vIHBhZGRpbmdCb3R0b20gPSBsYXlvdXRSZWN0LmJvdHRvbSgp
IC0gY29udGVudHNSZWN0LmJvdHRvbSgpOworICAgIH0KKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xl
ZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmln
aHQoTGVuZ3RoKHBhZGRpbmdSaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1Rv
cChMZW5ndGgocGFkZGluZ1RvcCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRv
bShMZW5ndGgocGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0
OjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3Qg
SW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAu
aXNWYWxpZCgpKQorICAgICAgIHJldHVybiB0cnVlOworCisgICAgUVN0eWxlT3B0aW9uQnV0dG9u
IG9wdGlvbjsKKyAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7CisgICAgb3B0
aW9uLnJlY3QgPSByOworICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwor
CisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRp
b25zKG9wdGlvbiwgbyk7CisgICAgaWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQgfHwg
YXBwZWFyYW5jZSA9PSBCdXR0b25QYXJ0KSB7CisgICAgICAgIG9wdGlvbi5yZWN0ID0gaW5mbGF0
ZUJ1dHRvblJlY3Qob3B0aW9uLnJlY3QsIHFTdHlsZSgpKTsKKyAgICAgICAgcC5kcmF3Q29udHJv
bChRU3R5bGU6OkNFX1B1c2hCdXR0b24sIG9wdGlvbik7CisgICAgfSBlbHNlIGlmIChhcHBlYXJh
bmNlID09IFJhZGlvUGFydCkKKyAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUmFkaW9C
dXR0b24sIG9wdGlvbik7CisgICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBDaGVja2JveFBhcnQp
CisgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX0NoZWNrQm94LCBvcHRpb24pOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVs
ZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBj
b25zdAoreworICAgIC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlrZSB0aGlzIGxlYWRzIHRvIGRp
ZmZlcmVuY2VzIGxpa2U6CisgICAgLy8gLSBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0ICgy
LDIpIHNpemUgMTY4eDI1IFtiZ2NvbG9yPSNGRkZGRkZdIGJvcmRlcjogKDJweCBpbnNldCAjMDAw
MDAwKV0KKyAgICAvLyArIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAx
NjZ4MjYKKyAgICAvLyBpbiBsYXlvdXQgdGVzdHMgd2hlbiBhIENTUyBzdHlsZSBpcyBhcHBsaWVk
IHRoYXQgZG9lc24ndCBhZmZlY3QgYmFja2dyb3VuZCBjb2xvciwgYm9yZGVyIG9yCisgICAgLy8g
cGFkZGluZy4gSnVzdCB3b3J0aCBrZWVwaW5nIGluIG1pbmQhCisgICAgc3R5bGUtPnNldEJhY2tn
cm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIHN0eWxlLT5yZXNldEJvcmRlcigp
OworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHls
ZShzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRUZXh0RmllbGQoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
U3R5bGVQYWludGVyIHAodGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBRU3R5bGVPcHRpb25GcmFtZVYyIHBhbmVsOworICAgIGluaXRT
dHlsZU9wdGlvbihwLndpZGdldCwgcGFuZWwpOworICAgIHBhbmVsLnJlY3QgPSByOworICAgIHBh
bmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aChxU3R5bGUoKSk7CisgICAgcGFuZWwu
c3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47CisgICAgcGFuZWwuZmVhdHVyZXMgPSBRU3R5
bGVPcHRpb25GcmFtZVYyOjpOb25lOworCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRh
dGEgZm9yIGEgdGV4dCBmaWVsZAorICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFs
aXplQ29tbW9uUVN0eWxlT3B0aW9ucyhwYW5lbCwgbyk7CisgICAgaWYgKGFwcGVhcmFuY2UgIT0g
VGV4dEZpZWxkUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAor
ICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFRleHRBcmVhUGFydAorICAgICAgICAmJiBhcHBlYXJh
bmNlICE9IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBw
YWludCB0aGUgdGV4dCBmaWVsZC4KKyAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5l
bExpbmVFZGl0LCBwYW5lbCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRo
ZW1lUXQ6OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBhZGp1c3RU
ZXh0RmllbGRTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOworfQorCitib29sIFJlbmRl
clRoZW1lUXQ6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGks
IHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAg
c3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisKKyAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8u
CisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworCisgICAgLy8gV2hpdGUtc3Bh
Y2UgaXMgbG9ja2VkIHRvIHByZQorICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7CisKKyAg
ICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7CisKKyAgICAvLyBBZGQgaW4gdGhlIHBh
ZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNlLgorICAgIHNldFBvcHVwUGFkZGluZyhzdHlsZSk7
Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0UG9wdXBQYWRkaW5nKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICBjb25zdCBpbnQgcGFkZGluZ0xlZnQgPSA0OworICAgIGNvbnN0
IGludCBwYWRkaW5nUmlnaHQgPSBzdHlsZS0+d2lkdGgoKS5pc0ZpeGVkKCkgfHwgc3R5bGUtPndp
ZHRoKCkuaXNQZXJjZW50KCkgPyA1IDogODsKKworICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChM
ZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7CisKKyAgICBRU3R5bGVPcHRpb25Db21ib0JveCBv
cHQ7CisgICAgaW50IHcgPSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9CdXR0b25J
Y29uU2l6ZSwgJm9wdCwgMCk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFk
ZGluZ1JpZ2h0ICsgdywgRml4ZWQpKTsKKworICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0
aCgyLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCgyLCBGaXhl
ZCkpOworfQorCisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHls
ZVBhaW50ZXIgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIFF0U3R5bGVPcHRpb25XZWJDb21ib0JveCBvcHQobyk7CisgICAgaW5p
dFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHQpOworICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVP
cHRpb25zKG9wdCwgbyk7CisKKyAgICBJbnRSZWN0IHJlY3QgPSByOworCisjaWYgZGVmaW5lZChR
X1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVfTUFDKQorICAgIC8vIFFNYWNTdHlsZSBt
YWtlcyB0aGUgY29tYm8gYm94ZXMgYSBsaXR0bGUgYml0IHNtYWxsZXIgdG8gbGVhdmUgc3BhY2Ug
Zm9yIHRoZSBmb2N1cyByZWN0LgorICAgIC8vIEJlY2F1c2Ugb2YgaXQsIHRoZSBjb21ibyBidXR0
b24gaXMgZHJhd24gYXQgYSBwb2ludCB0byB0aGUgbGVmdCBvZiB3aGVyZSBpdCB3YXMgZXhwZWN0
IHRvIGJlIGFuZCBtYXkgZW5kIHVwCisgICAgLy8gb3ZlcmxhcHBlZCB3aXRoIHRoZSB0ZXh0LiBU
aGlzIHdpbGwgZm9yY2UgUU1hY1N0eWxlIHRvIGRyYXcgdGhlIGNvbWJvIGJveCB3aXRoIHRoZSBl
eHBlY3RlZCB3aWR0aC4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUp
KQorICAgICAgICByZWN0LmluZmxhdGVYKDMpOworI2VuZGlmCisKKyAgICBjb25zdCBRUG9pbnQg
dG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BM
ZWZ0KTsKKyAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBvcHQucmVjdC5z
ZXRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6
Q0NfQ29tYm9Cb3gsIG9wdCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlz
dEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1l
bnQqKSBjb25zdAoreworICAgIC8vIFdPUktBUk9VTkQgYmVjYXVzZSBodG1sLmNzcyBzcGVjaWZp
ZXMgLXdlYmtpdC1ib3JkZXItcmFkaXVzIGZvciA8c2VsZWN0PiBzbyB3ZSBvdmVycmlkZSBpdCBo
ZXJlCisgICAgLy8gc2VlIGFsc28gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTgzOTkKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXJSYWRpdXMoKTsKKworICAgIC8vIEhlaWdo
dCBpcyBsb2NrZWQgdG8gYXV0by4KKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7
CisKKyAgICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCisgICAgc3R5bGUtPnNldFdo
aXRlU3BhY2UoUFJFKTsKKworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKKwor
ICAgIC8vIEFkZCBpbiB0aGUgcGFkZGluZyB0aGF0IHdlJ2QgbGlrZSB0byB1c2UuCisgICAgc2V0
UG9wdXBQYWRkaW5nKHN0eWxlKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lbnVM
aXN0QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
U3R5bGVQYWludGVyIHAodGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3ggb3B0aW9uKG8pOwor
ICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKKyAgICBpbml0aWFsaXplQ29t
bW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOworICAgIG9wdGlvbi5yZWN0ID0gcjsKKworICAg
IC8vIGZvciBkcmF3aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkgb25seSBvbiB0aGUgZmFs
bGJhY2sgc3R5bGUKKyAgICBwLnN0eWxlID0gZmFsbGJhY2tTdHlsZSgpOworICAgIG9wdGlvbi5z
dWJDb250cm9scyA9IFFTdHlsZTo6U0NfQ29tYm9Cb3hBcnJvdzsKKyAgICBwLmRyYXdDb21wbGV4
Q29udHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCBvcHRpb24pOworCisgICAgcmV0dXJuIGZhbHNl
OworfQorCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKK2RvdWJsZSBSZW5kZXJUaGVtZVF0Ojph
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5k
ZXJQcm9ncmVzcykgY29uc3QKK3sKKyAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkg
Pj0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogVXNlIGhhcmQtY29kZWQg
dmFsdWUgdW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05
MTcxIGlzIGZpeGVkLgorICAgIC8vIFVzZSB0aGUgdmFsdWUgZnJvbSB3aW5kb3dzIHN0eWxlIHdo
aWNoIGlzIDEwIGZwcy4KKyAgICByZXR1cm4gMC4xOworfQorCitkb3VibGUgUmVuZGVyVGhlbWVR
dDo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVy
UHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49
IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgUVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMiBv
cHRpb247CisgICAgb3B0aW9uLnJlY3Quc2V0U2l6ZShyZW5kZXJQcm9ncmVzcy0+c2l6ZSgpKTsK
KyAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dz
ZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5p
bWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHJldHVybiAob3B0aW9uLnJlY3Qu
d2lkdGgoKSAvIHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1
bmtXaWR0aCwgJm9wdGlvbikpICogYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jh
cihyZW5kZXJQcm9ncmVzcyk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0UHJvZ3Jl
c3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworfQorCitib29s
IFJlbmRlclRoZW1lUXQ6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIGlmICghby0+aXNQcm9ncmVz
cygpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBp
KTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgIHJldHVybiB0cnVlOworCisgICAgUVN0
eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMiBvcHRpb247CisgICAgaW5pdFN0eWxlT3B0aW9uKHAud2lk
Z2V0LCBvcHRpb24pOworICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwg
byk7CisKKyAgICBSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dy
ZXNzKG8pOworICAgIG9wdGlvbi5yZWN0ID0gcjsKKyAgICBvcHRpb24ubWF4aW11bSA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CisgICAgb3B0aW9uLm1pbmltdW0gPSAwOworICAg
IG9wdGlvbi5wcm9ncmVzcyA9IChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSAqIHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOworCisgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSBy
LmxvY2F0aW9uKCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisgICAgb3B0
aW9uLnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CisgICAgb3B0aW9uLnJlY3Quc2V0U2l6ZShy
LnNpemUoKSk7CisKKyAgICBpZiAob3B0aW9uLnByb2dyZXNzIDwgMCkgeworICAgICAgICAvLyBG
SVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05
MTcxIGlzIGZpeGVkLAorICAgICAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGlu
ZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KKyAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6
OkNFX1Byb2dyZXNzQmFyR3Jvb3ZlLCBvcHRpb24pOworICAgICAgICBpbnQgY2h1bmtXaWR0aCA9
IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwg
Jm9wdGlvbik7CisgICAgICAgIFFDb2xvciBjb2xvciA9IChvcHRpb24ucGFsZXR0ZS5oaWdobGln
aHQoKSA9PSBvcHRpb24ucGFsZXR0ZS5iYWNrZ3JvdW5kKCkpID8gb3B0aW9uLnBhbGV0dGUuY29s
b3IoUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodCkgOiBvcHRpb24ucGFsZXR0
ZS5jb2xvcihRUGFsZXR0ZTo6SGlnaGxpZ2h0KTsKKyAgICAgICAgaWYgKHJlbmRlclByb2dyZXNz
LT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgICAgICBwLnBhaW50ZXItPmZp
bGxSZWN0KG9wdGlvbi5yZWN0LnJpZ2h0KCkgLSBjaHVua1dpZHRoICAtIHJlbmRlclByb2dyZXNz
LT5hbmltYXRpb25Qcm9ncmVzcygpICogb3B0aW9uLnJlY3Qud2lkdGgoKSwgMCwgY2h1bmtXaWR0
aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNvbG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcC5wYWludGVyLT5maWxsUmVjdChyZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3Mo
KSAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdo
dCgpLCBjb2xvcik7CisgICAgfSBlbHNlCisgICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpD
RV9Qcm9ncmVzc0Jhciwgb3B0aW9uKTsKKworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BM
ZWZ0KTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlclRoZW1l
UXQ6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsK
KyAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7CisgICAgb3B0aW9uLnN1YkNv
bnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJHcm9vdmU7CisgICAgQ29udHJvbFBhcnQgYXBwZWFy
YW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7CisgICAgb3B0
aW9uLnJlY3QgPSByOworICAgIGlmIChhcHBlYXJhbmNlID09IFNsaWRlclZlcnRpY2FsUGFydCkK
KyAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIGlmIChpc1By
ZXNzZWQobykpCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsK
KworICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRpb24pOwor
CisgICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMpIHsKKyAgICAg
ICAgUVN0eWxlT3B0aW9uRm9jdXNSZWN0IGZvY3VzT3B0aW9uOworICAgICAgICBmb2N1c09wdGlv
bi5yZWN0ID0gcjsKKyAgICAgICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfRnJhbWVGb2N1
c1JlY3QsIGZvY3VzT3B0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0
Qm94U2hhZG93KG51bGxwdHIpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50U2xpZGVy
VGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQ
YWludGVyIHAodGhpcywgcGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKKyAgICBpbml0U3R5bGVP
cHRpb24ocC53aWRnZXQsIG9wdGlvbik7CisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxl
OjpTQ19TbGlkZXJIYW5kbGU7CisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxp
emVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7CisgICAgb3B0aW9uLnJlY3QgPSByOwor
ICAgIGlmIChhcHBlYXJhbmNlID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICBv
cHRpb24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7CisgICAgaWYgKGlzUHJlc3NlZChvKSkg
eworICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckhh
bmRsZTsKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOworICAg
IH0KKworICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRpb24p
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNs
aWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0
U2xpZGVyVGh1bWJTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOworICAgIHN0eWxlLT5z
ZXRCb3hTaGFkb3cobnVsbHB0cik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFy
Y2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1
cm4gcGFpbnRUZXh0RmllbGQobywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OmFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
bGVtZW50KiBlKSBjb25zdAoreworICAgIC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlrZSB0aGlz
IGxlYWRzIHRvIGRpZmZlcmVuY2VzIGxpa2U6CisgICAgLy8gLSBSZW5kZXJUZXh0Q29udHJvbCB7
SU5QVVR9IGF0ICgyLDIpIHNpemUgMTY4eDI1IFtiZ2NvbG9yPSNGRkZGRkZdIGJvcmRlcjogKDJw
eCBpbnNldCAjMDAwMDAwKV0KKyAgICAvLyArIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQg
KDIsMikgc2l6ZSAxNjZ4MjYKKyAgICAvLyBpbiBsYXlvdXQgdGVzdHMgd2hlbiBhIENTUyBzdHls
ZSBpcyBhcHBsaWVkIHRoYXQgZG9lc24ndCBhZmZlY3QgYmFja2dyb3VuZCBjb2xvciwgYm9yZGVy
IG9yCisgICAgLy8gcGFkZGluZy4gSnVzdCB3b3J0aCBrZWVwaW5nIGluIG1pbmQhCisgICAgc3R5
bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIHN0eWxlLT5y
ZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBjb21wdXRlU2l6
ZUJhc2VkT25TdHlsZShzdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVu
ZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgLy8gTG9naWMgdGFrZW4g
ZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtLmNwcC4KKyAgICAvLyBTY2FsZSB0aGUgYnV0dG9uIHNp
emUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4KKyAgICBmbG9hdCBmb250U2NhbGUgPSBzdHlsZS0+
Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAgICBpbnQgY2FuY2Vs
QnV0dG9uU2l6ZSA9IGxyb3VuZGYocU1pbihxTWF4KG1pbkNhbmNlbEJ1dHRvblNpemUsIGRlZmF1
bHRDYW5jZWxCdXR0b25TaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2VsQnV0dG9uU2l6ZSkpOwor
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwgRml4ZWQpKTsKKyAg
ICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOworfQor
CisvLyBGdW5jdGlvbiB0YWtlbiBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW0uY3BwCitJbnRSZWN0
IFJlbmRlclRoZW1lUXQ6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlucHV0
UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBJbnRSZWN0IHBhcnRS
ZWN0LCBjb25zdCBJbnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3QKK3sKKyAgICAvLyBDb21wdXRl
IGFuIG9mZnNldCBiZXR3ZWVuIHRoZSBwYXJ0IHJlbmRlcmVyIGFuZCB0aGUgaW5wdXQgcmVuZGVy
ZXIuCisgICAgSW50U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJlciA9IC0ocGFydFJlbmRlcmVy
LT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5kZXJlcikpOworICAgIC8vIE1v
dmUgdGhlIHJlY3QgaW50byBwYXJ0UmVuZGVyZXIncyBjb29yZHMuCisgICAgcGFydFJlY3QubW92
ZShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7CisgICAgLy8gQWNjb3VudCBmb3IgdGhlIGxvY2Fs
IGRyYXdpbmcgb2Zmc2V0LgorICAgIHBhcnRSZWN0Lm1vdmUobG9jYWxPZmZzZXQueCgpLCBsb2Nh
bE9mZnNldC55KCkpOworCisgICAgcmV0dXJuIHBhcnRSZWN0OworfQorCitib29sIFJlbmRlclRo
ZW1lUXQ6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgLy8gTG9naWMgY29waWVkIGZyb20g
UmVuZGVyVGhlbWVDaHJvbWl1bS5jcHAuCisKKyAgICAvLyBHZXQgdGhlIHJlbmRlcmVyIG9mIDxp
bnB1dD4gZWxlbWVudC4KKyAgICBOb2RlKiBpbnB1dCA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0
b3JOb2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVyZXIoKS0+aXNCb3goKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIFJlbmRlckJveCogaW5wdXRSZW5kZXJCb3ggPSB0b1JlbmRlckJv
eChpbnB1dC0+cmVuZGVyZXIoKSk7CisgICAgSW50UmVjdCBpbnB1dENvbnRlbnRCb3ggPSBpbnB1
dFJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2Nh
bGVkIGJ1dHRvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3gu
CisgICAgaW50IGNhbmNlbEJ1dHRvblNpemUgPSBxTWluKGlucHV0Q29udGVudEJveC53aWR0aCgp
LCBxTWluKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSkpOworICAgIC8vIENh
bGN1bGF0ZSBjYW5jZWwgYnV0dG9uJ3MgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGlucHV0
IGVsZW1lbnQuCisgICAgLy8gQ2VudGVyIHRoZSBidXR0b24gdmVydGljYWxseS4gUm91bmQgdXAg
dGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwK
KyAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiBU
aGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhlIHRleHQuCisgICAgSW50UmVjdCBjYW5j
ZWxCdXR0b25SZWN0KG8tPm9mZnNldEZyb21BbmNlc3RvckNvbnRhaW5lcihpbnB1dFJlbmRlckJv
eCkud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb250ZW50Qm94
LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkgLSBjYW5jZWxCdXR0b25TaXplICsgMSkg
LyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b25TaXplLCBjYW5j
ZWxCdXR0b25TaXplKTsKKyAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IGNvbnZlcnRUb1BhaW50
aW5nUmVjdChpbnB1dFJlbmRlckJveCwgbywgY2FuY2VsQnV0dG9uUmVjdCwgcik7CisgICAgc3Rh
dGljIEltYWdlKiBjYW5jZWxJbWFnZSA9IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2Vh
cmNoQ2FuY2VsQnV0dG9uIikucmVsZWFzZVJlZigpOworICAgIHN0YXRpYyBJbWFnZSogY2FuY2Vs
UHJlc3NlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5jZWxC
dXR0b25QcmVzc2VkIikucmVsZWFzZVJlZigpOworICAgIHBpLmNvbnRleHQtPmRyYXdJbWFnZShp
c1ByZXNzZWQobykgPyBjYW5jZWxQcmVzc2VkSW1hZ2UgOiBjYW5jZWxJbWFnZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG8tPnN0eWxlKCktPmNvbG9yU3BhY2UoKSwgcGFpbnRp
bmdSZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdDo6YWRq
dXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3Is
IFJlbmRlclN0eWxlKiBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShz
ZWxlY3Rvciwgc3R5bGUsIGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6
cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24obywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRo
ZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFy
Y2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uKG8sIHBpLCByKTsKK30KKworI2lmbmRlZiBRVF9OT19TUElO
Qk9YCit2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Cit7Cisg
ICAgLy8gVXNlIHRoZSBzYW1lIHdpZHRoIGFzIG91ciBuYXRpdmUgc2Nyb2xsYmFyCisgICAgaW50
IHdpZHRoID0gU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPnNjcm9sbGJhclRoaWNrbmVz
cygpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CisgICAgc3R5
bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZVF0OjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIFN0eWxlUGFpbnRl
ciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIFFTdHlsZU9wdGlvblNwaW5Cb3ggb3B0aW9uOworICAgIGluaXRTdHls
ZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKKyAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5
bGU6OlNDX1NwaW5Cb3hVcCB8IFFTdHlsZTo6U0NfU3BpbkJveERvd247CisgICAgaWYgKCFpc1Jl
YWRPbmx5Q29udHJvbChvKSkgeworICAgICAgICBpZiAoaXNFbmFibGVkKG8pKQorICAgICAgICAg
ICAgb3B0aW9uLnN0ZXBFbmFibGVkID0gUUFic3RyYWN0U3BpbkJveDo6U3RlcFVwRW5hYmxlZCB8
IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBEb3duRW5hYmxlZDsKKyAgICAgICAgaWYgKGlzUHJlc3Nl
ZChvKSkgeworICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2Vu
OworICAgICAgICAgICAgaWYgKGlzU3BpblVwQnV0dG9uUGFydFByZXNzZWQobykpCisgICAgICAg
ICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXA7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRy
b2xzID0gUVN0eWxlOjpTQ19TcGluQm94RG93bjsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBS
ZW5kZXIgdGhlIHNwaW4gYnV0dG9ucyBmb3IgTFRSIG9yIFJUTCBhY2NvcmRpbmdseS4KKyAgICBv
cHRpb24uZGlyZWN0aW9uID0gby0+c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
UXQ6OkxlZnRUb1JpZ2h0IDogUXQ6OlJpZ2h0VG9MZWZ0OworCisgICAgSW50UmVjdCBidXR0b25S
ZWN0ID0gcmVjdDsKKyAgICAvLyBEZWZhdWx0IHRvIG1vdmluZyB0aGUgYnV0dG9ucyBhIGxpdHRs
ZSBiaXQgd2l0aGluIHRoZSBlZGl0b3IgZnJhbWUuCisgICAgaW50IGluZmxhdGVYID0gLTI7Cisg
ICAgaW50IGluZmxhdGVZID0gLTI7CisjaWYgZGVmaW5lZChRX1dTX01BQykgJiYgIWRlZmluZWQo
UVRfTk9fU1RZTEVfTUFDKQorICAgIC8vIFFNYWNTdHlsZSB3aWxsIHBvc2l0aW9uIHRoZSBhcXVh
IGJ1dHRvbnMgZmx1c2ggdG8gdGhlIHJpZ2h0LgorICAgIC8vIFRoaXMgd2lsbCBtb3ZlIHRoZW0g
bW9yZSB3aXRoaW4gdGhlIGNvbnRyb2wgZm9yIGJldHRlciBzdHlsZSwgYSBsYQorICAgIC8vIENo
cm9taXVtIGxvb2sgJiBmZWVsLgorICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4ocC5z
dHlsZSkpIHsKKyAgICAgICAgaW5mbGF0ZVggPSAtNDsKKyAgICAgICAgLy8gUmVuZGVyIG1pbmkg
YXF1YSBzcGluIGJ1dHRvbnMgZm9yIFFNYWNTdHlsZSB0byBmaXQgbmljZWx5IGludG8KKyAgICAg
ICAgLy8gdGhlIGVkaXRvciBhcmVhLCBsaWtlIENocm9taXVtLgorICAgICAgICBvcHRpb24uc3Rh
dGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5pOworICAgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoUV9X
U19YMTEpICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX1BMQVNUSVFVRSkKKyAgICAvLyBRUGxhc3Rp
cXVlU3R5bGUgbG9va3MgYmVzdCB3aGVuIHRoZSBzcGluIGJ1dHRvbnMgYXJlIGZsdXNoIHdpdGgg
dGhlIGZyYW1lJ3MgZWRnZS4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFQbGFzdGlxdWVTdHlsZSo+
KHAuc3R5bGUpKSB7CisgICAgICAgIGluZmxhdGVYID0gMDsKKyAgICAgICAgaW5mbGF0ZVkgPSAw
OworICAgIH0KKyNlbmRpZgorCisgICAgYnV0dG9uUmVjdC5pbmZsYXRlWChpbmZsYXRlWCk7Cisg
ICAgYnV0dG9uUmVjdC5pbmZsYXRlWShpbmZsYXRlWSk7CisgICAgb3B0aW9uLnJlY3QgPSBidXR0
b25SZWN0OworCisgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TcGluQm94LCBv
cHRpb24pOworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCitib29sIFJlbmRlclRoZW1l
UXQ6OnN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgIGNhc2Ug
QnV0dG9uUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2FzZSBUZXh0QXJlYVBh
cnQ6CisgICAgY2FzZSBMaXN0Ym94UGFydDoKKyAgICBjYXNlIE1lbnVsaXN0UGFydDoKKyAgICBj
YXNlIFJhZGlvUGFydDoKKyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICBjYXNlIFNsaWRlckhv
cml6b250YWxQYXJ0OgorICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OiAvLyBObyBmb3IgYWxsIG90aGVycy4uLgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFJlbmRlclRoZW1lUXQ6OnNldFBhbGV0dGVG
cm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJiBwYWxldHRlKSBjb25zdAoreworICAgIC8v
IElmIHRoZSB3ZWJ2aWV3IGhhcyBhIGN1c3RvbSBwYWxldHRlLCB1c2UgaXQKKyAgICBpZiAoIW1f
cGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIENocm9tZSogY2hyb21lID0gbV9wYWdlLT5jaHJv
bWUoKTsKKyAgICBpZiAoIWNocm9tZSkKKyAgICAgICAgcmV0dXJuOworICAgIENocm9tZUNsaWVu
dCogY2hyb21lQ2xpZW50ID0gY2hyb21lLT5jbGllbnQoKTsKKyAgICBpZiAoIWNocm9tZUNsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gY2hy
b21lQ2xpZW50LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKyAgICBpZiAoIXBhZ2VDbGllbnQpCisg
ICAgICAgIHJldHVybjsKKyAgICBwYWxldHRlID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOworfQor
CitDb250cm9sUGFydCBSZW5kZXJUaGVtZVF0Ojppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9u
cyhRU3R5bGVPcHRpb24mIG9wdGlvbiwgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIC8v
IERlZmF1bHQgYml0czogbm8gZm9jdXMsIG5vIG1vdXNlIG92ZXIKKyAgICBvcHRpb24uc3RhdGUg
Jj0gfihRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzIHwgUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXIpOwor
CisgICAgaWYgKGlzUmVhZE9ubHlDb250cm9sKG8pKQorICAgICAgICAvLyBSZWFkb25seSBpcyBz
dXBwb3J0ZWQgb24gdGV4dGZpZWxkcy4KKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6
U3RhdGVfUmVhZE9ubHk7CisKKyAgICBvcHRpb24uZGlyZWN0aW9uID0gUXQ6OkxlZnRUb1JpZ2h0
OworCisgICAgaWYgKGlzSG92ZXJlZChvKSkKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHls
ZTo6U3RhdGVfTW91c2VPdmVyOworCisgICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlz
dHMob3B0aW9uLnBhbGV0dGUpOworCisgICAgaWYgKCFpc0VuYWJsZWQobykpIHsKKyAgICAgICAg
b3B0aW9uLnBhbGV0dGUuc2V0Q3VycmVudENvbG9yR3JvdXAoUVBhbGV0dGU6OkRpc2FibGVkKTsK
KyAgICAgICAgb3B0aW9uLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0VuYWJsZWQ7CisgICAgfQor
CisgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gby0+c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQor
ICAgICAgICByZXR1cm4gTm9Db250cm9sUGFydDsKKworICAgIENvbnRyb2xQYXJ0IHJlc3VsdCA9
IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKHN1cHBvcnRzRm9jdXMocmVzdWx0KSAmJiBp
c0ZvY3VzZWQobykpIHsKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfSGFz
Rm9jdXM7CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0tleWJvYXJkRm9j
dXNDaGFuZ2U7CisgICAgfQorCisgICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBXZWJDb3Jl
OjpSVEwpCisgICAgICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6UmlnaHRUb0xlZnQ7CisKKyAg
ICBzd2l0Y2ggKHJlc3VsdCkgeworICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgY2FzZSBT
cXVhcmVCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvbkJl
dmVsUGFydDoKKyAgICBjYXNlIExpc3RJdGVtUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0QnV0dG9u
UGFydDoKKyAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6CisgICAgY2FzZSBT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6IHsKKyAgICAgICAgaWYgKGlzUHJlc3NlZChvKSkK
KyAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKKyAgICAg
ICAgZWxzZSBpZiAocmVzdWx0ID09IFB1c2hCdXR0b25QYXJ0IHx8IHJlc3VsdCA9PSBCdXR0b25Q
YXJ0KQorICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmFpc2VkOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgY2FzZSBDaGVj
a2JveFBhcnQ6CisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSAoaXNDaGVja2VkKG8pID8gUVN0eWxl
OjpTdGF0ZV9PbiA6IFFTdHlsZTo6U3RhdGVfT2ZmKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCisjaWYgRU5BQkxFKFZJREVPKQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0
cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCit7CisgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmlu
ZyhtZWRpYUNvbnRyb2xzUXRVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9s
c1F0VXNlckFnZW50U3R5bGVTaGVldCkpOworCisgICAgaWYgKG1fcGFnZSAmJiBtX3BhZ2UtPmNo
cm9tZSgpLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpCisgICAgICAgIHJl
c3VsdCArPSBTdHJpbmcobWVkaWFDb250cm9sc1F0RnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzUXRGdWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCkp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gSGVscGVyIGNsYXNzIHRvIHRyYW5zZm9y
bSB0aGUgcGFpbnRlcidzIHdvcmxkIG1hdHJpeCB0byB0aGUgb2JqZWN0J3MgY29udGVudCBhcmVh
LCBzY2FsZWQgdG8gMCwwLDEwMCwxMDAKK2NsYXNzIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgewor
cHVibGljOgorICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIoUVBhaW50ZXIqIHBhaW50ZXIsIFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiByKSA6IG1fcGFpbnRlcihw
YWludGVyKQorICAgIHsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyT2JqZWN0
LT5zdHlsZSgpOworICAgICAgICBtX29yaWdpbmFsVHJhbnNmb3JtID0gbV9wYWludGVyLT50cmFu
c2Zvcm0oKTsKKyAgICAgICAgbV9wYWludGVyLT50cmFuc2xhdGUoci54KCkgKyBzdHlsZS0+cGFk
ZGluZ0xlZnQoKS52YWx1ZSgpLCByLnkoKSArIHN0eWxlLT5wYWRkaW5nVG9wKCkudmFsdWUoKSk7
CisgICAgICAgIG1fcGFpbnRlci0+c2NhbGUoKHIud2lkdGgoKSAtIHN0eWxlLT5wYWRkaW5nTGVm
dCgpLnZhbHVlKCkgLSBzdHlsZS0+cGFkZGluZ1JpZ2h0KCkudmFsdWUoKSkgLyAxMDAuMCwKKyAg
ICAgICAgICAgICAoci5oZWlnaHQoKSAtIHN0eWxlLT5wYWRkaW5nVG9wKCkudmFsdWUoKSAtIHN0
eWxlLT5wYWRkaW5nQm90dG9tKCkudmFsdWUoKSkgLyAxMDAuMCk7CisgICAgfQorCisgICAgfldv
cmxkTWF0cml4VHJhbnNmb3JtZXIoKSB7IG1fcGFpbnRlci0+c2V0VHJhbnNmb3JtKG1fb3JpZ2lu
YWxUcmFuc2Zvcm0pOyB9CisKK3ByaXZhdGU6CisgICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsKKyAg
ICBRVHJhbnNmb3JtIG1fb3JpZ2luYWxUcmFuc2Zvcm07Cit9OworCitkb3VibGUgUmVuZGVyVGhl
bWVRdDo6bWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IDAuNDsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhQmFja2dyb3VuZChRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKK3sKKyAgICBwYWludGVyLT5z
ZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBzdGF0aWMgUUNvbG9yIHRyYW5zcGFyZW50QmxhY2soMCwg
MCwgMCwgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpICogMjU1KTsKKyAgICBwYWludGVy
LT5zZXRCcnVzaCh0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBwYWludGVyLT5kcmF3Um91bmRlZFJl
Y3Qoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIDUuMCwgNS4wKTsKK30KKwor
c3RhdGljIGJvb2wgbWVkaWFFbGVtZW50Q2FuUGxheShSZW5kZXJPYmplY3QqIG8pCit7CisgICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7
CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBtZWRpYUVsZW1lbnQtPnJlYWR5U3RhdGUoKSA+IEhUTUxNZWRpYUVsZW1lbnQ6OkhBVkVf
TUVUQURBVEEKKyAgICAgICAgICAgfHwgKG1lZGlhRWxlbWVudC0+cmVhZHlTdGF0ZSgpID09IEhU
TUxNZWRpYUVsZW1lbnQ6OkhBVkVfTk9USElORworICAgICAgICAgICAgICAgJiYgby0+c3R5bGUo
KS0+YXBwZWFyYW5jZSgpID09IE1lZGlhUGxheUJ1dHRvblBhcnQgJiYgbWVkaWFFbGVtZW50LT5w
cmVsb2FkKCkgPT0gIm5vbmUiKTsKK30KKworUUNvbG9yIFJlbmRlclRoZW1lUXQ6OmdldE1lZGlh
Q29udHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgUUNv
bG9yIGZnQ29sb3IgPSBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwor
ICAgIGlmICghbykKKyAgICAgICAgcmV0dXJuIGZnQ29sb3I7CisKKyAgICBpZiAoby0+bm9kZSgp
LT5hY3RpdmUoKSkKKyAgICAgICAgZmdDb2xvciA9IGZnQ29sb3IubGlnaHRlcigpOworCisgICAg
aWYgKCFtZWRpYUVsZW1lbnRDYW5QbGF5KG8pKSB7CisgICAgICAgIFFQYWxldHRlIHBhbCA9IFFB
cHBsaWNhdGlvbjo6cGFsZXR0ZSgpOworICAgICAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJ
ZkV4aXN0cyhwYWwpOworICAgICAgICBmZ0NvbG9yID0gcGFsLmJydXNoKFFQYWxldHRlOjpEaXNh
YmxlZCwgUVBhbGV0dGU6OlRleHQpLmNvbG9yKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZnQ29s
b3I7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1l
ZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVu
ZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKworICAgIHBhaW50TWVkaWFC
YWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRy
YW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgY29uc3QgUVBvaW50RiBhcnJvd1BvbHln
b25bOV0gPSB7IFFQb2ludEYoMjAsIDApLCBRUG9pbnRGKDEwMCwgMCksIFFQb2ludEYoMTAwLCA4
MCksCisgICAgICAgICAgICBRUG9pbnRGKDgwLCA4MCksIFFQb2ludEYoODAsIDMwKSwgUVBvaW50
RigxMCwgMTAwKSwgUVBvaW50RigwLCA5MCksIFFQb2ludEYoNzAsIDIwKSwgUVBvaW50RigyMCwg
MjApfTsKKworICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3Vu
ZENvbG9yKG8pKTsKKyAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKGFycm93UG9seWdvbiwgOSk7
CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRp
YU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQg
PSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsK
KyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFp
bnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKworICAg
IHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBXb3JsZE1hdHJpeFRy
YW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgY29uc3QgUVBvaW50
RiBzcGVha2VyUG9seWdvbls2XSA9IHsgUVBvaW50RigyMCwgMzApLCBRUG9pbnRGKDUwLCAzMCks
IFFQb2ludEYoODAsIDApLAorICAgICAgICAgICAgUVBvaW50Rig4MCwgMTAwKSwgUVBvaW50Rig1
MCwgNzApLCBRUG9pbnRGKDIwLCA3MCl9OworCisgICAgcC5wYWludGVyLT5zZXRCcnVzaChtZWRp
YUVsZW1lbnQtPm11dGVkKCkgPyBRdDo6ZGFya1JlZCA6IGdldE1lZGlhQ29udHJvbEZvcmVncm91
bmRDb2xvcihvKSk7CisgICAgcC5wYWludGVyLT5kcmF3UG9seWdvbihzcGVha2VyUG9seWdvbiwg
Nik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRN
ZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZv
KTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAu
cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKwor
ICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBXb3JsZE1hdHJp
eFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgcC5wYWludGVy
LT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIGlmICht
ZWRpYUVsZW1lbnQtPmNhblBsYXkoKSkgeworICAgICAgICBjb25zdCBRUG9pbnRGIHBsYXlQb2x5
Z29uWzNdID0geyBRUG9pbnRGKDAsIDApLCBRUG9pbnRGKDEwMCwgNTApLCBRUG9pbnRGKDAsIDEw
MCl9OworICAgICAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKHBsYXlQb2x5Z29uLCAzKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KDAsIDAsIDMwLCAxMDApOwor
ICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KDcwLCAwLCAzMCwgMTAwKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtC
YWNrQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KQoreworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgdGhpcyBhdCB0aGUgbW9tZW50Lgor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2Vl
a0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpCit7CisgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCB0aGlzIGF0IHRoZSBtb21l
bnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVk
aWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5m
byk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBw
LnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Cisg
ICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50
VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGN1cnJlbnRUaW1lKSArICIgLyAiICsgZm9ybWF0
TWVkaWFDb250cm9sc1RpbWUoZHVyYXRpb24pOworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdDo6
Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0
IGR1cmF0aW9uKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0ICpvLCBj
b25zdCBQYWludEluZm8gJnBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmcikKK3sKKyAgICBTdHls
ZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVy
OjpBbnRpYWxpYXNpbmcsIHRydWUpOworCisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWlu
dGVyLCByKTsKKworICAgIGlmICghby0+aXNTbGlkZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgSW50UmVjdCBiID0gdG9SZW5kZXJCb3gobyktPmNvbnRlbnRCb3hSZWN0KCk7CisK
KyAgICAvLyBQb3NpdGlvbiB0aGUgb3V0ZXIgcmVjdGFuZ2xlCisgICAgaW50IHRvcCA9IHIueSgp
ICsgYi55KCk7CisgICAgaW50IGxlZnQgPSByLngoKSArIGIueCgpOworICAgIGludCB3aWR0aCA9
IGIud2lkdGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gYi5oZWlnaHQoKTsKKworICAgIC8vIEdldCB0
aGUgc2NhbGUgY29sb3IgZnJvbSB0aGUgcGFnZSBjbGllbnQKKyAgICBRUGFsZXR0ZSBwYWwgPSBR
QXBwbGljYXRpb246OnBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4
aXN0cyhwYWwpOworICAgIGNvbnN0IFFDb2xvciBoaWdobGlnaHRUZXh0ID0gcGFsLmJydXNoKFFQ
YWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHRlZFRleHQpLmNvbG9yKCk7CisgICAg
Y29uc3QgUUNvbG9yIHNjYWxlQ29sb3IoaGlnaGxpZ2h0VGV4dC5yZWQoKSwgaGlnaGxpZ2h0VGV4
dC5ncmVlbigpLCBoaWdobGlnaHRUZXh0LmJsdWUoKSwgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3Bh
Y2l0eSgpICogMjU1KTsKKworICAgIC8vIERyYXcgdGhlIG91dGVyIHJlY3RhbmdsZQorICAgIHAu
cGFpbnRlci0+c2V0QnJ1c2goc2NhbGVDb2xvcik7CisgICAgcC5wYWludGVyLT5kcmF3UmVjdChs
ZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworCisgICAgaWYgKCFvLT5ub2RlKCkgfHwgIW8tPm5v
ZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHNsaWRlciA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
PihvLT5ub2RlKCkpOworCisgICAgLy8gUG9zaXRpb24gdGhlIGlubmVyIHJlY3RhbmdsZQorICAg
IGhlaWdodCA9IGhlaWdodCAqIHNsaWRlci0+dmFsdWVBc051bWJlcigpOworICAgIHRvcCArPSBi
LmhlaWdodCgpIC0gaGVpZ2h0OworCisgICAgLy8gRHJhdyB0aGUgaW5uZXIgcmVjdGFuZ2xlCisg
ICAgcC5wYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBwLnBhaW50ZXItPnNldEJydXNo
KGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7CisgICAgcC5wYWludGVyLT5kcmF3
UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJP
YmplY3QgKm8sIGNvbnN0IFBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQor
eworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3RoaW5nIHRvIGRyYXcgaGVy
ZSwgdGhpcyBpcyBhbGwgZG9uZSBpbiB0aGUgdHJhY2sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7
CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0
eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50
ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBh
aW50ZXIsIHIpOworCisgICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBtZWRpYUVsZW1lbnQt
PnBsYXllcigpKSB7CisgICAgICAgIC8vIEdldCB0aGUgYnVmZmVyZWQgcGFydHMgb2YgdGhlIG1l
ZGlhCisgICAgICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCA9IHBsYXllci0+YnVmZmVy
ZWQoKTsKKyAgICAgICAgaWYgKGJ1ZmZlcmVkLT5sZW5ndGgoKSA+IDAgJiYgcGxheWVyLT5kdXJh
dGlvbigpIDwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpIHsKKyAgICAg
ICAgICAgIC8vIFNldCB0aGUgdHJhbnNmb3JtIGFuZCBicnVzaAorICAgICAgICAgICAgV29ybGRN
YXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAgICAgICAg
ICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoKSk7
CisKKyAgICAgICAgICAgIC8vIFBhaW50IGVhY2ggYnVmZmVyZWQgc2VjdGlvbgorICAgICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBleDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnVm
ZmVyZWQtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBzdGFydFggPSAo
YnVmZmVyZWQtPnN0YXJ0KGksIGV4KSAvIHBsYXllci0+ZHVyYXRpb24oKSkgKiAxMDA7CisgICAg
ICAgICAgICAgICAgZmxvYXQgd2lkdGggPSAoKGJ1ZmZlcmVkLT5lbmQoaSwgZXgpIC8gcGxheWVy
LT5kdXJhdGlvbigpKSAqIDEwMCkgLSBzdGFydFg7CisgICAgICAgICAgICAgICAgcC5wYWludGVy
LT5kcmF3UmVjdChzdGFydFgsIDM3LCB3aWR0aCwgMjYpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXQ6
OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEFTU0VSVChvLT5ub2RlKCkpOwor
ICAgIE5vZGUqIGhvc3ROb2RlID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKKyAg
ICBBU1NFUlQoaG9zdE5vZGUpOworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9
IHRvUGFyZW50TWVkaWFFbGVtZW50KGhvc3ROb2RlKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJ
bmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsK
KworICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7CisgICAgcC5wYWludGVyLT5zZXRC
cnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoaG9zdE5vZGUtPnJlbmRlcmVyKCkp
KTsKKyAgICBwLnBhaW50ZXItPmRyYXdSZWN0KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhl
aWdodCgpKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCit2b2lkIFJlbmRlclRo
ZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7
CisgICAgLy8gdGltZWxpbmVUaHVtYkhlaWdodCBzaG91bGQgbWF0Y2ggdGhlIGhlaWdodCBwcm9w
ZXJ0eSBvZiAtd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lIGluIG1lZGlhQ29udHJvbHNR
dC5jc3MuCisgICAgY29uc3QgaW50IHRpbWVsaW5lVGh1bWJIZWlnaHQgPSAxMjsKKyAgICBjb25z
dCBpbnQgdGltZWxpbmVUaHVtYldpZHRoID0gdGltZWxpbmVUaHVtYkhlaWdodCAvIDM7CisgICAg
Ly8gdm9sdW1lVGh1bWJXaWR0aCBzaG91bGQgbWF0Y2ggdGhlIHdpZHRoIHByb3BlcnR5IG9mIC13
ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciBpbiBtZWRpYUNvbnRyb2xzUXQuY3Nz
LgorICAgIGNvbnN0IGludCB2b2x1bWVUaHVtYldpZHRoID0gMTI7CisgICAgY29uc3QgaW50IHZv
bHVtZVRodW1iSGVpZ2h0ID0gdm9sdW1lVGh1bWJXaWR0aCAvIDM7CisgICAgQ29udHJvbFBhcnQg
cGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisKKyAgICBpZiAocGFydCA9PSBNZWRpYVNsaWRl
clRodW1iUGFydCkgeworICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHRpbWVsaW5lVGh1
bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodGltZWxp
bmVUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICB9IGVsc2UgaWYgKHBhcnQgPT0gTWVkaWFWb2x1
bWVTbGlkZXJUaHVtYlBhcnQpIHsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodm9s
dW1lVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
dm9sdW1lVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICB9IGVsc2UgaWYgKHBhcnQgPT0gU2xpZGVy
VGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7
CisgICAgICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CisgICAgICAgIGlmIChwYXJ0ID09
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9u
ID0gUXQ6OlZlcnRpY2FsOworCisgICAgICAgIFFTdHlsZSogcXN0eWxlID0gcVN0eWxlKCk7CisK
KyAgICAgICAgaW50IGxlbmd0aCA9IHFzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlk
ZXJMZW5ndGgsICZvcHRpb24pOworICAgICAgICBpbnQgdGhpY2tuZXNzID0gcXN0eWxlLT5waXhl
bE1ldHJpYyhRU3R5bGU6OlBNX1NsaWRlclRoaWNrbmVzcywgJm9wdGlvbik7CisgICAgICAgIGlm
IChvcHRpb24ub3JpZW50YXRpb24gPT0gUXQ6OlZlcnRpY2FsKSB7CisgICAgICAgICAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKKyAgICAgICAgICAgIHN0eWxl
LT5zZXRIZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOworICAgICAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgodGhpY2tuZXNzLCBGaXhlZCkpOworICAgICAg
ICB9CisgICAgfQorfQorCitkb3VibGUgUmVuZGVyVGhlbWVRdDo6Y2FyZXRCbGlua0ludGVydmFs
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpjdXJzb3JGbGFzaFRpbWUoKSAv
IDEwMDAuMCAvIDIuMDsKK30KKworU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZv
cldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IEZvbnQmIGZvbnQs
IGludCB3aWR0aCkKK3sKKyAgICBpZiAod2lkdGggPD0gMCkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworCisgICAgU3RyaW5nIHN0cmluZzsKKyAgICBpZiAoZmlsZW5hbWVzLmlzRW1wdHkoKSkK
KyAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKKyAgICBl
bHNlIGlmIChmaWxlbmFtZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgU3RyaW5nIGZuYW1lID0g
ZmlsZW5hbWVzWzBdOworICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udC5mb250KCkpOworICAg
ICAgICBzdHJpbmcgPSBmbS5lbGlkZWRUZXh0KGZuYW1lLCBRdDo6RWxpZGVMZWZ0LCB3aWR0aCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG4gPSBmaWxlbmFtZXMuc2l6ZSgpOworICAgICAg
ICBzdHJpbmcgPSBRQ29yZUFwcGxpY2F0aW9uOjp0cmFuc2xhdGUoIlFXZWJQYWdlIiwgIiVuIGZp
bGUocykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm51
bWJlciBvZiBjaG9zZW4gZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjpDb2RlY0ZvclRyLCBuKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc3RyaW5nOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
MTEzOWRmNTIyZGY5YzEwMmYzOGFiNjVjNjJmYmY2MDAyNzRjZTdhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaApAQCAtMCww
ICsxLDIzMSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1l
bnRhdGlvbiBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
I2lmbmRlZiBSZW5kZXJUaGVtZVFTdHlsZV9oCisjZGVmaW5lIFJlbmRlclRoZW1lUVN0eWxlX2gK
KworI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisKKyNpbmNsdWRlIDxRU3R5bGU+CisKK1FUX0JF
R0lOX05BTUVTUEFDRQorY2xhc3MgUUxpbmVFZGl0OworY2xhc3MgUVBhaW50ZXI7CitjbGFzcyBR
V2lkZ2V0OworUVRfRU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBF
TkFCTEUoUFJPR1JFU1NfVEFHKQorY2xhc3MgUmVuZGVyUHJvZ3Jlc3M7CisjZW5kaWYKK2NsYXNz
IFJlbmRlclN0eWxlOworY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKK2NsYXNzIFNjcm9sbGJhclRo
ZW1lUXQ7CisKK2NsYXNzIFJlbmRlclRoZW1lUXQgOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworcHJp
dmF0ZToKKyAgICBSZW5kZXJUaGVtZVF0KFBhZ2UqKTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJUaGVt
ZVF0KCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3Jl
YXRlKFBhZ2UqKTsKKworICAgIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNv
bnN0OworCisgICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmpl
Y3QqKSBjb25zdDsKKworICAgIC8vIEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFu
Z2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgorICAgIHZpcnR1
YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsK
KworICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcg
aXMgc3VwcG9ydGVkIGF0IGFsbC4KKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGlu
dHMoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBS
ZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7CisKKyAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9u
IGNvbG9yLgorICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xv
ciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0
OworICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Owor
CisgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
OworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0OworCisgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwg
Y29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJikgY29uc3Q7
CisKKyNpZiBFTkFCTEUoVklERU8pCisgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRy
b2xzU3R5bGVTaGVldCgpOworI2VuZGlmCisKKyAgICBRU3R5bGUqIHFTdHlsZSgpIGNvbnN0Owor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXRDaGVja2JveFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBw
YWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisg
ICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51
TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKKworI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyNlbmRpZgorCisgICAg
dmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUcmFj
a1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsK
KworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xp
ZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50Kikg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkQ2FuY2Vs
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
CisjaWZuZGVmIFFUX05PX1NQSU5CT1gKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0SW5uZXJTcGlu
QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3BpbkJ1dHRvbihSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworI2lmIEVOQUJM
RShQUk9HUkVTU19UQUcpCisgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRo
ZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5p
bWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0
OworICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBw
cm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworI2VuZGlmCisKKyNpZiBFTkFCTEUoVklE
RU8pCisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBib29sIHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQ
YWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFT
ZWVrRm9yd2FyZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGlt
ZShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc0N1
cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7CisgICAg
dmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3Vy
cmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzT3du
RGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVybiB0cnVl
OyB9Citwcml2YXRlOgorCisgICAgdm9pZCBwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRlcios
IGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBkb3VibGUgbWVkaWFDb250cm9sc0Jhc2VsaW5l
T3BhY2l0eSgpIGNvbnN0OworICAgIFFDb2xvciBnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29s
b3IoUmVuZGVyT2JqZWN0KiA9IDApIGNvbnN0OworI2VuZGlmCisgICAgdm9pZCBjb21wdXRlU2l6
ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSopIGNvbnN0OworCitwcml2YXRlOgorICAgIHZpcnR1
YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxl
bmFtZXMsIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgpOworCisgICAgYm9vbCBzdXBwb3J0c0ZvY3Vz
KENvbnRyb2xQYXJ0KSBjb25zdDsKKworICAgIENvbnRyb2xQYXJ0IGluaXRpYWxpemVDb21tb25R
U3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYsIFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAg
dm9pZCBzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdm9pZCBzZXRQ
b3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZvaWQgc2V0UGFsZXR0ZUZy
b21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmKSBjb25zdDsKKworICAgIGludCBmaW5kRnJh
bWVMaW5lV2lkdGgoUVN0eWxlKikgY29uc3Q7CisKKyAgICBRU3R5bGUqIGZhbGxiYWNrU3R5bGUo
KSBjb25zdDsKKworICAgIEludFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KFJlbmRlck9iamVj
dCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIEludFJl
Y3QgcGFydFJlY3QsIGNvbnN0IEludFJlY3QmIGxvY2FsT2Zmc2V0KSBjb25zdDsKKworICAgIFBh
Z2UqIG1fcGFnZTsKKworI2lmZGVmIFFfV1NfTUFDCisgICAgaW50IG1fYnV0dG9uRm9udFBpeGVs
U2l6ZTsKKyNlbmRpZgorICAgIFFTdHJpbmcgbV9idXR0b25Gb250RmFtaWx5OworCisgICAgUVN0
eWxlKiBtX2ZhbGxiYWNrU3R5bGU7CisgICAgbXV0YWJsZSBRTGluZUVkaXQqIG1fbGluZUVkaXQ7
Cit9OworCitjbGFzcyBTdHlsZVBhaW50ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFN0eWxl
UGFpbnRlcihSZW5kZXJUaGVtZVF0KiwgY29uc3QgUGFpbnRJbmZvJik7CisgICAgZXhwbGljaXQg
U3R5bGVQYWludGVyKFNjcm9sbGJhclRoZW1lUXQqLCBHcmFwaGljc0NvbnRleHQqKTsKKyAgICB+
U3R5bGVQYWludGVyKCk7CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBwYWlu
dGVyICYmIHN0eWxlOyB9CisKKyAgICBRUGFpbnRlciogcGFpbnRlcjsKKyAgICBRV2lkZ2V0KiB3
aWRnZXQ7CisgICAgUVN0eWxlKiBzdHlsZTsKKworICAgIHZvaWQgZHJhd1ByaW1pdGl2ZShRU3R5
bGU6OlByaW1pdGl2ZUVsZW1lbnQgcGUsIGNvbnN0IFFTdHlsZU9wdGlvbiYgb3B0KQorICAgIHsg
c3R5bGUtPmRyYXdQcmltaXRpdmUocGUsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KKyAgICB2
b2lkIGRyYXdDb250cm9sKFFTdHlsZTo6Q29udHJvbEVsZW1lbnQgY2UsIGNvbnN0IFFTdHlsZU9w
dGlvbiYgb3B0KQorICAgIHsgc3R5bGUtPmRyYXdDb250cm9sKGNlLCAmb3B0LCBwYWludGVyLCB3
aWRnZXQpOyB9CisgICAgdm9pZCBkcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDb21wbGV4Q29u
dHJvbCBjYywgY29uc3QgUVN0eWxlT3B0aW9uQ29tcGxleCYgb3B0KQorICAgIHsgc3R5bGUtPmRy
YXdDb21wbGV4Q29udHJvbChjYywgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQorCitwcml2YXRl
OgorICAgIHZvaWQgaW5pdChHcmFwaGljc0NvbnRleHQqLCBRU3R5bGUqKTsKKworICAgIFFCcnVz
aCBvbGRCcnVzaDsKKyAgICBib29sIG9sZEFudGlhbGlhc2luZzsKKworICAgIFFfRElTQUJMRV9D
T1BZKFN0eWxlUGFpbnRlcikKK307CisKK30KKworI2VuZGlmIC8vIFJlbmRlclRoZW1lUXRfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ0NjVmMDc4MmU2NzIyYTYzODYyZTRmMDk5ZDk2ZDI4MmZl
NWE0Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE1OTcgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQg
cHJvamVjdC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sg
UnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqICAgICAgICAgICAgICAgMjAwNiBEaXJrIE11ZWxsZXIg
PG11ZWxsZXJAa2RlLm9yZz4KLSAqICAgICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlcgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgotCi0jaW5jbHVkZSAiQ1NT
Rm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgotI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVk
ZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21lQ2xpZW50UXQuaCIKLSNpbmNsdWRlICJDb2xv
ci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUg
IkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCi0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkKLSNpbmNsdWRlICJR
dE1vYmlsZVdlYlN0eWxlLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgi
Ci0jaWYgRU5BQkxFKFZJREVPKQotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0j
ZW5kaWYKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgotI2luY2x1
ZGUgIlF0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIgotI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5o
IgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0jaW5j
bHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNlbmRpZgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRdC5o
IgotI2luY2x1ZGUgIlNsaWRlclRodW1iRWxlbWVudC5oIgotI2luY2x1ZGUgIlRpbWVSYW5nZXMu
aCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotCi0jaW5jbHVkZSA8UUFwcGxp
Y2F0aW9uPgotI2luY2x1ZGUgPFFDb2xvcj4KLSNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgot
I2luY2x1ZGUgPFFGaWxlPgotI2luY2x1ZGUgPFFGb250TWV0cmljcz4KLSNpbmNsdWRlIDxRTGlu
ZUVkaXQ+Ci0jaW5jbHVkZSA8UU1hY1N0eWxlPgotI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1
ZGUgPFFQbGFzdGlxdWVTdHlsZT4KLSNpbmNsdWRlIDxRUHVzaEJ1dHRvbj4KLSNpbmNsdWRlIDxR
U3R5bGVGYWN0b3J5PgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkJ1dHRvbj4KLSNpbmNsdWRlIDxR
U3R5bGVPcHRpb25GcmFtZVYyPgotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0jaW5jbHVkZSA8
UVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMj4KLSNlbmRpZgotI2luY2x1ZGUgPFFTdHlsZU9wdGlv
blNsaWRlcj4KLSNpbmNsdWRlIDxRV2lkZ2V0PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLWlubGluZSBzdGF0aWMgdm9pZCBpbml0U3R5bGVP
cHRpb24oUVdpZGdldCAqd2lkZ2V0LCBRU3R5bGVPcHRpb24mIG9wdGlvbikKLXsKLSAgICBpZiAo
d2lkZ2V0KQotICAgICAgICBvcHRpb24uaW5pdEZyb20od2lkZ2V0KTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgLyoKLSAgICAgICAgICBJZiBhIHdpZGdldCBpcyBub3QgZGlyZWN0bHkgYXZhaWxhYmxl
IGZvciByZW5kZXJpbmcsIHdlIGZhbGxiYWNrIHRvIGRlZmF1bHQKLSAgICAgICAgICB2YWx1ZSBm
b3IgYW4gYWN0aXZlIHdpZGdldC4KLSAgICAgICAgICovCi0gICAgICAgIG9wdGlvbi5zdGF0ZSA9
IFFTdHlsZTo6U3RhdGVfQWN0aXZlIHwgUVN0eWxlOjpTdGF0ZV9FbmFibGVkOwotICAgIH0KLX0K
LS8vIFRoZXNlIHZhbHVlcyBhbGwgbWF0Y2ggU2FmYXJpL1dpbi9DaHJvbWl1bQotc3RhdGljIGNv
bnN0IGZsb2F0IGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZSA9IDEzOwotc3RhdGljIGNvbnN0
IGZsb2F0IGRlZmF1bHRDYW5jZWxCdXR0b25TaXplID0gOTsKLXN0YXRpYyBjb25zdCBmbG9hdCBt
aW5DYW5jZWxCdXR0b25TaXplID0gNTsKLXN0YXRpYyBjb25zdCBmbG9hdCBtYXhDYW5jZWxCdXR0
b25TaXplID0gMjE7Ci1zdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0
c0RlY29yYXRpb25TaXplID0gMTM7Ci1zdGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblNpemUgPSA5Owotc3RhdGljIGNvbnN0IGZsb2F0IG1heFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gMzA7Ci1zdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVs
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoID0gMTg7Ci0KLSNpZiBVU0UoUVRfTU9CSUxF
X1RIRU1FKQotbmFtZXNwYWNlIHsKLSAgICBmbG9hdCBidXR0b25QYWRkaW5nTGVmdCA9IDE4Owot
ICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdSaWdodCA9IDE4OwotICAgIGZsb2F0IGJ1dHRvblBhZGRp
bmdUb3AgPSAyOwotICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdCb3R0b20gPSAzOwotICAgIGZsb2F0
IG1lbnVMaXN0UGFkZGluZyA9IDk7Ci0gICAgZmxvYXQgdGV4dEZpZWxkUGFkZGluZyA9IDU7Ci19
Ci0jZW5kaWYKLQotU3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVRdCogdGhl
bWUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQotewotICAgIGluaXQocGFpbnRJbmZvLmNv
bnRleHQgPyBwYWludEluZm8uY29udGV4dCA6IDAsIHRoZW1lLT5xU3R5bGUoKSk7Ci19Ci0KLVN0
eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKFNjcm9sbGJhclRoZW1lUXQqIHRoZW1lLCBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgaW5pdChjb250ZXh0LCB0aGVtZS0+c3R5bGUoKSk7
Ci19Ci0KLXZvaWQgU3R5bGVQYWludGVyOjppbml0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
UVN0eWxlKiB0aGVtZVN0eWxlKQotewotICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxRUGFpbnRl
cio+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB3aWRnZXQgPSAwOwotICAgIFFQ
YWludERldmljZSogZGV2ID0gMDsKLSAgICBpZiAocGFpbnRlcikKLSAgICAgICAgZGV2ID0gcGFp
bnRlci0+ZGV2aWNlKCk7Ci0gICAgaWYgKGRldiAmJiBkZXYtPmRldlR5cGUoKSA9PSBRSW50ZXJu
YWw6OldpZGdldCkKLSAgICAgICAgd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UVdpZGdldCo+KGRldik7
Ci0gICAgc3R5bGUgPSB0aGVtZVN0eWxlOwotCi0gICAgaWYgKHBhaW50ZXIpIHsKLSAgICAgICAg
Ly8gdGhlIHN0eWxlcyBvZnRlbiBhc3N1bWUgYmVpbmcgY2FsbGVkIHdpdGggYSBwcmlzdGluZSBw
YWludGVyIHdoZXJlIG5vIGJydXNoIGlzIHNldCwKLSAgICAgICAgLy8gc28gcmVzZXQgaXQgbWFu
dWFsbHkKLSAgICAgICAgb2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOwotICAgICAgICBwYWlu
dGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7Ci0KLSAgICAgICAgLy8gcGFpbnRpbmcgdGhlIHdp
ZGdldCB3aXRoIGFudGktYWxpYXNpbmcgd2lsbCBtYWtlIGl0IGJsdXJyeQotICAgICAgICAvLyBk
aXNhYmxlIGl0IGhlcmUgYW5kIHJlc3RvcmUgaXQgbGF0ZXIKLSAgICAgICAgb2xkQW50aWFsaWFz
aW5nID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZyk7Ci0g
ICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgZmFs
c2UpOwotICAgIH0KLX0KLQotU3R5bGVQYWludGVyOjp+U3R5bGVQYWludGVyKCkKLXsKLSAgICBp
ZiAocGFpbnRlcikgewotICAgICAgICBwYWludGVyLT5zZXRCcnVzaChvbGRCcnVzaCk7Ci0gICAg
ICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnRzKFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIG9sZEFu
dGlhbGlhc2luZyk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJU
aGVtZVF0OjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJl
bmRlclRoZW1lUXQocGFnZSkpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJU
aGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAg
IHJldHVybiBSZW5kZXJUaGVtZVF0OjpjcmVhdGUocGFnZSk7Ci0KLSAgICBzdGF0aWMgUmVuZGVy
VGhlbWUqIGZhbGxiYWNrID0gUmVuZGVyVGhlbWVRdDo6Y3JlYXRlKDApLnJlbGVhc2VSZWYoKTsK
LSAgICByZXR1cm4gZmFsbGJhY2s7Ci19Ci0KLVJlbmRlclRoZW1lUXQ6OlJlbmRlclRoZW1lUXQo
UGFnZSogcGFnZSkKLSAgICA6IFJlbmRlclRoZW1lKCkKLSAgICAsIG1fcGFnZShwYWdlKQotICAg
ICwgbV9saW5lRWRpdCgwKQotewotICAgIFFQdXNoQnV0dG9uIGJ1dHRvbjsKLSAgICBidXR0b24u
c2V0QXR0cmlidXRlKFF0OjpXQV9NYWNTbWFsbFNpemUpOwotICAgIFFGb250IGRlZmF1bHRCdXR0
b25Gb250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOwotICAgIFFGb250SW5mbyBmb250
SW5mbyhkZWZhdWx0QnV0dG9uRm9udCk7Ci0gICAgbV9idXR0b25Gb250RmFtaWx5ID0gZGVmYXVs
dEJ1dHRvbkZvbnQuZmFtaWx5KCk7Ci0jaWZkZWYgUV9XU19NQUMKLSAgICBtX2J1dHRvbkZvbnRQ
aXhlbFNpemUgPSBmb250SW5mby5waXhlbFNpemUoKTsKLSNlbmRpZgotCi0jaWYgVVNFKFFUX01P
QklMRV9USEVNRSkKLSAgICBtX2ZhbGxiYWNrU3R5bGUgPSBuZXcgUXRNb2JpbGVXZWJTdHlsZTsK
LSNlbHNlCi0gICAgbV9mYWxsYmFja1N0eWxlID0gUVN0eWxlRmFjdG9yeTo6Y3JlYXRlKFFMYXRp
bjFTdHJpbmcoIndpbmRvd3MiKSk7Ci0jZW5kaWYKLX0KLQotUmVuZGVyVGhlbWVRdDo6flJlbmRl
clRoZW1lUXQoKQotewotICAgIGRlbGV0ZSBtX2ZhbGxiYWNrU3R5bGU7Ci0jaWZuZGVmIFFUX05P
X0xJTkVFRElUCi0gICAgZGVsZXRlIG1fbGluZUVkaXQ7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShR
VF9NT0JJTEVfVEhFTUUpCi1ib29sIFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmls
bExheWVyJiBmaWxsLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAotewotICAg
IHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6
Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgTWVudWxpc3RQYXJ0OgotICAgIGNhc2Ug
U2VhcmNoRmllbGRQYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRB
cmVhUGFydDoKLSAgICAgICAgLy8gVGVzdCB0aGUgc3R5bGUgdG8gc2VlIGlmIHRoZSBVQSBib3Jk
ZXIgYW5kIGJhY2tncm91bmQgbWF0Y2guCi0gICAgICAgIHJldHVybiAoc3R5bGUtPmJvcmRlcigp
ICE9IGJvcmRlcgotICAgICAgICAgICAgICAgIHx8ICpzdHlsZS0+YmFja2dyb3VuZExheWVycygp
ICE9IGZpbGwKLSAgICAgICAgICAgICAgICB8fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9y
KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSAhPSBiYWNrZ3JvdW5kQ29sb3IpOwotICAgIGNh
c2UgQ2hlY2tib3hQYXJ0OgotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xT
dHlsZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dyb3VuZENvbG9yKTsKLSAgICB9Ci19Ci0K
LWludCBSZW5kZXJUaGVtZVF0Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDE7Ci19Ci0jZWxzZQotLy8gUmVtb3ZlIHRo
aXMgd2hlbiBTZWFyY2hGaWVsZFBhcnQgaXMgc3R5bGUtYWJsZSBpbiBSZW5kZXJUaGVtZTo6aXND
b250cm9sU3R5bGVkKCkKLWJvb2wgUmVuZGVyVGhlbWVRdDo6aXNDb250cm9sU3R5bGVkKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxs
TGF5ZXImIGZpbGwsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Ci17Ci0gICAg
c3dpdGNoIChzdHlsZS0+YXBwZWFyYW5jZSgpKSB7Ci0gICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6
Ci0gICAgICAgIC8vIFRlc3QgdGhlIHN0eWxlIHRvIHNlZSBpZiB0aGUgVUEgYm9yZGVyIGFuZCBi
YWNrZ3JvdW5kIG1hdGNoLgotICAgICAgICByZXR1cm4gKHN0eWxlLT5ib3JkZXIoKSAhPSBib3Jk
ZXIKLSAgICAgICAgICAgICAgICB8fCAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBmaWxs
Ci0gICAgICAgICAgICAgICAgfHwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcikgIT0gYmFja2dyb3VuZENvbG9yKTsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVy
LCBmaWxsLCBiYWNrZ3JvdW5kQ29sb3IpOwotICAgIH0KLX0KLSNlbmRpZgotCi0vLyBmb3Igc29t
ZSB3aWRnZXQgcGFpbnRpbmcsIHdlIG5lZWQgdG8gZmFsbGJhY2sgdG8gV2luZG93cyBzdHlsZQot
UVN0eWxlKiBSZW5kZXJUaGVtZVF0OjpmYWxsYmFja1N0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gKG1fZmFsbGJhY2tTdHlsZSkgPyBtX2ZhbGxiYWNrU3R5bGUgOiBRQXBwbGljYXRpb246OnN0
eWxlKCk7Ci19Ci0KLVFTdHlsZSogUmVuZGVyVGhlbWVRdDo6cVN0eWxlKCkgY29uc3QKLXsKLSNp
ZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIHJldHVybiBmYWxsYmFja1N0eWxlKCk7Ci0jZW5k
aWYKLQotICAgIGlmIChtX3BhZ2UpIHsKLSAgICAgICAgUVdlYlBhZ2VDbGllbnQqIHBhZ2VDbGll
bnQgPSBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCk7Ci0K
LSAgICAgICAgaWYgKHBhZ2VDbGllbnQpCi0gICAgICAgICAgICByZXR1cm4gcGFnZUNsaWVudC0+
c3R5bGUoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwotfQot
Ci1TdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpCi17Ci0gICAg
U3RyaW5nIHJlc3VsdCA9IFJlbmRlclRoZW1lOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7Ci0j
aWYgRU5BQkxFKE5PX0xJU1RCT1hfUkVOREVSSU5HKQotICAgIHJlc3VsdCArPSBTdHJpbmcodGhl
bWVRdE5vTGlzdGJveGVzVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lUXROb0xpc3Ri
b3hlc1VzZXJBZ2VudFN0eWxlU2hlZXQpKTsKLSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSop
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6c3Vw
cG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIHN3
aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgotICAg
IGNhc2UgUmFkaW9QYXJ0OgotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBTcXVh
cmVCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvbkJldmVs
UGFydDoKLSAgICBjYXNlIExpc3Rib3hQYXJ0OgotICAgIGNhc2UgTGlzdEl0ZW1QYXJ0OgotICAg
IGNhc2UgTWVudWxpc3RQYXJ0OgotICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgotICAgIGNh
c2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6Ci0gICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6Ci0g
ICAgY2FzZSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0OgotICAgIGNhc2UgU2xpZGVyVGh1bWJW
ZXJ0aWNhbFBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hG
aWVsZFJlc3VsdHNCdXR0b25QYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRDYW5jZWxCdXR0b25Q
YXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotaW50IFJlbmRlclRoZW1lUXQ6OmJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVu
ZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIGlmICghby0+aXNCb3goKSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IENoZWNrYm94UGFy
dCB8fCBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gUmFkaW9QYXJ0KQotICAgICAgICByZXR1
cm4gdG9SZW5kZXJCb3gobyktPm1hcmdpblRvcCgpICsgdG9SZW5kZXJCb3gobyktPmhlaWdodCgp
IC0gMjsgLy8gU2FtZSBhcyBpbiBvbGQga2h0bWwKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmJh
c2VsaW5lUG9zaXRpb24obyk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6Y29udHJvbFN1cHBv
cnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIGlmICghaXNFbmFi
bGVkKG8pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBDaGVja2JveGVzIG9ubHkg
aGF2ZSB0aW50IHdoZW4gY2hlY2tlZC4KLSAgICBpZiAoby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgp
ID09IENoZWNrYm94UGFydCkKLSAgICAgICAgcmV0dXJuIGlzQ2hlY2tlZChvKTsKLQotICAgIC8v
IEZvciBub3cgYXNzdW1lIG90aGVyIGNvbnRyb2xzIGhhdmUgdGludCBpZiBlbmFibGVkLgotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzQ29udHJvbFRp
bnRzKCkgY29uc3QKLXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50IFJlbmRlclRoZW1lUXQ6
OmZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqIHN0eWxlKSBjb25zdAotewotI2lmbmRlZiBRVF9O
T19MSU5FRURJVAotICAgIGlmICghbV9saW5lRWRpdCkKLSAgICAgICAgbV9saW5lRWRpdCA9IG5l
dyBRTGluZUVkaXQoKTsKLSNlbmRpZgotCi0gICAgUVN0eWxlT3B0aW9uRnJhbWVWMiBvcHQ7Ci0g
ICAgUVdpZGdldCogd2lkZ2V0ID0gMDsKLSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSAgICB3aWRn
ZXQgPSBtX2xpbmVFZGl0OwotI2VuZGlmCi0gICAgcmV0dXJuIHN0eWxlLT5waXhlbE1ldHJpYyhR
U3R5bGU6OlBNX0RlZmF1bHRGcmFtZVdpZHRoLCAmb3B0LCB3aWRnZXQpOwotfQotCi1zdGF0aWMg
UVJlY3QgaW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCwgUVN0eWxl
KiBzdHlsZSkKLXsKLSAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOwotICAgIG9wdGlvbi5z
dGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgIG9wdGlvbi5yZWN0ID0gb3JpZ2luYWxS
ZWN0OwotCi0gICAgUVJlY3QgbGF5b3V0UmVjdCA9IHN0eWxlLT5zdWJFbGVtZW50UmVjdChRU3R5
bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLCAmb3B0aW9uLCAwKTsKLSAgICBpZiAoIWxheW91
dFJlY3QuaXNOdWxsKCkpIHsKLSAgICAgICAgaW50IHBhZGRpbmdMZWZ0ID0gbGF5b3V0UmVjdC5s
ZWZ0KCkgLSBvcmlnaW5hbFJlY3QubGVmdCgpOwotICAgICAgICBpbnQgcGFkZGluZ1JpZ2h0ID0g
b3JpZ2luYWxSZWN0LnJpZ2h0KCkgLSBsYXlvdXRSZWN0LnJpZ2h0KCk7Ci0gICAgICAgIGludCBw
YWRkaW5nVG9wID0gbGF5b3V0UmVjdC50b3AoKSAtIG9yaWdpbmFsUmVjdC50b3AoKTsKLSAgICAg
ICAgaW50IHBhZGRpbmdCb3R0b20gPSBvcmlnaW5hbFJlY3QuYm90dG9tKCkgLSBsYXlvdXRSZWN0
LmJvdHRvbSgpOwotCi0gICAgICAgIHJldHVybiBvcmlnaW5hbFJlY3QuYWRqdXN0ZWQoLXBhZGRp
bmdMZWZ0LCAtcGFkZGluZ1RvcCwgcGFkZGluZ1JpZ2h0LCBwYWRkaW5nQm90dG9tKTsKLSAgICB9
Ci0gICAgcmV0dXJuIG9yaWdpbmFsUmVjdDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1
c3RSZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgc3dpdGNoIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIENoZWNrYm94
UGFydDoKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAg
ICAgIFFSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVCdXR0b25SZWN0KHJlY3QsIHFTdHlsZSgp
KTsKLSAgICAgICAgcmVjdCA9IEludFJlY3QoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRSZWN0
LnkoKSwgaW5mbGF0ZWRSZWN0LndpZHRoKCksIGluZmxhdGVkUmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1Db2xvciBSZW5kZXJU
aGVtZVF0OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Ci17
Ci0gICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7Ci0gICAgc2V0UGFs
ZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKLSAgICByZXR1cm4gcGFsLmJydXNoKFFQ
YWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7Ci19Ci0KLUNvbG9y
IFJlbmRlclRoZW1lUXQ6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3Io
KSBjb25zdAotewotICAgIFFQYWxldHRlIHBhbCA9IFFBcHBsaWNhdGlvbjo6cGFsZXR0ZSgpOwot
ICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKHBhbCk7Ci0gICAgcmV0dXJuIHBh
bC5icnVzaChRUGFsZXR0ZTo6SW5hY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7
Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lUXQ6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yKCkgY29uc3QKLXsKLSAgICBRUGFsZXR0ZSBwYWwgPSBRQXBwbGljYXRpb246OnBh
bGV0dGUoKTsKLSAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhwYWwpOwotICAg
IHJldHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodGVk
VGV4dCkuY29sb3IoKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVRdDo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Ci17Ci0gICAgUVBhbGV0dGUgcGFsID0g
UUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7Ci0gICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZF
eGlzdHMocGFsKTsKLSAgICByZXR1cm4gcGFsLmJydXNoKFFQYWxldHRlOjpJbmFjdGl2ZSwgUVBh
bGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVR
dDo6cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigpIGNvbnN0Ci17Ci0gICAgUVBhbGV0dGUgcGFsID0g
UUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7Ci0gICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZF
eGlzdHMocGFsKTsKLSAgICByZXR1cm4gcGFsLmJydXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxl
dHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6c3lzdGVt
Rm9udChpbnQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0Ci17Ci0gICAgLy8gbm8tb3AKLX0KLQot
Q29sb3IgUmVuZGVyVGhlbWVRdDo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Ci17
Ci0gICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7Ci0gICAgc2V0UGFs
ZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKLSAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQp
IHsKLSAgICBjYXNlIENTU1ZhbHVlQnV0dG9udGV4dDoKLSAgICAgICAgcmV0dXJuIHBhbC5icnVz
aChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6QnV0dG9uVGV4dCkuY29sb3IoKTsKLSAgICBj
YXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6Ci0gICAgICAgIHJldHVybiBwYWwuYnJ1c2goUVBhbGV0
dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OlRleHQpLmNvbG9yKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1ZUlkKTsKLSAgICB9Ci19
Ci0KLWludCBSZW5kZXJUaGVtZVF0OjptaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikg
Y29uc3QKLXsKLSAgICBjb25zdCBRRm9udE1ldHJpY3MgJmZtID0gUUFwcGxpY2F0aW9uOjpmb250
TWV0cmljcygpOwotICAgIHJldHVybiBmbS53aWR0aChRTGF0aW4xQ2hhcigneCcpKTsKLX0KLQot
dm9pZCBSZW5kZXJUaGVtZVF0Ojpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSog
cmVuZGVyU3R5bGUpIGNvbnN0Ci17Ci0gICAgUVNpemUgc2l6ZSgwLCAwKTsKLSAgICBjb25zdCBR
Rm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpOwotICAgIFFTdHlsZSog
c3R5bGUgPSBxU3R5bGUoKTsKLQotICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2Uo
KSkgewotICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0Ogot
ICAgIGNhc2UgVGV4dEZpZWxkUGFydDogewotICAgICAgICBpbnQgcGFkZGluZyA9IGZpbmRGcmFt
ZUxpbmVXaWR0aChzdHlsZSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nTGVmdChM
ZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdS
aWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBh
ZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5z
ZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIElmIHRo
ZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhp
bmcgdG8gZG8uCi0gICAgaWYgKCFyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpICYmICFyZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgQ2hl
Y2tib3hQYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbiBzdHlsZU9wdGlvbjsKLSAgICAgICAg
c3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICAgICAgaW50IGNo
ZWNrQm94V2lkdGggPSBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9JbmRpY2F0b3JXaWR0
aCwgJnN0eWxlT3B0aW9uKTsKLSAgICAgICAgY2hlY2tCb3hXaWR0aCAqPSByZW5kZXJTdHlsZS0+
ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICBzaXplID0gUVNpemUoY2hlY2tCb3hXaWR0aCwgY2hl
Y2tCb3hXaWR0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFJhZGlvUGFydDog
ewotICAgICAgICBRU3R5bGVPcHRpb24gc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9u
LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCByYWRpb1dpZHRoID0g
c3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fRXhjbHVzaXZlSW5kaWNhdG9yV2lkdGgsICZz
dHlsZU9wdGlvbik7Ci0gICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2
ZVpvb20oKTsKLSAgICAgICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0jaWYgIVVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgY2Fz
ZSBQdXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6IHsKLSAgICAgICAgUVN0eWxl
T3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBR
U3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBRU2l6ZSBjb250ZW50U2l6ZSA9IGZtLnNpemUo
UXQ6OlRleHRTaG93TW5lbW9uaWMsIFFTdHJpbmc6OmZyb21MYXRpbjEoIlgiKSk7Ci0gICAgICAg
IFFTaXplIHB1c2hCdXR0b25TaXplID0gc3R5bGUtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlOjpD
VF9QdXNoQnV0dG9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgY29udGVudFNpemUsIDApOwotICAgICAgICBzdHls
ZU9wdGlvbi5yZWN0ID0gUVJlY3QoMCwgMCwgcHVzaEJ1dHRvblNpemUud2lkdGgoKSwgcHVzaEJ1
dHRvblNpemUuaGVpZ2h0KCkpOwotICAgICAgICBRUmVjdCBsYXlvdXRSZWN0ID0gc3R5bGUtPnN1
YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCAwKTsK
LQotICAgICAgICAvLyBJZiB0aGUgc3R5bGUgc3VwcG9ydHMgbGF5b3V0IHJlY3RzIHdlIHVzZSB0
aGF0LCBhbmQgIGNvbXBlbnNhdGUgYWNjb3JkaW5nbHkKLSAgICAgICAgLy8gaW4gcGFpbnRCdXR0
b24oKSBiZWxvdy4KLSAgICAgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKQotICAgICAgICAg
ICAgc2l6ZS5zZXRIZWlnaHQobGF5b3V0UmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHNpemUuc2V0SGVpZ2h0KHB1c2hCdXR0b25TaXplLmhlaWdodCgpKTsKLQotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBNZW51bGlzdFBhcnQ6IHsKLSAgICAgICAgUVN0
eWxlT3B0aW9uQ29tYm9Cb3ggc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9uLnN0YXRl
IHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCBjb250ZW50SGVpZ2h0ID0gcU1h
eChmbS5saW5lU3BhY2luZygpLCAxNCkgKyAyOwotICAgICAgICBRU2l6ZSBtZW51TGlzdFNpemUg
PSBzdHlsZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGU6OkNUX0NvbWJvQm94LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24s
IFFTaXplKDAsIGNvbnRlbnRIZWlnaHQpLCAwKTsKLSAgICAgICAgc2l6ZS5zZXRIZWlnaHQobWVu
dUxpc3RTaXplLmhlaWdodCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IENoZWNrIGlz
IGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBh
Y2NvdW50LgotICAgIGlmIChyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
ICYmIHNpemUud2lkdGgoKSA+IDApCi0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRNaW5XaWR0aChM
ZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIGlmIChyZW5kZXJTdHlsZS0+aGVpZ2h0
KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCi0gICAgICAgIHJlbmRlclN0eWxlLT5z
ZXRNaW5IZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVRdDo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsK
LSAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVRdDo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjdCYgcikKLXsKLSAgICByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7Ci19
Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkg
Y29uc3QKLXsKLSAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Ci19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVRdDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICByZXR1cm4gcGFpbnRCdXR0b24obywgaSwg
cik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17
Ci0gICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLQot
I2lmZGVmIFFfV1NfTUFDCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRv
blBhcnQpIHsKLSAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25vcmUgdGhlIHNwZWNpZmllZCBo
ZWlnaHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50cwotICAgICAgICAvLyB1bmxl
c3MgYSBib3JkZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3BlcnR5IGlzIGFsc28gc3BlY2lm
aWVkLgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnRE
ZXNjcmlwdGlvbigpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVl
KTsKLQotI2lmZGVmIFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250IHNpemUgYW5kIGZhbWlseSBv
biBNYWMgKGxpa2UgU2FmYXJpIGRvZXMpCi0gICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmll
ZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29t
cHV0ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7Ci0jZWxzZQotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLSAgICBmb250RGVzY3Jp
cHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLSNlbmRpZgotCi0jaWYg
IVVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgRm9udEZhbWlseSBmb250RmFtaWx5OwotICAgIGZv
bnRGYW1pbHkuc2V0RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0
aW9uLnNldEZhbWlseShmb250RmFtaWx5KTsKLSAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9u
KGZvbnREZXNjcmlwdGlvbik7Ci0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc2VsZWN0b3ItPmZv
bnRTZWxlY3RvcigpKTsKLSNlbmRpZgotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKLSAg
ICBzZXRCdXR0b25QYWRkaW5nKHN0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRC
dXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBjb21wdXRlU2l6ZUJh
c2VkT25TdHlsZShzdHlsZSk7Ci19Ci0KLSNpZiAhVVNFKFFUX01PQklMRV9USEVNRSkKLXZvaWQg
UmVuZGVyVGhlbWVRdDo6c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Ci17Ci0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgIHN0eWxlT3B0aW9u
LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0KLSAgICAvLyBGYWtlIGEgYnV0dG9uIHJl
Y3QgaGVyZSwgc2luY2Ugd2UncmUganVzdCBjb21wdXRpbmcgZGVsdGFzCi0gICAgUVJlY3Qgb3Jp
Z2luYWxSZWN0ID0gUVJlY3QoMCwgMCwgMTAwLCAzMCk7Ci0gICAgc3R5bGVPcHRpb24ucmVjdCA9
IG9yaWdpbmFsUmVjdDsKLQotICAgIC8vIERlZmF1bHQgcGFkZGluZyBpcyBiYXNlZCBvbiB0aGUg
YnV0dG9uIG1hcmdpbiBwaXhlbCBtZXRyaWMKLSAgICBpbnQgYnV0dG9uTWFyZ2luID0gcVN0eWxl
KCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fQnV0dG9uTWFyZ2luLCAmc3R5bGVPcHRpb24sIDAp
OwotICAgIGludCBwYWRkaW5nTGVmdCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1Jp
Z2h0ID0gYnV0dG9uTWFyZ2luOwotICAgIGludCBwYWRkaW5nVG9wID0gYnV0dG9uTWFyZ2luOwot
ICAgIGludCBwYWRkaW5nQm90dG9tID0gYnV0dG9uTWFyZ2luOwotCi0gICAgLy8gVGhlbiBjaGVj
ayBpZiB0aGUgc3R5bGUgdXNlcyBsYXlvdXQgbWFyZ2lucwotICAgIFFSZWN0IGxheW91dFJlY3Qg
PSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRl
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHls
ZU9wdGlvbiwgMCk7Ci0gICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIFFS
ZWN0IGNvbnRlbnRzUmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1
c2hCdXR0b25Db250ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0gICAgICAgIHBhZGRpbmdMZWZ0ID0g
Y29udGVudHNSZWN0LmxlZnQoKSAtIGxheW91dFJlY3QubGVmdCgpOwotICAgICAgICBwYWRkaW5n
UmlnaHQgPSBsYXlvdXRSZWN0LnJpZ2h0KCkgLSBjb250ZW50c1JlY3QucmlnaHQoKTsKLSAgICAg
ICAgcGFkZGluZ1RvcCA9IGNvbnRlbnRzUmVjdC50b3AoKSAtIGxheW91dFJlY3QudG9wKCk7Ci0K
LSAgICAgICAgLy8gQ2FuJ3QgdXNlIHRoaXMgcmlnaHQgbm93IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2
ZSB0aGUgYmFzZWxpbmUgdG8gY29tcGVuc2F0ZQotICAgICAgICAvLyBwYWRkaW5nQm90dG9tID0g
bGF5b3V0UmVjdC5ib3R0b20oKSAtIGNvbnRlbnRzUmVjdC5ib3R0b20oKTsKLSAgICB9Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAg
c3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci19Ci0j
ZWxzZQotdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKLXsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChidXR0b25QYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAg
ICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChidXR0b25QYWRkaW5nUmlnaHQsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKGJ1dHRvblBhZGRpbmdUb3AsIEZp
eGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKGJ1dHRvblBhZGRpbmdC
b3R0b20sIEZpeGVkKSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludEJ1
dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKLXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgp
KQotICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIG9wdGlvbjsK
LSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnJlY3Qg
PSByOwotICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotCi0gICAgQ29u
dHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlv
biwgbyk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQgfHwgYXBwZWFyYW5j
ZSA9PSBCdXR0b25QYXJ0KSB7Ci0gICAgICAgIG9wdGlvbi5yZWN0ID0gaW5mbGF0ZUJ1dHRvblJl
Y3Qob3B0aW9uLnJlY3QsIHFTdHlsZSgpKTsKLSAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6
OkNFX1B1c2hCdXR0b24sIG9wdGlvbik7Ci0gICAgfSBlbHNlIGlmIChhcHBlYXJhbmNlID09IFJh
ZGlvUGFydCkKLSAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUmFkaW9CdXR0b24sIG9w
dGlvbik7Ci0gICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBDaGVja2JveFBhcnQpCi0gICAgICAg
cC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX0NoZWNrQm94LCBvcHRpb24pOwotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVsZFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewot
ICAgIC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlrZSB0aGlzIGxlYWRzIHRvIGRpZmZlcmVuY2Vz
IGxpa2U6Ci0gICAgLy8gLSBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUg
MTY4eDI1IFtiZ2NvbG9yPSNGRkZGRkZdIGJvcmRlcjogKDJweCBpbnNldCAjMDAwMDAwKV0KLSAg
ICAvLyArIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAxNjZ4MjYKLSAg
ICAvLyBpbiBsYXlvdXQgdGVzdHMgd2hlbiBhIENTUyBzdHlsZSBpcyBhcHBsaWVkIHRoYXQgZG9l
c24ndCBhZmZlY3QgYmFja2dyb3VuZCBjb2xvciwgYm9yZGVyIG9yCi0gICAgLy8gcGFkZGluZy4g
SnVzdCB3b3J0aCBrZWVwaW5nIGluIG1pbmQhCi0gICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xv
cihDb2xvcjo6dHJhbnNwYXJlbnQpOwotICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwotICAgIHN0
eWxlLT5yZXNldFBhZGRpbmcoKTsKLSAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7
Ci0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVu
Z3RoKHRleHRGaWVsZFBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdSaWdo
dChMZW5ndGgodGV4dEZpZWxkUGFkZGluZywgRml4ZWQpKTsKLSNlbmRpZgotfQotCi1ib29sIFJl
bmRlclRoZW1lUXQ6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIGkp
OwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0
eWxlT3B0aW9uRnJhbWVWMiBwYW5lbDsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIHBh
bmVsKTsKLSAgICBwYW5lbC5yZWN0ID0gcjsKLSAgICBwYW5lbC5saW5lV2lkdGggPSBmaW5kRnJh
bWVMaW5lV2lkdGgocVN0eWxlKCkpOwotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgaWYg
KGlzUHJlc3NlZChvKSkKLSAgICAgICAgcGFuZWwuc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5r
ZW47Ci0jZWxzZQotICAgIHBhbmVsLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotI2Vu
ZGlmCi0gICAgcGFuZWwuZmVhdHVyZXMgPSBRU3R5bGVPcHRpb25GcmFtZVYyOjpOb25lOwotCi0g
ICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgdGV4dCBmaWVsZAotICAgIENv
bnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhwYW5l
bCwgbyk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgIT0gVGV4dEZpZWxkUGFydAotICAgICAgICAmJiBh
cHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFRl
eHRBcmVhUGFydAotICAgICAgICAmJiBhcHBlYXJhbmNlICE9IExpc3Rib3hQYXJ0KQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4KLSAgICBw
LmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVFZGl0LCBwYW5lbCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRBcmVhU3R5bGUo
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCog
ZWxlbWVudCkgY29uc3QKLXsKLSAgICBhZGp1c3RUZXh0RmllbGRTdHlsZShzZWxlY3Rvciwgc3R5
bGUsIGVsZW1lbnQpOwotfQotCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50VGV4dEFyZWEoUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0g
ICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1l
UXQ6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0KLSAg
ICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCi0gICAgc3R5bGUtPnNldEhlaWdodChMZW5n
dGgoQXV0bykpOwotCi0gICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQotICAgIHN0
eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7Ci0KLSAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShz
dHlsZSk7Ci0KLSAgICAvLyBBZGQgaW4gdGhlIHBhZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNl
LgotICAgIHNldFBvcHVwUGFkZGluZyhzdHlsZSk7Ci0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkK
LSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKG1lbnVMaXN0UGFkZGluZywgRml4ZWQp
KTsKLSNlbmRpZgotfQotCi12b2lkIFJlbmRlclRoZW1lUXQ6OnNldFBvcHVwUGFkZGluZyhSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IHBhZGRpbmdMZWZ0ID0gNDsK
LSAgICBjb25zdCBpbnQgcGFkZGluZ1JpZ2h0ID0gc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgpIHx8
IHN0eWxlLT53aWR0aCgpLmlzUGVyY2VudCgpID8gNSA6IDg7Ci0KLSAgICBzdHlsZS0+c2V0UGFk
ZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOwotCi0gICAgUVN0eWxlT3B0aW9u
Q29tYm9Cb3ggb3B0OwotICAgIGludCB3ID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6
UE1fQnV0dG9uSWNvblNpemUsICZvcHQsIDApOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQo
TGVuZ3RoKHBhZGRpbmdSaWdodCArIHcsIEZpeGVkKSk7Ci0KLSAgICBzdHlsZS0+c2V0UGFkZGlu
Z1RvcChMZW5ndGgoMiwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5n
dGgoMiwgRml4ZWQpKTsKLX0KLQotCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVudUxpc3Qo
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17
Ci0gICAgU3R5bGVQYWludGVyIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3ggb3B0KG8p
OwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0KTsKLSAgICBpbml0aWFsaXplQ29t
bW9uUVN0eWxlT3B0aW9ucyhvcHQsIG8pOwotCi0gICAgSW50UmVjdCByZWN0ID0gcjsKLQotI2lm
IGRlZmluZWQoUV9XU19NQUMpICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX01BQykKLSAgICAvLyBR
TWFjU3R5bGUgbWFrZXMgdGhlIGNvbWJvIGJveGVzIGEgbGl0dGxlIGJpdCBzbWFsbGVyIHRvIGxl
YXZlIHNwYWNlIGZvciB0aGUgZm9jdXMgcmVjdC4KLSAgICAvLyBCZWNhdXNlIG9mIGl0LCB0aGUg
Y29tYm8gYnV0dG9uIGlzIGRyYXduIGF0IGEgcG9pbnQgdG8gdGhlIGxlZnQgb2Ygd2hlcmUgaXQg
d2FzIGV4cGVjdCB0byBiZSBhbmQgbWF5IGVuZCB1cAotICAgIC8vIG92ZXJsYXBwZWQgd2l0aCB0
aGUgdGV4dC4gVGhpcyB3aWxsIGZvcmNlIFFNYWNTdHlsZSB0byBkcmF3IHRoZSBjb21ibyBib3gg
d2l0aCB0aGUgZXhwZWN0ZWQgd2lkdGguCi0gICAgaWYgKHFvYmplY3RfY2FzdDxRTWFjU3R5bGUq
PihwLnN0eWxlKSkKLSAgICAgICAgcmVjdC5pbmZsYXRlWCgzKTsKLSNlbmRpZgotCi0gICAgY29u
c3QgUVBvaW50IHRvcExlZnQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAgcC5wYWludGVyLT50cmFu
c2xhdGUodG9wTGVmdCk7Ci0gICAgb3B0LnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7Ci0gICAg
b3B0LnJlY3Quc2V0U2l6ZShyZWN0LnNpemUoKSk7Ci0KLSAgICBwLmRyYXdDb21wbGV4Q29udHJv
bChRU3R5bGU6OkNDX0NvbWJvQm94LCBvcHQpOwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10
b3BMZWZ0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKLXsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIC8v
IE1vYmlsZSB0aGVtZSB1c2VzIGJvcmRlciByYWRpdXMuCi0jZWxzZQotICAgIC8vIFdPUktBUk9V
TkQgYmVjYXVzZSBodG1sLmNzcyBzcGVjaWZpZXMgLXdlYmtpdC1ib3JkZXItcmFkaXVzIGZvciA8
c2VsZWN0PiBzbyB3ZSBvdmVycmlkZSBpdCBoZXJlCi0gICAgLy8gc2VlIGFsc28gaHR0cDovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzOTkKLSAgICBzdHlsZS0+cmVzZXRCb3Jk
ZXJSYWRpdXMoKTsKLSNlbmRpZgotCi0gICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgot
ICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsKLQotICAgIC8vIFdoaXRlLXNwYWNl
IGlzIGxvY2tlZCB0byBwcmUKLSAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOwotCi0gICAg
Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOwotCi0gICAgLy8gQWRkIGluIHRoZSBwYWRk
aW5nIHRoYXQgd2UnZCBsaWtlIHRvIHVzZS4KLSAgICBzZXRQb3B1cFBhZGRpbmcoc3R5bGUpOwot
fQotCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBp
KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFF0
U3R5bGVPcHRpb25XZWJDb21ib0JveCBvcHRpb24obyk7Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAu
d2lkZ2V0LCBvcHRpb24pOwotICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlv
biwgbyk7Ci0gICAgb3B0aW9uLnJlY3QgPSByOwotCi0gICAgLy8gZm9yIGRyYXdpbmcgdGhlIGNv
bWJvIGJveCBhcnJvdywgcmVseSBvbmx5IG9uIHRoZSBmYWxsYmFjayBzdHlsZQotICAgIHAuc3R5
bGUgPSBmYWxsYmFja1N0eWxlKCk7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpT
Q19Db21ib0JveEFycm93OwotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfQ29t
Ym9Cb3gsIG9wdGlvbik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNpZiBFTkFCTEUoUFJP
R1JFU1NfVEFHKQotZG91YmxlIFJlbmRlclRoZW1lUXQ6OmFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdAotewot
ICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSA+PSAwKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIC8vIEZJWE1FOiBVc2UgaGFyZC1jb2RlZCB2YWx1ZSB1bnRpbCBodHRwOi8vYnVn
cmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQuCi0gICAgLy8g
VXNlIHRoZSB2YWx1ZSBmcm9tIHdpbmRvd3Mgc3R5bGUgd2hpY2ggaXMgMTAgZnBzLgotICAgIHJl
dHVybiAwLjE7Ci19Ci0KLWRvdWJsZSBSZW5kZXJUaGVtZVF0OjphbmltYXRpb25EdXJhdGlvbkZv
clByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3QKLXsKLSAg
ICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgPj0gMCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICBRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyIG9wdGlvbjsKLSAgICBvcHRpb24ucmVj
dC5zZXRTaXplKHJlbmRlclByb2dyZXNzLT5zaXplKCkpOwotICAgIC8vIEZJWE1FOiBVbnRpbCBo
dHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQs
Ci0gICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcgYWNyb3NzIHRoZSBwcm9n
cmVzcyBiYXIuCi0gICAgcmV0dXJuIChvcHRpb24ucmVjdC53aWR0aCgpIC8gcVN0eWxlKCktPnBp
eGVsTWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9uKSkgKiBh
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKHJlbmRlclByb2dyZXNzKTsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIHN0eWxl
LT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRQ
cm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IElu
dFJlY3QmIHIpCi17Ci0gICAgaWYgKCFvLT5pc1Byb2dyZXNzKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGkpOwotICAgIGlmICghcC5pc1ZhbGlk
KCkpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYy
IG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgaW5p
dGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLQotICAgIFJlbmRlclByb2dy
ZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7Ci0gICAgb3B0aW9uLnJl
Y3QgPSByOwotICAgIG9wdGlvbi5tYXhpbXVtID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKTsKLSAgICBvcHRpb24ubWluaW11bSA9IDA7Ci0gICAgb3B0aW9uLnByb2dyZXNzID0gKHJl
bmRlclByb2dyZXNzLT5wb3NpdGlvbigpICogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSk7Ci0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsKLSAgICBwLnBh
aW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBvcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50
KDAsIDApKTsKLSAgICBvcHRpb24ucmVjdC5zZXRTaXplKHIuc2l6ZSgpKTsKLQotICAgIGlmIChv
cHRpb24ucHJvZ3Jlc3MgPCAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBVbnRpbCBodHRwOi8vYnVn
cmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQsCi0gICAgICAg
IC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3Mg
YmFyLgotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXJHcm9vdmUs
IG9wdGlvbik7Ci0gICAgICAgIGludCBjaHVua1dpZHRoID0gcVN0eWxlKCktPnBpeGVsTWV0cmlj
KFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9uKTsKLSAgICAgICAgUUNv
bG9yIGNvbG9yID0gKG9wdGlvbi5wYWxldHRlLmhpZ2hsaWdodCgpID09IG9wdGlvbi5wYWxldHRl
LmJhY2tncm91bmQoKSkgPyBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6QWN0aXZlLCBR
UGFsZXR0ZTo6SGlnaGxpZ2h0KSA6IG9wdGlvbi5wYWxldHRlLmNvbG9yKFFQYWxldHRlOjpIaWdo
bGlnaHQpOwotICAgICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnN0eWxlKCktPmRpcmVjdGlvbigp
ID09IFJUTCkKLSAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3Qob3B0aW9uLnJlY3Qucmln
aHQoKSAtIGNodW5rV2lkdGggIC0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblByb2dyZXNzKCkg
KiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQo
KSwgY29sb3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0
KHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICogb3B0aW9uLnJlY3Qud2lkdGgo
KSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNvbG9yKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFyLCBvcHRpb24p
OwotCi0gICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTbGlkZXJUcmFjayhS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXIg
cCh0aGlzLCBwaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihw
LndpZGdldCwgb3B0aW9uKTsKLSAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1Ns
aWRlckdyb292ZTsKLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1v
blFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgaWYg
KGFwcGVhcmFuY2UgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAgICBvcHRpb24ub3JpZW50
YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgaWYgKGlzUHJlc3NlZChvKSkKLSAgICAgICAgb3B0
aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotCi0gICAgcC5kcmF3Q29tcGxleENv
bnRyb2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7Ci0KLSAgICBpZiAob3B0aW9uLnN0YXRl
ICYgUVN0eWxlOjpTdGF0ZV9IYXNGb2N1cykgewotICAgICAgICBRU3R5bGVPcHRpb25Gb2N1c1Jl
Y3QgZm9jdXNPcHRpb247Ci0gICAgICAgIGZvY3VzT3B0aW9uLnJlY3QgPSByOwotICAgICAgICBw
LmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9GcmFtZUZvY3VzUmVjdCwgZm9jdXNPcHRpb24pOwot
ICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1
c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUs
IEVsZW1lbnQqKSBjb25zdAotewotICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwaSk7Ci0g
ICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVP
cHRpb25TbGlkZXIgb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9u
KTsKLSAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKLSAg
ICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMo
b3B0aW9uLCBvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0g
U2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG9wdGlvbi5vcmllbnRhdGlvbiA9IFF0
OjpWZXJ0aWNhbDsKLSAgICBpZiAoaXNQcmVzc2VkKG8pKSB7Ci0gICAgICAgIG9wdGlvbi5hY3Rp
dmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVySGFuZGxlOwotICAgICAgICBvcHRpb24u
c3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0gICAgfQotCi0gICAgcC5kcmF3Q29tcGxl
eENvbnRyb2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7Ci0KLSAgICByZXR1cm4gZmFsc2U7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50
KSBjb25zdAotewotICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHNlbGVj
dG9yLCBzdHlsZSwgZWxlbWVudCk7Ci0gICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBw
aSwgcik7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0g
ICAgLy8gUmVzZXR0aW5nIHRoZSBzdHlsZSBsaWtlIHRoaXMgbGVhZHMgdG8gZGlmZmVyZW5jZXMg
bGlrZToKLSAgICAvLyAtIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAx
Njh4MjUgW2JnY29sb3I9I0ZGRkZGRl0gYm9yZGVyOiAoMnB4IGluc2V0ICMwMDAwMDApXQotICAg
IC8vICsgUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2NngyNgotICAg
IC8vIGluIGxheW91dCB0ZXN0cyB3aGVuIGEgQ1NTIHN0eWxlIGlzIGFwcGxpZWQgdGhhdCBkb2Vz
bid0IGFmZmVjdCBiYWNrZ3JvdW5kIGNvbG9yLCBib3JkZXIgb3IKLSAgICAvLyBwYWRkaW5nLiBK
dXN0IHdvcnRoIGtlZXBpbmcgaW4gbWluZCEKLSAgICBzdHlsZS0+c2V0QmFja2dyb3VuZENvbG9y
KENvbG9yOjp0cmFuc3BhcmVudCk7Ci0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0gICAgc3R5
bGUtPnJlc2V0UGFkZGluZygpOwotICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsK
LX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVu
dCogZSkgY29uc3QKLXsKLSAgICAvLyBMb2dpYyB0YWtlbiBmcm9tIFJlbmRlclRoZW1lQ2hyb21p
dW0uY3BwLgotICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBz
aXplLgotICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVsdENv
bnRyb2xGb250UGl4ZWxTaXplOwotICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gbHJvdW5kZihx
TWluKHFNYXgobWluQ2FuY2VsQnV0dG9uU2l6ZSwgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgKiBm
b250U2NhbGUpLCBtYXhDYW5jZWxCdXR0b25TaXplKSk7Ci0gICAgc3R5bGUtPnNldFdpZHRoKExl
bmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVu
Z3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7Ci19Ci0KLS8vIEZ1bmN0aW9uIHRha2VuIGZy
b20gUmVuZGVyVGhlbWVDaHJvbWl1bS5jcHAKLUludFJlY3QgUmVuZGVyVGhlbWVRdDo6Y29udmVy
dFRvUGFpbnRpbmdSZWN0KFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29uc3QgUmVuZGVy
T2JqZWN0KiBwYXJ0UmVuZGVyZXIsIEludFJlY3QgcGFydFJlY3QsIGNvbnN0IEludFJlY3QmIGxv
Y2FsT2Zmc2V0KSBjb25zdAotewotICAgIC8vIENvbXB1dGUgYW4gb2Zmc2V0IGJldHdlZW4gdGhl
IHBhcnQgcmVuZGVyZXIgYW5kIHRoZSBpbnB1dCByZW5kZXJlci4KLSAgICBJbnRTaXplIG9mZnNl
dEZyb21JbnB1dFJlbmRlcmVyID0gLShwYXJ0UmVuZGVyZXItPm9mZnNldEZyb21BbmNlc3RvckNv
bnRhaW5lcihpbnB1dFJlbmRlcmVyKSk7Ci0gICAgLy8gTW92ZSB0aGUgcmVjdCBpbnRvIHBhcnRS
ZW5kZXJlcidzIGNvb3Jkcy4KLSAgICBwYXJ0UmVjdC5tb3ZlKG9mZnNldEZyb21JbnB1dFJlbmRl
cmVyKTsKLSAgICAvLyBBY2NvdW50IGZvciB0aGUgbG9jYWwgZHJhd2luZyBvZmZzZXQuCi0gICAg
cGFydFJlY3QubW92ZShsb2NhbE9mZnNldC54KCksIGxvY2FsT2Zmc2V0LnkoKSk7Ci0KLSAgICBy
ZXR1cm4gcGFydFJlY3Q7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVj
dCYgcikKLXsKLSAgICAvLyBMb2dpYyBjb3BpZWQgZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtLmNw
cC4KLQotICAgIC8vIEdldCB0aGUgcmVuZGVyZXIgb2YgPGlucHV0PiBlbGVtZW50LgotICAgIE5v
ZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKLSAgICBpZiAoIWlu
cHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVu
ZGVyQm94KiBpbnB1dFJlbmRlckJveCA9IHRvUmVuZGVyQm94KGlucHV0LT5yZW5kZXJlcigpKTsK
LSAgICBJbnRSZWN0IGlucHV0Q29udGVudEJveCA9IGlucHV0UmVuZGVyQm94LT5jb250ZW50Qm94
UmVjdCgpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgYnV0dG9uIHN0YXlzIHNxdWFy
ZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveC4KLSAgICBpbnQgY2FuY2VsQnV0dG9u
U2l6ZSA9IHFNaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHFNaW4oaW5wdXRDb250ZW50Qm94
LmhlaWdodCgpLCByLmhlaWdodCgpKSk7Ci0gICAgLy8gQ2FsY3VsYXRlIGNhbmNlbCBidXR0b24n
cyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgaW5wdXQgZWxlbWVudC4KLSAgICAvLyBDZW50
ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMg
dG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKLSAgICAvLyBiZSBvbmUgcGl4ZWwg
Y2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0byBsb29rIGJl
dHRlciB3aXRoIHRoZSB0ZXh0LgotICAgIEludFJlY3QgY2FuY2VsQnV0dG9uUmVjdChvLT5vZmZz
ZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5kZXJCb3gpLndpZHRoKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q29udGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50
Qm94LmhlaWdodCgpIC0gY2FuY2VsQnV0dG9uU2l6ZSArIDEpIC8gMiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uU2l6ZSwgY2FuY2VsQnV0dG9uU2l6ZSk7Ci0gICAg
SW50UmVjdCBwYWludGluZ1JlY3QgPSBjb252ZXJ0VG9QYWludGluZ1JlY3QoaW5wdXRSZW5kZXJC
b3gsIG8sIGNhbmNlbEJ1dHRvblJlY3QsIHIpOwotICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsSW1h
Z2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbEJ1dHRvbiIpLnJl
bGVhc2VSZWYoKTsKLSAgICBzdGF0aWMgSW1hZ2UqIGNhbmNlbFByZXNzZWRJbWFnZSA9IEltYWdl
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uUHJlc3NlZCIpLnJlbGVh
c2VSZWYoKTsKLSAgICBwaS5jb250ZXh0LT5kcmF3SW1hZ2UoaXNQcmVzc2VkKG8pID8gY2FuY2Vs
UHJlc3NlZEltYWdlIDogY2FuY2VsSW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvLT5zdHlsZSgpLT5jb2xvclNwYWNlKCksIHBhaW50aW5nUmVjdCk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3Jh
dGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVs
ZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBSZW5kZXJUaGVt
ZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGREZWNv
cmF0aW9uKG8sIHBpLCByKTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hG
aWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBzdHlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3Jh
dGlvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6
cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
bihvLCBwaSwgcik7Ci19Ci0KLSNpZm5kZWYgUVRfTk9fU1BJTkJPWAotdm9pZCBSZW5kZXJUaGVt
ZVF0OjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFbGVtZW50KiBlKSBjb25zdAotewotICAgIC8vIFVzZSB0aGUgc2FtZSB3
aWR0aCBhcyBvdXIgbmF0aXZlIHNjcm9sbGJhcgotICAgIGludCB3aWR0aCA9IFNjcm9sbGJhclRo
ZW1lOjpuYXRpdmVUaGVtZSgpLT5zY3JvbGxiYXJUaGlja25lc3MoKTsKLSAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRNaW5XaWR0aChMZW5n
dGgod2lkdGgsIEZpeGVkKSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRJbm5lclNw
aW5CdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8p
OwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5
bGVPcHRpb25TcGluQm94IG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9w
dGlvbik7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAgfCBR
U3R5bGU6OlNDX1NwaW5Cb3hEb3duOwotICAgIGlmICghaXNSZWFkT25seUNvbnRyb2wobykpIHsK
LSAgICAgICAgaWYgKGlzRW5hYmxlZChvKSkKLSAgICAgICAgICAgIG9wdGlvbi5zdGVwRW5hYmxl
ZCA9IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBVcEVuYWJsZWQgfCBRQWJzdHJhY3RTcGluQm94OjpT
dGVwRG93bkVuYWJsZWQ7Ci0gICAgICAgIGlmIChpc1ByZXNzZWQobykpIHsKLSAgICAgICAgICAg
IG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICAgICAgICAgIGlmIChp
c1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKG8pKQotICAgICAgICAgICAgICAgIG9wdGlvbi5hY3Rp
dmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3Bp
bkJveERvd247Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLy8gUmVuZGVyIHRoZSBzcGluIGJ1dHRv
bnMgZm9yIExUUiBvciBSVEwgYWNjb3JkaW5nbHkuCi0gICAgb3B0aW9uLmRpcmVjdGlvbiA9IG8t
PnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFF0OjpMZWZ0VG9SaWdodCA6IFF0
OjpSaWdodFRvTGVmdDsKLQotICAgIEludFJlY3QgYnV0dG9uUmVjdCA9IHJlY3Q7Ci0gICAgLy8g
RGVmYXVsdCB0byBtb3ZpbmcgdGhlIGJ1dHRvbnMgYSBsaXR0bGUgYml0IHdpdGhpbiB0aGUgZWRp
dG9yIGZyYW1lLgotICAgIGludCBpbmZsYXRlWCA9IC0yOwotICAgIGludCBpbmZsYXRlWSA9IC0y
OwotI2lmIGRlZmluZWQoUV9XU19NQUMpICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX01BQykKLSAg
ICAvLyBRTWFjU3R5bGUgd2lsbCBwb3NpdGlvbiB0aGUgYXF1YSBidXR0b25zIGZsdXNoIHRvIHRo
ZSByaWdodC4KLSAgICAvLyBUaGlzIHdpbGwgbW92ZSB0aGVtIG1vcmUgd2l0aGluIHRoZSBjb250
cm9sIGZvciBiZXR0ZXIgc3R5bGUsIGEgbGEKLSAgICAvLyBDaHJvbWl1bSBsb29rICYgZmVlbC4K
LSAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUpKSB7Ci0gICAgICAgIGlu
ZmxhdGVYID0gLTQ7Ci0gICAgICAgIC8vIFJlbmRlciBtaW5pIGFxdWEgc3BpbiBidXR0b25zIGZv
ciBRTWFjU3R5bGUgdG8gZml0IG5pY2VseSBpbnRvCi0gICAgICAgIC8vIHRoZSBlZGl0b3IgYXJl
YSwgbGlrZSBDaHJvbWl1bS4KLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVf
TWluaTsKLSAgICB9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiAhZGVmaW5lZChR
VF9OT19TVFlMRV9QTEFTVElRVUUpCi0gICAgLy8gUVBsYXN0aXF1ZVN0eWxlIGxvb2tzIGJlc3Qg
d2hlbiB0aGUgc3BpbiBidXR0b25zIGFyZSBmbHVzaCB3aXRoIHRoZSBmcmFtZSdzIGVkZ2UuCi0g
ICAgaWYgKHFvYmplY3RfY2FzdDxRUGxhc3RpcXVlU3R5bGUqPihwLnN0eWxlKSkgewotICAgICAg
ICBpbmZsYXRlWCA9IDA7Ci0gICAgICAgIGluZmxhdGVZID0gMDsKLSAgICB9Ci0jZW5kaWYKLQot
ICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVgoaW5mbGF0ZVgpOwotICAgIGJ1dHRvblJlY3QuaW5mbGF0
ZVkoaW5mbGF0ZVkpOwotICAgIG9wdGlvbi5yZWN0ID0gYnV0dG9uUmVjdDsKLQotICAgIHAuZHJh
d0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU3BpbkJveCwgb3B0aW9uKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0ZvY3VzKENv
bnRyb2xQYXJ0IGFwcGVhcmFuY2UpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChhcHBlYXJhbmNlKSB7
Ci0gICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6Ci0gICAgY2Fz
ZSBUZXh0RmllbGRQYXJ0OgotICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgIGNhc2UgTGlzdGJv
eFBhcnQ6Ci0gICAgY2FzZSBNZW51bGlzdFBhcnQ6Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAg
Y2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgY2FzZSBTbGlkZXJIb3Jpem9udGFsUGFydDoKLSAgICBj
YXNlIFNsaWRlclZlcnRpY2FsUGFydDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVs
dDogLy8gTm8gZm9yIGFsbCBvdGhlcnMuLi4KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0
cyhRUGFsZXR0ZSYgcGFsZXR0ZSkgY29uc3QKLXsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQot
ICAgIHN0YXRpYyBRUGFsZXR0ZSBsaWdodEdyYXlQYWxldHRlKFF0OjpsaWdodEdyYXkpOwotICAg
IHBhbGV0dGUgPSBsaWdodEdyYXlQYWxldHRlOwotICAgIHJldHVybjsKLSNlbmRpZgotICAgIC8v
IElmIHRoZSB3ZWJ2aWV3IGhhcyBhIGN1c3RvbSBwYWxldHRlLCB1c2UgaXQKLSAgICBpZiAoIW1f
cGFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIENocm9tZSogY2hyb21lID0gbV9wYWdlLT5jaHJv
bWUoKTsKLSAgICBpZiAoIWNocm9tZSkKLSAgICAgICAgcmV0dXJuOwotICAgIENocm9tZUNsaWVu
dCogY2hyb21lQ2xpZW50ID0gY2hyb21lLT5jbGllbnQoKTsKLSAgICBpZiAoIWNocm9tZUNsaWVu
dCkKLSAgICAgICAgcmV0dXJuOwotICAgIFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gY2hy
b21lQ2xpZW50LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKLSAgICBpZiAoIXBhZ2VDbGllbnQpCi0g
ICAgICAgIHJldHVybjsKLSAgICBwYWxldHRlID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOwotfQot
Ci1Db250cm9sUGFydCBSZW5kZXJUaGVtZVF0Ojppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9u
cyhRU3R5bGVPcHRpb24mIG9wdGlvbiwgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIC8v
IERlZmF1bHQgYml0czogbm8gZm9jdXMsIG5vIG1vdXNlIG92ZXIKLSAgICBvcHRpb24uc3RhdGUg
Jj0gfihRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzIHwgUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXIpOwot
Ci0gICAgaWYgKGlzUmVhZE9ubHlDb250cm9sKG8pKQotICAgICAgICAvLyBSZWFkb25seSBpcyBz
dXBwb3J0ZWQgb24gdGV4dGZpZWxkcy4KLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6
U3RhdGVfUmVhZE9ubHk7Ci0KLSAgICBvcHRpb24uZGlyZWN0aW9uID0gUXQ6OkxlZnRUb1JpZ2h0
OwotCi0gICAgaWYgKGlzSG92ZXJlZChvKSkKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHls
ZTo6U3RhdGVfTW91c2VPdmVyOwotCi0gICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlz
dHMob3B0aW9uLnBhbGV0dGUpOwotCi0gICAgaWYgKCFpc0VuYWJsZWQobykpIHsKLSAgICAgICAg
b3B0aW9uLnBhbGV0dGUuc2V0Q3VycmVudENvbG9yR3JvdXAoUVBhbGV0dGU6OkRpc2FibGVkKTsK
LSAgICAgICAgb3B0aW9uLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0VuYWJsZWQ7Ci0gICAgfQot
Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gby0+c3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQot
ICAgICAgICByZXR1cm4gTm9Db250cm9sUGFydDsKLQotICAgIENvbnRyb2xQYXJ0IHJlc3VsdCA9
IHN0eWxlLT5hcHBlYXJhbmNlKCk7Ci0gICAgaWYgKHN1cHBvcnRzRm9jdXMocmVzdWx0KSAmJiBp
c0ZvY3VzZWQobykpIHsKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfSGFz
Rm9jdXM7Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0tleWJvYXJkRm9j
dXNDaGFuZ2U7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBXZWJDb3Jl
OjpSVEwpCi0gICAgICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6UmlnaHRUb0xlZnQ7Ci0KLSAg
ICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBT
cXVhcmVCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvbkJl
dmVsUGFydDoKLSAgICBjYXNlIExpc3RJdGVtUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0QnV0dG9u
UGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6Ci0gICAgY2FzZSBT
ZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6IHsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChvKSkK
LSAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICAg
ICAgZWxzZSBpZiAocmVzdWx0ID09IFB1c2hCdXR0b25QYXJ0IHx8IHJlc3VsdCA9PSBCdXR0b25Q
YXJ0KQotICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmFpc2VkOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgY2FzZSBDaGVj
a2JveFBhcnQ6Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSAoaXNDaGVja2VkKG8pID8gUVN0eWxl
OjpTdGF0ZV9PbiA6IFFTdHlsZTo6U3RhdGVfT2ZmKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotCi1TdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0
cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCi17Ci0gICAgU3RyaW5nIHJlc3VsdCA9IFN0cmlu
ZyhtZWRpYUNvbnRyb2xzUXRVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9s
c1F0VXNlckFnZW50U3R5bGVTaGVldCkpOwotCi0gICAgaWYgKG1fcGFnZSAmJiBtX3BhZ2UtPmNo
cm9tZSgpLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpCi0gICAgICAgIHJl
c3VsdCArPSBTdHJpbmcobWVkaWFDb250cm9sc1F0RnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzUXRGdWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCkp
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gSGVscGVyIGNsYXNzIHRvIHRyYW5zZm9y
bSB0aGUgcGFpbnRlcidzIHdvcmxkIG1hdHJpeCB0byB0aGUgb2JqZWN0J3MgY29udGVudCBhcmVh
LCBzY2FsZWQgdG8gMCwwLDEwMCwxMDAKLWNsYXNzIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgewot
cHVibGljOgotICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIoUVBhaW50ZXIqIHBhaW50ZXIsIFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0JiByKSA6IG1fcGFpbnRlcihw
YWludGVyKQotICAgIHsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyT2JqZWN0
LT5zdHlsZSgpOwotICAgICAgICBtX29yaWdpbmFsVHJhbnNmb3JtID0gbV9wYWludGVyLT50cmFu
c2Zvcm0oKTsKLSAgICAgICAgbV9wYWludGVyLT50cmFuc2xhdGUoci54KCkgKyBzdHlsZS0+cGFk
ZGluZ0xlZnQoKS52YWx1ZSgpLCByLnkoKSArIHN0eWxlLT5wYWRkaW5nVG9wKCkudmFsdWUoKSk7
Ci0gICAgICAgIG1fcGFpbnRlci0+c2NhbGUoKHIud2lkdGgoKSAtIHN0eWxlLT5wYWRkaW5nTGVm
dCgpLnZhbHVlKCkgLSBzdHlsZS0+cGFkZGluZ1JpZ2h0KCkudmFsdWUoKSkgLyAxMDAuMCwKLSAg
ICAgICAgICAgICAoci5oZWlnaHQoKSAtIHN0eWxlLT5wYWRkaW5nVG9wKCkudmFsdWUoKSAtIHN0
eWxlLT5wYWRkaW5nQm90dG9tKCkudmFsdWUoKSkgLyAxMDAuMCk7Ci0gICAgfQotCi0gICAgfldv
cmxkTWF0cml4VHJhbnNmb3JtZXIoKSB7IG1fcGFpbnRlci0+c2V0VHJhbnNmb3JtKG1fb3JpZ2lu
YWxUcmFuc2Zvcm0pOyB9Ci0KLXByaXZhdGU6Ci0gICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsKLSAg
ICBRVHJhbnNmb3JtIG1fb3JpZ2luYWxUcmFuc2Zvcm07Ci19OwotCi1kb3VibGUgUmVuZGVyVGhl
bWVRdDo6bWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IDAuNDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhQmFja2dyb3VuZChRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKLXsKLSAgICBwYWludGVyLT5z
ZXRQZW4oUXQ6Ok5vUGVuKTsKLSAgICBzdGF0aWMgUUNvbG9yIHRyYW5zcGFyZW50QmxhY2soMCwg
MCwgMCwgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpICogMjU1KTsKLSAgICBwYWludGVy
LT5zZXRCcnVzaCh0cmFuc3BhcmVudEJsYWNrKTsKLSAgICBwYWludGVyLT5kcmF3Um91bmRlZFJl
Y3Qoci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIDUuMCwgNS4wKTsKLX0KLQot
c3RhdGljIGJvb2wgbWVkaWFFbGVtZW50Q2FuUGxheShSZW5kZXJPYmplY3QqIG8pCi17Ci0gICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7
Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBtZWRpYUVsZW1lbnQtPnJlYWR5U3RhdGUoKSA+IEhUTUxNZWRpYUVsZW1lbnQ6OkhBVkVf
TUVUQURBVEEKLSAgICAgICAgICAgfHwgKG1lZGlhRWxlbWVudC0+cmVhZHlTdGF0ZSgpID09IEhU
TUxNZWRpYUVsZW1lbnQ6OkhBVkVfTk9USElORwotICAgICAgICAgICAgICAgJiYgby0+c3R5bGUo
KS0+YXBwZWFyYW5jZSgpID09IE1lZGlhUGxheUJ1dHRvblBhcnQgJiYgbWVkaWFFbGVtZW50LT5w
cmVsb2FkKCkgPT0gIm5vbmUiKTsKLX0KLQotUUNvbG9yIFJlbmRlclRoZW1lUXQ6OmdldE1lZGlh
Q29udHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJPYmplY3QqIG8pIGNvbnN0Ci17Ci0gICAgUUNv
bG9yIGZnQ29sb3IgPSBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwot
ICAgIGlmICghbykKLSAgICAgICAgcmV0dXJuIGZnQ29sb3I7Ci0KLSAgICBpZiAoby0+bm9kZSgp
LT5hY3RpdmUoKSkKLSAgICAgICAgZmdDb2xvciA9IGZnQ29sb3IubGlnaHRlcigpOwotCi0gICAg
aWYgKCFtZWRpYUVsZW1lbnRDYW5QbGF5KG8pKSB7Ci0gICAgICAgIFFQYWxldHRlIHBhbCA9IFFB
cHBsaWNhdGlvbjo6cGFsZXR0ZSgpOwotICAgICAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJ
ZkV4aXN0cyhwYWwpOwotICAgICAgICBmZ0NvbG9yID0gcGFsLmJydXNoKFFQYWxldHRlOjpEaXNh
YmxlZCwgUVBhbGV0dGU6OlRleHQpLmNvbG9yKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZnQ29s
b3I7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1l
ZGlhRWxlbWVudChvKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKLSAgICBpZiAoIXAu
aXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHAucGFpbnRlci0+c2V0UmVu
ZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKLQotICAgIHBhaW50TWVkaWFC
YWNrZ3JvdW5kKHAucGFpbnRlciwgcik7Ci0KLSAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRy
YW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7Ci0gICAgY29uc3QgUVBvaW50RiBhcnJvd1BvbHln
b25bOV0gPSB7IFFQb2ludEYoMjAsIDApLCBRUG9pbnRGKDEwMCwgMCksIFFQb2ludEYoMTAwLCA4
MCksCi0gICAgICAgICAgICBRUG9pbnRGKDgwLCA4MCksIFFQb2ludEYoODAsIDMwKSwgUVBvaW50
RigxMCwgMTAwKSwgUVBvaW50RigwLCA5MCksIFFQb2ludEYoNzAsIDIwKSwgUVBvaW50RigyMCwg
MjApfTsKLQotICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3Vu
ZENvbG9yKG8pKTsKLSAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKGFycm93UG9seWdvbiwgOSk7
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRp
YU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQg
PSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsK
LSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHAucGFp
bnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKLQotICAg
IHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7Ci0KLSAgICBXb3JsZE1hdHJpeFRy
YW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7Ci0gICAgY29uc3QgUVBvaW50
RiBzcGVha2VyUG9seWdvbls2XSA9IHsgUVBvaW50RigyMCwgMzApLCBRUG9pbnRGKDUwLCAzMCks
IFFQb2ludEYoODAsIDApLAotICAgICAgICAgICAgUVBvaW50Rig4MCwgMTAwKSwgUVBvaW50Rig1
MCwgNzApLCBRUG9pbnRGKDIwLCA3MCl9OwotCi0gICAgcC5wYWludGVyLT5zZXRCcnVzaChtZWRp
YUVsZW1lbnQtPm11dGVkKCkgPyBRdDo6ZGFya1JlZCA6IGdldE1lZGlhQ29udHJvbEZvcmVncm91
bmRDb2xvcihvKSk7Ci0gICAgcC5wYWludGVyLT5kcmF3UG9seWdvbihzcGVha2VyUG9seWdvbiwg
Nik7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRN
ZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZv
KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHAu
cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKLQot
ICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7Ci0KLSAgICBXb3JsZE1hdHJp
eFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7Ci0gICAgcC5wYWludGVy
LT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOwotICAgIGlmICht
ZWRpYUVsZW1lbnQtPmNhblBsYXkoKSkgewotICAgICAgICBjb25zdCBRUG9pbnRGIHBsYXlQb2x5
Z29uWzNdID0geyBRUG9pbnRGKDAsIDApLCBRUG9pbnRGKDEwMCwgNTApLCBRUG9pbnRGKDAsIDEw
MCl9OwotICAgICAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKHBsYXlQb2x5Z29uLCAzKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KDAsIDAsIDMwLCAxMDApOwot
ICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KDcwLCAwLCAzMCwgMTAwKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtC
YWNrQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KQotewotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgdGhpcyBhdCB0aGUgbW9tZW50Lgot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2Vl
a0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpCi17Ci0gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYWludCB0aGlzIGF0IHRoZSBtb21l
bnQuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVk
aWFDdXJyZW50VGltZShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5m
byk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBw
LnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0g
ICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50
VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGN1cnJlbnRUaW1lKSArICIgLyAiICsgZm9ybWF0
TWVkaWFDb250cm9sc1RpbWUoZHVyYXRpb24pOwotfQotCi1TdHJpbmcgUmVuZGVyVGhlbWVRdDo6
Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0
IGR1cmF0aW9uKSBjb25zdAotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0ICpvLCBj
b25zdCBQYWludEluZm8gJnBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmcikKLXsKLSAgICBTdHls
ZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVy
OjpBbnRpYWxpYXNpbmcsIHRydWUpOwotCi0gICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWlu
dGVyLCByKTsKLQotICAgIGlmICghby0+aXNTbGlkZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgSW50UmVjdCBiID0gdG9SZW5kZXJCb3gobyktPmNvbnRlbnRCb3hSZWN0KCk7Ci0K
LSAgICAvLyBQb3NpdGlvbiB0aGUgb3V0ZXIgcmVjdGFuZ2xlCi0gICAgaW50IHRvcCA9IHIueSgp
ICsgYi55KCk7Ci0gICAgaW50IGxlZnQgPSByLngoKSArIGIueCgpOwotICAgIGludCB3aWR0aCA9
IGIud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gYi5oZWlnaHQoKTsKLQotICAgIC8vIEdldCB0
aGUgc2NhbGUgY29sb3IgZnJvbSB0aGUgcGFnZSBjbGllbnQKLSAgICBRUGFsZXR0ZSBwYWwgPSBR
QXBwbGljYXRpb246OnBhbGV0dGUoKTsKLSAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4
aXN0cyhwYWwpOwotICAgIGNvbnN0IFFDb2xvciBoaWdobGlnaHRUZXh0ID0gcGFsLmJydXNoKFFQ
YWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHRlZFRleHQpLmNvbG9yKCk7Ci0gICAg
Y29uc3QgUUNvbG9yIHNjYWxlQ29sb3IoaGlnaGxpZ2h0VGV4dC5yZWQoKSwgaGlnaGxpZ2h0VGV4
dC5ncmVlbigpLCBoaWdobGlnaHRUZXh0LmJsdWUoKSwgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3Bh
Y2l0eSgpICogMjU1KTsKLQotICAgIC8vIERyYXcgdGhlIG91dGVyIHJlY3RhbmdsZQotICAgIHAu
cGFpbnRlci0+c2V0QnJ1c2goc2NhbGVDb2xvcik7Ci0gICAgcC5wYWludGVyLT5kcmF3UmVjdChs
ZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgaWYgKCFvLT5ub2RlKCkgfHwgIW8tPm5v
ZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRhZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEhUTUxJbnB1dEVsZW1lbnQqIHNsaWRlciA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQq
PihvLT5ub2RlKCkpOwotCi0gICAgLy8gUG9zaXRpb24gdGhlIGlubmVyIHJlY3RhbmdsZQotICAg
IGhlaWdodCA9IGhlaWdodCAqIHNsaWRlci0+dmFsdWVBc051bWJlcigpOwotICAgIHRvcCArPSBi
LmhlaWdodCgpIC0gaGVpZ2h0OwotCi0gICAgLy8gRHJhdyB0aGUgaW5uZXIgcmVjdGFuZ2xlCi0g
ICAgcC5wYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKLSAgICBwLnBhaW50ZXItPnNldEJydXNo
KGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7Ci0gICAgcC5wYWludGVyLT5kcmF3
UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJP
YmplY3QgKm8sIGNvbnN0IFBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQot
ewotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7Ci0gICAgaWYgKCFwLmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBOb3RoaW5nIHRvIGRyYXcgaGVy
ZSwgdGhpcyBpcyBhbGwgZG9uZSBpbiB0aGUgdHJhY2sKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAg
SFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7
Ci0gICAgaWYgKCFtZWRpYUVsZW1lbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0
eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50
ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0KLSAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBh
aW50ZXIsIHIpOwotCi0gICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBtZWRpYUVsZW1lbnQt
PnBsYXllcigpKSB7Ci0gICAgICAgIC8vIEdldCB0aGUgYnVmZmVyZWQgcGFydHMgb2YgdGhlIG1l
ZGlhCi0gICAgICAgIFBhc3NSZWZQdHI8VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBwbGF5ZXItPmJ1
ZmZlcmVkKCk7Ci0gICAgICAgIGlmIChidWZmZXJlZC0+bGVuZ3RoKCkgPiAwICYmIHBsYXllci0+
ZHVyYXRpb24oKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKSB7Ci0g
ICAgICAgICAgICAvLyBTZXQgdGhlIHRyYW5zZm9ybSBhbmQgYnJ1c2gKLSAgICAgICAgICAgIFdv
cmxkTWF0cml4VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIocC5wYWludGVyLCBvLCByKTsKLSAgICAg
ICAgICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9y
KCkpOwotCi0gICAgICAgICAgICAvLyBQYWludCBlYWNoIGJ1ZmZlcmVkIHNlY3Rpb24KLSAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZXg7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGJ1ZmZlcmVkLT5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRY
ID0gKGJ1ZmZlcmVkLT5zdGFydChpLCBleCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkpICogMTAwOwot
ICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoID0gKChidWZmZXJlZC0+ZW5kKGksIGV4KSAvIHBs
YXllci0+ZHVyYXRpb24oKSkgKiAxMDApIC0gc3RhcnRYOwotICAgICAgICAgICAgICAgIHAucGFp
bnRlci0+ZHJhd1JlY3Qoc3RhcnRYLCAzNywgd2lkdGgsIDI2KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZVF0OjpwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBBU1NFUlQoby0+bm9kZSgp
KTsKLSAgICBOb2RlKiBob3N0Tm9kZSA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7
Ci0gICAgQVNTRVJUKGhvc3ROb2RlKTsKLSAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1l
bnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChob3N0Tm9kZSk7Ci0gICAgaWYgKCFtZWRpYUVsZW1l
bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBh
aW50SW5mbyk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1
ZSk7Ci0KLSAgICBwLnBhaW50ZXItPnNldFBlbihRdDo6Tm9QZW4pOwotICAgIHAucGFpbnRlci0+
c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKGhvc3ROb2RlLT5yZW5kZXJl
cigpKSk7Ci0gICAgcC5wYWludGVyLT5kcmF3UmVjdChyLngoKSwgci55KCksIHIud2lkdGgoKSwg
ci5oZWlnaHQoKSk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotdm9pZCBSZW5k
ZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAotewotICAgIC8vIHRpbWVsaW5lVGh1bWJIZWlnaHQgc2hvdWxkIG1hdGNoIHRoZSBoZWlnaHQg
cHJvcGVydHkgb2YgLXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSBpbiBtZWRpYUNvbnRy
b2xzUXQuY3NzLgotICAgIGNvbnN0IGludCB0aW1lbGluZVRodW1iSGVpZ2h0ID0gMTI7Ci0gICAg
Y29uc3QgaW50IHRpbWVsaW5lVGh1bWJXaWR0aCA9IHRpbWVsaW5lVGh1bWJIZWlnaHQgLyAzOwot
ICAgIC8vIHZvbHVtZVRodW1iV2lkdGggc2hvdWxkIG1hdGNoIHRoZSB3aWR0aCBwcm9wZXJ0eSBv
ZiAtd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgaW4gbWVkaWFDb250cm9sc1F0
LmNzcy4KLSAgICBjb25zdCBpbnQgdm9sdW1lVGh1bWJXaWR0aCA9IDEyOwotICAgIGNvbnN0IGlu
dCB2b2x1bWVUaHVtYkhlaWdodCA9IHZvbHVtZVRodW1iV2lkdGggLyAzOwotICAgIENvbnRyb2xQ
YXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOwotCi0gICAgaWYgKHBhcnQgPT0gTWVkaWFT
bGlkZXJUaHVtYlBhcnQpIHsKLSAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh0aW1lbGlu
ZVRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRp
bWVsaW5lVGh1bWJIZWlnaHQsIEZpeGVkKSk7Ci0gICAgfSBlbHNlIGlmIChwYXJ0ID09IE1lZGlh
Vm9sdW1lU2xpZGVyVGh1bWJQYXJ0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3Ro
KHZvbHVtZVRodW1iSGVpZ2h0LCBGaXhlZCkpOwotICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVu
Z3RoKHZvbHVtZVRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgfSBlbHNlIGlmIChwYXJ0ID09IFNs
aWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFy
dCkgewotICAgICAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwotICAgICAgICBpZiAocGFy
dCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgICAgIG9wdGlvbi5vcmllbnRh
dGlvbiA9IFF0OjpWZXJ0aWNhbDsKLQotICAgICAgICBRU3R5bGUqIHFzdHlsZSA9IHFTdHlsZSgp
OwotCi0gICAgICAgIGludCBsZW5ndGggPSBxc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1f
U2xpZGVyTGVuZ3RoLCAmb3B0aW9uKTsKLSAgICAgICAgaW50IHRoaWNrbmVzcyA9IHFzdHlsZS0+
cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJUaGlja25lc3MsICZvcHRpb24pOwotICAgICAg
ICBpZiAob3B0aW9uLm9yaWVudGF0aW9uID09IFF0OjpWZXJ0aWNhbCkgewotICAgICAgICAgICAg
c3R5bGUtPnNldFdpZHRoKExlbmd0aCh0aGlja25lc3MsIEZpeGVkKSk7Ci0gICAgICAgICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKLSAg
ICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotZG91YmxlIFJlbmRlclRoZW1lUXQ6OmNhcmV0QmxpbmtJbnRl
cnZhbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICBRQXBwbGljYXRpb246OmN1cnNvckZsYXNoVGlt
ZSgpIC8gMTAwMC4wIC8gMi4wOwotfQotCi1TdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZmlsZUxpc3RO
YW1lRm9yV2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgRm9udCYg
Zm9udCwgaW50IHdpZHRoKQotewotICAgIGlmICh3aWR0aCA8PSAwKQotICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nOwotICAgIGlmIChmaWxlbmFtZXMuaXNFbXB0
eSgpKQotICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOwot
ICAgIGVsc2UgaWYgKGZpbGVuYW1lcy5zaXplKCkgPT0gMSkgewotICAgICAgICBTdHJpbmcgZm5h
bWUgPSBmaWxlbmFtZXNbMF07Ci0gICAgICAgIFFGb250TWV0cmljcyBmbShmb250LmZvbnQoKSk7
Ci0gICAgICAgIHN0cmluZyA9IGZtLmVsaWRlZFRleHQoZm5hbWUsIFF0OjpFbGlkZUxlZnQsIHdp
ZHRoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnQgbiA9IGZpbGVuYW1lcy5zaXplKCk7Ci0g
ICAgICAgIHN0cmluZyA9IFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYlBhZ2UiLCAi
JW4gZmlsZShzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAibnVtYmVyIG9mIGNob3NlbiBmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFFDb3JlQXBwbGljYXRpb246OkNvZGVjRm9yVHIsIG4pOwotICAgIH0K
LQotICAgIHJldHVybiBzdHJpbmc7Ci19Ci0KLX0KLQotLy8gdmltOiB0cz00IHN3PTQgZXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMmJjMzE4NGQwYjdmNGY5MmUwNGFkY2Y0YjMwNDY5ZTAyOGQzMzJkYy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQg
KzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRh
dGlvbiBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgotICoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotI2lm
bmRlZiBSZW5kZXJUaGVtZVF0X2gKLSNkZWZpbmUgUmVuZGVyVGhlbWVRdF9oCi0KLSNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgotCi0jaW5jbHVkZSA8UVN0eWxlPgotCi1RVF9CRUdJTl9OQU1FU1BB
Q0UKLWNsYXNzIFFMaW5lRWRpdDsKLWNsYXNzIFFQYWludGVyOwotY2xhc3MgUVdpZGdldDsKLVFU
X0VORF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgRU5BQkxFKFBST0dS
RVNTX1RBRykKLWNsYXNzIFJlbmRlclByb2dyZXNzOwotI2VuZGlmCi1jbGFzcyBSZW5kZXJTdHls
ZTsKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7Ci1jbGFzcyBTY3JvbGxiYXJUaGVtZVF0OwotCi1j
bGFzcyBSZW5kZXJUaGVtZVF0IDogcHVibGljIFJlbmRlclRoZW1lIHsKLXByaXZhdGU6Ci0gICAg
UmVuZGVyVGhlbWVRdChQYWdlKiBwYWdlKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVF0KCk7
Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBh
Z2UqKTsKLQotICAgIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZp
cnR1YWwgYm9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmpl
Y3QqIG8pIGNvbnN0OwotCi0gICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNo
YW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCi0gICAgdmly
dHVhbCBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0
OwotCi0gICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGlu
ZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xU
aW50cygpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0
IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcik7Ci0KLSAgICAvLyBUaGUgcGxhdGZvcm0gc2Vs
ZWN0aW9uIGNvbG9yLgotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYp
IGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNv
bnN0OwotCi0gICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0OwotCi0gICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0
eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBi
YWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgdmly
dHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVk
aWFDb250cm9sc1N0eWxlU2hlZXQoKTsKLSNlbmRpZgotCi0gICAgUVN0eWxlKiBxU3R5bGUoKSBj
b25zdDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5k
ZXJTdHlsZSopIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxl
KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCB2b2lk
IGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwotICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0
dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoUFJPR1JFU1Nf
VEFHKQotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7Ci0jZW5kaWYKLQotICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJU
aHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotCi0gICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0
aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLQotI2lmbmRlZiBRVF9OT19TUElOQk9YCi0gICAgdmly
dHVhbCB2b2lkIGFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5l
clNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotICAgIC8vIFJldHVybnMg
dGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFy
LgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdDsKLSAgICAvLyBSZXR1cm5z
IHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgotICAg
IHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdDsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKFZJREVP
KQotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFQbGF5QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1
YWwgYm9vbCBwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vl
a0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgYm9vbCBwYWludE1l
ZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpOwotICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNDdXJy
ZW50VGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OwotICAgIHZp
cnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKGZsb2F0IGN1cnJl
bnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGhhc093bkRp
c2FibGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotcHJpdmF0ZToKLQotICAgIHZvaWQgcGFpbnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqIHBh
aW50ZXIsIGNvbnN0IEludFJlY3QmIHIpIGNvbnN0OwotICAgIGRvdWJsZSBtZWRpYUNvbnRyb2xz
QmFzZWxpbmVPcGFjaXR5KCkgY29uc3Q7Ci0gICAgUUNvbG9yIGdldE1lZGlhQ29udHJvbEZvcmVn
cm91bmRDb2xvcihSZW5kZXJPYmplY3QqIG8gPSAwKSBjb25zdDsKLSNlbmRpZgotICAgIHZvaWQg
Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdDsK
LQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBGb250JiwgaW50IHdpZHRoKTsKLQot
ICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCkgY29uc3Q7Ci0KLSAgICBDb250cm9s
UGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVPcHRpb24mLCBSZW5kZXJP
YmplY3QqKSBjb25zdDsKLQotICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSop
IGNvbnN0OwotICAgIHZvaWQgc2V0UG9wdXBQYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7Ci0K
LSAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJikgY29u
c3Q7Ci0KLSAgICBpbnQgZmluZEZyYW1lTGluZVdpZHRoKFFTdHlsZSogc3R5bGUpIGNvbnN0Owot
Ci0gICAgUVN0eWxlKiBmYWxsYmFja1N0eWxlKCkgY29uc3Q7Ci0KLSAgICBJbnRSZWN0IGNvbnZl
cnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRl
ck9iamVjdCogcGFydFJlbmRlcmVyLCBJbnRSZWN0IHBhcnRSZWN0LCBjb25zdCBJbnRSZWN0JiBs
b2NhbE9mZnNldCkgY29uc3Q7Ci0KLSAgICBQYWdlKiBtX3BhZ2U7Ci0KLSNpZmRlZiBRX1dTX01B
QwotICAgIGludCBtX2J1dHRvbkZvbnRQaXhlbFNpemU7Ci0jZW5kaWYKLSAgICBRU3RyaW5nIG1f
YnV0dG9uRm9udEZhbWlseTsKLQotICAgIFFTdHlsZSogbV9mYWxsYmFja1N0eWxlOwotICAgIG11
dGFibGUgUUxpbmVFZGl0KiBtX2xpbmVFZGl0OwotfTsKLQotY2xhc3MgU3R5bGVQYWludGVyIHsK
LXB1YmxpYzoKLSAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVRdCosIGNvbnN0
IFBhaW50SW5mbyYpOwotICAgIGV4cGxpY2l0IFN0eWxlUGFpbnRlcihTY3JvbGxiYXJUaGVtZVF0
KiwgR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgflN0eWxlUGFpbnRlcigpOwotCi0gICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gcGFpbnRlciAmJiBzdHlsZTsgfQotCi0gICAgUVBhaW50
ZXIqIHBhaW50ZXI7Ci0gICAgUVdpZGdldCogd2lkZ2V0OwotICAgIFFTdHlsZSogc3R5bGU7Ci0K
LSAgICB2b2lkIGRyYXdQcmltaXRpdmUoUVN0eWxlOjpQcmltaXRpdmVFbGVtZW50IHBlLCBjb25z
dCBRU3R5bGVPcHRpb24mIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3UHJpbWl0aXZlKHBlLCAmb3B0
LCBwYWludGVyLCB3aWRnZXQpOyB9Ci0gICAgdm9pZCBkcmF3Q29udHJvbChRU3R5bGU6OkNvbnRy
b2xFbGVtZW50IGNlLCBjb25zdCBRU3R5bGVPcHRpb24mIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3
Q29udHJvbChjZSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQotICAgIHZvaWQgZHJhd0NvbXBs
ZXhDb250cm9sKFFTdHlsZTo6Q29tcGxleENvbnRyb2wgY2MsIGNvbnN0IFFTdHlsZU9wdGlvbkNv
bXBsZXgmIG9wdCkKLSAgICB7IHN0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woY2MsICZvcHQsIHBh
aW50ZXIsIHdpZGdldCk7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBRU3R5bGUqKTsKLQotICAgIFFCcnVzaCBvbGRCcnVzaDsKLSAgICBib29s
IG9sZEFudGlhbGlhc2luZzsKLQotICAgIFFfRElTQUJMRV9DT1BZKFN0eWxlUGFpbnRlcikKLX07
Ci0KLX0KLQotI2VuZGlmIC8vIFJlbmRlclRoZW1lUXRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNzVhMzA0
NzExNzY3ODVjNGEyYzk4MzMxOTQ0OTdlZTUzNjNmMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKQEAgLTAsMCAr
MSwxMzcxIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0
LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5k
ZXJUaGVtZVF0TW9iaWxlLmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2lu
Y2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRl
ICJDaHJvbWVDbGllbnRRdC5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVu
dC5oIgorCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2lmIEVOQUJMRShWSURFTykK
KyNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgorI2VuZGlmCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgi
CisjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJxd2Vic2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorI2luY2x1
ZGUgIlJlbmRlclByb2dyZXNzLmgiCisjZW5kaWYKKyNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlNsaWRlclRodW1iRWxlbWVudC5o
IgorI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKKyNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0
cy5oIgorCisjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFDb2xvcj4KKyNpbmNs
dWRlIDxRQ29yZUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFGb250
TWV0cmljcz4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUGl4bWFwQ2FjaGU+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworLy8g
VGhlc2UgdmFsdWVzIGFsbCBtYXRjaCBTYWZhcmkvV2luL0Nocm9taXVtCitzdGF0aWMgY29uc3Qg
ZmxvYXQgZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplID0gMTM7CitzdGF0aWMgY29uc3QgZmxv
YXQgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgPSA5Oworc3RhdGljIGNvbnN0IGZsb2F0IG1pbkNh
bmNlbEJ1dHRvblNpemUgPSA1Oworc3RhdGljIGNvbnN0IGZsb2F0IG1heENhbmNlbEJ1dHRvblNp
emUgPSAyMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblNpemUgPSAxMzsKK3N0YXRpYyBjb25zdCBmbG9hdCBtaW5TZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uU2l6ZSA9IDk7CitzdGF0aWMgY29uc3QgZmxvYXQgbWF4U2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblNpemUgPSAzMDsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0U2Vh
cmNoRmllbGRSZXN1bHRzQnV0dG9uV2lkdGggPSAxODsKKworbmFtZXNwYWNlIHsKKyAgICBmbG9h
dCBidXR0b25QYWRkaW5nTGVmdCA9IDE4OworICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdSaWdodCA9
IDE4OworICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdUb3AgPSAyOworICAgIGZsb2F0IGJ1dHRvblBh
ZGRpbmdCb3R0b20gPSAzOworICAgIGZsb2F0IG1lbnVMaXN0UGFkZGluZyA9IDk7CisgICAgZmxv
YXQgdGV4dEZpZWxkUGFkZGluZyA9IDU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcmF3UmVj
dGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVBlbiYg
cGVuLCBjb25zdCBRUmVjdCYgcmVjdCwgY29uc3QgUUJydXNoJiBicnVzaCkKK3sKKyAgICBRUGVu
IG9sZFBlbiA9IHBhaW50ZXItPnBlbigpOworICAgIFFCcnVzaCBvbGRCcnVzaCA9IHBhaW50ZXIt
PmJydXNoKCk7CisgICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFz
aW5nLCB0cnVlKTsKKyAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKKyAgICBwYWludGVyLT5zZXRC
cnVzaChicnVzaCk7CisKKyAgICBpbnQgbGluZSA9IDE7CisgICAgcGFpbnRlci0+ZHJhd1JvdW5k
ZWRSZWN0KHJlY3QuYWRqdXN0ZWQobGluZSwgbGluZSwgLWxpbmUsIC1saW5lKSwKKyAgICAgICAg
ICAgIC8qIHhSYWRpdXMgKi8gNS4wLCAvKiB5UmFkaW91cyAqLyA1LjApOworICAgIHBhaW50ZXIt
PnNldFBlbihvbGRQZW4pOworICAgIHBhaW50ZXItPnNldEJydXNoKG9sZEJydXNoKTsKK30KKwor
dm9pZCBTdHlsZVBhaW50ZXI6OmRyYXdDaGVja2VyKFFQYWludGVyKiBwYWludGVyLCBpbnQgc2l6
ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAoreworICAgIGludCBib3JkZXIgPSBxTWluKHFNYXgoMSwg
aW50KDAuMiAqIHNpemUpKSwgNik7CisgICAgaW50IGNoZWNrZXJTaXplID0gcU1heChzaXplIC0g
MiAqIGJvcmRlciwgMyk7CisgICAgaW50IHdpZHRoID0gY2hlY2tlclNpemUgLyAzOworICAgIGlu
dCBtaWRkbGUgPSBxTWF4KDMgKiBjaGVja2VyU2l6ZSAvIDcsIDMpOworICAgIGludCB4ID0gKChz
aXplIC0gY2hlY2tlclNpemUpID4+IDEpOworICAgIGludCB5ID0gKChzaXplIC0gY2hlY2tlclNp
emUpID4+IDEpICsgKGNoZWNrZXJTaXplIC0gd2lkdGggLSBtaWRkbGUpOworICAgIFFWZWN0b3I8
UUxpbmVGPiBsaW5lcyhjaGVja2VyU2l6ZSArIDEpOworICAgIHBhaW50ZXItPnNldFBlbihjb2xv
cik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaWRkbGU7ICsraSkgeworICAgICAgICBsaW5l
c1tpXSA9IFFMaW5lRih4LCB5LCB4LCB5ICsgd2lkdGgpOworICAgICAgICArK3g7CisgICAgICAg
ICsreTsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IG1pZGRsZTsgaSA8PSBjaGVja2VyU2l6ZTsg
KytpKSB7CisgICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgsIHksIHgsIHkgKyB3aWR0aCk7Cisg
ICAgICAgICsreDsKKyAgICAgICAgLS15OworICAgIH0KKyAgICBwYWludGVyLT5kcmF3TGluZXMo
bGluZXMuY29uc3REYXRhKCksIGxpbmVzLnNpemUoKSk7Cit9CisKK1FQaXhtYXAgU3R5bGVQYWlu
dGVyOjpmaW5kQ2hlY2tlcihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBkaXNhYmxlZCkgY29uc3QK
K3sKKyAgICBpbnQgc2l6ZSA9IHFNaW4ocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAg
ICBRUGl4bWFwIHJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0
aW4xU3RyaW5nKCIkcXQtbWFlbW81LW1vYmlsZS10aGVtZS1jaGVja2VyLSIpOworICAgIFFTdHJp
bmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUpICsgUUxhdGluMVN0cmluZygi
LSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFTdHJp
bmcoImVuYWJsZWQiKSk7CisgICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQp
KSB7CisgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSwgc2l6ZSk7CisgICAgICAgIHJlc3Vs
dC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3Vs
dCk7CisgICAgICAgIGRyYXdDaGVja2VyKCZwYWludGVyLCBzaXplLCBkaXNhYmxlZCA/IFF0Ojps
aWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOworICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChr
ZXksIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU3R5bGVQ
YWludGVyOjpkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBi
b29sIGNoZWNrZWQsIFFDb2xvciBjb2xvcikgY29uc3QKK3sKKyAgICBwYWludGVyLT5zZXRSZW5k
ZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworCisgICAgLy8gZ2V0IG1pbm9y
IHNpemUgdG8gZG8gbm90IHBhaW50IGEgd2lkZSBlbGlwc2UKKyAgICBxcmVhbCBzcXVhcmVTaXpl
ID0gcU1pbihzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOworICAgIC8vIGRlZmxhdGUgb25l
IHBpeGVsCisgICAgUVJlY3QgcmVjdCA9IFFSZWN0KFFQb2ludCgxLCAxKSwgUVNpemUoc3F1YXJl
U2l6ZSAtIDIsIHNxdWFyZVNpemUgLSAyKSk7CisgICAgY29uc3QgUVBvaW50IGNlbnRlckdyYWRp
ZW50KHJlY3QuYm90dG9tUmlnaHQoKSAqIDAuNyk7CisKKyAgICBRUmFkaWFsR3JhZGllbnQgcmFk
aWFsR3JhZGllbnQoY2VudGVyR3JhZGllbnQsIGNlbnRlckdyYWRpZW50LngoKSAtIDEpOworICAg
IHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6d2hpdGUpOworICAgIHJhZGlhbEdy
YWRpZW50LnNldENvbG9yQXQoMC42LCBRdDo6d2hpdGUpOworICAgIHJhZGlhbEdyYWRpZW50LnNl
dENvbG9yQXQoMS4wLCBjb2xvcik7CisKKyAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOworICAg
IHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKKyAgICBwYWludGVyLT5kcmF3RWxsaXBzZShyZWN0
KTsKKyAgICBwYWludGVyLT5zZXRCcnVzaChyYWRpYWxHcmFkaWVudCk7CisgICAgcGFpbnRlci0+
ZHJhd0VsbGlwc2UocmVjdCk7CisKKyAgICBpbnQgYm9yZGVyID0gMC4xICogKHJlY3Qud2lkdGgo
KSArIHJlY3QuaGVpZ2h0KCkpOworICAgIGJvcmRlciA9IHFNaW4ocU1heCgyLCBib3JkZXIpLCAx
MCk7CisgICAgcmVjdC5hZGp1c3QoYm9yZGVyLCBib3JkZXIsIC1ib3JkZXIsIC1ib3JkZXIpOwor
ICAgIGlmIChjaGVja2VkKSB7CisgICAgICAgIHBhaW50ZXItPnNldFBlbihRdDo6Tm9QZW4pOwor
ICAgICAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7CisgICAgICAgIHBhaW50ZXItPmRyYXdF
bGxpcHNlKHJlY3QpOworICAgIH0KK30KKworUVBpeG1hcCBTdHlsZVBhaW50ZXI6OmZpbmRSYWRp
byhjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBib29sIGRpc2FibGVkKSBjb25zdAor
eworICAgIFFQaXhtYXAgcmVzdWx0OworICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9
IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtbW9iaWxlLXRoZW1lLXJhZGlvLSIpOworICAgIFFT
dHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUud2lkdGgoKSkgKyBRTGF0
aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWlnaHQoKSkgKyBRTGF0aW4x
U3RyaW5nKCItIikKKyAgICAgICAgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxl
ZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKSArIChjaGVja2VkID8gUUxhdGluMVN0cmlu
ZygiLWNoZWNrZWQiKSA6IFFMYXRpbjFTdHJpbmcoIiIpKTsKKyAgICBpZiAoIVFQaXhtYXBDYWNo
ZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplKTsK
KyAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgUVBhaW50ZXIg
cGFpbnRlcigmcmVzdWx0KTsKKyAgICAgICAgZHJhd1JhZGlvKCZwYWludGVyLCBzaXplLCBjaGVj
a2VkLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOworICAgICAgICBR
UGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjpkcmF3TXVsdGlwbGVDb21ib0J1dHRvbihRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIFFDb2xvciBjb2xvcikgY29uc3QKK3sK
KyAgICBpbnQgcmVjdFdpZHRoID0gc2l6ZS53aWR0aCgpIC0gMTsKKyAgICBpbnQgd2lkdGggPSBx
TWF4KDIsIHJlY3RXaWR0aCA+PiAzKTsKKyAgICBpbnQgZGlzdGFuY2UgPSAocmVjdFdpZHRoIC0g
MyAqIHdpZHRoKSA+PiAxOworICAgIGludCB0b3AgPSAoc2l6ZS5oZWlnaHQoKSAtIHdpZHRoKSA+
PiAxOworCisgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKKyAgICBwYWludGVyLT5zZXRCcnVz
aChjb2xvcik7CisKKyAgICBwYWludGVyLT5kcmF3UmVjdCgwLCB0b3AsIHdpZHRoLCB3aWR0aCk7
CisgICAgcGFpbnRlci0+ZHJhd1JlY3Qod2lkdGggKyBkaXN0YW5jZSwgdG9wLCB3aWR0aCwgd2lk
dGgpOworICAgIHBhaW50ZXItPmRyYXdSZWN0KDIgKiAod2lkdGggKyBkaXN0YW5jZSksIHRvcCwg
d2lkdGgsIHdpZHRoKTsKK30KKwordm9pZCBTdHlsZVBhaW50ZXI6OmRyYXdTaW1wbGVDb21ib0J1
dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIFFDb2xvciBjb2xvcikg
Y29uc3QKK3sKKyAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgaW50IG1pZGxlID0g
d2lkdGggPj4gMTsKKyAgICBRVmVjdG9yPFFMaW5lPiBsaW5lcyh3aWR0aCArIDEpOworCisgICAg
Zm9yIChpbnQgeCA9IDAsIHkgPSAwOyAgeCA8IG1pZGxlOyB4KyssIHkrKykgeworICAgICAgICBs
aW5lc1t4XSA9IFFMaW5lKHgsIHksIHgsIHkgKyAyKTsKKyAgICAgICAgbGluZXNbeCArIG1pZGxl
XSA9IFFMaW5lKHdpZHRoIC0geCAtIDEsIHksIHdpZHRoIC0geCAtIDEsIHkgKyAyKTsKKyAgICB9
CisgICAgLy8gSnVzdCB0byBlbnN1cmUgdGhlIGxpbmVzJyBpbnRlcnNlY3Rpb24uCisgICAgbGlu
ZXNbd2lkdGhdID0gUUxpbmUobWlkbGUsIG1pZGxlLCBtaWRsZSwgbWlkbGUgKyAyKTsKKworICAg
IHBhaW50ZXItPnNldFBlbihjb2xvcik7CisgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOwor
ICAgIHBhaW50ZXItPmRyYXdMaW5lcyhsaW5lcyk7Cit9CisKK1FTaXplIFN0eWxlUGFpbnRlcjo6
Z2V0QnV0dG9uSW1hZ2VTaXplKGNvbnN0IFFTaXplJiBidXR0b25TaXplKSBjb25zdAoreworICAg
IGNvbnN0IGludCBib3JkZXIgPSBxTWF4KDMsIGJ1dHRvblNpemUud2lkdGgoKSA+PiAzKSA8PCAx
OworCisgICAgaW50IHdpZHRoID0gYnV0dG9uU2l6ZS53aWR0aCgpIC0gYm9yZGVyOworICAgIGlu
dCBoZWlnaHQgPSBidXR0b25TaXplLmhlaWdodCgpIC0gYm9yZGVyOworCisgICAgaWYgKHdpZHRo
IDwgMCB8fCBoZWlnaHQgPCAwKQorICAgICAgICByZXR1cm4gUVNpemUoKTsKKworICAgIGlmICho
ZWlnaHQgPj0gKHdpZHRoID4+IDEpKQorICAgICAgICB3aWR0aCA9IHdpZHRoID4+IDEgPDwgMTsK
KyAgICBlbHNlCisgICAgICAgIHdpZHRoID0gaGVpZ2h0IDw8IDE7CisKKyAgICByZXR1cm4gUVNp
emUod2lkdGggKyAxLCB3aWR0aCk7Cit9CisKK1FQaXhtYXAgU3R5bGVQYWludGVyOjpmaW5kQ29t
Ym9CdXR0b24oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZGlzYWJsZWQp
IGNvbnN0Cit7CisgICAgUVBpeG1hcCByZXN1bHQ7CisgICAgUVNpemUgaW1hZ2VTaXplID0gZ2V0
QnV0dG9uSW1hZ2VTaXplKHNpemUpOworCisgICAgaWYgKGltYWdlU2l6ZS5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIFFQaXhtYXAoKTsKKyAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXgg
PSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFlbW81LW1vYmlsZS10aGVtZS1jb21iby0iKTsKKyAgICBR
U3RyaW5nIGtleSA9IHByZWZpeCArIChtdWx0aXBsZSA/IFFMYXRpbjFTdHJpbmcoIm11bHRpcGxl
LSIpIDogUUxhdGluMVN0cmluZygic2ltcGxlLSIpKQorICAgICAgICArIFFTdHJpbmc6Om51bWJl
cihpbWFnZVNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1i
ZXIoaW1hZ2VTaXplLmhlaWdodCgpKQorICAgICAgICArIFFMYXRpbjFTdHJpbmcoIi0iKSArIChk
aXNhYmxlZCA/IFFMYXRpbjFTdHJpbmcoImRpc2FibGVkIikgOiBRTGF0aW4xU3RyaW5nKCJlbmFi
bGVkIikpOworICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAg
ICAgICByZXN1bHQgPSBRUGl4bWFwKGltYWdlU2l6ZSk7CisgICAgICAgIHJlc3VsdC5maWxsKFF0
Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7CisgICAg
ICAgIGlmIChtdWx0aXBsZSkKKyAgICAgICAgICAgIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKCZw
YWludGVyLCBpbWFnZVNpemUsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3Jh
eSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRyYXdTaW1wbGVDb21ib0J1dHRvbigmcGFp
bnRlciwgaW1hZ2VTaXplLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkp
OworICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1N0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKFJlbmRlclRo
ZW1lUXRNb2JpbGUqIHRoZW1lLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKK3sKKyAgICBR
X1VOVVNFRCh0aGVtZSk7CisgICAgaW5pdChwYWludEluZm8uY29udGV4dCA/IHBhaW50SW5mby5j
b250ZXh0IDogMCk7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjppbml0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBwYWludGVyID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSk7CisKKyAgICBpZiAocGFpbnRlcikgeworICAgICAgICAv
LyB0aGUgc3R5bGVzIG9mdGVuIGFzc3VtZSBiZWluZyBjYWxsZWQgd2l0aCBhIHByaXN0aW5lIHBh
aW50ZXIgd2hlcmUgbm8gYnJ1c2ggaXMgc2V0LAorICAgICAgICAvLyBzbyByZXNldCBpdCBtYW51
YWxseQorICAgICAgICBvbGRCcnVzaCA9IHBhaW50ZXItPmJydXNoKCk7CisgICAgICAgIHBhaW50
ZXItPnNldEJydXNoKFF0OjpOb0JydXNoKTsKKworICAgICAgICAvLyBwYWludGluZyB0aGUgd2lk
Z2V0IHdpdGggYW50aS1hbGlhc2luZyB3aWxsIG1ha2UgaXQgYmx1cnJ5CisgICAgICAgIC8vIGRp
c2FibGUgaXQgaGVyZSBhbmQgcmVzdG9yZSBpdCBsYXRlcgorICAgICAgICBvbGRBbnRpYWxpYXNp
bmcgPSBwYWludGVyLT50ZXN0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nKTsKKyAg
ICAgICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBmYWxz
ZSk7CisgICAgfQorfQorCitTdHlsZVBhaW50ZXI6On5TdHlsZVBhaW50ZXIoKQoreworICAgIGlm
IChwYWludGVyKSB7CisgICAgICAgIHBhaW50ZXItPnNldEJydXNoKG9sZEJydXNoKTsKKyAgICAg
ICAgcGFpbnRlci0+c2V0UmVuZGVySGludHMoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgb2xkQW50
aWFsaWFzaW5nKTsKKyAgICB9Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjpkcmF3TGluZUVkaXQo
Y29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQpCit7CisgICAgY29u
c3QgYm9vbCBkaXNhYmxlZCA9ICFlbmFibGVkOworICAgIFFQZW4gcGVuKFF0OjpkYXJrR3JheSwg
MS4wLCBRdDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpvaW4pOworICAgIHBh
aW50ZXItPnNldFBlbihwZW4pOworCisgICAgaWYgKHN1bmtlbikgeworICAgICAgICBkcmF3UmVj
dGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIFFCcnVzaChRdDo6
ZGFya0dyYXkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFFMaW5lYXJHcmFkaWVu
dCBsaW5lYXJHcmFkaWVudDsKKyAgICBpZiAoZGlzYWJsZWQpIHsKKyAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0U3RhcnQocmVjdC50b3BMZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRGaW5hbFN0b3AocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDAuMCwgUXQ6OmxpZ2h0R3JheSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNl
dENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldFN0YXJ0KHJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0RmluYWxTdG9wKFFQb2ludChyZWN0LnRvcExlZnQoKS54KCksCisgICAgICAgICAgICAgICAg
ICAgIHJlY3QudG9wTGVmdCgpLnkoKSArIC8qIG9mZnNldCBsaW1pdCBmb3IgZ3JhZGllbnQgKi8g
MjApKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpkYXJrR3Jh
eSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4zNSwgUXQ6OndoaXRlKTsK
KyAgICB9CisKKyAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBw
ZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsKK30KKwordm9pZCBTdHlsZVBhaW50ZXI6OmRyYXdD
aGVja0JveChjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpCit7
CisgICAgY29uc3QgYm9vbCBkaXNhYmxlZCA9ICFlbmFibGVkOworCisgICAgUUxpbmVhckdyYWRp
ZW50IGxpbmVhckdyYWRpZW50KHJlY3QudG9wTGVmdCgpLCByZWN0LmJvdHRvbUxlZnQoKSk7Cisg
ICAgaWYgKGRpc2FibGVkKSB7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4w
LCBRdDo6bGlnaHRHcmF5KTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjUs
IFF0Ojp3aGl0ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29s
b3JBdCgwLjAsIFF0OjpkYXJrR3JheSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9y
QXQoMC41LCBRdDo6d2hpdGUpOworICAgIH0KKworICAgIHBhaW50ZXItPnNldFBlbihRUGVuKGRp
c2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSkpOworICAgIHBhaW50ZXItPnNl
dEJydXNoKGxpbmVhckdyYWRpZW50KTsKKyAgICBwYWludGVyLT5kcmF3UmVjdChyZWN0KTsKKyAg
ICBjb25zdCBRUmVjdCByID0gcmVjdC5hZGp1c3RlZCgxLCAxLCAtMSwgLTEpOworCisgICAgaWYg
KCFjaGVja2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGl4bWFwIGNoZWNrZXIgPSBmaW5k
Q2hlY2tlcihyLCBkaXNhYmxlZCk7CisgICAgaWYgKGNoZWNrZXIuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGludCB4ID0gKHIud2lkdGgoKSAtIGNoZWNrZXIud2lkdGgoKSkgPj4g
MTsKKyAgICBpbnQgeSA9IChyLmhlaWdodCgpIC0gY2hlY2tlci5oZWlnaHQoKSkgPj4gMTsKKyAg
ICBwYWludGVyLT5kcmF3UGl4bWFwKHIueCgpICsgeCwgci55KCkgKyB5LCBjaGVja2VyKTsKK30K
Kwordm9pZCBTdHlsZVBhaW50ZXI6OmRyYXdSYWRpb0J1dHRvbihjb25zdCBRUmVjdCYgcmVjdCwg
Ym9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpCit7CisgICAgUVBpeG1hcCByYWRpbyA9IGZpbmRS
YWRpbyhyZWN0LnNpemUoKSwgY2hlY2tlZCwgIWVuYWJsZWQpOworICAgIGlmIChyYWRpby5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdC54KCks
IHJlY3QueSgpLCByYWRpbyk7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyOjpkcmF3UHVzaEJ1dHRv
bihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBzdW5rZW4sIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBR
UGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBR
dDo6Um91bmRKb2luKTsKKyAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKKworICAgIGlmIChzdW5r
ZW4pIHsKKyAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwg
cGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtHcmF5KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQ7CisgICAgaWYgKCFlbmFibGVk
KSB7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsK
KyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKHJlY3QudG9wTGVmdCgpKTsKKyAg
ICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKKyAgICAgICAg
bGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAg
ICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QuYm90dG9tTGVmdCgp
LngoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVjdC5ib3R0b21MZWZ0KCkueSgpIC0gLyogb2Zm
c2V0IGxpbWl0IGZvciBncmFkaWVudCAqLyAyMCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xv
ckF0KDAuNCwgUXQ6OndoaXRlKTsKKyAgICB9CisKKyAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9s
QmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsKK30KKwordm9p
ZCBTdHlsZVBhaW50ZXI6OmRyYXdDb21ib0JveChjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBtdWx0
aXBsZSwgYm9vbCBlbmFibGVkKQoreworICAgIFFQZW4gcGVuKFF0OjpkYXJrR3JheSwgMS4wLCBR
dDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpvaW4pOworICAgIFFMaW5lYXJH
cmFkaWVudCBsaW5lYXJHcmFkaWVudDsKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAgICAgICAgbGlu
ZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDEuMCwgUXQ6OndoaXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldEZpbmFsU3RvcChRUG9pbnQocmVjdC5ib3R0b21MZWZ0KCkueCgpLAorICAgICAgICAg
ICAgICAgICAgICByZWN0LmJvdHRvbUxlZnQoKS55KCkgLSAvKiBvZmZzZXQgbGltaXQgZm9yIGdy
YWRpZW50ICovIDIwKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBR
dDo6Z3JheSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC40LCBRdDo6d2hp
dGUpOworICAgIH0KKworICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50
ZXIsIHBlbiwgcmVjdCwgbGluZWFyR3JhZGllbnQpOworCisgICAgLy8gQ29uc3RhbnRzIGV4dHJh
Y3RlZCBmcm9tIFFDb21tb25TdHlsZTo6c3ViQ29udHJvbFJlY3QuCisgICAgY29uc3QgaW50IGFy
cm93Qm94V2lkdGggPSAxNjsKKyAgICBjb25zdCBpbnQgZnJhbWVXaWR0aCA9IDI7CisgICAgY29u
c3QgUVJlY3QgcihyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIGZyYW1lV2lkdGggLSBhcnJvd0Jv
eFdpZHRoLCByZWN0LnkoKSArIGZyYW1lV2lkdGgKKyAgICAgICAgICAgICAgICAgICAsIGFycm93
Qm94V2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSAyICogZnJhbWVXaWR0aCk7CisgICAgUVBpeG1hcCBw
aWMgPSBmaW5kQ29tYm9CdXR0b24oci5zaXplKCksIG11bHRpcGxlLCAhZW5hYmxlZCk7CisKKyAg
ICBpZiAocGljLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgeCA9IChyLndp
ZHRoKCkgLSBwaWMud2lkdGgoKSkgPj4gMTsKKyAgICBpbnQgeSA9IChyLmhlaWdodCgpIC0gcGlj
LmhlaWdodCgpKSA+PiAxOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAoci54KCkgKyB4LCByLnko
KSArIHksIHBpYyk7CisKKyAgICBwYWludGVyLT5zZXRQZW4oZW5hYmxlZCA/IFF0OjpkYXJrR3Jh
eSA6IFF0OjpncmF5KTsKKyAgICBwYWludGVyLT5kcmF3TGluZShyLmxlZnQoKSAtIDIsIHIudG9w
KCkgKyAyLCByLmxlZnQoKSAtIDIsIHIuYm90dG9tKCkgLSAyKTsKK30KKworCitQYXNzUmVmUHRy
PFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjcmVhdGUoUGFnZSogcGFnZSkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lUXRNb2JpbGUocGFnZSkpOworfQor
CitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2Uq
IHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZVF0TW9i
aWxlOjpjcmVhdGUocGFnZSk7CisKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIGZhbGxiYWNrID0g
UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y3JlYXRlKDApLnJlbGVhc2VSZWYoKTsKKyAgICByZXR1cm4g
ZmFsbGJhY2s7Cit9CisKK1JlbmRlclRoZW1lUXRNb2JpbGU6OlJlbmRlclRoZW1lUXRNb2JpbGUo
UGFnZSogcGFnZSkKKyAgICA6IFJlbmRlclRoZW1lKCkKKyAgICAsIG1fcGFnZShwYWdlKQorewor
ICAgIG1fYnV0dG9uRm9udEZhbWlseSA9IFFBcHBsaWNhdGlvbjo6Zm9udCgpLmZhbWlseSgpOwor
fQorCitSZW5kZXJUaGVtZVF0TW9iaWxlOjp+UmVuZGVyVGhlbWVRdE1vYmlsZSgpCit7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGZp
bGwsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChz
dHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNl
IEJ1dHRvblBhcnQ6CisgICAgY2FzZSBNZW51bGlzdFBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVs
ZFBhcnQ6CisgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEFyZWFQYXJ0Ogor
ICAgICAgICAvLyBUZXN0IHRoZSBzdHlsZSB0byBzZWUgaWYgdGhlIFVBIGJvcmRlciBhbmQgYmFj
a2dyb3VuZCBtYXRjaC4KKyAgICAgICAgcmV0dXJuIChzdHlsZS0+Ym9yZGVyKCkgIT0gYm9yZGVy
CisgICAgICAgICAgICAgICAgfHwgKnN0eWxlLT5iYWNrZ3JvdW5kTGF5ZXJzKCkgIT0gZmlsbAor
ICAgICAgICAgICAgICAgIHx8IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kQ29sb3IpICE9IGJhY2tncm91bmRDb2xvcik7CisgICAgY2FzZSBDaGVja2Jv
eFBhcnQ6CisgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZChzdHls
ZSwgYm9yZGVyLCBmaWxsLCBiYWNrZ3JvdW5kQ29sb3IpOworICAgIH0KK30KKworaW50IFJlbmRl
clRoZW1lUXRNb2JpbGU6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9i
aWxlOjpzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzdXBwb3J0c0ZvY3VzUmlu
Zyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChzdHlsZS0+
YXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgY2FzZSBSYWRpb1Bh
cnQ6CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6
CisgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uQmV2ZWxQYXJ0OgorICAgIGNh
c2UgTGlzdGJveFBhcnQ6CisgICAgY2FzZSBMaXN0SXRlbVBhcnQ6CisgICAgY2FzZSBNZW51bGlz
dFBhcnQ6CisgICAgY2FzZSBNZW51bGlzdEJ1dHRvblBhcnQ6CisgICAgY2FzZSBTbGlkZXJIb3Jp
em9udGFsUGFydDoKKyAgICBjYXNlIFNsaWRlclZlcnRpY2FsUGFydDoKKyAgICBjYXNlIFNsaWRl
clRodW1iSG9yaXpvbnRhbFBhcnQ6CisgICAgY2FzZSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydDoK
KyAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKKyAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0c0J1
dHRvblBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6CisgICAgY2Fz
ZSBUZXh0RmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitp
bnQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmpl
Y3QqIG8pIGNvbnN0Cit7CisgICAgaWYgKCFvLT5pc0JveCgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkgPT0gQ2hlY2tib3hQYXJ0IHx8IG8t
PnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBSYWRpb1BhcnQpCisgICAgICAgIHJldHVybiB0b1Jl
bmRlckJveChvKS0+bWFyZ2luVG9wKCkgKyB0b1JlbmRlckJveChvKS0+aGVpZ2h0KCkgLSAyOyAv
LyBTYW1lIGFzIGluIG9sZCBraHRtbAorICAgIHJldHVybiBSZW5kZXJUaGVtZTo6YmFzZWxpbmVQ
b3NpdGlvbihvKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjb250cm9sU3VwcG9y
dHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgaWYgKCFpc0VuYWJs
ZWQobykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIENoZWNrYm94ZXMgb25seSBo
YXZlIHRpbnQgd2hlbiBjaGVja2VkLgorICAgIGlmIChvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCkg
PT0gQ2hlY2tib3hQYXJ0KQorICAgICAgICByZXR1cm4gaXNDaGVja2VkKG8pOworCisgICAgLy8g
Rm9yIG5vdyBhc3N1bWUgb3RoZXIgY29udHJvbHMgaGF2ZSB0aW50IGlmIGVuYWJsZWQuCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c3VwcG9ydHNDb250
cm9sVGludHMoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitDb2xvciBSZW5kZXJU
aGVtZVF0TW9iaWxlOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0Cit7CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAg
c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFsLmJy
dXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7Cit9CisK
K0NvbG9yIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIFFQYWxldHRlIHBhbCA9IFFBcHBsaWNhdGlvbjo6
cGFsZXR0ZSgpOworICAgIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKHBhbCk7Cisg
ICAgcmV0dXJuIHBhbC5icnVzaChRUGFsZXR0ZTo6SW5hY3RpdmUsIFFQYWxldHRlOjpIaWdobGln
aHQpLmNvbG9yKCk7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBsYXRmb3JtQWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBRUGFsZXR0ZSBwYWwg
PSBRQXBwbGljYXRpb246OnBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJ
ZkV4aXN0cyhwYWwpOworICAgIHJldHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwgUVBh
bGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0
Cit7CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0
UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFsLmJydXNo
KFFQYWxldHRlOjpJbmFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodGVkVGV4dCkuY29sb3IoKTsK
K30KKworQ29sb3IgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcigp
IGNvbnN0Cit7CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7Cisg
ICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFs
LmJydXNoKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQpLmNvbG9yKCk7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c3lzdGVtRm9udChpbnQsIEZvbnREZXNjcmlw
dGlvbiYpIGNvbnN0Cit7CisgICAgLy8gbm8tb3AKK30KKworQ29sb3IgUmVuZGVyVGhlbWVRdE1v
YmlsZTo6c3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0Cit7CisgICAgUVBhbGV0dGUg
cGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7
CisgICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6CisgICAgICAgIHJldHVybiBwYWwuYnJ1c2go
UVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OkJ1dHRvblRleHQpLmNvbG9yKCk7CisgICAgY2Fz
ZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgorICAgICAgICByZXR1cm4gcGFsLmJydXNoKFFQYWxldHRl
OjpBY3RpdmUsIFFQYWxldHRlOjpUZXh0KS5jb2xvcigpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7CisgICAgfQorfQor
CitpbnQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0Cit7CisgICAgY29uc3QgUUZvbnRNZXRyaWNzICZmbSA9IFFBcHBsaWNhdGlvbjo6
Zm9udE1ldHJpY3MoKTsKKyAgICByZXR1cm4gZm0ud2lkdGgoUUxhdGluMUNoYXIoJ3gnKSk7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAoreworICAgIFFTaXplIHNpemUoMCwgMCk7Cisg
ICAgY29uc3QgUUZvbnRNZXRyaWNzIGZtKHJlbmRlclN0eWxlLT5mb250KCkuZm9udCgpKTsKKwor
ICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgVGV4dEFy
ZWFQYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFy
dDogeworICAgICAgICBpbnQgcGFkZGluZyA9IGZpbmRGcmFtZUxpbmVXaWR0aCgpOworICAgICAg
ICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Cisg
ICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVk
KSk7CisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBG
aXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFk
ZGluZywgRml4ZWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90
aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghcmVuZGVy
U3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdo
dCgpLmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxl
LT5hcHBlYXJhbmNlKCkpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICAvLyBF
eHRyYWN0ZWQgZnJvbSBRQ29tbW9uU3R5bGUuCisgICAgICAgIGludCBjaGVja0JveFdpZHRoID0g
MTM7CisgICAgICAgIGNoZWNrQm94V2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20o
KTsKKyAgICAgICAgc2l6ZSA9IFFTaXplKGNoZWNrQm94V2lkdGgsIGNoZWNrQm94V2lkdGgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBSYWRpb1BhcnQ6IHsKKyAgICAgICAgLy8g
RXh0cmFjdGVkIGZyb20gUUNvbW1vblN0eWxlLgorICAgICAgICBpbnQgcmFkaW9XaWR0aCA9IDEy
OworICAgICAgICByYWRpb1dpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7Cisg
ICAgICAgIHNpemUgPSBRU2l6ZShyYWRpb1dpZHRoLCByYWRpb1dpZHRoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8v
IEZJWE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgv
bWF4LXdpZHRoIGludG8gYWNjb3VudC4KKyAgICBpZiAocmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJ
bnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRoKCkgPiAwKQorICAgICAgICByZW5kZXJTdHls
ZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBpZiAocmVu
ZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQorICAgICAg
ICByZW5kZXJTdHlsZS0+c2V0TWluSGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkp
OworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OnNldENoZWNrYm94U2l6ZShSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUp
OworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50Q2hlY2tib3goUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0
dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6
OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBh
aW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJl
Y3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOworfQorCit2b2lkIFJl
bmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNl
bGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIERp
dGNoIHRoZSBib3JkZXIuCisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisKKyAgICBGb250RGVz
Y3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKKworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKKworICAgIHN0eWxl
LT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBz
ZXRCdXR0b25TaXplKHN0eWxlKTsKKyAgICBzZXRCdXR0b25QYWRkaW5nKHN0eWxlKTsKK30KKwor
dm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK3sKKyAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Cit9CisKKwor
dm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm47CisgICAgc3R5
bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChidXR0b25QYWRkaW5nTGVmdCwgRml4ZWQpKTsKKyAg
ICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChidXR0b25QYWRkaW5nUmlnaHQsIEZpeGVk
KSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKGJ1dHRvblBhZGRpbmdUb3AsIEZp
eGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKGJ1dHRvblBhZGRpbmdC
b3R0b20sIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkK
KyAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBvLT5z
dHlsZSgpLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBh
cnQgfHwgYXBwZWFyYW5jZSA9PSBCdXR0b25QYXJ0KSB7CisgICAgICAgIHAuZHJhd1B1c2hCdXR0
b24ociwgaXNQcmVzc2VkKG8pKTsKKyAgICB9IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gUmFkaW9Q
YXJ0KQorICAgICAgIHAuZHJhd1JhZGlvQnV0dG9uKHIsIGlzQ2hlY2tlZChvKSk7CisgICAgZWxz
ZSBpZiAoYXBwZWFyYW5jZSA9PSBDaGVja2JveFBhcnQpCisgICAgICAgcC5kcmF3Q2hlY2tCb3go
ciwgaXNDaGVja2VkKG8pKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJU
aGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICAvLyBSZXNldHRpbmcgdGhl
IHN0eWxlIGxpa2UgdGhpcyBsZWFkcyB0byBkaWZmZXJlbmNlcyBsaWtlOgorICAgIC8vIC0gUmVu
ZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2OHgyNSBbYmdjb2xvcj0jRkZG
RkZGXSBib3JkZXI6ICgycHggaW5zZXQgIzAwMDAwMCldCisgICAgLy8gKyBSZW5kZXJUZXh0Q29u
dHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUgMTY2eDI2CisgICAgLy8gaW4gbGF5b3V0IHRlc3Rz
IHdoZW4gYSBDU1Mgc3R5bGUgaXMgYXBwbGllZCB0aGF0IGRvZXNuJ3QgYWZmZWN0IGJhY2tncm91
bmQgY29sb3IsIGJvcmRlciBvcgorICAgIC8vIHBhZGRpbmcuIEp1c3Qgd29ydGgga2VlcGluZyBp
biBtaW5kIQorICAgIHN0eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50
KTsKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7
CisgICAgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOworICAgIHN0eWxlLT5zZXRQYWRk
aW5nTGVmdChMZW5ndGgodGV4dEZpZWxkUGFkZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0
UGFkZGluZ1JpZ2h0KExlbmd0aCh0ZXh0RmllbGRQYWRkaW5nLCBGaXhlZCkpOworfQorCitib29s
IFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlciBw
KHRoaXMsIGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsK
KyAgICBpZiAoYXBwZWFyYW5jZSAhPSBUZXh0RmllbGRQYXJ0CisgICAgICAgICYmIGFwcGVhcmFu
Y2UgIT0gU2VhcmNoRmllbGRQYXJ0CisgICAgICAgICYmIGFwcGVhcmFuY2UgIT0gVGV4dEFyZWFQ
YXJ0CisgICAgICAgICYmIGFwcGVhcmFuY2UgIT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgLy8gTm93IHBhaW50IHRoZSB0ZXh0IGZpZWxkLgorICAgIHAuZHJhd0xp
bmVFZGl0KHIsIC8qc3Vua2VuID0gKi9pc1ByZXNzZWQobykpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1l
bnQpIGNvbnN0Cit7CisgICAgYWRqdXN0VGV4dEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBl
bGVtZW50KTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRBcmVhKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBpLCByKTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIHN0eWxlLT5yZXNldEJvcmRlcigp
OworCisgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgorICAgIHN0eWxlLT5zZXRIZWln
aHQoTGVuZ3RoKEF1dG8pKTsKKworICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUK
KyAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworCisgICAgY29tcHV0ZVNpemVCYXNlZE9u
U3R5bGUoc3R5bGUpOworCisgICAgLy8gQWRkIGluIHRoZSBwYWRkaW5nIHRoYXQgd2UnZCBsaWtl
IHRvIHVzZS4KKyAgICBzZXRQb3B1cFBhZGRpbmcoc3R5bGUpOworICAgIHN0eWxlLT5zZXRQYWRk
aW5nTGVmdChMZW5ndGgobWVudUxpc3RQYWRkaW5nLCBGaXhlZCkpOworfQorCit2b2lkIFJlbmRl
clRoZW1lUXRNb2JpbGU6OnNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Cit7CisgICAgY29uc3QgaW50IHBhZGRpbmdMZWZ0ID0gNDsKKyAgICBjb25zdCBpbnQgcGFkZGlu
Z1JpZ2h0ID0gc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgpIHx8IHN0eWxlLT53aWR0aCgpLmlzUGVy
Y2VudCgpID8gNSA6IDg7CisKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRp
bmdMZWZ0LCBGaXhlZCkpOworCisgICAgLy8gZXh0cmFjdGVkIGZyb20gUUNvbW1vblN0eWxlCisg
ICAgY29uc3QgaW50IHcgPSAxNjsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChw
YWRkaW5nUmlnaHQgKyB3LCBGaXhlZCkpOworCisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVu
Z3RoKDIsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDIsIEZp
eGVkKSk7Cit9CisKKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lbnVMaXN0KFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSByLmxvY2F0aW9u
KCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7CisgICAgY29uc3QgUVJlY3Qg
cmVjdChRUG9pbnQoMCwgMCksIHIuc2l6ZSgpKTsKKworICAgIHAuZHJhd0NvbWJvQm94KHJlY3Qs
IGNoZWNrTXVsdGlwbGUobykpOworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0
TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3sKKworICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0by4K
KyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisKKyAgICAvLyBXaGl0ZS1zcGFj
ZSBpcyBsb2NrZWQgdG8gcHJlCisgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKworICAg
IGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKKworICAgIC8vIEFkZCBpbiB0aGUgcGFk
ZGluZyB0aGF0IHdlJ2QgbGlrZSB0byB1c2UuCisgICAgc2V0UG9wdXBQYWRkaW5nKHN0eWxlKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lbnVMaXN0QnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyIHAo
dGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBwLmRyYXdDb21ib0JveChyLCBjaGVja011bHRpcGxlKG8pKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKworI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCitkb3VibGUgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMC47Cit9CisKK2RvdWJsZSBSZW5kZXJUaGVtZVF0TW9iaWxlOjphbmltYXRpb25E
dXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwLjsKK30KKwordm9pZCBS
ZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRQcm9ncmVzc0Jh
cihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgor
Citib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTbGlkZXJU
cmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQq
KSBjb25zdAoreworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Cit9CisKK2Jvb2wg
UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgSW50UmVjdCYgcikKK3sKKyAgICAvLyBXZSd2ZSBhbHJlYWR5IHBhaW50ZWQgaXQgaW4g
cGFpbnRTbGlkZXJUcmFjaygpLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNsaWRlclRo
dW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVy
VGh1bWJTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOworICAgIHN0eWxlLT5zZXRCb3hT
aGFkb3cobnVsbHB0cik7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTZWFy
Y2hGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1
cm4gcGFpbnRUZXh0RmllbGQobywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2Jp
bGU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJl
bmRlclN0eWxlKiBzdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBFbGVtZW50KiBlKSBjb25zdAoreworICAgIC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlr
ZSB0aGlzIGxlYWRzIHRvIGRpZmZlcmVuY2VzIGxpa2U6CisgICAgLy8gLSBSZW5kZXJUZXh0Q29u
dHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUgMTY4eDI1IFtiZ2NvbG9yPSNGRkZGRkZdIGJvcmRl
cjogKDJweCBpbnNldCAjMDAwMDAwKV0KKyAgICAvLyArIFJlbmRlclRleHRDb250cm9sIHtJTlBV
VH0gYXQgKDIsMikgc2l6ZSAxNjZ4MjYKKyAgICAvLyBpbiBsYXlvdXQgdGVzdHMgd2hlbiBhIENT
UyBzdHlsZSBpcyBhcHBsaWVkIHRoYXQgZG9lc24ndCBhZmZlY3QgYmFja2dyb3VuZCBjb2xvciwg
Ym9yZGVyIG9yCisgICAgLy8gcGFkZGluZy4gSnVzdCB3b3J0aCBrZWVwaW5nIGluIG1pbmQhCisg
ICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIHN0
eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBjb21w
dXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmls
ZTo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBz
ZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAgLy8g
TG9naWMgdGFrZW4gZnJvbSBSZW5kZXJUaGVtZUNocm9taXVtLmNwcC4KKyAgICAvLyBTY2FsZSB0
aGUgYnV0dG9uIHNpemUgYmFzZWQgb24gdGhlIGZvbnQgc2l6ZS4KKyAgICBmbG9hdCBmb250U2Nh
bGUgPSBzdHlsZS0+Zm9udFNpemUoKSAvIGRlZmF1bHRDb250cm9sRm9udFBpeGVsU2l6ZTsKKyAg
ICBpbnQgY2FuY2VsQnV0dG9uU2l6ZSA9IGxyb3VuZGYocU1pbihxTWF4KG1pbkNhbmNlbEJ1dHRv
blNpemUsIGRlZmF1bHRDYW5jZWxCdXR0b25TaXplICogZm9udFNjYWxlKSwgbWF4Q2FuY2VsQnV0
dG9uU2l6ZSkpOworICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgoY2FuY2VsQnV0dG9uU2l6ZSwg
Rml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBG
aXhlZCkpOworfQorCisvLyBGdW5jdGlvbiB0YWtlbiBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW0u
Y3BwCitJbnRSZWN0IFJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbnZlcnRUb1BhaW50aW5nUmVjdChS
ZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRl
cmVyLCBJbnRSZWN0IHBhcnRSZWN0LCBjb25zdCBJbnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3QK
K3sKKyAgICAvLyBDb21wdXRlIGFuIG9mZnNldCBiZXR3ZWVuIHRoZSBwYXJ0IHJlbmRlcmVyIGFu
ZCB0aGUgaW5wdXQgcmVuZGVyZXIuCisgICAgSW50U2l6ZSBvZmZzZXRGcm9tSW5wdXRSZW5kZXJl
ciA9IC0ocGFydFJlbmRlcmVyLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250YWluZXIoaW5wdXRSZW5k
ZXJlcikpOworICAgIC8vIE1vdmUgdGhlIHJlY3QgaW50byBwYXJ0UmVuZGVyZXIncyBjb29yZHMu
CisgICAgcGFydFJlY3QubW92ZShvZmZzZXRGcm9tSW5wdXRSZW5kZXJlcik7CisgICAgLy8gQWNj
b3VudCBmb3IgdGhlIGxvY2FsIGRyYXdpbmcgb2Zmc2V0LgorICAgIHBhcnRSZWN0Lm1vdmUobG9j
YWxPZmZzZXQueCgpLCBsb2NhbE9mZnNldC55KCkpOworCisgICAgcmV0dXJuIHBhcnRSZWN0Owor
fQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7Cisg
ICAgLy8gTG9naWMgY29waWVkIGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bS5jcHAuCisKKyAgICAv
LyBHZXQgdGhlIHJlbmRlcmVyIG9mIDxpbnB1dD4gZWxlbWVudC4KKyAgICBOb2RlKiBpbnB1dCA9
IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgaWYgKCFpbnB1dC0+cmVuZGVy
ZXIoKS0+aXNCb3goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFJlbmRlckJveCogaW5w
dXRSZW5kZXJCb3ggPSB0b1JlbmRlckJveChpbnB1dC0+cmVuZGVyZXIoKSk7CisgICAgSW50UmVj
dCBpbnB1dENvbnRlbnRCb3ggPSBpbnB1dFJlbmRlckJveC0+Y29udGVudEJveFJlY3QoKTsKKwor
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGJ1dHRvbiBzdGF5cyBzcXVhcmUgYW5kIHdpbGwg
Zml0IGluIGl0cyBwYXJlbnQncyBib3guCisgICAgaW50IGNhbmNlbEJ1dHRvblNpemUgPSBxTWlu
KGlucHV0Q29udGVudEJveC53aWR0aCgpLCBxTWluKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSwg
ci5oZWlnaHQoKSkpOworICAgIC8vIENhbGN1bGF0ZSBjYW5jZWwgYnV0dG9uJ3MgY29vcmRpbmF0
ZXMgcmVsYXRpdmUgdG8gdGhlIGlucHV0IGVsZW1lbnQuCisgICAgLy8gQ2VudGVyIHRoZSBidXR0
b24gdmVydGljYWxseS4gUm91bmQgdXAgdGhvdWdoLCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBp
eGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKKyAgICAvLyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRo
ZSBib3R0b20gb2YgdGhlIGZpZWxkLiBUaGlzIHRlbmRzIHRvIGxvb2sgYmV0dGVyIHdpdGggdGhl
IHRleHQuCisgICAgSW50UmVjdCBjYW5jZWxCdXR0b25SZWN0KG8tPm9mZnNldEZyb21BbmNlc3Rv
ckNvbnRhaW5lcihpbnB1dFJlbmRlckJveCkud2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5wdXRDb250ZW50Qm94LnkoKSArIChpbnB1dENvbnRlbnRCb3guaGVpZ2h0KCkg
LSBjYW5jZWxCdXR0b25TaXplICsgMSkgLyAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYW5jZWxCdXR0b25TaXplLCBjYW5jZWxCdXR0b25TaXplKTsKKyAgICBJbnRSZWN0IHBhaW50
aW5nUmVjdCA9IGNvbnZlcnRUb1BhaW50aW5nUmVjdChpbnB1dFJlbmRlckJveCwgbywgY2FuY2Vs
QnV0dG9uUmVjdCwgcik7CisgICAgc3RhdGljIEltYWdlKiBjYW5jZWxJbWFnZSA9IEltYWdlOjps
b2FkUGxhdGZvcm1SZXNvdXJjZSgic2VhcmNoQ2FuY2VsQnV0dG9uIikucmVsZWFzZVJlZigpOwor
ICAgIHN0YXRpYyBJbWFnZSogY2FuY2VsUHJlc3NlZEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9y
bVJlc291cmNlKCJzZWFyY2hDYW5jZWxCdXR0b25QcmVzc2VkIikucmVsZWFzZVJlZigpOworICAg
IHBpLmNvbnRleHQtPmRyYXdJbWFnZShpc1ByZXNzZWQobykgPyBjYW5jZWxQcmVzc2VkSW1hZ2Ug
OiBjYW5jZWxJbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8tPnN0eWxl
KCktPmNvbG9yU3BhY2UoKSwgcGFpbnRpbmdSZWN0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCog
ZSkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOworfQorCiti
b29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0aW9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZERlY29y
YXRpb24obywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rv
ciwgUmVuZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCogZSkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlKTsKK30KKworYm9vbCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uKG8sIHBpLCByKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpj
aGVja011bHRpcGxlKFJlbmRlck9iamVjdCogbykKK3sKKyAgICBIVE1MU2VsZWN0RWxlbWVudCog
c2VsZWN0ID0gbyA/IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVtZW50Kj4oby0+bm9kZSgpKSA6
IDA7CisgICAgcmV0dXJuIHNlbGVjdCA/IHNlbGVjdC0+bXVsdGlwbGUoKSA6IGZhbHNlOworfQor
Citib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBw
ZWFyYW5jZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGFwcGVhcmFuY2UpIHsKKyAgICBjYXNlIFB1
c2hCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBh
cnQ6CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBMaXN0Ym94UGFydDoKKyAgICBj
YXNlIE1lbnVsaXN0UGFydDoKKyAgICBjYXNlIFJhZGlvUGFydDoKKyAgICBjYXNlIENoZWNrYm94
UGFydDoKKyAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0OgorICAgIGNhc2UgU2xpZGVyVmVy
dGljYWxQYXJ0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OiAvLyBObyBmb3Ig
YWxsIG90aGVycy4uLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFJl
bmRlclRoZW1lUXRNb2JpbGU6OnNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxl
dHRlJiBwYWxldHRlKSBjb25zdAoreworICAgIHN0YXRpYyBRUGFsZXR0ZSBsaWdodEdyYXlQYWxl
dHRlKFF0OjpsaWdodEdyYXkpOworICAgIHBhbGV0dGUgPSBsaWdodEdyYXlQYWxldHRlOworICAg
IHJldHVybjsKK30KKworI2lmIEVOQUJMRShWSURFTykKKworU3RyaW5nIFJlbmRlclRoZW1lUXRN
b2JpbGU6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQoreworICAgIFN0cmluZyByZXN1
bHQgPSBTdHJpbmcobWVkaWFDb250cm9sc1F0VXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1l
ZGlhQ29udHJvbHNRdFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKworICAgIGlmIChtX3BhZ2UgJiYg
bV9wYWdlLT5jaHJvbWUoKS0+cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpKQor
ICAgICAgICByZXN1bHQgKz0gU3RyaW5nKG1lZGlhQ29udHJvbHNRdEZ1bGxzY3JlZW5Vc2VyQWdl
bnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1F0RnVsbHNjcmVlblVzZXJBZ2VudFN0
eWxlU2hlZXQpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEhlbHBlciBjbGFzcyB0
byB0cmFuc2Zvcm0gdGhlIHBhaW50ZXIncyB3b3JsZCBtYXRyaXggdG8gdGhlIG9iamVjdCdzIGNv
bnRlbnQgYXJlYSwgc2NhbGVkIHRvIDAsMCwxMDAsMTAwCitjbGFzcyBXb3JsZE1hdHJpeFRyYW5z
Zm9ybWVyIHsKK3B1YmxpYzoKKyAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyKFFQYWludGVyKiBw
YWludGVyLCBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgcikgOiBt
X3BhaW50ZXIocGFpbnRlcikKKyAgICB7CisgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJl
bmRlck9iamVjdC0+c3R5bGUoKTsKKyAgICAgICAgbV9vcmlnaW5hbFRyYW5zZm9ybSA9IG1fcGFp
bnRlci0+dHJhbnNmb3JtKCk7CisgICAgICAgIG1fcGFpbnRlci0+dHJhbnNsYXRlKHIueCgpICsg
c3R5bGUtPnBhZGRpbmdMZWZ0KCkudmFsdWUoKSwgci55KCkgKyBzdHlsZS0+cGFkZGluZ1RvcCgp
LnZhbHVlKCkpOworICAgICAgICBtX3BhaW50ZXItPnNjYWxlKChyLndpZHRoKCkgLSBzdHlsZS0+
cGFkZGluZ0xlZnQoKS52YWx1ZSgpIC0gc3R5bGUtPnBhZGRpbmdSaWdodCgpLnZhbHVlKCkpIC8g
MTAwLjAsCisgICAgICAgICAgICAgKHIuaGVpZ2h0KCkgLSBzdHlsZS0+cGFkZGluZ1RvcCgpLnZh
bHVlKCkgLSBzdHlsZS0+cGFkZGluZ0JvdHRvbSgpLnZhbHVlKCkpIC8gMTAwLjApOworICAgIH0K
KworICAgIH5Xb3JsZE1hdHJpeFRyYW5zZm9ybWVyKCkgeyBtX3BhaW50ZXItPnNldFRyYW5zZm9y
bShtX29yaWdpbmFsVHJhbnNmb3JtKTsgfQorCitwcml2YXRlOgorICAgIFFQYWludGVyKiBtX3Bh
aW50ZXI7CisgICAgUVRyYW5zZm9ybSBtX29yaWdpbmFsVHJhbnNmb3JtOworfTsKKworZG91Ymxl
IFJlbmRlclRoZW1lUXRNb2JpbGU6Om1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSBjb25z
dAoreworICAgIHJldHVybiAwLjQ7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFp
bnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IEludFJlY3QmIHIpIGNv
bnN0Cit7CisgICAgcGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7CisgICAgc3RhdGljIFFDb2xv
ciB0cmFuc3BhcmVudEJsYWNrKDAsIDAsIDAsIG1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHko
KSAqIDI1NSk7CisgICAgcGFpbnRlci0+c2V0QnJ1c2godHJhbnNwYXJlbnRCbGFjayk7CisgICAg
cGFpbnRlci0+ZHJhd1JvdW5kZWRSZWN0KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdo
dCgpLCA1LjAsIDUuMCk7Cit9CisKK3N0YXRpYyBib29sIG1lZGlhRWxlbWVudENhblBsYXkoUmVu
ZGVyT2JqZWN0KiBvKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IHRv
UGFyZW50TWVkaWFFbGVtZW50KG8pOworICAgIGlmICghbWVkaWFFbGVtZW50KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbWVkaWFFbGVtZW50LT5yZWFkeVN0YXRlKCkgPiBI
VE1MTWVkaWFFbGVtZW50OjpIQVZFX01FVEFEQVRBCisgICAgICAgICAgIHx8IChtZWRpYUVsZW1l
bnQtPnJlYWR5U3RhdGUoKSA9PSBIVE1MTWVkaWFFbGVtZW50OjpIQVZFX05PVEhJTkcKKyAgICAg
ICAgICAgICAgICYmIG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBNZWRpYVBsYXlCdXR0b25Q
YXJ0ICYmIG1lZGlhRWxlbWVudC0+cHJlbG9hZCgpID09ICJub25lIik7Cit9CisKK1FDb2xvciBS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoUmVuZGVy
T2JqZWN0KiBvKSBjb25zdAoreworICAgIFFDb2xvciBmZ0NvbG9yID0gcGxhdGZvcm1BY3RpdmVT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKKyAgICBpZiAoIW8pCisgICAgICAgIHJldHVybiBm
Z0NvbG9yOworCisgICAgaWYgKG8tPm5vZGUoKS0+YWN0aXZlKCkpCisgICAgICAgIGZnQ29sb3Ig
PSBmZ0NvbG9yLmxpZ2h0ZXIoKTsKKworICAgIGlmICghbWVkaWFFbGVtZW50Q2FuUGxheShvKSkg
eworICAgICAgICBRUGFsZXR0ZSBwYWwgPSBRQXBwbGljYXRpb246OnBhbGV0dGUoKTsKKyAgICAg
ICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICAgICAgZmdDb2xv
ciA9IHBhbC5icnVzaChRUGFsZXR0ZTo6RGlzYWJsZWQsIFFQYWxldHRlOjpUZXh0KS5jb2xvcigp
OworICAgIH0KKworICAgIHJldHVybiBmZ0NvbG9yOworfQorCitib29sIFJlbmRlclRoZW1lUXRN
b2JpbGU6OnBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7CisgICAgaWYg
KCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0eWxlUGFpbnRl
ciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlh
bGlhc2luZywgdHJ1ZSk7CisKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIp
OworCisgICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcihwLnBhaW50ZXIsIG8s
IHIpOworICAgIGNvbnN0IFFQb2ludEYgYXJyb3dQb2x5Z29uWzldID0geyBRUG9pbnRGKDIwLCAw
KSwgUVBvaW50RigxMDAsIDApLCBRUG9pbnRGKDEwMCwgODApLAorICAgICAgICAgICAgUVBvaW50
Rig4MCwgODApLCBRUG9pbnRGKDgwLCAzMCksIFFQb2ludEYoMTAsIDEwMCksIFFQb2ludEYoMCwg
OTApLCBRUG9pbnRGKDcwLCAyMCksIFFQb2ludEYoMjAsIDIwKX07CisKKyAgICBwLnBhaW50ZXIt
PnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7CisgICAgcC5wYWlu
dGVyLT5kcmF3UG9seWdvbihhcnJvd1BvbHlnb24sIDkpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFNdXRlQnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVs
ZW1lbnQobyk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhp
bnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICBwYWludE1lZGlhQmFja2dy
b3VuZChwLnBhaW50ZXIsIHIpOworCisgICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zv
cm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAgIGNvbnN0IFFQb2ludEYgc3BlYWtlclBvbHlnb25b
Nl0gPSB7IFFQb2ludEYoMjAsIDMwKSwgUVBvaW50Rig1MCwgMzApLCBRUG9pbnRGKDgwLCAwKSwK
KyAgICAgICAgICAgIFFQb2ludEYoODAsIDEwMCksIFFQb2ludEYoNTAsIDcwKSwgUVBvaW50Rigy
MCwgNzApfTsKKworICAgIHAucGFpbnRlci0+c2V0QnJ1c2gobWVkaWFFbGVtZW50LT5tdXRlZCgp
ID8gUXQ6OmRhcmtSZWQgOiBnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAg
IHAucGFpbnRlci0+ZHJhd1BvbHlnb24oc3BlYWtlclBvbHlnb24sIDYpOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFQbGF5QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHIpCit7CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJl
bnRNZWRpYUVsZW1lbnQobyk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYg
KCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNl
dFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICBwYWludE1l
ZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworCisgICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1l
ciB0cmFuc2Zvcm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAgIHAucGFpbnRlci0+c2V0QnJ1c2go
Z2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBpZiAobWVkaWFFbGVtZW50
LT5jYW5QbGF5KCkpIHsKKyAgICAgICAgY29uc3QgUVBvaW50RiBwbGF5UG9seWdvblszXSA9IHsg
UVBvaW50RigwLCAwKSwgUVBvaW50RigxMDAsIDUwKSwgUVBvaW50RigwLCAxMDApfTsKKyAgICAg
ICAgcC5wYWludGVyLT5kcmF3UG9seWdvbihwbGF5UG9seWdvbiwgMyk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgcC5wYWludGVyLT5kcmF3UmVjdCgwLCAwLCAzMCwgMTAwKTsKKyAgICAgICAgcC5w
YWludGVyLT5kcmF3UmVjdCg3MCwgMCwgMzAsIDEwMCk7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFTZWVrQmFja0J1
dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikKK3sK
KyAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhaW50IHRoaXMgYXQgdGhlIG1vbWVudC4KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYVNl
ZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKQoreworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgdGhpcyBhdCB0aGUgbW9t
ZW50LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpw
YWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBw
YWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRy
dWUpOworICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK1N0cmluZyBSZW5kZXJUaGVtZVF0TW9iaWxlOjpmb3JtYXRNZWRpYUNv
bnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25z
dAoreworICAgIHJldHVybiBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShjdXJyZW50VGltZSkgKyAi
IC8gIiArIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1lKGR1cmF0aW9uKTsKK30KKworU3RyaW5nIFJl
bmRlclRoZW1lUXRNb2JpbGU6OmZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKGZsb2F0
IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRyYWNrKFJlbmRlck9iamVjdCAqbywgY29uc3QgUGFpbnRJbmZvICZwYWludEluZm8sIGNvbnN0
IEludFJlY3QgJnIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAg
ICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRl
ci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKworICAgIHBh
aW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBpZiAoIW8tPmlzU2xpZGVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEludFJlY3QgYiA9IHRvUmVuZGVyQm94
KG8pLT5jb250ZW50Qm94UmVjdCgpOworCisgICAgLy8gUG9zaXRpb24gdGhlIG91dGVyIHJlY3Rh
bmdsZQorICAgIGludCB0b3AgPSByLnkoKSArIGIueSgpOworICAgIGludCBsZWZ0ID0gci54KCkg
KyBiLngoKTsKKyAgICBpbnQgd2lkdGggPSBiLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IGIu
aGVpZ2h0KCk7CisKKyAgICAvLyBHZXQgdGhlIHNjYWxlIGNvbG9yIGZyb20gdGhlIHBhZ2UgY2xp
ZW50CisgICAgUVBhbGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0
UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICBjb25zdCBRQ29sb3IgaGln
aGxpZ2h0VGV4dCA9IHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxp
Z2h0ZWRUZXh0KS5jb2xvcigpOworICAgIGNvbnN0IFFDb2xvciBzY2FsZUNvbG9yKGhpZ2hsaWdo
dFRleHQucmVkKCksIGhpZ2hsaWdodFRleHQuZ3JlZW4oKSwgaGlnaGxpZ2h0VGV4dC5ibHVlKCks
IG1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSAqIDI1NSk7CisKKyAgICAvLyBEcmF3IHRo
ZSBvdXRlciByZWN0YW5nbGUKKyAgICBwLnBhaW50ZXItPnNldEJydXNoKHNjYWxlQ29sb3IpOwor
ICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKKworICAg
IGlmICghby0+bm9kZSgpIHx8ICFvLT5ub2RlKCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBIVE1MSW5wdXRFbGVtZW50KiBzbGlkZXIgPSBzdGF0
aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oby0+bm9kZSgpKTsKKworICAgIC8vIFBvc2l0aW9u
IHRoZSBpbm5lciByZWN0YW5nbGUKKyAgICBoZWlnaHQgPSBoZWlnaHQgKiBzbGlkZXItPnZhbHVl
QXNOdW1iZXIoKTsKKyAgICB0b3AgKz0gYi5oZWlnaHQoKSAtIGhlaWdodDsKKworICAgIC8vIERy
YXcgdGhlIGlubmVyIHJlY3RhbmdsZQorICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7
CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3Io
bykpOworICAgIHAucGFpbnRlci0+ZHJhd1JlY3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWlu
dE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0ICpvLCBjb25zdCBQYWludEluZm8g
JnBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmcikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlz
LCBwYWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgLy8gTm90aGluZyB0byBkcmF3IGhlcmUsIHRoaXMgaXMgYWxsIGRvbmUgaW4gdGhl
IHRyYWNrCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6
OnBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50KG8pOworICAgIGlmICghbWVkaWFFbGVt
ZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBw
YWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRy
dWUpOworCisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKworICAgIGlm
IChNZWRpYVBsYXllciogcGxheWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkgeworICAgICAg
ICAvLyBHZXQgdGhlIGJ1ZmZlcmVkIHBhcnRzIG9mIHRoZSBtZWRpYQorICAgICAgICBSZWZQdHI8
VGltZVJhbmdlcz4gYnVmZmVyZWQgPSBwbGF5ZXItPmJ1ZmZlcmVkKCk7CisgICAgICAgIGlmIChi
dWZmZXJlZC0+bGVuZ3RoKCkgPiAwICYmIHBsYXllci0+ZHVyYXRpb24oKSA8IHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjppbmZpbml0eSgpKSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIHRy
YW5zZm9ybSBhbmQgYnJ1c2gKKyAgICAgICAgICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgdHJh
bnNmb3JtZXIocC5wYWludGVyLCBvLCByKTsKKyAgICAgICAgICAgIHAucGFpbnRlci0+c2V0QnJ1
c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKCkpOworCisgICAgICAgICAgICAvLyBQ
YWludCBlYWNoIGJ1ZmZlcmVkIHNlY3Rpb24KKyAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZXg7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZlcmVkLT5sZW5ndGgoKTsgaSsr
KSB7CisgICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRYID0gKGJ1ZmZlcmVkLT5zdGFydChpLCBl
eCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkpICogMTAwOworICAgICAgICAgICAgICAgIGZsb2F0IHdp
ZHRoID0gKChidWZmZXJlZC0+ZW5kKGksIGV4KSAvIHBsYXllci0+ZHVyYXRpb24oKSkgKiAxMDAp
IC0gc3RhcnRYOworICAgICAgICAgICAgICAgIHAucGFpbnRlci0+ZHJhd1JlY3Qoc3RhcnRYLCAz
Nywgd2lkdGgsIDI2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhU2xp
ZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKK3sKKyAgICBBU1NFUlQoby0+bm9kZSgpKTsKKyAgICBOb2RlKiBob3N0
Tm9kZSA9IG8tPm5vZGUoKS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7CisgICAgQVNTRVJUKGhvc3RO
b2RlKTsKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlh
RWxlbWVudChob3N0Tm9kZSk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYg
KCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNl
dFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICBwLnBhaW50
ZXItPnNldFBlbihRdDo6Tm9QZW4pOworICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFD
b250cm9sRm9yZWdyb3VuZENvbG9yKGhvc3ROb2RlLT5yZW5kZXJlcigpKSk7CisgICAgcC5wYWlu
dGVyLT5kcmF3UmVjdChyLngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjph
ZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIC8v
IHRpbWVsaW5lVGh1bWJIZWlnaHQgc2hvdWxkIG1hdGNoIHRoZSBoZWlnaHQgcHJvcGVydHkgb2Yg
LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSBpbiBtZWRpYUNvbnRyb2xzUXQuY3NzLgor
ICAgIGNvbnN0IGludCB0aW1lbGluZVRodW1iSGVpZ2h0ID0gMTI7CisgICAgY29uc3QgaW50IHRp
bWVsaW5lVGh1bWJXaWR0aCA9IHRpbWVsaW5lVGh1bWJIZWlnaHQgLyAzOworICAgIC8vIHZvbHVt
ZVRodW1iV2lkdGggc2hvdWxkIG1hdGNoIHRoZSB3aWR0aCBwcm9wZXJ0eSBvZiAtd2Via2l0LW1l
ZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIgaW4gbWVkaWFDb250cm9sc1F0LmNzcy4KKyAgICBj
b25zdCBpbnQgdm9sdW1lVGh1bWJXaWR0aCA9IDEyOworICAgIGNvbnN0IGludCB2b2x1bWVUaHVt
YkhlaWdodCA9IHZvbHVtZVRodW1iV2lkdGggLyAzOworICAgIENvbnRyb2xQYXJ0IHBhcnQgPSBz
dHlsZS0+YXBwZWFyYW5jZSgpOworCisgICAgaWYgKHBhcnQgPT0gTWVkaWFTbGlkZXJUaHVtYlBh
cnQpIHsKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh0aW1lbGluZVRodW1iV2lkdGgs
IEZpeGVkKSk7CisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRpbWVsaW5lVGh1bWJI
ZWlnaHQsIEZpeGVkKSk7CisgICAgfSBlbHNlIGlmIChwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVy
VGh1bWJQYXJ0KSB7CisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHZvbHVtZVRodW1i
SGVpZ2h0LCBGaXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHZvbHVtZVRo
dW1iV2lkdGgsIEZpeGVkKSk7CisgICAgfSBlbHNlIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9y
aXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgeworCisgICAg
ICAgIC8vIGV4dHJhY3RlZCBmcm9tIFFXaW5kb3dzU3R5bGUKKyAgICAgICAgY29uc3QgaW50IHdp
ZHRoID0gMTE7CisgICAgICAgIGNvbnN0IGludCBoZWlnaHQgPSAwOworICAgICAgICBzdHlsZS0+
c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0
KExlbmd0aChoZWlnaHQsIEZpeGVkKSk7CisgICAgfQorfQorCitkb3VibGUgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gUUFwcGxp
Y2F0aW9uOjpjdXJzb3JGbGFzaFRpbWUoKSAvIDEwMDAuMCAvIDIuMDsKK30KKworU3RyaW5nIFJl
bmRlclRoZW1lUXRNb2JpbGU6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBmaWxlbmFtZXMsIGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCkKK3sKKyAgICBpZiAo
d2lkdGggPD0gMCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgU3RyaW5nIHN0cmlu
ZzsKKyAgICBpZiAoZmlsZW5hbWVzLmlzRW1wdHkoKSkKKyAgICAgICAgc3RyaW5nID0gZmlsZUJ1
dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKKyAgICBlbHNlIGlmIChmaWxlbmFtZXMuc2l6ZSgp
ID09IDEpIHsKKyAgICAgICAgU3RyaW5nIGZuYW1lID0gZmlsZW5hbWVzWzBdOworICAgICAgICBR
Rm9udE1ldHJpY3MgZm0oZm9udC5mb250KCkpOworICAgICAgICBzdHJpbmcgPSBmbS5lbGlkZWRU
ZXh0KGZuYW1lLCBRdDo6RWxpZGVMZWZ0LCB3aWR0aCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aW50IG4gPSBmaWxlbmFtZXMuc2l6ZSgpOworICAgICAgICBzdHJpbmcgPSBRQ29yZUFwcGxpY2F0
aW9uOjp0cmFuc2xhdGUoIlFXZWJQYWdlIiwgIiVuIGZpbGUocykiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm51bWJlciBvZiBjaG9zZW4gZmlsZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRQ29yZUFwcGxpY2F0
aW9uOjpDb2RlY0ZvclRyLCBuKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RyaW5nOworfQorCit9
CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ4ZGRiMzM1OTdlNDNiY2MxNjhh
NGM2YmIxYmI4YWFjZGIyNDE4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaApAQCAtMCwwICsxLDIyMCBAQAorCisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3Jt
IGNvbnRyb2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFJlbmRlclRo
ZW1lUXRNb2JpbGVfaAorI2RlZmluZSBSZW5kZXJUaGVtZVF0TW9iaWxlX2gKKworI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKworI2luY2x1ZGUg
PFFCcnVzaD4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRQ29sb3I7CitjbGFzcyBRUGFp
bnRlcjsKK2NsYXNzIFFQaXhtYXA7CitjbGFzcyBRU2l6ZTsKK1FUX0VORF9OQU1FU1BBQ0UKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKK2NsYXNzIFJl
bmRlclByb2dyZXNzOworI2VuZGlmCitjbGFzcyBSZW5kZXJTdHlsZTsKK2NsYXNzIEhUTUxNZWRp
YUVsZW1lbnQ7CisKK2NsYXNzIFJlbmRlclRoZW1lUXRNb2JpbGUgOiBwdWJsaWMgUmVuZGVyVGhl
bWUgeworcHJpdmF0ZToKKyAgICBSZW5kZXJUaGVtZVF0TW9iaWxlKFBhZ2UqKTsKKyAgICB2aXJ0
dWFsIH5SZW5kZXJUaGVtZVF0TW9iaWxlKCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBhZ2UqKTsKKworICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAg
Ly8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0
aGUgd2luZG93IGhhcyBmb2N1cyBvciBub3QuCisgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBw
b3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgLy8gQSBnZW5lcmFs
IG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxs
LgorICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0OworCisgICAg
Ly8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRm
b3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcigpIGNvbnN0OworCisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUZvY3VzUmlu
Z0NvbG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElk
LCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9y
KGludCBjc3NWYWx1ZUlkKSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IG1pbmltdW1NZW51TGlz
dFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgZG91YmxlIGNh
cmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0
eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5
ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKworICAgIHZpcnR1YWwg
aW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyNp
ZiBFTkFCTEUoVklERU8pCisgICAgdmlydHVhbCBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5
bGVTaGVldCgpOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRD
aGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0Owor
CisgICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRSYWRpb1NpemUoUmVu
ZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QnV0dG9uU2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVj
dCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBF
bGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50
UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJj
aEZpZWxkKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmll
bGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lkIGFk
anVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorICAgIC8vIFJl
dHVybnMgdGhlIHJlcGVhdCBpbnRlcnZhbCBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jl
c3MgYmFyLgorICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJv
Z3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICAvLyBSZXR1cm5zIHRoZSBkdXJh
dGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHZpcnR1YWwg
ZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBj
b25zdDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFQbGF5QnV0dG9uKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0Jh
Y2tCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludE1lZGlhU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhU2xpZGVyVGh1bWIo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgYm9vbCBwYWludE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9s
dW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1
YWwgU3RyaW5nIGZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50VGlt
ZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGZvcm1hdE1lZGlh
Q29udHJvbHNSZW1haW5pbmdUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIGhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihD
b250cm9sUGFydCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorcHJpdmF0ZToKKworICAgIHZvaWQg
cGFpbnRNZWRpYUJhY2tncm91bmQoUVBhaW50ZXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7Cisg
ICAgZG91YmxlIG1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNpdHkoKSBjb25zdDsKKyAgICBRQ29s
b3IgZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKFJlbmRlck9iamVjdCogPSAwKSBjb25z
dDsKKyNlbmRpZgorICAgIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUq
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JX
aWR0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBGb250JiwgaW50IHdp
ZHRoKTsKKworICAgIGJvb2wgY2hlY2tNdWx0aXBsZShSZW5kZXJPYmplY3QqKTsKKyAgICBib29s
IHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQpIGNvbnN0OworICAgIHZvaWQgc2V0QnV0dG9uUGFk
ZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZvaWQgc2V0UG9wdXBQYWRkaW5nKFJlbmRl
clN0eWxlKikgY29uc3Q7CisKKyAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhp
c3RzKFFQYWxldHRlJikgY29uc3Q7CisKKyAgICBpbnQgZmluZEZyYW1lTGluZVdpZHRoKCkgY29u
c3QgeyByZXR1cm4gMjsgfSAvLyBUYWtlbiBkaXJlY3RseSBmcm9tIFFDb21tb25TdHlsZS4KKwor
ICAgIEludFJlY3QgY29udmVydFRvUGFpbnRpbmdSZWN0KFJlbmRlck9iamVjdCogaW5wdXRSZW5k
ZXJlciwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIEludFJlY3QgcGFydFJlY3Qs
IGNvbnN0IEludFJlY3QmIGxvY2FsT2Zmc2V0KSBjb25zdDsKKworICAgIFBhZ2UqIG1fcGFnZTsK
KworICAgIFFTdHJpbmcgbV9idXR0b25Gb250RmFtaWx5OworfTsKKworY2xhc3MgU3R5bGVQYWlu
dGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVRdE1v
YmlsZSosIGNvbnN0IFBhaW50SW5mbyYpOworICAgIH5TdHlsZVBhaW50ZXIoKTsKKworICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHBhaW50ZXI7fQorCisgICAgUVBhaW50ZXIqIHBh
aW50ZXI7CisKKyAgICB2b2lkIGRyYXdMaW5lRWRpdChjb25zdCBRUmVjdCYsIGJvb2wgc3Vua2Vu
LCBib29sIGVuYWJsZWQgPSB0cnVlKTsKKyAgICB2b2lkIGRyYXdDaGVja0JveChjb25zdCBRUmVj
dCYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7CisgICAgdm9pZCBkcmF3UmFk
aW9CdXR0b24oY29uc3QgUVJlY3QmLCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCA9IHRydWUp
OworICAgIHZvaWQgZHJhd1B1c2hCdXR0b24oY29uc3QgUVJlY3QmLCBib29sIHN1bmtlbiwgYm9v
bCBlbmFibGVkID0gdHJ1ZSk7CisgICAgdm9pZCBkcmF3Q29tYm9Cb3goY29uc3QgUVJlY3QmLCBi
b29sIG11bHRpcGxlLCBib29sIGVuYWJsZWQgPSB0cnVlKTsKKworcHJpdmF0ZToKKyAgICB2b2lk
IGluaXQoR3JhcGhpY3NDb250ZXh0Kik7CisKKyAgICB2b2lkIGRyYXdDaGVja2VyKFFQYWludGVy
KiwgaW50IHNpemUsIFFDb2xvcikgY29uc3Q7CisgICAgUVBpeG1hcCBmaW5kQ2hlY2tlcihjb25z
dCBRUmVjdCYsIGJvb2wgZGlzYWJsZWQpIGNvbnN0OworCisgICAgdm9pZCBkcmF3UmFkaW8oUVBh
aW50ZXIqLCBjb25zdCBRU2l6ZSYsIGJvb2wgY2hlY2tlZCwgUUNvbG9yKSBjb25zdDsKKyAgICBR
UGl4bWFwIGZpbmRSYWRpbyhjb25zdCBRU2l6ZSYsIGJvb2wgY2hlY2tlZCwgYm9vbCBkaXNhYmxl
ZCkgY29uc3Q7CisKKyAgICBRU2l6ZSBnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNpemUmKSBj
b25zdDsKKyAgICB2b2lkIGRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFT
aXplJiwgUUNvbG9yKSBjb25zdDsKKyAgICB2b2lkIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQ
YWludGVyKiwgY29uc3QgUVNpemUmLCBRQ29sb3IpIGNvbnN0OworICAgIFFQaXhtYXAgZmluZENv
bWJvQnV0dG9uKGNvbnN0IFFTaXplJiwgYm9vbCBtdWx0aXBsZSwgYm9vbCBkaXNhYmxlZCkgY29u
c3Q7CisKKyAgICBRQnJ1c2ggb2xkQnJ1c2g7CisgICAgYm9vbCBvbGRBbnRpYWxpYXNpbmc7CisK
KyAgICBRX0RJU0FCTEVfQ09QWShTdHlsZVBhaW50ZXIpOworfTsKK30KKworI2VuZGlmIC8vIFJl
bmRlclRoZW1lUXRNb2JpbGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3Jv
bGxiYXJUaGVtZVF0LmNwcAppbmRleCA2ZWQwMmVhNTFlMWM1NjUzYTk0OTVjNzEzOTEzMTU4YTE3
Y2YzNTIwLi40OWE1MjM0ZmM5Y2Y5YzNjYmIxMDFmZmQyNmQ0MDE1ZWVhZTE3YTI5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcApAQCAtMjYs
MTEgKzI2LDE1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFVTRShRVF9NT0JJ
TEVfVEhFTUUpCisjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKKworI2Vsc2UKICNpbmNsdWRl
ICJTY3JvbGxiYXJUaGVtZVF0LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVF0Lmgi
CisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3Lmgi
CiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAKQEAgLTQyLDE1ICs0NiwyNCBAQAogI2luY2x1ZGUg
PFFQYWludGVyPgogI2luY2x1ZGUgPFFTdHlsZT4KICNpbmNsdWRlIDxRU3R5bGVPcHRpb25TbGlk
ZXI+CisjZW5kaWYgLy8gVVNFKFFUX01PQklMRV9USEVNRSkKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCisjaWYgVVNFKFFUX01PQklMRV9USEVNRSkKK1Njcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJU
aGVtZTo6bmF0aXZlVGhlbWUoKQoreworICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZSB0aGVtZTsK
KyAgICByZXR1cm4gJnRoZW1lOworfQorI2Vsc2UKIFNjcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJU
aGVtZTo6bmF0aXZlVGhlbWUoKQogewogICAgIHN0YXRpYyBTY3JvbGxiYXJUaGVtZVF0IHRoZW1l
OwogICAgIHJldHVybiAmdGhlbWU7CiB9CiAKKwogU2Nyb2xsYmFyVGhlbWVRdDo6flNjcm9sbGJh
clRoZW1lUXQoKQogewogfQpAQCAtMjYyLDUgKzI3NSw2IEBAIFFTdHlsZSogU2Nyb2xsYmFyVGhl
bWVRdDo6c3R5bGUoKSBjb25zdAogICAgIHJldHVybiBRQXBwbGljYXRpb246OnN0eWxlKCk7CiB9
CiAKKyNlbmRpZiAvLyBVU0UoUVRfTU9CSUxFX1RIRU1FKQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
cGFnZS5jcHAKaW5kZXggMzc2ZWU3MGU2ZWNhOWY0OWQzZjE0NjIyZGYyMGZmNjBlYzEwOTBhYS4u
M2QzMjhkNWY1MmEwYTI3MjYxZGNmYWI0NjRkNDdjMjA2NDc0MGE4MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBp
L3F3ZWJwYWdlLmNwcApAQCAtMzI2OCwxMSArMzI2OCwxMyBAQCBib29sIFFXZWJQYWdlOjpzd2Fs
bG93Q29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCAqZXZlbnQpCiB7CiAgICAgZC0+
cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNsZWFyQ29udGV4dE1lbnUoKTsKIAorI2lm
ICFVU0UoUVRfTU9CSUxFX1RIRU1FKQogICAgIGlmIChRV2ViRnJhbWUqIHdlYkZyYW1lID0gZnJh
bWVBdChldmVudC0+cG9zKCkpKSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVBy
aXZhdGU6OmNvcmUod2ViRnJhbWUpOwogICAgICAgICBpZiAoU2Nyb2xsYmFyKiBzY3JvbGxiYXIg
PSBmcmFtZS0+dmlldygpLT5zY3JvbGxiYXJBdFBvaW50KFBsYXRmb3JtTW91c2VFdmVudChldmVu
dCwgMSkucG9zKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+Y29udGV4dE1lbnUo
UGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCAxKSk7CiAgICAgfQorI2VuZGlmCiAKICAgICBXZWJD
b3JlOjpGcmFtZSogZm9jdXNlZEZyYW1lID0gZC0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZv
Y3VzZWRPck1haW5GcmFtZSgpOwogICAgIGZvY3VzZWRGcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNl
bmRDb250ZXh0TWVudUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCwgMSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5n
ZUxvZwppbmRleCAzNTAwYmQwNDIwMjg2YWNhYTg0Mzg4MTBjZmJkM2Q1NGUxM2JlODZlLi5hOTU4
ODdkOWY4ZDlkODhjOWI5OTAzYzE2YThmNzUxMTRkMDUyZjIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIxIEBACisyMDExLTA5LTA4ICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21h
aWwuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3ZlIHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBpbiBR
dCdzIG1vYmlsZSB0aGVtZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njc3NzMKKworICAgICAgICBSZW1vdmFsIG9mIHRoZSBRU3R5bGUgZGVwZW5kZW5j
eSBmb3IgdGhlIG1vYmlsZSB0aGVtZS4KKworICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIHNwbGl0
cyB1cCBSZW5kZXJUaGVtZVF0IGludG8gdHdvCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZpbGVz
LCBhIFFTdHlsZS1iYWNrZWQgb25lLCBhbmQgYQorICAgICAgICBSZW5kZXJUaGVtZVF0TW9iaWxl
IG9uZSB0aGF0IHVzZXMgUVBhaW50ZXIgZGlyZWN0bHkuCisKKyAgICAgICAgVXNlIG9mIHRoZSBt
b2JpbGUgdGhlbWUgY2FuIGJlIHRyaWdnZXJlZCB2aWEgYSBjb21waWxlIGZsYWcuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBBcGkvcXdlYnBhZ2Uu
Y3BwOgorICAgICAgICAoUVdlYlBhZ2U6OnN3YWxsb3dDb250ZXh0TWVudUV2ZW50KToKKwogMjAx
MS0wOS0wNSAgSm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290dGVAbm9raWEuY29tPgog
CiAgICAgICAgIFtRdF1bV0syXSBNYWtlIFRpbGVkRHJhd2luZ0FyZWEgcmVxdWVzdCB0aWxlcyBv
bmx5IGluIHRoZSBkaXJlY3Rpb24gdGhlIHZpZXdwb3J0IGlzIHBhbm5lZCB0by4KZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZmU1NWQ3NDZiYWE3
ZTY0NGFjOGI1MGQ5MDYyMmUyNmJlMTdhZWE0Li4xMjI4ZjkzZmIwYTZlZDZmNzEwMjU5ZjkxMzA0
NTM3NWMxY2FkMWM5IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDktMDggIFBpZXJyZSBSb3NzaSAgPHBpZXJy
ZS5yb3NzaUBnbWFpbC5jb20+CisKKyAgICAgICAgW1F0XSBSZW1vdmUgdGhlIFFTdHlsZSBkZXBl
bmRlbmN5IGluIFF0J3MgbW9iaWxlIHRoZW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc3MworCisgICAgICAgIFJlbW92YWwgb2YgdGhlIFFTdHls
ZSBkZXBlbmRlbmN5IGZvciB0aGUgbW9iaWxlIHRoZW1lLgorCisgICAgICAgIFRoaXMgcmVmYWN0
b3Jpbmcgc3BsaXRzIHVwIFJlbmRlclRoZW1lUXQgaW50byB0d28KKyAgICAgICAgaW1wbGVtZW50
YXRpb24gZmlsZXMsIGEgUVN0eWxlLWJhY2tlZCBvbmUsIGFuZCBhCisgICAgICAgIFJlbmRlclRo
ZW1lUXRNb2JpbGUgb25lIHRoYXQgdXNlcyBRUGFpbnRlciBkaXJlY3RseS4KKworICAgICAgICBV
c2Ugb2YgdGhlIG1vYmlsZSB0aGVtZSBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBhIGNvbXBpbGUgZmxh
Zy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNj
cmlwdHMvYnVpbGQtd2Via2l0OgorCiAyMDExLTA5LTA3ICBFcmljIEJvcmVuICA8Ym9yZW5ldEBn
bWFpbC5jb20+CiAKICAgICAgICAgW0Nocm9taXVtXSBNb2RpZnkgV2ViVG91Y2hFdmVudCBzdHJ1
Y3R1cmUgdG8gbWF0Y2ggV2ViQ29yZTo6VG91Y2hFdmVudApkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy9idWlsZC13ZWJraXQgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAppbmRleCAzZjVi
MDkyYTE4MWViNTA5Y2ZiODdhZWU2ZTNjOGY1ODU2NDliYWUzLi5iYTdkN2ZlNDFkZjU2MTJiMDJm
YjYzM2EwY2YyYTY3MmQzZTdlNzY3IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdl
YmtpdAorKysgYi9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdApAQCAtNTUsNiArNTUsNyBAQCBt
eSAkY2xlYW4gPSAwOwogbXkgJHVzZUdZUCA9IDA7CiBteSAkbWluaW1hbCA9IDA7CiBteSAkdjgg
PSAwOworbXkgJG1vYmlsZVRoZW1lID0gMDsKIG15ICRpbnN0YWxsSGVhZGVyczsKIG15ICRpbnN0
YWxsTGliczsKIG15ICRwcmVmaXhQYXRoOwpAQCAtMzQ5LDYgKzM1MCw4IEBAIGZvcmVhY2ggKEBB
UkdWKSB7CiAgICAgICAgICRtaW5pbWFsID0gMTsKICAgICB9IGVsc2lmICgkXyBlcSAnLS12OCcp
IHsKICAgICAgICAgJHY4ID0gMTsKKyAgICB9IGVsc2lmICgkXyBlcSAnLS1tb2JpbGUtdGhlbWUn
KSB7CisgICAgICAgICRtb2JpbGVUaGVtZSA9IDE7CiAgICAgfQogfQogCkBAIC0zODUsNiArMzg4
LDcgQEAgVXNhZ2U6ICRwcm9ncmFtTmFtZSBbb3B0aW9uc10gW29wdGlvbnMgdG8gcGFzcyB0byBi
dWlsZCBzeXN0ZW1dCiAgIC0taW5zdGFsbC1oZWFkZXJzPTxwYXRoPiAgICAgICAgICBTZXQgaW5z
dGFsbGF0aW9uIHBhdGggZm9yIHRoZSBoZWFkZXJzIChRdCBvbmx5KQogICAtLWluc3RhbGwtbGli
cz08cGF0aD4gICAgICAgICAgICAgU2V0IGluc3RhbGxhdGlvbiBwYXRoIGZvciB0aGUgbGlicmFy
aWVzIChRdCBvbmx5KQogICAtLXY4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIFY4
IGFzIEphdmFTY3JpcHQgZW5naW5lIChRdCBvbmx5KQorICAtLW1vYmlsZS10aGVtZSAgICAgICAg
ICAgICAgICAgICAgVXNlIG1vYmlsZSB0aGVtZSBpbnN0ZWFkIG9mIFFTdHlsZSAoUXQgb25seSkK
ICAgLTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkIFdlYktpdDIgKFF0IG9u
bHkpCiAKICAgLS1wcmVmaXg9PHBhdGg+ICAgICAgICAgICAgICAgICAgIFNldCBpbnN0YWxsYXRp
b24gcHJlZml4IHRvIHRoZSBnaXZlbiBwYXRoIChHdGsvRWZsIG9ubHkpCkBAIC00MDgsNiArNDEy
LDcgQEAgbXkgJW9wdGlvbnMgPSAoCiAgICAgJ21ha2VhcmdzPXMnID0+IFwkbWFrZUFyZ3MsCiAg
ICAgJ21pbmltYWwnID0+IFwkbWluaW1hbCwKICAgICAndjgnID0+IFwkdjgsCisgICAgJ21vYmls
ZS10aGVtZScgPT4gXCRtb2JpbGVUaGVtZSwKICAgICAnb25seS13ZWJraXQnID0+IFwkb25seVdl
YktpdFByb2plY3QsCiAgICAgJ25vLXdlYmtpdDInID0+IFwkbm9XZWJLaXQyLAogKTsKQEAgLTU1
OSw2ICs1NjQsMTAgQEAgaWYgKGlzR3RrKCkpIHsKICAgICBpZiAoJHY4KSB7CiAgICAgICAgIHB1
c2ggQG9wdGlvbnMsICJDT05GSUcrPXY4IjsKICAgICB9CisKKyAgICBpZiAoJG1vYmlsZVRoZW1l
KSB7CisgICAgICAgIHB1c2ggQG9wdGlvbnMsICJDT05GSUcrPXVzZV9xdF9tb2JpbGVfdGhlbWUi
OworICAgIH0KIH0KIAogIyBJZiBhc2tlZCB0byBidWlsZCBqdXN0IHRoZSBXZWJLaXQgcHJvamVj
dCwgb3ZlcndyaXRlIHRoZSBwcm9qZWN0cwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106752</attachid>
            <date>2011-09-08 09:57:56 -0700</date>
            <delta_ts>2011-11-11 04:19:39 -0800</delta_ts>
            <desc>Review-friendly version.</desc>
            <filename>0001-Removal-of-the-QStyle-dependency-for-the-mobile-them.patch</filename>
            <type>text/plain</type>
            <size>109907</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">RnJvbSAxOGI5OTVkYmFmZGYyMWM5NWFlNTNjNGIyMTZiMzhiNTlhNjIzMTc4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaWVycmUgUm9zc2kgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+
CkRhdGU6IFdlZCwgNyBTZXAgMjAxMSAyMToyMjoxNyArMDIwMApTdWJqZWN0OiBSZW1vdmFsIG9m
IHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBmb3IgdGhlIG1vYmlsZSB0aGVtZS4KClRoaXMgcmVmYWN0
b3Jpbmcgc3BsaXRzIHVwIFJlbmRlclRoZW1lUXQgaW50byB0d28KaW1wbGVtZW50YXRpb24gZmls
ZXMsIGEgUVN0eWxlLWJhY2tlZCBvbmUsIGFuZCBhClJlbmRlclRoZW1lUXRNb2JpbGUgb25lIHRo
YXQgdXNlcyBRUGFpbnRlciBkaXJlY3RseS4KClVzZSBvZiB0aGUgbW9iaWxlIHRoZW1lIGNhbiBi
ZSB0cmlnZ2VyZWQgdmlhIGEgY29tcGlsZSBmbGFnLgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIyMSArKysrCiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKy0KIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuY3BwICAgIHwgIDM4MSAtLS0tLS0K
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuaCAgICAgIHwgICA0
OCAtCiAuLi4ve1JlbmRlclRoZW1lUXQuY3BwID0+IFJlbmRlclRoZW1lUVN0eWxlLmNwcH0gICB8
ICAgOTkgKy0tCiAuLi4vcXQve1JlbmRlclRoZW1lUXQuaCA9PiBSZW5kZXJUaGVtZVFTdHlsZS5o
fSAgICB8ICAgMzcgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRN
b2JpbGUuY3BwIHwgMTM3MSArKysrKysrKysrKysrKysrKysrKwogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oICAgfCAgMjIwICsrKysKIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwICAgIHwgICAxNiArLQogU291cmNl
L1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFNv
dXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCAr
CiBUb29scy9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTcgKwogVG9vbHMvU2NyaXB0cy9idWlsZC13ZWJraXQgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICA5ICsKIDEzIGZpbGVzIGNoYW5nZWQsIDE5MDMgaW5zZXJ0aW9ucygrKSwgNTQ4IGRlbGV0
aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0
TW9iaWxlV2ViU3R5bGUuY3BwCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUXRNb2JpbGVXZWJTdHlsZS5oCiByZW5hbWUgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQve1JlbmRlclRoZW1lUXQuY3BwID0+IFJlbmRlclRoZW1lUVN0eWxlLmNwcH0gKDk0JSkK
IHJlbmFtZSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC97UmVuZGVyVGhlbWVRdC5oID0+IFJl
bmRlclRoZW1lUVN0eWxlLmh9ICg4OCUpCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYzk1M2NlMC4uYjNkODU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNCBAQAor
MjAxMS0wOS0wOCAgUGllcnJlIFJvc3NpICA8cGllcnJlLnJvc3NpQGdtYWlsLmNvbT4KKworICAg
ICAgICBbUXRdIFJlbW92ZSB0aGUgUVN0eWxlIGRlcGVuZGVuY3kgaW4gUXQncyBtb2JpbGUgdGhl
bWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY3Nzcz
CisKKyAgICAgICAgUmVtb3ZhbCBvZiB0aGUgUVN0eWxlIGRlcGVuZGVuY3kgZm9yIHRoZSBtb2Jp
bGUgdGhlbWUuCisKKyAgICAgICAgVGhpcyByZWZhY3RvcmluZyBzcGxpdHMgdXAgUmVuZGVyVGhl
bWVRdCBpbnRvIHR3bworICAgICAgICBpbXBsZW1lbnRhdGlvbiBmaWxlcywgYSBRU3R5bGUtYmFj
a2VkIG9uZSwgYW5kIGEKKyAgICAgICAgUmVuZGVyVGhlbWVRdE1vYmlsZSBvbmUgdGhhdCB1c2Vz
IFFQYWludGVyIGRpcmVjdGx5LgorCisgICAgICAgIFVzZSBvZiB0aGUgbW9iaWxlIHRoZW1lIGNh
biBiZSB0cmlnZ2VyZWQgdmlhIGEgY29tcGlsZSBmbGFnLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBqdXN0IHJl
ZmFjdG9yaW5nLgorCisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0v
cXQvUXRNb2JpbGVXZWJTdHlsZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQv
UXRNb2JpbGVXZWJTdHlsZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUVN0eWxlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUXQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6aW5pdFN0eWxlT3B0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBh
aW50ZXI6On5TdHlsZVBhaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6UmVuZGVyVGhlbWVRdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojp+UmVuZGVyVGhlbWVRdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0Ojppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6ZmFsbGJhY2tTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0OjpxU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6ZXh0cmFE
ZWZhdWx0U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzdXBw
b3J0c0hvdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzRm9j
dXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmJhc2VsaW5lUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Y29udHJvbFN1cHBvcnRzVGlu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3VwcG9ydHNDb250cm9sVGlu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6ZmluZEZyYW1lTGluZVdpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OmluZmxhdGVCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFJlcGFpbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXQ6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGxh
dGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwbGF0Zm9ybUZvY3VzUmluZ0NvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnN5c3RlbUZvbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c3lzdGVtQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6bWluaW11bU1lbnVMaXN0U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0Ojpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdDo6cGFpbnRDaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0OjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RCdXR0
b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpzZXRCdXR0b25TaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnNldEJ1dHRvblBhZGRpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpwYWludFRleHRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdDo6c2V0UG9wdXBQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXQ6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRq
dXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
OjpwYWludE1lbnVMaXN0QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6
OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFNlYXJjaEZpZWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpjb252ZXJ0VG9QYWludGluZ1JlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFyY2hGaWVsZENhbmNl
bEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTZWFyY2hG
aWVsZERlY29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojpw
YWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdElubmVyU3BpbkJ1dHRv
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50SW5uZXJTcGlu
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzRm9jdXMp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xp
ZW50SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6aW5pdGlhbGl6
ZUNvbW1vblFTdHlsZU9wdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JsZE1h
dHJpeFRyYW5zZm9ybWVyOjpXb3JsZE1hdHJpeFRyYW5zZm9ybWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmxkTWF0cml4VHJhbnNmb3JtZXI6On5Xb3JsZE1hdHJpeFRyYW5zZm9ybWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6Om1lZGlhQ29udHJvbHNCYXNlbGluZU9wYWNp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUJhY2tncm91
bmQpOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFFbGVtZW50Q2FuUGxheSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVBsYXlCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtCYWNr
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTZWVr
Rm9yd2FyZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1l
ZGlhQ3VycmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Zm9ybWF0
TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXQ6OmZvcm1hdE1lZGlhQ29udHJvbHNSZW1haW5pbmdUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJUaHVtYik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Y2FyZXRCbGlua0ludGVydmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZvcldpZHRoKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmguCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0OjpoYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlcjo6ZHJhd1ByaW1pdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50
ZXI6OmRyYXdDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZHJhd0Nv
bXBsZXhDb250cm9sKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxl
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFj
a2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmRyYXdDaGVja2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZmluZENoZWNrZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVQYWludGVyOjpmaW5kUmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpk
cmF3TXVsdGlwbGVDb21ib0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6
OmRyYXdTaW1wbGVDb21ib0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6
OmdldEJ1dHRvbkltYWdlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmZp
bmRDb21ib0J1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OlN0eWxlUGFp
bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50ZXI6OmluaXQpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVQYWludGVyOjp+U3R5bGVQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlcjo6ZHJhd0xpbmVFZGl0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFp
bnRlcjo6ZHJhd0NoZWNrQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZHJh
d1JhZGlvQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6ZHJhd1B1c2hC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjpkcmF3Q29tYm9Cb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lOjp0aGVtZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdE1vYmlsZTo6UmVuZGVyVGhlbWVRdE1vYmlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjp+UmVuZGVyVGhlbWVRdE1vYmlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0
b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c3VwcG9ydHNIb3Zl
cik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzdXBwb3J0c0ZvY3Vz
UmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpiYXNlbGluZVBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbnRyb2xT
dXBwb3J0c1RpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnN1
cHBvcnRzQ29udHJvbFRpbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2Jp
bGU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGxh
dGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRD
b2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwbGF0Zm9ybUZv
Y3VzUmluZ0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnN5
c3RlbUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c3lzdGVt
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6bWluaW11bU1l
bnVMaXN0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpjb21w
dXRlU2l6ZUJhc2VkT25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjpzZXRDaGVja2JveFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1v
YmlsZTo6cGFpbnRDaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmls
ZTo6cGFpbnRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjph
ZGp1c3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxl
OjpzZXRCdXR0b25TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6
OnNldEJ1dHRvblBhZGRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmls
ZTo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6
YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1v
YmlsZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1v
YmlsZTo6YWRqdXN0VGV4dEFyZWFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpwYWludFRleHRBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
UXRNb2JpbGU6OmFkanVzdE1lbnVMaXN0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdE1vYmlsZTo6c2V0UG9wdXBQYWRkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXRNb2JpbGU6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdE1vYmlsZTo6YWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lbnVMaXN0QnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9y
UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YW5p
bWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0TW9iaWxlOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2xpZGVyVGh1bWIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNlYXJjaEZp
ZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNlYXJj
aEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRq
dXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0TW9iaWxlOjpjb252ZXJ0VG9QYWludGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTZWFyY2hGaWVsZERl
Y29yYXRpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpw
YWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0TW9iaWxlOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3Vs
dHNEZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmNo
ZWNrTXVsdGlwbGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c3Vw
cG9ydHNGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRQ
YWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0TW9iaWxlOjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmxkTWF0cml4VHJhbnNmb3JtZXI6OldvcmxkTWF0cml4VHJhbnNmb3JtZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ybGRNYXRyaXhUcmFuc2Zvcm1lcjo6fldvcmxkTWF0cml4VHJh
bnNmb3JtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6bWVkaWFD
b250cm9sc0Jhc2VsaW5lT3BhY2l0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0
TW9iaWxlOjpwYWludE1lZGlhQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjptZWRpYUVs
ZW1lbnRDYW5QbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6Omdl
dE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0TW9iaWxlOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhTXV0ZUJ1dHRvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhUGxheUJ1dHRvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhU2Vla0JhY2tC
dXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRp
YVNlZWtGb3J3YXJkQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2Jp
bGU6OnBhaW50TWVkaWFDdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1Rp
bWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYVZv
bHVtZVNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6
OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZVF0TW9iaWxlOjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYVNsaWRlclRodW1iKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpjYXJldEJsaW5rSW50ZXJ2YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6ZmlsZUxpc3ROYW1lRm9yV2lk
dGgpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6Omhhc093bkRpc2FibGVkU3RhdGVIYW5k
bGluZ0Zvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpmaW5kRnJh
bWVMaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyOjppc1ZhbGlkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSk6CisKIDIwMTEtMDktMDYgIEFiaGlz
aGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOdWxsIG93bmluZ1Jl
bmRlcmVyIGNyYXNoIGluIFJlbmRlclNjcm9sbGJhcjo6dXBkYXRlU2Nyb2xsYmFyUGFydHMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IDU4NDk2MmFkLi5lZTdhZWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMjA5
MCw4ICsyMDkwLDYgQEAgSEVBREVSUyArPSBcCiAgICAgcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQu
aCBcCiAgICAgcGxhdGZvcm0vcXQvUVdlYlBhZ2VDbGllbnQuaCBcCiAgICAgcGxhdGZvcm0vcXQv
UXRTdHlsZU9wdGlvbldlYkNvbWJvQm94LmggXAotICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UXQuaCBcCi0gICAgcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5oIFwKICAgICBwbGF0Zm9y
bS9TY3JvbGxhYmxlQXJlYS5oIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIFwKICAg
ICBwbGF0Zm9ybS9TY3JvbGxiYXIuaCBcCkBAIC0yNjIxLDcgKzI2MTksNiBAQCBTT1VSQ0VTICs9
IFwKICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybVNjcmVlblF0LmNwcCBcCiAgICAgcGxhdGZvcm0v
cXQvUGxhdGZvcm1Ub3VjaEV2ZW50UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybVRv
dWNoUG9pbnRRdC5jcHAgXAotICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwIFwKICAg
ICBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJh
clRoZW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwIFwKQEAgLTI2
NDIsOCArMjYzOSwxMyBAQCBTT1VSQ0VTICs9IFwKIH0KIAogY29udGFpbnMoREVGSU5FUywgV1RG
X1VTRV9RVF9NT0JJTEVfVEhFTUU9MSkgewotICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vcXQvUXRN
b2JpbGVXZWJTdHlsZS5oCi0gICAgU09VUkNFUyArPSBwbGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0
eWxlLmNwcAorICAgIEhFQURFUlMgKz0gcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5o
CisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcAorICAg
IFNPVVJDRVMgLT0gcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCit9IGVsc2UgeworICAgIEhF
QURFUlMgKz0gcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5bGUuaCBcCisgICAgICAgICAgICAg
ICBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmgKKyAgICBTT1VSQ0VTICs9IHBsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcAogfQogCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
U01PT1RIX1NDUk9MTElORz0xKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9RdE1vYmlsZVdlYlN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0
TW9iaWxlV2ViU3R5bGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2ExODE3
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5
bGUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlF0TW9iaWxlV2ViU3R5bGUuaCIKLQotI2lu
Y2x1ZGUgIlF0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIgotCi0jaW5jbHVkZSA8UVBhaW50ZXI+
Ci0jaW5jbHVkZSA8UVBpeG1hcENhY2hlPgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbj4KLQotUXRN
b2JpbGVXZWJTdHlsZTo6UXRNb2JpbGVXZWJTdHlsZSgpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChRUGFpbnRlciogcGFpbnRlciwg
Y29uc3QgUVBlbiYgcGVuLCBjb25zdCBRUmVjdCYgcmVjdCwgY29uc3QgUUJydXNoJiBicnVzaCkK
LXsKLSAgICBRUGVuIG9sZFBlbiA9IHBhaW50ZXItPnBlbigpOwotICAgIFFCcnVzaCBvbGRCcnVz
aCA9IHBhaW50ZXItPmJydXNoKCk7Ci0gICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRl
cjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKLSAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKLSAgICBw
YWludGVyLT5zZXRCcnVzaChicnVzaCk7Ci0KLSAgICBpbnQgbGluZSA9IDE7Ci0gICAgcGFpbnRl
ci0+ZHJhd1JvdW5kZWRSZWN0KHJlY3QuYWRqdXN0ZWQobGluZSwgbGluZSwgLWxpbmUsIC1saW5l
KSwKLSAgICAgICAgICAgIC8qIHhSYWRpdXMgKi8gNS4wLCAvKiB5UmFkaW91cyAqLyA1LjApOwot
ICAgIHBhaW50ZXItPnNldFBlbihvbGRQZW4pOwotICAgIHBhaW50ZXItPnNldEJydXNoKG9sZEJy
dXNoKTsKLX0KLQotdm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3Q2hlY2tlcihRUGFpbnRlciog
cGFpbnRlciwgaW50IHNpemUsIFFDb2xvciBjb2xvcikgY29uc3QKLXsKLSAgICBpbnQgYm9yZGVy
ID0gcU1pbihxTWF4KDEsIGludCgwLjIgKiBzaXplKSksIDYpOwotICAgIGludCBjaGVja2VyU2l6
ZSA9IHFNYXgoc2l6ZSAtIDIgKiBib3JkZXIsIDMpOwotICAgIGludCB3aWR0aCA9IGNoZWNrZXJT
aXplIC8gMzsKLSAgICBpbnQgbWlkZGxlID0gcU1heCgzICogY2hlY2tlclNpemUgLyA3LCAzKTsK
LSAgICBpbnQgeCA9ICgoc2l6ZSAtIGNoZWNrZXJTaXplKSA+PiAxKTsKLSAgICBpbnQgeSA9ICgo
c2l6ZSAtIGNoZWNrZXJTaXplKSA+PiAxKSArIChjaGVja2VyU2l6ZSAtIHdpZHRoIC0gbWlkZGxl
KTsKLSAgICBRVmVjdG9yPFFMaW5lRj4gbGluZXMoY2hlY2tlclNpemUgKyAxKTsKLSAgICBwYWlu
dGVyLT5zZXRQZW4oY29sb3IpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWlkZGxlOyArK2kp
IHsKLSAgICAgICAgbGluZXNbaV0gPSBRTGluZUYoeCwgeSwgeCwgeSArIHdpZHRoKTsKLSAgICAg
ICAgKyt4OwotICAgICAgICArK3k7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSBtaWRkbGU7IGkg
PD0gY2hlY2tlclNpemU7ICsraSkgewotICAgICAgICBsaW5lc1tpXSA9IFFMaW5lRih4LCB5LCB4
LCB5ICsgd2lkdGgpOwotICAgICAgICArK3g7Ci0gICAgICAgIC0teTsKLSAgICB9Ci0gICAgcGFp
bnRlci0+ZHJhd0xpbmVzKGxpbmVzLmNvbnN0RGF0YSgpLCBsaW5lcy5zaXplKCkpOwotfQotCi1R
UGl4bWFwIFF0TW9iaWxlV2ViU3R5bGU6OmZpbmRDaGVja2VyKGNvbnN0IFFSZWN0JiByZWN0LCBi
b29sIGRpc2FibGVkKSBjb25zdAotewotICAgIGludCBzaXplID0gcU1pbihyZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOwotICAgIFFQaXhtYXAgcmVzdWx0OwotICAgIHN0YXRpYyBjb25zdCBR
U3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtIikgKyBRTGF0aW4xU3Ry
aW5nKG1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpKyBRTGF0aW4xU3RyaW5nKCItY2hlY2tlci0i
KTsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFTdHJpbmc6Om51bWJlcihzaXplKSArIFFM
YXRpbjFTdHJpbmcoIi0iKSArIChkaXNhYmxlZCA/IFFMYXRpbjFTdHJpbmcoImRpc2FibGVkIikg
OiBRTGF0aW4xU3RyaW5nKCJlbmFibGVkIikpOwotICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5k
KGtleSwgcmVzdWx0KSkgewotICAgICAgICByZXN1bHQgPSBRUGl4bWFwKHNpemUsIHNpemUpOwot
ICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAgICAgICBRUGFpbnRlciBw
YWludGVyKCZyZXN1bHQpOwotICAgICAgICBkcmF3Q2hlY2tlcigmcGFpbnRlciwgc2l6ZSwgZGlz
YWJsZWQgPyBRdDo6bGlnaHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgUVBpeG1hcENh
Y2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdSYWRpbyhRUGFpbnRlciogcGFpbnRlciwgY29u
c3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwgUUNvbG9yIGNvbG9yKSBjb25zdAotewotICAg
IHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0K
LSAgICAvLyBnZXQgbWlub3Igc2l6ZSB0byBkbyBub3QgcGFpbnQgYSB3aWRlIGVsaXBzZQotICAg
IHFyZWFsIHNxdWFyZVNpemUgPSBxTWluKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgLy8gZGVmbGF0ZSBvbmUgcGl4ZWwKLSAgICBRUmVjdCByZWN0ID0gUVJlY3QoUVBvaW50KDEs
IDEpLCBRU2l6ZShzcXVhcmVTaXplIC0gMiwgc3F1YXJlU2l6ZSAtIDIpKTsKLSAgICBjb25zdCBR
UG9pbnQgY2VudGVyR3JhZGllbnQocmVjdC5ib3R0b21SaWdodCgpICogMC43KTsKLQotICAgIFFS
YWRpYWxHcmFkaWVudCByYWRpYWxHcmFkaWVudChjZW50ZXJHcmFkaWVudCwgY2VudGVyR3JhZGll
bnQueCgpIC0gMSk7Ci0gICAgcmFkaWFsR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0Ojp3aGl0
ZSk7Ci0gICAgcmFkaWFsR3JhZGllbnQuc2V0Q29sb3JBdCgwLjYsIFF0Ojp3aGl0ZSk7Ci0gICAg
cmFkaWFsR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIGNvbG9yKTsKLQotICAgIHBhaW50ZXItPnNl
dFBlbihjb2xvcik7Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOwotICAgIHBhaW50ZXIt
PmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIHBhaW50ZXItPnNldEJydXNoKHJhZGlhbEdyYWRpZW50
KTsKLSAgICBwYWludGVyLT5kcmF3RWxsaXBzZShyZWN0KTsKLQotICAgIGludCBib3JkZXIgPSAw
LjEgKiAocmVjdC53aWR0aCgpICsgcmVjdC5oZWlnaHQoKSk7Ci0gICAgYm9yZGVyID0gcU1pbihx
TWF4KDIsIGJvcmRlciksIDEwKTsKLSAgICByZWN0LmFkanVzdChib3JkZXIsIGJvcmRlciwgLWJv
cmRlciwgLWJvcmRlcik7Ci0gICAgaWYgKGNoZWNrZWQpIHsKLSAgICAgICAgcGFpbnRlci0+c2V0
UGVuKFF0OjpOb1Blbik7Ci0gICAgICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKLSAgICAg
ICAgcGFpbnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgfQotfQotCi1RUGl4bWFwIFF0TW9i
aWxlV2ViU3R5bGU6OmZpbmRSYWRpbyhjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBi
b29sIGRpc2FibGVkKSBjb25zdAotewotICAgIFFQaXhtYXAgcmVzdWx0OwotICAgIHN0YXRpYyBj
b25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtIikgKyBRTGF0
aW4xU3RyaW5nKG1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpICsgUUxhdGluMVN0cmluZygiLXJh
ZGlvLSIpOwotICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUu
d2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS5oZWln
aHQoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikKLSAgICAgICAgKyAoZGlzYWJsZWQgPyBRTGF0aW4x
U3RyaW5nKCJkaXNhYmxlZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKSArIChjaGVja2Vk
ID8gUUxhdGluMVN0cmluZygiLWNoZWNrZWQiKSA6IFFMYXRpbjFTdHJpbmcoIiIpKTsKLSAgICBp
ZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0g
UVBpeG1hcChzaXplKTsKLSAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAg
ICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0KTsKLSAgICAgICAgZHJhd1JhZGlvKCZwYWlu
dGVyLCBzaXplLCBjaGVja2VkLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dy
YXkpOwotICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7Ci0gICAgfQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd0NvbnRy
b2woQ29udHJvbEVsZW1lbnQgZWxlbWVudCwgY29uc3QgUVN0eWxlT3B0aW9uKiBvcHRpb24sIFFQ
YWludGVyKiBwYWludGVyLCBjb25zdCBRV2lkZ2V0KiB3aWRnZXQpIGNvbnN0Ci17Ci0gICAgc3dp
dGNoIChlbGVtZW50KSB7Ci0gICAgY2FzZSBDRV9DaGVja0JveDogewotICAgICAgICBRUmVjdCBy
ZWN0ID0gb3B0aW9uLT5yZWN0OwotICAgICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRp
b24tPnN0YXRlICYgU3RhdGVfRW5hYmxlZCk7Ci0KLSAgICAgICAgUUxpbmVhckdyYWRpZW50IGxp
bmVhckdyYWRpZW50KHJlY3QudG9wTGVmdCgpLCByZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAg
IGlmIChkaXNhYmxlZCkgewotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgw
LjAsIFF0OjpsaWdodEdyYXkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JB
dCgwLjUsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgICAgIGxpbmVh
ckdyYWRpZW50LnNldENvbG9yQXQoMC41LCBRdDo6d2hpdGUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgcGFpbnRlci0+c2V0UGVuKFFQZW4oZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5IDogUXQ6OmRh
cmtHcmF5KSk7Ci0gICAgICAgIHBhaW50ZXItPnNldEJydXNoKGxpbmVhckdyYWRpZW50KTsKLSAg
ICAgICAgcGFpbnRlci0+ZHJhd1JlY3QocmVjdCk7Ci0gICAgICAgIHJlY3QuYWRqdXN0KDEsIDEs
IC0xLCAtMSk7Ci0KLSAgICAgICAgaWYgKG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9PZmYpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBRUGl4bWFwIGNoZWNrZXIgPSBmaW5kQ2hlY2tlcihy
ZWN0LCBkaXNhYmxlZCk7Ci0gICAgICAgIGlmIChjaGVja2VyLmlzTnVsbCgpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgaW50IHggPSAocmVjdC53aWR0aCgpIC0gY2hlY2tlci53aWR0
aCgpKSA+PiAxOwotICAgICAgICBpbnQgeSA9IChyZWN0LmhlaWdodCgpIC0gY2hlY2tlci5oZWln
aHQoKSkgPj4gMTsKLSAgICAgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChyZWN0LngoKSArIHgsIHJl
Y3QueSgpICsgeSwgY2hlY2tlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENF
X1JhZGlvQnV0dG9uOiB7Ci0gICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZWQgPSAhKG9wdGlvbi0+
c3RhdGUgJiBTdGF0ZV9FbmFibGVkKTsKLSAgICAgICAgUVBpeG1hcCByYWRpbyA9IGZpbmRSYWRp
byhvcHRpb24tPnJlY3Quc2l6ZSgpLCBvcHRpb24tPnN0YXRlICYgU3RhdGVfT24sIGRpc2FibGVk
KTsKLSAgICAgICAgaWYgKHJhZGlvLmlzTnVsbCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIHBhaW50ZXItPmRyYXdQaXhtYXAob3B0aW9uLT5yZWN0LngoKSwgb3B0aW9uLT5yZWN0Lnko
KSwgcmFkaW8pOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBDRV9QdXNoQnV0dG9u
OiB7Ci0gICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZWQgPSAhKG9wdGlvbi0+c3RhdGUgJiBTdGF0
ZV9FbmFibGVkKTsKLSAgICAgICAgUVJlY3QgcmVjdCA9IG9wdGlvbi0+cmVjdDsKLSAgICAgICAg
UVBlbiBwZW4oUXQ6OmRhcmtHcmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwg
UXQ6OlJvdW5kSm9pbik7Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwotCi0gICAgICAg
IGNvbnN0IGJvb2wgc3Vua2VuID0gKG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9TdW5rZW4pOwotICAg
ICAgICBpZiAoc3Vua2VuKSB7Ci0gICAgICAgICAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFj
a2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIFFCcnVzaChRdDo6ZGFya0dyYXkpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgUUxpbmVhckdyYWRpZW50IGxpbmVh
ckdyYWRpZW50OwotICAgICAgICBpZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldEZpbmFsU3RvcChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOwotICAgICAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAg
ICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QuYm90dG9tTGVm
dCgpLngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tTGVmdCgpLnkoKSAt
IC8qIG9mZnNldCBsaW1pdCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKLSAgICAgICAgICAgIGxpbmVh
ckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7Ci0gICAgICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRDb2xvckF0KDAuNCwgUXQ6OndoaXRlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgbGlu
ZWFyR3JhZGllbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgUVdpbmRvd3NTdHlsZTo6ZHJhd0NvbnRyb2woZWxlbWVudCwgb3B0aW9uLCBwYWludGVyLCB3
aWRnZXQpOwotICAgIH0KLX0KLXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd1ByaW1pdGl2ZShQ
cmltaXRpdmVFbGVtZW50IGVsZW1lbnQsIGNvbnN0IFFTdHlsZU9wdGlvbiogb3B0aW9uLCBRUGFp
bnRlciogcGFpbnRlciwgY29uc3QgUVdpZGdldCogd2lkZ2V0KSBjb25zdAotewotICAgIHN3aXRj
aCAoZWxlbWVudCkgewotICAgIGNhc2UgUVN0eWxlOjpQRV9QYW5lbExpbmVFZGl0OiB7Ci0gICAg
ICAgIGNvbnN0IGJvb2wgZGlzYWJsZWQgPSAhKG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9FbmFibGVk
KTsKLSAgICAgICAgY29uc3QgYm9vbCBzdW5rZW4gPSAob3B0aW9uLT5zdGF0ZSAmIFN0YXRlX1N1
bmtlbik7Ci0gICAgICAgIFFSZWN0IHJlY3QgPSBvcHRpb24tPnJlY3Q7Ci0gICAgICAgIFFQZW4g
cGVuKFF0OjpkYXJrR3JheSwgMS4wLCBRdDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0OjpS
b3VuZEpvaW4pOwotICAgICAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKLQotICAgICAgICBpZiAo
c3Vua2VuKSB7Ci0gICAgICAgICAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChw
YWludGVyLCBwZW4sIHJlY3QsIFFCcnVzaChRdDo6ZGFya0dyYXkpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50
OwotICAgICAgICBpZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNl
dFN0YXJ0KHJlY3QudG9wTGVmdCgpKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZp
bmFsU3RvcChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDAuMCwgUXQ6OmxpZ2h0R3JheSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVu
dC5zZXRDb2xvckF0KDEuMCwgUXQ6OndoaXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QudG9wTGVmdCgpKTsKLSAgICAgICAgICAg
IGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChRUG9pbnQocmVjdC50b3BMZWZ0KCkueCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC50b3BMZWZ0KCkueSgpICsgLyogb2Zmc2V0IGxp
bWl0IGZvciBncmFkaWVudCAqLyAyMCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0
Q29sb3JBdCgwLjAsIFF0OjpkYXJrR3JheSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDAuMzUsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkcmF3UmVj
dGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIGxpbmVhckdyYWRp
ZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFFXaW5k
b3dzU3R5bGU6OmRyYXdQcmltaXRpdmUoZWxlbWVudCwgb3B0aW9uLCBwYWludGVyLCB3aWRnZXQp
OwotICAgIH0KLX0KLQotdm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3TXVsdGlwbGVDb21ib0J1
dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIFFDb2xvciBjb2xvcikg
Y29uc3QKLXsKLSAgICBpbnQgcmVjdFdpZHRoID0gc2l6ZS53aWR0aCgpIC0gMTsKLSAgICBpbnQg
d2lkdGggPSBxTWF4KDIsIHJlY3RXaWR0aCA+PiAzKTsKLSAgICBpbnQgZGlzdGFuY2UgPSAocmVj
dFdpZHRoIC0gMyAqIHdpZHRoKSA+PiAxOwotICAgIGludCB0b3AgPSAoc2l6ZS5oZWlnaHQoKSAt
IHdpZHRoKSA+PiAxOwotCi0gICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKLSAgICBwYWludGVy
LT5zZXRCcnVzaChjb2xvcik7Ci0KLSAgICBwYWludGVyLT5kcmF3UmVjdCgwLCB0b3AsIHdpZHRo
LCB3aWR0aCk7Ci0gICAgcGFpbnRlci0+ZHJhd1JlY3Qod2lkdGggKyBkaXN0YW5jZSwgdG9wLCB3
aWR0aCwgd2lkdGgpOwotICAgIHBhaW50ZXItPmRyYXdSZWN0KDIgKiAod2lkdGggKyBkaXN0YW5j
ZSksIHRvcCwgd2lkdGgsIHdpZHRoKTsKLX0KLQotdm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3
U2ltcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBR
Q29sb3IgY29sb3IpIGNvbnN0Ci17Ci0gICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAg
IGludCBtaWRsZSA9IHdpZHRoID4+IDE7Ci0gICAgUVZlY3RvcjxRTGluZT4gbGluZXMod2lkdGgg
KyAxKTsKLQotICAgIGZvciAoaW50IHggPSAwLCB5ID0gMDsgIHggPCBtaWRsZTsgeCsrLCB5Kysp
IHsKLSAgICAgICAgbGluZXNbeF0gPSBRTGluZSh4LCB5LCB4LCB5ICsgMik7Ci0gICAgICAgIGxp
bmVzW3ggKyBtaWRsZV0gPSBRTGluZSh3aWR0aCAtIHggLSAxLCB5LCB3aWR0aCAtIHggLSAxLCB5
ICsgMik7Ci0gICAgfQotICAgIC8vIEp1c3QgdG8gZW5zdXJlIHRoZSBsaW5lcycgaW50ZXJzZWN0
aW9uLgotICAgIGxpbmVzW3dpZHRoXSA9IFFMaW5lKG1pZGxlLCBtaWRsZSwgbWlkbGUsIG1pZGxl
ICsgMik7Ci0KLSAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOwotICAgIHBhaW50ZXItPnNldEJy
dXNoKGNvbG9yKTsKLSAgICBwYWludGVyLT5kcmF3TGluZXMobGluZXMpOwotfQotCi1RU2l6ZSBR
dE1vYmlsZVdlYlN0eWxlOjpnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNpemUmIGJ1dHRvblNp
emUpIGNvbnN0Ci17Ci0gICAgY29uc3QgaW50IGJvcmRlciA9IHFNYXgoMywgYnV0dG9uU2l6ZS53
aWR0aCgpID4+IDMpIDw8IDE7Ci0KLSAgICBpbnQgd2lkdGggPSBidXR0b25TaXplLndpZHRoKCkg
LSBib3JkZXI7Ci0gICAgaW50IGhlaWdodCA9IGJ1dHRvblNpemUuaGVpZ2h0KCkgLSBib3JkZXI7
Ci0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCi0gICAgICAgIHJldHVybiBRU2l6
ZSgpOwotCi0gICAgaWYgKGhlaWdodCA+PSAod2lkdGggPj4gMSkpCi0gICAgICAgIHdpZHRoID0g
d2lkdGggPj4gMSA8PCAxOwotICAgIGVsc2UKLSAgICAgICAgd2lkdGggPSBoZWlnaHQgPDwgMTsK
LQotICAgIHJldHVybiBRU2l6ZSh3aWR0aCArIDEsIHdpZHRoKTsKLX0KLQotUVBpeG1hcCBRdE1v
YmlsZVdlYlN0eWxlOjpmaW5kQ29tYm9CdXR0b24oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgbXVs
dGlwbGUsIGJvb2wgZGlzYWJsZWQpIGNvbnN0Ci17Ci0gICAgUVBpeG1hcCByZXN1bHQ7Ci0gICAg
UVNpemUgaW1hZ2VTaXplID0gZ2V0QnV0dG9uSW1hZ2VTaXplKHNpemUpOwotCi0gICAgaWYgKGlt
YWdlU2l6ZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFFQaXhtYXAoKTsKLSAgICBzdGF0aWMg
Y29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFlbW81LSIpICsgUUxh
dGluMVN0cmluZyhtZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSArIFFMYXRpbjFTdHJpbmcoIi1j
b21iby0iKTsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIChtdWx0aXBsZSA/IFFMYXRpbjFT
dHJpbmcoIm11bHRpcGxlLSIpIDogUUxhdGluMVN0cmluZygic2ltcGxlLSIpKQotICAgICAgICAr
IFFTdHJpbmc6Om51bWJlcihpbWFnZVNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikg
KyBRU3RyaW5nOjpudW1iZXIoaW1hZ2VTaXplLmhlaWdodCgpKQotICAgICAgICArIFFMYXRpbjFT
dHJpbmcoIi0iKSArIChkaXNhYmxlZCA/IFFMYXRpbjFTdHJpbmcoImRpc2FibGVkIikgOiBRTGF0
aW4xU3RyaW5nKCJlbmFibGVkIikpOwotICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwg
cmVzdWx0KSkgewotICAgICAgICByZXN1bHQgPSBRUGl4bWFwKGltYWdlU2l6ZSk7Ci0gICAgICAg
IHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIFFQYWludGVyIHBhaW50ZXIo
JnJlc3VsdCk7Ci0gICAgICAgIGlmIChtdWx0aXBsZSkKLSAgICAgICAgICAgIGRyYXdNdWx0aXBs
ZUNvbWJvQnV0dG9uKCZwYWludGVyLCBpbWFnZVNpemUsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3Jh
eSA6IFF0OjpkYXJrR3JheSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRyYXdTaW1wbGVD
b21ib0J1dHRvbigmcGFpbnRlciwgaW1hZ2VTaXplLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkg
OiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3Vs
dCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHls
ZTo6ZHJhd0NvbXBsZXhDb250cm9sKENvbXBsZXhDb250cm9sIGNvbnRyb2wsIGNvbnN0IFFTdHls
ZU9wdGlvbkNvbXBsZXgqIG9wdGlvbiwgUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFXaWRnZXQq
IHdpZGdldCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGNvbnRyb2wpIHsKLSAgICBjYXNlIENDX0Nv
bWJvQm94OiB7Ci0gICAgICAgIGJvb2wgbXVsdGlwbGUgPSBmYWxzZTsKLSAgICAgICAgY29uc3Qg
Ym9vbCBkaXNhYmxlZCA9ICEob3B0aW9uLT5zdGF0ZSAmIFN0YXRlX0VuYWJsZWQpOwotCi0gICAg
ICAgIGNvbnN0IFFTdHlsZU9wdGlvbkNvbWJvQm94KiBjbWIgPSAwOwotICAgICAgICBjb25zdCBX
ZWJDb3JlOjpRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3gqIHdlYkNvbWJvID0gc3RhdGljX2Nhc3Q8
Y29uc3QgV2ViQ29yZTo6UXRTdHlsZU9wdGlvbldlYkNvbWJvQm94Kj4ob3B0aW9uKTsKLQotICAg
ICAgICBpZiAod2ViQ29tYm8pIHsKLSAgICAgICAgICAgIG11bHRpcGxlID0gd2ViQ29tYm8tPm11
bHRpcGxlKCk7Ci0gICAgICAgICAgICBjbWIgPSB3ZWJDb21ibzsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBjbWIgPSBxc3R5bGVvcHRpb25fY2FzdDxjb25zdCBRU3R5bGVPcHRpb25Db21i
b0JveCo+KG9wdGlvbik7Ci0KLSAgICAgICAgaWYgKCFjbWIpIHsKLSAgICAgICAgICAgIFFXaW5k
b3dzU3R5bGU6OmRyYXdDb21wbGV4Q29udHJvbChjb250cm9sLCBvcHRpb24sIHBhaW50ZXIsIHdp
ZGdldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghKGNt
Yi0+c3ViQ29udHJvbHMgJiBTQ19Db21ib0JveEFycm93KSkKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIFFSZWN0IHJlY3QgPSBvcHRpb24tPnJlY3Q7Ci0gICAgICAgIFFQZW4gcGVuKFF0
OjpkYXJrR3JheSwgMS4wLCBRdDo6U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpv
aW4pOwotICAgICAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQ7Ci0gICAgICAgIGlm
IChkaXNhYmxlZCkgewotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5i
b3R0b21MZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKHJl
Y3QudG9wTGVmdCgpKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4w
LCBRdDo6Z3JheSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwg
UXQ6OndoaXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50
LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50
LnNldEZpbmFsU3RvcChRUG9pbnQocmVjdC5ib3R0b21MZWZ0KCkueCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVjdC5ib3R0b21MZWZ0KCkueSgpIC0gLyogb2Zmc2V0IGxpbWl0IGZvciBn
cmFkaWVudCAqLyAyMCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgw
LjAsIFF0OjpncmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC40
LCBRdDo6d2hpdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJv
bEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBsaW5lYXJHcmFkaWVudCk7Ci0KLSAgICAg
ICAgcmVjdCA9IHN1YkNvbnRyb2xSZWN0KENDX0NvbWJvQm94LCBjbWIsIFNDX0NvbWJvQm94QXJy
b3csIHdpZGdldCk7Ci0gICAgICAgIFFQaXhtYXAgcGljID0gZmluZENvbWJvQnV0dG9uKHJlY3Qu
c2l6ZSgpLCBtdWx0aXBsZSwgZGlzYWJsZWQpOwotCi0gICAgICAgIGlmIChwaWMuaXNOdWxsKCkp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpbnQgeCA9IChyZWN0LndpZHRoKCkgLSBw
aWMud2lkdGgoKSkgPj4gMTsKLSAgICAgICAgaW50IHkgPSAocmVjdC5oZWlnaHQoKSAtIHBpYy5o
ZWlnaHQoKSkgPj4gMTsKLSAgICAgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChyZWN0LngoKSArIHgs
IHJlY3QueSgpICsgeSwgcGljKTsKLQotICAgICAgICBwYWludGVyLT5zZXRQZW4oZGlzYWJsZWQg
PyBRdDo6Z3JheSA6IFF0OjpkYXJrR3JheSk7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdMaW5lKHJl
Y3QubGVmdCgpIC0gMiwgcmVjdC50b3AoKSArIDIsIHJlY3QubGVmdCgpIC0gMiwgcmVjdC5ib3R0
b20oKSAtIDIpOwotCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAg
ICBRV2luZG93c1N0eWxlOjpkcmF3Q29tcGxleENvbnRyb2woY29udHJvbCwgb3B0aW9uLCBwYWlu
dGVyLCB3aWRnZXQpOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUXRNb2JpbGVXZWJTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UXRNb2JpbGVXZWJTdHlsZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYjk5ZDJi
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5
bGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0j
aWZuZGVmIFF0TW9iaWxlV2ViU3R5bGVfaAotI2RlZmluZSBRdE1vYmlsZVdlYlN0eWxlX2gKLQot
I2luY2x1ZGUgPFFXaW5kb3dzU3R5bGU+Ci0KLWNsYXNzIFF0TW9iaWxlV2ViU3R5bGUgOiBwdWJs
aWMgUVdpbmRvd3NTdHlsZSB7Ci1wdWJsaWM6Ci0gICAgUXRNb2JpbGVXZWJTdHlsZSgpOwotCi0g
ICAgdm9pZCBkcmF3Q29udHJvbChDb250cm9sRWxlbWVudCwgY29uc3QgUVN0eWxlT3B0aW9uKiwg
UVBhaW50ZXIqLCBjb25zdCBRV2lkZ2V0KikgY29uc3Q7Ci0gICAgdm9pZCBkcmF3Q29tcGxleENv
bnRyb2woQ29tcGxleENvbnRyb2wsIGNvbnN0IFFTdHlsZU9wdGlvbkNvbXBsZXgqLCBRUGFpbnRl
ciosIGNvbnN0IFFXaWRnZXQqKSBjb25zdDsKLSAgICB2b2lkIGRyYXdQcmltaXRpdmUoUHJpbWl0
aXZlRWxlbWVudCwgY29uc3QgUVN0eWxlT3B0aW9uKiwgUVBhaW50ZXIqLCBjb25zdCBRV2lkZ2V0
KikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBkcmF3Q2hlY2tlcihRUGFpbnRlciogcGFp
bnRlciwgaW50IHNpemUsIFFDb2xvciBjb2xvcikgY29uc3Q7Ci0gICAgUVBpeG1hcCBmaW5kQ2hl
Y2tlcihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7Ci0KLSAgICB2b2lk
IGRyYXdSYWRpbyhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hl
Y2tlZCwgUUNvbG9yIGNvbG9yKSBjb25zdDsKLSAgICBRUGl4bWFwIGZpbmRSYWRpbyhjb25zdCBR
U2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBib29sIGRpc2FibGVkKSBjb25zdDsKLQotICAgIFFT
aXplIGdldEJ1dHRvbkltYWdlU2l6ZShjb25zdCBRU2l6ZSYgYnV0dG9uU2l6ZSkgY29uc3Q7Ci0g
ICAgdm9pZCBkcmF3U2ltcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFT
aXplJiBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0OwotICAgIHZvaWQgZHJhd011bHRpcGxlQ29t
Ym9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBRQ29sb3IgY29s
b3IpIGNvbnN0OwotICAgIFFQaXhtYXAgZmluZENvbWJvQnV0dG9uKGNvbnN0IFFTaXplJiBzaXpl
LCBib29sIG11bHRpcGxlLCBib29sIGRpc2FibGVkKSBjb25zdDsKLQotfTsKLQotI2VuZGlmIC8v
IFF0TW9iaWxlV2ViU3R5bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvUmVuZGVyVGhlbWVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVFTdHlsZS5jcHAKc2ltaWxhcml0eSBpbmRleCA5NCUKcmVuYW1lIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKcmVuYW1lIHRvIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcAppbmRleCBiZDQ2NWYwLi4wYzA5
NjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5j
cHAKQEAgLTI4LDcgKzI4LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVGhlbWVRdC5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lUVN0eWxlLmgiCiAKICNp
bmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgi
CkBAIC00NCwxNiArNDQsMTMgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2lmIFVT
RShRVF9NT0JJTEVfVEhFTUUpCi0jaW5jbHVkZSAiUXRNb2JpbGVXZWJTdHlsZS5oIgotI2VuZGlm
CiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgogI2lmIEVOQUJMRShWSURFTykKICNpbmNs
dWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2VuZGlmCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKICNpbmNsdWRl
ICJRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCIKICNpbmNsdWRlICJxd2Vic2V0dGluZ3MuaCIK
QEAgLTExMywxNyArMTEwLDYgQEAgc3RhdGljIGNvbnN0IGZsb2F0IG1pblNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25TaXplID0gOTsKIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhTZWFyY2hGaWVs
ZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDMwOwogc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCA9IDE4OwogCi0jaWYgVVNFKFFUX01PQklMRV9U
SEVNRSkKLW5hbWVzcGFjZSB7Ci0gICAgZmxvYXQgYnV0dG9uUGFkZGluZ0xlZnQgPSAxODsKLSAg
ICBmbG9hdCBidXR0b25QYWRkaW5nUmlnaHQgPSAxODsKLSAgICBmbG9hdCBidXR0b25QYWRkaW5n
VG9wID0gMjsKLSAgICBmbG9hdCBidXR0b25QYWRkaW5nQm90dG9tID0gMzsKLSAgICBmbG9hdCBt
ZW51TGlzdFBhZGRpbmcgPSA5OwotICAgIGZsb2F0IHRleHRGaWVsZFBhZGRpbmcgPSA1OwotfQot
I2VuZGlmCi0KIFN0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKFJlbmRlclRoZW1lUXQqIHRoZW1l
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKIHsKICAgICBpbml0KHBhaW50SW5mby5jb250
ZXh0ID8gcGFpbnRJbmZvLmNvbnRleHQgOiAwLCB0aGVtZS0+cVN0eWxlKCkpOwpAQCAtMTk0LDEx
ICsxODAsNyBAQCBSZW5kZXJUaGVtZVF0OjpSZW5kZXJUaGVtZVF0KFBhZ2UqIHBhZ2UpCiAgICAg
bV9idXR0b25Gb250UGl4ZWxTaXplID0gZm9udEluZm8ucGl4ZWxTaXplKCk7CiAjZW5kaWYKIAot
I2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgbV9mYWxsYmFja1N0eWxlID0gbmV3IFF0TW9i
aWxlV2ViU3R5bGU7Ci0jZWxzZQogICAgIG1fZmFsbGJhY2tTdHlsZSA9IFFTdHlsZUZhY3Rvcnk6
OmNyZWF0ZShRTGF0aW4xU3RyaW5nKCJ3aW5kb3dzIikpOwotI2VuZGlmCiB9CiAKIFJlbmRlclRo
ZW1lUXQ6On5SZW5kZXJUaGVtZVF0KCkKQEAgLTIwOSwzMyArMTkxLDYgQEAgUmVuZGVyVGhlbWVR
dDo6flJlbmRlclRoZW1lUXQoKQogI2VuZGlmCiB9CiAKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1F
KQotYm9vbCBSZW5kZXJUaGVtZVF0Ojppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgZmlsbCwg
Y29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKLXsKLSAgICBzd2l0Y2ggKHN0eWxl
LT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0
dG9uUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUGFy
dDoKLSAgICBjYXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAg
ICAgIC8vIFRlc3QgdGhlIHN0eWxlIHRvIHNlZSBpZiB0aGUgVUEgYm9yZGVyIGFuZCBiYWNrZ3Jv
dW5kIG1hdGNoLgotICAgICAgICByZXR1cm4gKHN0eWxlLT5ib3JkZXIoKSAhPSBib3JkZXIKLSAg
ICAgICAgICAgICAgICB8fCAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBmaWxsCi0gICAg
ICAgICAgICAgICAgfHwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvcikgIT0gYmFja2dyb3VuZENvbG9yKTsKLSAgICBjYXNlIENoZWNrYm94UGFy
dDoKLSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBi
b3JkZXIsIGZpbGwsIGJhY2tncm91bmRDb2xvcik7Ci0gICAgfQotfQotCi1pbnQgUmVuZGVyVGhl
bWVRdDo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAotewotICAgIHJldHVybiAxOwotfQotI2Vsc2UKIC8vIFJlbW92ZSB0aGlzIHdoZW4gU2VhcmNo
RmllbGRQYXJ0IGlzIHN0eWxlLWFibGUgaW4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZCgp
CiBib29sIFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBmaWxsLCBj
b25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewpAQCAtMjQ5LDcgKzIwNCw2IEBA
IGJvb2wgUmVuZGVyVGhlbWVRdDo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgQm9yZGVyRGF0YSYKICAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0Nv
bnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dyb3VuZENvbG9yKTsKICAgICB9
CiB9Ci0jZW5kaWYKIAogLy8gZm9yIHNvbWUgd2lkZ2V0IHBhaW50aW5nLCB3ZSBuZWVkIHRvIGZh
bGxiYWNrIHRvIFdpbmRvd3Mgc3R5bGUKIFFTdHlsZSogUmVuZGVyVGhlbWVRdDo6ZmFsbGJhY2tT
dHlsZSgpIGNvbnN0CkBAIC0yNTksMTAgKzIxMyw2IEBAIFFTdHlsZSogUmVuZGVyVGhlbWVRdDo6
ZmFsbGJhY2tTdHlsZSgpIGNvbnN0CiAKIFFTdHlsZSogUmVuZGVyVGhlbWVRdDo6cVN0eWxlKCkg
Y29uc3QKIHsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIHJldHVybiBmYWxsYmFja1N0
eWxlKCk7Ci0jZW5kaWYKLQogICAgIGlmIChtX3BhZ2UpIHsKICAgICAgICAgUVdlYlBhZ2VDbGll
bnQqIHBhZ2VDbGllbnQgPSBtX3BhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGxhdGZvcm1QYWdl
Q2xpZW50KCk7CiAKQEAgLTQ5Nyw3ICs0NDcsNiBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmNvbXB1
dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkgY29uc3QKICAgICAg
ICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0jaWYgIVVTRShRVF9NT0JJTEVfVEhFTUUpCiAgICAgY2FzZSBQdXNoQnV0dG9uUGFy
dDoKICAgICBjYXNlIEJ1dHRvblBhcnQ6IHsKICAgICAgICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0
eWxlT3B0aW9uOwpAQCAtNTI3LDcgKzQ3Niw2IEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6Y29tcHV0
ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBjb25zdAogICAgICAg
ICBzaXplLnNldEhlaWdodChtZW51TGlzdFNpemUuaGVpZ2h0KCkpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0jZW5kaWYKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC01
ODMsMTMgKzUzMSwxMSBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdEJ1dHRvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogcwogICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOwogI2VuZGlmCiAKLSNpZiAh
VVNFKFFUX01PQklMRV9USEVNRSkKICAgICBGb250RmFtaWx5IGZvbnRGYW1pbHk7CiAgICAgZm9u
dEZhbWlseS5zZXRGYW1pbHkobV9idXR0b25Gb250RmFtaWx5KTsKICAgICBmb250RGVzY3JpcHRp
b24uc2V0RmFtaWx5KGZvbnRGYW1pbHkpOwogICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24o
Zm9udERlc2NyaXB0aW9uKTsKICAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShzZWxlY3Rvci0+Zm9u
dFNlbGVjdG9yKCkpOwotI2VuZGlmCiAgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5
bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOwogICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOwogICAg
IHNldEJ1dHRvblBhZGRpbmcoc3R5bGUpOwpAQCAtNjAwLDcgKzU0Niw2IEBAIHZvaWQgUmVuZGVy
VGhlbWVRdDo6c2V0QnV0dG9uU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgY29t
cHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOwogfQogCi0jaWYgIVVTRShRVF9NT0JJTEVfVEhF
TUUpCiB2b2lkIFJlbmRlclRoZW1lUXQ6OnNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0
eWxlKSBjb25zdAogewogICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBzdHlsZU9wdGlvbjsKQEAgLTYz
NSwxNyArNTgwLDYgQEAgdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRCdXR0b25QYWRkaW5nKFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3QKICAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFk
ZGluZ1RvcCwgRml4ZWQpKTsKICAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFk
ZGluZ0JvdHRvbSwgRml4ZWQpKTsKIH0KLSNlbHNlCi12b2lkIFJlbmRlclRoZW1lUXQ6OnNldEJ1
dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGlmICghc3R5bGUp
Ci0gICAgICAgIHJldHVybjsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKGJ1dHRv
blBhZGRpbmdMZWZ0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3Ro
KGJ1dHRvblBhZGRpbmdSaWdodCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChM
ZW5ndGgoYnV0dG9uUGFkZGluZ1RvcCwgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ0Jv
dHRvbShMZW5ndGgoYnV0dG9uUGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKLX0KLSNlbmRpZgogCiBi
b29sIFJlbmRlclRoZW1lUXQ6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQogewpAQCAtNjgxLDEwICs2MTUsNiBAQCB2b2lk
IFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CiAgICAgc3R5bGUt
PnJlc2V0UGFkZGluZygpOwogICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKLSNp
ZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgo
dGV4dEZpZWxkUGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExl
bmd0aCh0ZXh0RmllbGRQYWRkaW5nLCBGaXhlZCkpOwotI2VuZGlmCiB9CiAKIGJvb2wgUmVuZGVy
VGhlbWVRdDo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCkBAIC02OTcsMTIgKzYyNyw3IEBAIGJvb2wgUmVuZGVyVGhl
bWVRdDo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGks
IGNvbnN0IEluCiAgICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBwYW5lbCk7CiAgICAgcGFu
ZWwucmVjdCA9IHI7CiAgICAgcGFuZWwubGluZVdpZHRoID0gZmluZEZyYW1lTGluZVdpZHRoKHFT
dHlsZSgpKTsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIGlmIChpc1ByZXNzZWQobykp
Ci0gICAgICAgIHBhbmVsLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotI2Vsc2UKICAg
ICBwYW5lbC5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSNlbmRpZgogICAgIHBhbmVs
LmZlYXR1cmVzID0gUVN0eWxlT3B0aW9uRnJhbWVWMjo6Tm9uZTsKIAogICAgIC8vIEdldCB0aGUg
Y29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIHRleHQgZmllbGQKQEAgLTc0Miw5ICs2NjcsNiBAQCB2
b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRQogCiAgICAgLy8gQWRkIGluIHRoZSBwYWRkaW5nIHRoYXQg
d2UnZCBsaWtlIHRvIHVzZS4KICAgICBzZXRQb3B1cFBhZGRpbmcoc3R5bGUpOwotI2lmIFVTRShR
VF9NT0JJTEVfVEhFTUUpCi0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChtZW51TGlz
dFBhZGRpbmcsIEZpeGVkKSk7Ci0jZW5kaWYKIH0KIAogdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRQ
b3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdApAQCAtNzk1LDEzICs3MTcsOSBA
QCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIGksIGNvbnN0IEludAogCiB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdE1l
bnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwg
RWxlbWVudCopIGNvbnN0CiB7Ci0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkKLSAgICAvLyBNb2Jp
bGUgdGhlbWUgdXNlcyBib3JkZXIgcmFkaXVzLgotI2Vsc2UKICAgICAvLyBXT1JLQVJPVU5EIGJl
Y2F1c2UgaHRtbC5jc3Mgc3BlY2lmaWVzIC13ZWJraXQtYm9yZGVyLXJhZGl1cyBmb3IgPHNlbGVj
dD4gc28gd2Ugb3ZlcnJpZGUgaXQgaGVyZQogICAgIC8vIHNlZSBhbHNvIGh0dHA6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzk5CiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFk
aXVzKCk7Ci0jZW5kaWYKIAogICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0by4KICAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CkBAIC0xMDI4LDggKzk0Niw4IEBAIGJvb2wg
UmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgYnV0dG9uIHN0
YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveC4KICAgICBpbnQgY2Fu
Y2VsQnV0dG9uU2l6ZSA9IHFNaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHFNaW4oaW5wdXRD
b250ZW50Qm94LmhlaWdodCgpLCByLmhlaWdodCgpKSk7CiAgICAgLy8gQ2FsY3VsYXRlIGNhbmNl
bCBidXR0b24ncyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgaW5wdXQgZWxlbWVudC4KLSAg
ICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdoLCBzbyBp
ZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKLSAgICAvLyBiZSBv
bmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0ZW5kcyB0
byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgorICAgIC8vIENlbnRlciB0aGUgYnV0dG9uIHZl
cnRpY2FsbHkuIFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBv
ZmYtY2VudGVyLCBpdCB3aWxsCisgICAgLy8gYmUgb25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90
dG9tIG9mIHRoZSBmaWVsZC4gVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0
LgogICAgIEludFJlY3QgY2FuY2VsQnV0dG9uUmVjdChvLT5vZmZzZXRGcm9tQW5jZXN0b3JDb250
YWluZXIoaW5wdXRSZW5kZXJCb3gpLndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlucHV0Q29udGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgpIC0gY2Fu
Y2VsQnV0dG9uU2l6ZSArIDEpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fu
Y2VsQnV0dG9uU2l6ZSwgY2FuY2VsQnV0dG9uU2l6ZSk7CkBAIC0xMTU1LDExICsxMDczLDYgQEAg
Ym9vbCBSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2Up
IGNvbnN0CiAKIHZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZF
eGlzdHMoUVBhbGV0dGUmIHBhbGV0dGUpIGNvbnN0CiB7Ci0jaWYgVVNFKFFUX01PQklMRV9USEVN
RSkKLSAgICBzdGF0aWMgUVBhbGV0dGUgbGlnaHRHcmF5UGFsZXR0ZShRdDo6bGlnaHRHcmF5KTsK
LSAgICBwYWxldHRlID0gbGlnaHRHcmF5UGFsZXR0ZTsKLSAgICByZXR1cm47Ci0jZW5kaWYKICAg
ICAvLyBJZiB0aGUgd2VidmlldyBoYXMgYSBjdXN0b20gcGFsZXR0ZSwgdXNlIGl0CiAgICAgaWYg
KCFtX3BhZ2UpCiAgICAgICAgIHJldHVybjsKQEAgLTE0ODgsNyArMTQwMSw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWluCiAKICAgICBpZiAoTWVkaWFQbGF5ZXIqIHBsYXllciA9IG1lZGlhRWxl
bWVudC0+cGxheWVyKCkpIHsKICAgICAgICAgLy8gR2V0IHRoZSBidWZmZXJlZCBwYXJ0cyBvZiB0
aGUgbWVkaWEKLSAgICAgICAgUGFzc1JlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCA9IHBsYXll
ci0+YnVmZmVyZWQoKTsKKyAgICAgICAgUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZlcmVkID0gcGxh
eWVyLT5idWZmZXJlZCgpOwogICAgICAgICBpZiAoYnVmZmVyZWQtPmxlbmd0aCgpID4gMCAmJiBw
bGF5ZXItPmR1cmF0aW9uKCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHko
KSkgewogICAgICAgICAgICAgLy8gU2V0IHRoZSB0cmFuc2Zvcm0gYW5kIGJydXNoCiAgICAgICAg
ICAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7
CkBAIC0xNTY3LDcgKzE0ODAsNyBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAKIGRvdWJsZSBSZW5kZXJUaGVtZVF0
OjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdAogewotICAgIHJldHVybiAgUUFwcGxpY2F0aW9u
OjpjdXJzb3JGbGFzaFRpbWUoKSAvIDEwMDAuMCAvIDIuMDsKKyAgICByZXR1cm4gUUFwcGxpY2F0
aW9uOjpjdXJzb3JGbGFzaFRpbWUoKSAvIDEwMDAuMCAvIDIuMDsKIH0KIAogU3RyaW5nIFJlbmRl
clRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxl
bmFtZXMsIGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmgKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCnJlbmFtZSB0byBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oCmluZGV4IDJiYzMx
ODQuLjUxMTM5ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFT
dHlsZS5oCkBAIC0xOSw4ICsxOSw4IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
ICAqCiAgKi8KLSNpZm5kZWYgUmVuZGVyVGhlbWVRdF9oCi0jZGVmaW5lIFJlbmRlclRoZW1lUXRf
aAorI2lmbmRlZiBSZW5kZXJUaGVtZVFTdHlsZV9oCisjZGVmaW5lIFJlbmRlclRoZW1lUVN0eWxl
X2gKIAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3Mg
U2Nyb2xsYmFyVGhlbWVRdDsKIAogY2xhc3MgUmVuZGVyVGhlbWVRdCA6IHB1YmxpYyBSZW5kZXJU
aGVtZSB7CiBwcml2YXRlOgotICAgIFJlbmRlclRoZW1lUXQoUGFnZSogcGFnZSk7CisgICAgUmVu
ZGVyVGhlbWVRdChQYWdlKik7CiAgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVRdCgpOwogCiBwdWJs
aWM6CkBAIC01Miw5ICs1Miw5IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgZXh0cmFEZWZhdWx0U3R5
bGVTaGVldCgpOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVy
U3R5bGUqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3Qg
UmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1
c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgaW50IGJhc2Vs
aW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0KiBvKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwogCiAgICAgLy8g
QSBtZXRob2QgYXNraW5nIGlmIHRoZSBjb250cm9sIGNoYW5nZXMgaXRzIHRpbnQgd2hlbiB0aGUg
d2luZG93IGhhcyBmb2N1cyBvciBub3QuCiAgICAgdmlydHVhbCBib29sIGNvbnRyb2xTdXBwb3J0
c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwpAQCAtNjIsNyArNjIsNyBAQCBwdWJs
aWM6CiAgICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGlu
ZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0NvbnRyb2xU
aW50cygpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0
IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFJl
cGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCosIEludFJlY3QmKTsKIAogICAgIC8vIFRoZSBw
bGF0Zm9ybSBzZWxlY3Rpb24gY29sb3IuCiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OwpAQCAtODEsMTAgKzgxLDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29u
c3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5k
Q29sb3IpIGNvbnN0OwotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgdmlydHVhbCBpbnQg
cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqKSBjb25zdDsKLSNlbmRpZgor
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImKSBjb25zdDsKIAog
I2lmIEVOQUJMRShWSURFTykKICAgICB2aXJ0dWFsIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNT
dHlsZVNoZWV0KCk7CkBAIC05MywxMCArOTAsMTAgQEAgcHVibGljOgogICAgIFFTdHlsZSogcVN0
eWxlKCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2Jv
eChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7
CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNp
emUoUmVuZGVyU3R5bGUqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKQEAgLTEwOSw3ICsx
MDYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEFyZWEoUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAg
dmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpAQCAtMTQ1LDkgKzE0Miw5IEBAIHByb3RlY3RlZDoK
IAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCiAgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGlu
dGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmlydHVh
bCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0OworICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlv
blJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKICAg
ICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUgcHJvZ3Jl
c3MgYmFyLgotICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NC
YXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdDsKKyAgICB2aXJ0dWFsIGRv
dWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29u
c3Q7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTE2NiwxMSArMTYzLDExIEBAIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9y
KENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiBwcml2YXRlOgogCi0gICAgdm9p
ZCBwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgSW50UmVjdCYg
cikgY29uc3Q7CisgICAgdm9pZCBwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRlciosIGNvbnN0
IEludFJlY3QmKSBjb25zdDsKICAgICBkb3VibGUgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0
eSgpIGNvbnN0OwotICAgIFFDb2xvciBnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoUmVu
ZGVyT2JqZWN0KiBvID0gMCkgY29uc3Q7CisgICAgUUNvbG9yIGdldE1lZGlhQ29udHJvbEZvcmVn
cm91bmRDb2xvcihSZW5kZXJPYmplY3QqID0gMCkgY29uc3Q7CiAjZW5kaWYKLSAgICB2b2lkIGNv
bXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkgY29uc3Q7Cisg
ICAgdm9pZCBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSopIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgpOwpAQCAtMTg0
LDcgKzE4MSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVu
dElmRXhpc3RzKFFQYWxldHRlJikgY29uc3Q7CiAKLSAgICBpbnQgZmluZEZyYW1lTGluZVdpZHRo
KFFTdHlsZSogc3R5bGUpIGNvbnN0OworICAgIGludCBmaW5kRnJhbWVMaW5lV2lkdGgoUVN0eWxl
KikgY29uc3Q7CiAKICAgICBRU3R5bGUqIGZhbGxiYWNrU3R5bGUoKSBjb25zdDsKIApAQCAtMjIx
LDcgKzIxOCw3IEBAIHB1YmxpYzoKICAgICB7IHN0eWxlLT5kcmF3Q29tcGxleENvbnRyb2woY2Ms
ICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIGluaXQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBRU3R5bGUqKTsKKyAgICB2b2lkIGluaXQoR3JhcGhpY3ND
b250ZXh0KiwgUVN0eWxlKik7CiAKICAgICBRQnJ1c2ggb2xkQnJ1c2g7CiAgICAgYm9vbCBvbGRB
bnRpYWxpYXNpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5k
ZXJUaGVtZVF0TW9iaWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXRNb2JpbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NWEz
MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVF0TW9iaWxlLmNwcApAQCAtMCwwICsxLDEzNzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lUXRNb2JpbGUuaCIKKworI2luY2x1ZGUg
IkNTU0ZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2lu
Y2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCisjaW5jbHVkZSAi
Q29sb3IuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNs
dWRlICJGb250U2VsZWN0b3IuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgor
I2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJp
bmdzLmgiCisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRz
LmgiCisjZW5kaWYKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgor
I2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2lmIEVO
QUJMRShQUk9HUkVTU19UQUcpCisjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKKyNlbmRpZgor
I2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5j
bHVkZSAiU2xpZGVyVGh1bWJFbGVtZW50LmgiCisjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgorI2lu
Y2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisKKyNpbmNsdWRlIDxRQXBwbGljYXRpb24+
CisjaW5jbHVkZSA8UUNvbG9yPgorI2luY2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CisjaW5jbHVk
ZSA8UUZpbGU+CisjaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgorI2luY2x1ZGUgPFFQYWludGVyPgor
I2luY2x1ZGUgPFFQaXhtYXBDYWNoZT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOworCisvLyBUaGVzZSB2YWx1ZXMgYWxsIG1hdGNoIFNhZmFyaS9X
aW4vQ2hyb21pdW0KK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNp
emUgPSAxMzsKK3N0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSA9IDk7
CitzdGF0aWMgY29uc3QgZmxvYXQgbWluQ2FuY2VsQnV0dG9uU2l6ZSA9IDU7CitzdGF0aWMgY29u
c3QgZmxvYXQgbWF4Q2FuY2VsQnV0dG9uU2l6ZSA9IDIxOworc3RhdGljIGNvbnN0IGZsb2F0IGRl
ZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDEzOworc3RhdGljIGNvbnN0
IGZsb2F0IG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gOTsKK3N0YXRpYyBj
b25zdCBmbG9hdCBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU2l6ZSA9IDMwOworc3Rh
dGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25XaWR0aCA9IDE4
OworCituYW1lc3BhY2UgeworICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdMZWZ0ID0gMTg7CisgICAg
ZmxvYXQgYnV0dG9uUGFkZGluZ1JpZ2h0ID0gMTg7CisgICAgZmxvYXQgYnV0dG9uUGFkZGluZ1Rv
cCA9IDI7CisgICAgZmxvYXQgYnV0dG9uUGFkZGluZ0JvdHRvbSA9IDM7CisgICAgZmxvYXQgbWVu
dUxpc3RQYWRkaW5nID0gOTsKKyAgICBmbG9hdCB0ZXh0RmllbGRQYWRkaW5nID0gNTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKFFQYWlu
dGVyKiBwYWludGVyLCBjb25zdCBRUGVuJiBwZW4sIGNvbnN0IFFSZWN0JiByZWN0LCBjb25zdCBR
QnJ1c2gmIGJydXNoKQoreworICAgIFFQZW4gb2xkUGVuID0gcGFpbnRlci0+cGVuKCk7CisgICAg
UUJydXNoIG9sZEJydXNoID0gcGFpbnRlci0+YnJ1c2goKTsKKyAgICBwYWludGVyLT5zZXRSZW5k
ZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworICAgIHBhaW50ZXItPnNldFBl
bihwZW4pOworICAgIHBhaW50ZXItPnNldEJydXNoKGJydXNoKTsKKworICAgIGludCBsaW5lID0g
MTsKKyAgICBwYWludGVyLT5kcmF3Um91bmRlZFJlY3QocmVjdC5hZGp1c3RlZChsaW5lLCBsaW5l
LCAtbGluZSwgLWxpbmUpLAorICAgICAgICAgICAgLyogeFJhZGl1cyAqLyA1LjAsIC8qIHlSYWRp
b3VzICovIDUuMCk7CisgICAgcGFpbnRlci0+c2V0UGVuKG9sZFBlbik7CisgICAgcGFpbnRlci0+
c2V0QnJ1c2gob2xkQnJ1c2gpOworfQorCit2b2lkIFN0eWxlUGFpbnRlcjo6ZHJhd0NoZWNrZXIo
UVBhaW50ZXIqIHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0Cit7CisgICAg
aW50IGJvcmRlciA9IHFNaW4ocU1heCgxLCBpbnQoMC4yICogc2l6ZSkpLCA2KTsKKyAgICBpbnQg
Y2hlY2tlclNpemUgPSBxTWF4KHNpemUgLSAyICogYm9yZGVyLCAzKTsKKyAgICBpbnQgd2lkdGgg
PSBjaGVja2VyU2l6ZSAvIDM7CisgICAgaW50IG1pZGRsZSA9IHFNYXgoMyAqIGNoZWNrZXJTaXpl
IC8gNywgMyk7CisgICAgaW50IHggPSAoKHNpemUgLSBjaGVja2VyU2l6ZSkgPj4gMSk7CisgICAg
aW50IHkgPSAoKHNpemUgLSBjaGVja2VyU2l6ZSkgPj4gMSkgKyAoY2hlY2tlclNpemUgLSB3aWR0
aCAtIG1pZGRsZSk7CisgICAgUVZlY3RvcjxRTGluZUY+IGxpbmVzKGNoZWNrZXJTaXplICsgMSk7
CisgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1p
ZGRsZTsgKytpKSB7CisgICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgsIHksIHgsIHkgKyB3aWR0
aCk7CisgICAgICAgICsreDsKKyAgICAgICAgKyt5OworICAgIH0KKyAgICBmb3IgKGludCBpID0g
bWlkZGxlOyBpIDw9IGNoZWNrZXJTaXplOyArK2kpIHsKKyAgICAgICAgbGluZXNbaV0gPSBRTGlu
ZUYoeCwgeSwgeCwgeSArIHdpZHRoKTsKKyAgICAgICAgKyt4OworICAgICAgICAtLXk7CisgICAg
fQorICAgIHBhaW50ZXItPmRyYXdMaW5lcyhsaW5lcy5jb25zdERhdGEoKSwgbGluZXMuc2l6ZSgp
KTsKK30KKworUVBpeG1hcCBTdHlsZVBhaW50ZXI6OmZpbmRDaGVja2VyKGNvbnN0IFFSZWN0JiBy
ZWN0LCBib29sIGRpc2FibGVkKSBjb25zdAoreworICAgIGludCBzaXplID0gcU1pbihyZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIFFQaXhtYXAgcmVzdWx0OworICAgIHN0YXRpYyBj
b25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtbW9iaWxlLXRo
ZW1lLWNoZWNrZXItIik7CisgICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1i
ZXIoc2l6ZSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5n
KCJkaXNhYmxlZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKTsKKyAgICBpZiAoIVFQaXht
YXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChz
aXplLCBzaXplKTsKKyAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAg
ICAgUVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0KTsKKyAgICAgICAgZHJhd0NoZWNrZXIoJnBhaW50
ZXIsIHNpemUsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7CisgICAg
ICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBTdHlsZVBhaW50ZXI6OmRyYXdSYWRpbyhRUGFpbnRlciogcGFp
bnRlciwgY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwgUUNvbG9yIGNvbG9yKSBjb25z
dAoreworICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywg
dHJ1ZSk7CisKKyAgICAvLyBnZXQgbWlub3Igc2l6ZSB0byBkbyBub3QgcGFpbnQgYSB3aWRlIGVs
aXBzZQorICAgIHFyZWFsIHNxdWFyZVNpemUgPSBxTWluKHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSk7CisgICAgLy8gZGVmbGF0ZSBvbmUgcGl4ZWwKKyAgICBRUmVjdCByZWN0ID0gUVJlY3Qo
UVBvaW50KDEsIDEpLCBRU2l6ZShzcXVhcmVTaXplIC0gMiwgc3F1YXJlU2l6ZSAtIDIpKTsKKyAg
ICBjb25zdCBRUG9pbnQgY2VudGVyR3JhZGllbnQocmVjdC5ib3R0b21SaWdodCgpICogMC43KTsK
KworICAgIFFSYWRpYWxHcmFkaWVudCByYWRpYWxHcmFkaWVudChjZW50ZXJHcmFkaWVudCwgY2Vu
dGVyR3JhZGllbnQueCgpIC0gMSk7CisgICAgcmFkaWFsR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAs
IFF0Ojp3aGl0ZSk7CisgICAgcmFkaWFsR3JhZGllbnQuc2V0Q29sb3JBdCgwLjYsIFF0Ojp3aGl0
ZSk7CisgICAgcmFkaWFsR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIGNvbG9yKTsKKworICAgIHBh
aW50ZXItPnNldFBlbihjb2xvcik7CisgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOworICAg
IHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOworICAgIHBhaW50ZXItPnNldEJydXNoKHJhZGlh
bEdyYWRpZW50KTsKKyAgICBwYWludGVyLT5kcmF3RWxsaXBzZShyZWN0KTsKKworICAgIGludCBi
b3JkZXIgPSAwLjEgKiAocmVjdC53aWR0aCgpICsgcmVjdC5oZWlnaHQoKSk7CisgICAgYm9yZGVy
ID0gcU1pbihxTWF4KDIsIGJvcmRlciksIDEwKTsKKyAgICByZWN0LmFkanVzdChib3JkZXIsIGJv
cmRlciwgLWJvcmRlciwgLWJvcmRlcik7CisgICAgaWYgKGNoZWNrZWQpIHsKKyAgICAgICAgcGFp
bnRlci0+c2V0UGVuKFF0OjpOb1Blbik7CisgICAgICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9y
KTsKKyAgICAgICAgcGFpbnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7CisgICAgfQorfQorCitRUGl4
bWFwIFN0eWxlUGFpbnRlcjo6ZmluZFJhZGlvKGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNr
ZWQsIGJvb2wgZGlzYWJsZWQpIGNvbnN0Cit7CisgICAgUVBpeG1hcCByZXN1bHQ7CisgICAgc3Rh
dGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS1tb2Jp
bGUtdGhlbWUtcmFkaW8tIik7CisgICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpu
dW1iZXIoc2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKSArIFFTdHJpbmc6Om51bWJl
cihzaXplLmhlaWdodCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKQorICAgICAgICArIChkaXNhYmxl
ZCA/IFFMYXRpbjFTdHJpbmcoImRpc2FibGVkIikgOiBRTGF0aW4xU3RyaW5nKCJlbmFibGVkIikp
ICsgKGNoZWNrZWQgPyBRTGF0aW4xU3RyaW5nKCItY2hlY2tlZCIpIDogUUxhdGluMVN0cmluZygi
IikpOworICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgICAg
ICByZXN1bHQgPSBRUGl4bWFwKHNpemUpOworICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNw
YXJlbnQpOworICAgICAgICBRUGFpbnRlciBwYWludGVyKCZyZXN1bHQpOworICAgICAgICBkcmF3
UmFkaW8oJnBhaW50ZXIsIHNpemUsIGNoZWNrZWQsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6
IFF0OjpkYXJrR3JheSk7CisgICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTdHlsZVBhaW50ZXI6OmRy
YXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6
ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAoreworICAgIGludCByZWN0V2lkdGggPSBzaXplLndpZHRo
KCkgLSAxOworICAgIGludCB3aWR0aCA9IHFNYXgoMiwgcmVjdFdpZHRoID4+IDMpOworICAgIGlu
dCBkaXN0YW5jZSA9IChyZWN0V2lkdGggLSAzICogd2lkdGgpID4+IDE7CisgICAgaW50IHRvcCA9
IChzaXplLmhlaWdodCgpIC0gd2lkdGgpID4+IDE7CisKKyAgICBwYWludGVyLT5zZXRQZW4oY29s
b3IpOworICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKKworICAgIHBhaW50ZXItPmRyYXdS
ZWN0KDAsIHRvcCwgd2lkdGgsIHdpZHRoKTsKKyAgICBwYWludGVyLT5kcmF3UmVjdCh3aWR0aCAr
IGRpc3RhbmNlLCB0b3AsIHdpZHRoLCB3aWR0aCk7CisgICAgcGFpbnRlci0+ZHJhd1JlY3QoMiAq
ICh3aWR0aCArIGRpc3RhbmNlKSwgdG9wLCB3aWR0aCwgd2lkdGgpOworfQorCit2b2lkIFN0eWxl
UGFpbnRlcjo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBR
U2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAoreworICAgIGludCB3aWR0aCA9IHNpemUu
d2lkdGgoKTsKKyAgICBpbnQgbWlkbGUgPSB3aWR0aCA+PiAxOworICAgIFFWZWN0b3I8UUxpbmU+
IGxpbmVzKHdpZHRoICsgMSk7CisKKyAgICBmb3IgKGludCB4ID0gMCwgeSA9IDA7ICB4IDwgbWlk
bGU7IHgrKywgeSsrKSB7CisgICAgICAgIGxpbmVzW3hdID0gUUxpbmUoeCwgeSwgeCwgeSArIDIp
OworICAgICAgICBsaW5lc1t4ICsgbWlkbGVdID0gUUxpbmUod2lkdGggLSB4IC0gMSwgeSwgd2lk
dGggLSB4IC0gMSwgeSArIDIpOworICAgIH0KKyAgICAvLyBKdXN0IHRvIGVuc3VyZSB0aGUgbGlu
ZXMnIGludGVyc2VjdGlvbi4KKyAgICBsaW5lc1t3aWR0aF0gPSBRTGluZShtaWRsZSwgbWlkbGUs
IG1pZGxlLCBtaWRsZSArIDIpOworCisgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKKyAgICBw
YWludGVyLT5zZXRCcnVzaChjb2xvcik7CisgICAgcGFpbnRlci0+ZHJhd0xpbmVzKGxpbmVzKTsK
K30KKworUVNpemUgU3R5bGVQYWludGVyOjpnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNpemUm
IGJ1dHRvblNpemUpIGNvbnN0Cit7CisgICAgY29uc3QgaW50IGJvcmRlciA9IHFNYXgoMywgYnV0
dG9uU2l6ZS53aWR0aCgpID4+IDMpIDw8IDE7CisKKyAgICBpbnQgd2lkdGggPSBidXR0b25TaXpl
LndpZHRoKCkgLSBib3JkZXI7CisgICAgaW50IGhlaWdodCA9IGJ1dHRvblNpemUuaGVpZ2h0KCkg
LSBib3JkZXI7CisKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHJl
dHVybiBRU2l6ZSgpOworCisgICAgaWYgKGhlaWdodCA+PSAod2lkdGggPj4gMSkpCisgICAgICAg
IHdpZHRoID0gd2lkdGggPj4gMSA8PCAxOworICAgIGVsc2UKKyAgICAgICAgd2lkdGggPSBoZWln
aHQgPDwgMTsKKworICAgIHJldHVybiBRU2l6ZSh3aWR0aCArIDEsIHdpZHRoKTsKK30KKworUVBp
eG1hcCBTdHlsZVBhaW50ZXI6OmZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwgYm9v
bCBtdWx0aXBsZSwgYm9vbCBkaXNhYmxlZCkgY29uc3QKK3sKKyAgICBRUGl4bWFwIHJlc3VsdDsK
KyAgICBRU2l6ZSBpbWFnZVNpemUgPSBnZXRCdXR0b25JbWFnZVNpemUoc2l6ZSk7CisKKyAgICBp
ZiAoaW1hZ2VTaXplLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gUVBpeG1hcCgpOworICAgIHN0
YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtbW9i
aWxlLXRoZW1lLWNvbWJvLSIpOworICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgKG11bHRpcGxl
ID8gUUxhdGluMVN0cmluZygibXVsdGlwbGUtIikgOiBRTGF0aW4xU3RyaW5nKCJzaW1wbGUtIikp
CisgICAgICAgICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS53aWR0aCgpKSArIFFMYXRpbjFT
dHJpbmcoIi0iKSArIFFTdHJpbmc6Om51bWJlcihpbWFnZVNpemUuaGVpZ2h0KCkpCisgICAgICAg
ICsgUUxhdGluMVN0cmluZygiLSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJs
ZWQiKSA6IFFMYXRpbjFTdHJpbmcoImVuYWJsZWQiKSk7CisgICAgaWYgKCFRUGl4bWFwQ2FjaGU6
OmZpbmQoa2V5LCByZXN1bHQpKSB7CisgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoaW1hZ2VTaXpl
KTsKKyAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgUVBhaW50
ZXIgcGFpbnRlcigmcmVzdWx0KTsKKyAgICAgICAgaWYgKG11bHRpcGxlKQorICAgICAgICAgICAg
ZHJhd011bHRpcGxlQ29tYm9CdXR0b24oJnBhaW50ZXIsIGltYWdlU2l6ZSwgZGlzYWJsZWQgPyBR
dDo6bGlnaHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKCZwYWludGVyLCBpbWFnZVNpemUsIGRpc2FibGVkID8gUXQ6
OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7CisgICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0
KGtleSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3R5bGVQYWlu
dGVyOjpTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVRdE1vYmlsZSogdGhlbWUsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvKQoreworICAgIFFfVU5VU0VEKHRoZW1lKTsKKyAgICBpbml0KHBhaW50
SW5mby5jb250ZXh0ID8gcGFpbnRJbmZvLmNvbnRleHQgOiAwKTsKK30KKwordm9pZCBTdHlsZVBh
aW50ZXI6OmluaXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIHBhaW50ZXIgPSBz
dGF0aWNfY2FzdDxRUGFpbnRlcio+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKworICAg
IGlmIChwYWludGVyKSB7CisgICAgICAgIC8vIHRoZSBzdHlsZXMgb2Z0ZW4gYXNzdW1lIGJlaW5n
IGNhbGxlZCB3aXRoIGEgcHJpc3RpbmUgcGFpbnRlciB3aGVyZSBubyBicnVzaCBpcyBzZXQsCisg
ICAgICAgIC8vIHNvIHJlc2V0IGl0IG1hbnVhbGx5CisgICAgICAgIG9sZEJydXNoID0gcGFpbnRl
ci0+YnJ1c2goKTsKKyAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOworCisg
ICAgICAgIC8vIHBhaW50aW5nIHRoZSB3aWRnZXQgd2l0aCBhbnRpLWFsaWFzaW5nIHdpbGwgbWFr
ZSBpdCBibHVycnkKKyAgICAgICAgLy8gZGlzYWJsZSBpdCBoZXJlIGFuZCByZXN0b3JlIGl0IGxh
dGVyCisgICAgICAgIG9sZEFudGlhbGlhc2luZyA9IHBhaW50ZXItPnRlc3RSZW5kZXJIaW50KFFQ
YWludGVyOjpBbnRpYWxpYXNpbmcpOworICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQ
YWludGVyOjpBbnRpYWxpYXNpbmcsIGZhbHNlKTsKKyAgICB9Cit9CisKK1N0eWxlUGFpbnRlcjo6
flN0eWxlUGFpbnRlcigpCit7CisgICAgaWYgKHBhaW50ZXIpIHsKKyAgICAgICAgcGFpbnRlci0+
c2V0QnJ1c2gob2xkQnJ1c2gpOworICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFp
bnRlcjo6QW50aWFsaWFzaW5nLCBvbGRBbnRpYWxpYXNpbmcpOworICAgIH0KK30KKwordm9pZCBT
dHlsZVBhaW50ZXI6OmRyYXdMaW5lRWRpdChjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBzdW5rZW4s
IGJvb2wgZW5hYmxlZCkKK3sKKyAgICBjb25zdCBib29sIGRpc2FibGVkID0gIWVuYWJsZWQ7Cisg
ICAgUVBlbiBwZW4oUXQ6OmRhcmtHcmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENh
cCwgUXQ6OlJvdW5kSm9pbik7CisgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7CisKKyAgICBpZiAo
c3Vua2VuKSB7CisgICAgICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50
ZXIsIHBlbiwgcmVjdCwgUUJydXNoKFF0OjpkYXJrR3JheSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50OworICAgIGlmIChkaXNh
YmxlZCkgeworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LnRvcExlZnQoKSk7
CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChyZWN0LmJvdHRvbUxlZnQoKSk7
CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6bGlnaHRHcmF5KTsK
KyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC50b3BMZWZ0KCkp
OworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QudG9wTGVm
dCgpLngoKSwKKyAgICAgICAgICAgICAgICAgICAgcmVjdC50b3BMZWZ0KCkueSgpICsgLyogb2Zm
c2V0IGxpbWl0IGZvciBncmFkaWVudCAqLyAyMCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDAuMCwgUXQ6OmRhcmtHcmF5KTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0
Q29sb3JBdCgwLjM1LCBRdDo6d2hpdGUpOworICAgIH0KKworICAgIGRyYXdSZWN0YW5ndWxhckNv
bnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgbGluZWFyR3JhZGllbnQpOworfQor
Cit2b2lkIFN0eWxlUGFpbnRlcjo6ZHJhd0NoZWNrQm94KGNvbnN0IFFSZWN0JiByZWN0LCBib29s
IGNoZWNrZWQsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBjb25zdCBib29sIGRpc2FibGVkID0gIWVu
YWJsZWQ7CisKKyAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGllbnQocmVjdC50b3BMZWZ0
KCksIHJlY3QuYm90dG9tTGVmdCgpKTsKKyAgICBpZiAoZGlzYWJsZWQpIHsKKyAgICAgICAgbGlu
ZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpsaWdodEdyYXkpOworICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRlKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmRhcmtHcmF5KTsKKyAgICAg
ICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjUsIFF0Ojp3aGl0ZSk7CisgICAgfQorCisg
ICAgcGFpbnRlci0+c2V0UGVuKFFQZW4oZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5IDogUXQ6OmRh
cmtHcmF5KSk7CisgICAgcGFpbnRlci0+c2V0QnJ1c2gobGluZWFyR3JhZGllbnQpOworICAgIHBh
aW50ZXItPmRyYXdSZWN0KHJlY3QpOworICAgIGNvbnN0IFFSZWN0IHIgPSByZWN0LmFkanVzdGVk
KDEsIDEsIC0xLCAtMSk7CisKKyAgICBpZiAoIWNoZWNrZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFFQaXhtYXAgY2hlY2tlciA9IGZpbmRDaGVja2VyKHIsIGRpc2FibGVkKTsKKyAgICBpZiAo
Y2hlY2tlci5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHggPSAoci53aWR0
aCgpIC0gY2hlY2tlci53aWR0aCgpKSA+PiAxOworICAgIGludCB5ID0gKHIuaGVpZ2h0KCkgLSBj
aGVja2VyLmhlaWdodCgpKSA+PiAxOworICAgIHBhaW50ZXItPmRyYXdQaXhtYXAoci54KCkgKyB4
LCByLnkoKSArIHksIGNoZWNrZXIpOworfQorCit2b2lkIFN0eWxlUGFpbnRlcjo6ZHJhd1JhZGlv
QnV0dG9uKGNvbnN0IFFSZWN0JiByZWN0LCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBRUGl4bWFwIHJhZGlvID0gZmluZFJhZGlvKHJlY3Quc2l6ZSgpLCBjaGVja2VkLCAhZW5h
YmxlZCk7CisgICAgaWYgKHJhZGlvLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisgICAgcGFp
bnRlci0+ZHJhd1BpeG1hcChyZWN0LngoKSwgcmVjdC55KCksIHJhZGlvKTsKK30KKwordm9pZCBT
dHlsZVBhaW50ZXI6OmRyYXdQdXNoQnV0dG9uKGNvbnN0IFFSZWN0JiByZWN0LCBib29sIHN1bmtl
biwgYm9vbCBlbmFibGVkKQoreworICAgIFFQZW4gcGVuKFF0OjpkYXJrR3JheSwgMS4wLCBRdDo6
U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpvaW4pOworICAgIHBhaW50ZXItPnNl
dFBlbihwZW4pOworCisgICAgaWYgKHN1bmtlbikgeworICAgICAgICBkcmF3UmVjdGFuZ3VsYXJD
b250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIFFCcnVzaChRdDo6ZGFya0dyYXkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJH
cmFkaWVudDsKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0
U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5h
bFN0b3AocmVjdC50b3BMZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0
KDAuMCwgUXQ6OmdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwg
UXQ6OndoaXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFy
dChyZWN0LmJvdHRvbUxlZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3Rv
cChRUG9pbnQocmVjdC5ib3R0b21MZWZ0KCkueCgpLAorICAgICAgICAgICAgICAgICAgICByZWN0
LmJvdHRvbUxlZnQoKS55KCkgLSAvKiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7
CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7CisgICAg
ICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC40LCBRdDo6d2hpdGUpOworICAgIH0KKwor
ICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwg
bGluZWFyR3JhZGllbnQpOworfQorCit2b2lkIFN0eWxlUGFpbnRlcjo6ZHJhd0NvbWJvQm94KGNv
bnN0IFFSZWN0JiByZWN0LCBib29sIG11bHRpcGxlLCBib29sIGVuYWJsZWQpCit7CisgICAgUVBl
biBwZW4oUXQ6OmRhcmtHcmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6
OlJvdW5kSm9pbik7CisgICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50OworICAgIGlm
ICghZW5hYmxlZCkgeworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRv
bUxlZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChyZWN0LnRvcExl
ZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7
CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVm
dCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKFFQb2ludChyZWN0LmJv
dHRvbUxlZnQoKS54KCksCisgICAgICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tTGVmdCgpLnko
KSAtIC8qIG9mZnNldCBsaW1pdCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKKyAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKKyAgICAgICAgbGluZWFyR3JhZGll
bnQuc2V0Q29sb3JBdCgwLjQsIFF0Ojp3aGl0ZSk7CisgICAgfQorCisgICAgZHJhd1JlY3Rhbmd1
bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBsaW5lYXJHcmFkaWVudCk7
CisKKyAgICAvLyBDb25zdGFudHMgZXh0cmFjdGVkIGZyb20gUUNvbW1vblN0eWxlOjpzdWJDb250
cm9sUmVjdC4KKyAgICBjb25zdCBpbnQgYXJyb3dCb3hXaWR0aCA9IDE2OworICAgIGNvbnN0IGlu
dCBmcmFtZVdpZHRoID0gMjsKKyAgICBjb25zdCBRUmVjdCByKHJlY3QueCgpICsgcmVjdC53aWR0
aCgpIC0gZnJhbWVXaWR0aCAtIGFycm93Qm94V2lkdGgsIHJlY3QueSgpICsgZnJhbWVXaWR0aAor
ICAgICAgICAgICAgICAgICAgICwgYXJyb3dCb3hXaWR0aCwgcmVjdC5oZWlnaHQoKSAtIDIgKiBm
cmFtZVdpZHRoKTsKKyAgICBRUGl4bWFwIHBpYyA9IGZpbmRDb21ib0J1dHRvbihyLnNpemUoKSwg
bXVsdGlwbGUsICFlbmFibGVkKTsKKworICAgIGlmIChwaWMuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGludCB4ID0gKHIud2lkdGgoKSAtIHBpYy53aWR0aCgpKSA+PiAxOworICAg
IGludCB5ID0gKHIuaGVpZ2h0KCkgLSBwaWMuaGVpZ2h0KCkpID4+IDE7CisgICAgcGFpbnRlci0+
ZHJhd1BpeG1hcChyLngoKSArIHgsIHIueSgpICsgeSwgcGljKTsKKworICAgIHBhaW50ZXItPnNl
dFBlbihlbmFibGVkID8gUXQ6OmRhcmtHcmF5IDogUXQ6OmdyYXkpOworICAgIHBhaW50ZXItPmRy
YXdMaW5lKHIubGVmdCgpIC0gMiwgci50b3AoKSArIDIsIHIubGVmdCgpIC0gMiwgci5ib3R0b20o
KSAtIDIpOworfQorCisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lUXRNb2Jp
bGU6OmNyZWF0ZShQYWdlKiBwYWdlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVuZGVy
VGhlbWVRdE1vYmlsZShwYWdlKSk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAocGFnZSkKKyAgICAg
ICAgcmV0dXJuIFJlbmRlclRoZW1lUXRNb2JpbGU6OmNyZWF0ZShwYWdlKTsKKworICAgIHN0YXRp
YyBSZW5kZXJUaGVtZSogZmFsbGJhY2sgPSBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjcmVhdGUoMCku
cmVsZWFzZVJlZigpOworICAgIHJldHVybiBmYWxsYmFjazsKK30KKworUmVuZGVyVGhlbWVRdE1v
YmlsZTo6UmVuZGVyVGhlbWVRdE1vYmlsZShQYWdlKiBwYWdlKQorICAgIDogUmVuZGVyVGhlbWUo
KQorICAgICwgbV9wYWdlKHBhZ2UpCit7CisgICAgbV9idXR0b25Gb250RmFtaWx5ID0gUUFwcGxp
Y2F0aW9uOjpmb250KCkuZmFtaWx5KCk7Cit9CisKK1JlbmRlclRoZW1lUXRNb2JpbGU6On5SZW5k
ZXJUaGVtZVF0TW9iaWxlKCkKK3sKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjppc0Nv
bnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBCb3JkZXJEYXRhJiBi
b3JkZXIsIGNvbnN0IEZpbGxMYXllciYgZmlsbCwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xv
cikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKKyAgICBjYXNl
IFB1c2hCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0
UGFydDoKKyAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6
CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CisgICAgICAgIC8vIFRlc3QgdGhlIHN0eWxlIHRvIHNl
ZSBpZiB0aGUgVUEgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIG1hdGNoLgorICAgICAgICByZXR1cm4g
KHN0eWxlLT5ib3JkZXIoKSAhPSBib3JkZXIKKyAgICAgICAgICAgICAgICB8fCAqc3R5bGUtPmJh
Y2tncm91bmRMYXllcnMoKSAhPSBmaWxsCisgICAgICAgICAgICAgICAgfHwgc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikgIT0gYmFja2dyb3Vu
ZENvbG9yKTsKKyAgICBjYXNlIENoZWNrYm94UGFydDoKKyAgICBjYXNlIFJhZGlvUGFydDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBSZW5kZXJU
aGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGZpbGwsIGJhY2tncm91bmRDb2xv
cik7CisgICAgfQorfQorCitpbnQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHJldHVybiAxOwor
fQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVy
U3R5bGUqKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlclRoZW1l
UXRNb2JpbGU6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKHN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKKyAgICBjYXNlIENoZWNr
Ym94UGFydDoKKyAgICBjYXNlIFJhZGlvUGFydDoKKyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0Ogor
ICAgIGNhc2UgU3F1YXJlQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBhcnQ6CisgICAgY2Fz
ZSBCdXR0b25CZXZlbFBhcnQ6CisgICAgY2FzZSBMaXN0Ym94UGFydDoKKyAgICBjYXNlIExpc3RJ
dGVtUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0UGFydDoKKyAgICBjYXNlIE1lbnVsaXN0QnV0dG9u
UGFydDoKKyAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0OgorICAgIGNhc2UgU2xpZGVyVmVy
dGljYWxQYXJ0OgorICAgIGNhc2UgU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydDoKKyAgICBjYXNl
IFNsaWRlclRodW1iVmVydGljYWxQYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAg
IGNhc2UgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uUGFydDoKKyAgICBjYXNlIFNlYXJjaEZpZWxk
Q2FuY2VsQnV0dG9uUGFydDoKKyAgICBjYXNlIFRleHRGaWVsZFBhcnQ6CisgICAgY2FzZSBUZXh0
QXJlYVBhcnQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpiYXNlbGlu
ZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICBpZiAoIW8tPmlz
Qm94KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG8tPnN0eWxlKCktPmFwcGVhcmFu
Y2UoKSA9PSBDaGVja2JveFBhcnQgfHwgby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpID09IFJhZGlv
UGFydCkKKyAgICAgICAgcmV0dXJuIHRvUmVuZGVyQm94KG8pLT5tYXJnaW5Ub3AoKSArIHRvUmVu
ZGVyQm94KG8pLT5oZWlnaHQoKSAtIDI7IC8vIFNhbWUgYXMgaW4gb2xkIGtodG1sCisgICAgcmV0
dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKG8pOworfQorCitib29sIFJlbmRlclRo
ZW1lUXRNb2JpbGU6OmNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCogbykg
Y29uc3QKK3sKKyAgICBpZiAoIWlzRW5hYmxlZChvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgLy8gQ2hlY2tib3hlcyBvbmx5IGhhdmUgdGludCB3aGVuIGNoZWNrZWQuCisgICAgaWYg
KG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQpCisgICAgICAgIHJldHVy
biBpc0NoZWNrZWQobyk7CisKKyAgICAvLyBGb3Igbm93IGFzc3VtZSBvdGhlciBjb250cm9scyBo
YXZlIHRpbnQgaWYgZW5hYmxlZC4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZVF0TW9iaWxlOjpzdXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0NvbG9yIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBRUGFsZXR0ZSBwYWwgPSBRQXBw
bGljYXRpb246OnBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0
cyhwYWwpOworICAgIHJldHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6
OkhpZ2hsaWdodCkuY29sb3IoKTsKK30KKworQ29sb3IgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgUVBh
bGV0dGUgcGFsID0gUUFwcGxpY2F0aW9uOjpwYWxldHRlKCk7CisgICAgc2V0UGFsZXR0ZUZyb21Q
YWdlQ2xpZW50SWZFeGlzdHMocGFsKTsKKyAgICByZXR1cm4gcGFsLmJydXNoKFFQYWxldHRlOjpJ
bmFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodCkuY29sb3IoKTsKK30KKworQ29sb3IgUmVuZGVy
VGhlbWVRdE1vYmlsZTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBj
b25zdAoreworICAgIFFQYWxldHRlIHBhbCA9IFFBcHBsaWNhdGlvbjo6cGFsZXR0ZSgpOworICAg
IHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKHBhbCk7CisgICAgcmV0dXJuIHBhbC5i
cnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxpZ2h0ZWRUZXh0KS5jb2xvcigp
OworfQorCitDb2xvciBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICBRUGFsZXR0ZSBwYWwgPSBRQXBwbGlj
YXRpb246OnBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhw
YWwpOworICAgIHJldHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkluYWN0aXZlLCBRUGFsZXR0ZTo6
SGlnaGxpZ2h0ZWRUZXh0KS5jb2xvcigpOworfQorCitDb2xvciBSZW5kZXJUaGVtZVF0TW9iaWxl
OjpwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKCkgY29uc3QKK3sKKyAgICBRUGFsZXR0ZSBwYWwgPSBR
QXBwbGljYXRpb246OnBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4
aXN0cyhwYWwpOworICAgIHJldHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0
dGU6OkhpZ2hsaWdodCkuY29sb3IoKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpz
eXN0ZW1Gb250KGludCwgRm9udERlc2NyaXB0aW9uJikgY29uc3QKK3sKKyAgICAvLyBuby1vcAor
fQorCitDb2xvciBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJ
ZCkgY29uc3QKK3sKKyAgICBRUGFsZXR0ZSBwYWwgPSBRQXBwbGljYXRpb246OnBhbGV0dGUoKTsK
KyAgICBzd2l0Y2ggKGNzc1ZhbHVlSWQpIHsKKyAgICBjYXNlIENTU1ZhbHVlQnV0dG9udGV4dDoK
KyAgICAgICAgcmV0dXJuIHBhbC5icnVzaChRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6QnV0
dG9uVGV4dCkuY29sb3IoKTsKKyAgICBjYXNlIENTU1ZhbHVlQ2FwdGlvbnRleHQ6CisgICAgICAg
IHJldHVybiBwYWwuYnJ1c2goUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OlRleHQpLmNvbG9y
KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xv
cihjc3NWYWx1ZUlkKTsKKyAgICB9Cit9CisKK2ludCBSZW5kZXJUaGVtZVF0TW9iaWxlOjptaW5p
bXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3QKK3sKKyAgICBjb25zdCBRRm9udE1l
dHJpY3MgJmZtID0gUUFwcGxpY2F0aW9uOjpmb250TWV0cmljcygpOworICAgIHJldHVybiBmbS53
aWR0aChRTGF0aW4xQ2hhcigneCcpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpj
b21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0Cit7
CisgICAgUVNpemUgc2l6ZSgwLCAwKTsKKyAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVy
U3R5bGUtPmZvbnQoKS5mb250KCkpOworCisgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFy
YW5jZSgpKSB7CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBh
cnQ6CisgICAgY2FzZSBUZXh0RmllbGRQYXJ0OiB7CisgICAgICAgIGludCBwYWRkaW5nID0gZmlu
ZEZyYW1lTGluZVdpZHRoKCk7CisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nTGVmdChM
ZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdS
aWdodChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBh
ZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIHJlbmRlclN0eWxlLT5z
ZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIElmIHRo
ZSB3aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhp
bmcgdG8gZG8uCisgICAgaWYgKCFyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0
bygpICYmICFyZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgQ2hl
Y2tib3hQYXJ0OiB7CisgICAgICAgIC8vIEV4dHJhY3RlZCBmcm9tIFFDb21tb25TdHlsZS4KKyAg
ICAgICAgaW50IGNoZWNrQm94V2lkdGggPSAxMzsKKyAgICAgICAgY2hlY2tCb3hXaWR0aCAqPSBy
ZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBzaXplID0gUVNpemUoY2hlY2tC
b3hXaWR0aCwgY2hlY2tCb3hXaWR0aCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFJhZGlvUGFydDogeworICAgICAgICAvLyBFeHRyYWN0ZWQgZnJvbSBRQ29tbW9uU3R5bGUuCisg
ICAgICAgIGludCByYWRpb1dpZHRoID0gMTI7CisgICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVy
U3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgs
IHJhZGlvV2lkdGgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2Ug
aXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgorICAgIGlm
IChyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmIHNpemUud2lkdGgo
KSA+IDApCisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgoc2l6ZS53aWR0
aCgpLCBGaXhlZCkpOworICAgIGlmIChyZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYg
c2l6ZS5oZWlnaHQoKSA+IDApCisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRNaW5IZWlnaHQoTGVu
Z3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmls
ZTo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBjb21w
dXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmls
ZTo6cGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7Cit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKK3sKKyAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRCdXR0
b24obywgaSwgcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0QnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxl
bWVudCopIGNvbnN0Cit7CisgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KKyAgICBzdHlsZS0+cmVz
ZXRCb3JkZXIoKTsKKworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVT
aXplKHRydWUpOworCisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc3R5bGUt
PmZvbnRTaXplKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoc3R5bGUt
PmZvbnRTaXplKCkpOworCisgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6Omlu
aXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOworICAgIHNldEJ1
dHRvblBhZGRpbmcoc3R5bGUpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OnNldEJ1
dHRvblNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGNvbXB1dGVTaXplQmFz
ZWRPblN0eWxlKHN0eWxlKTsKK30KKworCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OnNldEJ1
dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGlmICghc3R5bGUp
CisgICAgICAgIHJldHVybjsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKGJ1dHRv
blBhZGRpbmdMZWZ0LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3Ro
KGJ1dHRvblBhZGRpbmdSaWdodCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1RvcChM
ZW5ndGgoYnV0dG9uUGFkZGluZ1RvcCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0Jv
dHRvbShMZW5ndGgoYnV0dG9uUGFkZGluZ0JvdHRvbSwgRml4ZWQpKTsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZVF0TW9iaWxlOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBp
KTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgIHJldHVybiB0cnVlOworCisgICAgQ29u
dHJvbFBhcnQgYXBwZWFyYW5jZSA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKKyAgICBpZiAo
YXBwZWFyYW5jZSA9PSBQdXNoQnV0dG9uUGFydCB8fCBhcHBlYXJhbmNlID09IEJ1dHRvblBhcnQp
IHsKKyAgICAgICAgcC5kcmF3UHVzaEJ1dHRvbihyLCBpc1ByZXNzZWQobykpOworICAgIH0gZWxz
ZSBpZiAoYXBwZWFyYW5jZSA9PSBSYWRpb1BhcnQpCisgICAgICAgcC5kcmF3UmFkaW9CdXR0b24o
ciwgaXNDaGVja2VkKG8pKTsKKyAgICBlbHNlIGlmIChhcHBlYXJhbmNlID09IENoZWNrYm94UGFy
dCkKKyAgICAgICBwLmRyYXdDaGVja0JveChyLCBpc0NoZWNrZWQobykpOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFRleHRGaWVsZFN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAoreworICAgIC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlrZSB0aGlzIGxlYWRzIHRvIGRpZmZl
cmVuY2VzIGxpa2U6CisgICAgLy8gLSBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0ICgyLDIp
IHNpemUgMTY4eDI1IFtiZ2NvbG9yPSNGRkZGRkZdIGJvcmRlcjogKDJweCBpbnNldCAjMDAwMDAw
KV0KKyAgICAvLyArIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAxNjZ4
MjYKKyAgICAvLyBpbiBsYXlvdXQgdGVzdHMgd2hlbiBhIENTUyBzdHlsZSBpcyBhcHBsaWVkIHRo
YXQgZG9lc24ndCBhZmZlY3QgYmFja2dyb3VuZCBjb2xvciwgYm9yZGVyIG9yCisgICAgLy8gcGFk
ZGluZy4gSnVzdCB3b3J0aCBrZWVwaW5nIGluIG1pbmQhCisgICAgc3R5bGUtPnNldEJhY2tncm91
bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAgIHN0eWxlLT5yZXNldEJvcmRlcigpOwor
ICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShz
dHlsZSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aCh0ZXh0RmllbGRQYWRkaW5n
LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHRleHRGaWVsZFBh
ZGRpbmcsIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRUZXh0
RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0g
by0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIGlmIChhcHBlYXJhbmNlICE9IFRleHRGaWVs
ZFBhcnQKKyAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBTZWFyY2hGaWVsZFBhcnQKKyAgICAgICAg
JiYgYXBwZWFyYW5jZSAhPSBUZXh0QXJlYVBhcnQKKyAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBM
aXN0Ym94UGFydCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3cgcGFpbnQgdGhl
IHRleHQgZmllbGQuCisgICAgcC5kcmF3TGluZUVkaXQociwgLypzdW5rZW4gPSAqL2lzUHJlc3Nl
ZChvKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6
OmFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0
eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sKKyAgICBhZGp1c3RUZXh0Rmll
bGRTdHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOworfQorCitib29sIFJlbmRlclRoZW1l
UXRNb2JpbGU6OnBhaW50VGV4dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGks
IHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdE1lbnVMaXN0U3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7
CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisKKyAgICAvLyBIZWlnaHQgaXMgbG9ja2VkIHRv
IGF1dG8uCisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOworCisgICAgLy8gV2hp
dGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQorICAgIHN0eWxlLT5zZXRXaGl0ZVNwYWNlKFBSRSk7
CisKKyAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7CisKKyAgICAvLyBBZGQgaW4g
dGhlIHBhZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNlLgorICAgIHNldFBvcHVwUGFkZGluZyhz
dHlsZSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChtZW51TGlzdFBhZGRpbmcs
IEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0UG9wdXBQYWRkaW5n
KFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBjb25zdCBpbnQgcGFkZGluZ0xlZnQg
PSA0OworICAgIGNvbnN0IGludCBwYWRkaW5nUmlnaHQgPSBzdHlsZS0+d2lkdGgoKS5pc0ZpeGVk
KCkgfHwgc3R5bGUtPndpZHRoKCkuaXNQZXJjZW50KCkgPyA1IDogODsKKworICAgIHN0eWxlLT5z
ZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7CisKKyAgICAvLyBleHRy
YWN0ZWQgZnJvbSBRQ29tbW9uU3R5bGUKKyAgICBjb25zdCBpbnQgdyA9IDE2OworICAgIHN0eWxl
LT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmdSaWdodCArIHcsIEZpeGVkKSk7CisKKyAg
ICBzdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoMiwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0
UGFkZGluZ0JvdHRvbShMZW5ndGgoMiwgRml4ZWQpKTsKK30KKworCitib29sIFJlbmRlclRoZW1l
UXRNb2JpbGU6OnBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyIHAodGhpcywgaSk7Cisg
ICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjb25zdCBR
UG9pbnQgdG9wTGVmdCA9IHIubG9jYXRpb24oKTsKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0
b3BMZWZ0KTsKKyAgICBjb25zdCBRUmVjdCByZWN0KFFQb2ludCgwLCAwKSwgci5zaXplKCkpOwor
CisgICAgcC5kcmF3Q29tYm9Cb3gocmVjdCwgY2hlY2tNdWx0aXBsZShvKSk7CisgICAgcC5wYWlu
dGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBS
ZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworCisgICAgLy8g
SGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgorICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1
dG8pKTsKKworICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUKKyAgICBzdHlsZS0+
c2V0V2hpdGVTcGFjZShQUkUpOworCisgICAgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUp
OworCisgICAgLy8gQWRkIGluIHRoZSBwYWRkaW5nIHRoYXQgd2UnZCBsaWtlIHRvIHVzZS4KKyAg
ICBzZXRQb3B1cFBhZGRpbmcoc3R5bGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6
OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuZHJhd0NvbWJvQm94KHIsIGNoZWNrTXVs
dGlwbGUobykpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgRU5BQkxFKFBST0dSRVNT
X1RBRykKK2RvdWJsZSBSZW5kZXJUaGVtZVF0TW9iaWxlOjphbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwLjsKK30KKworZG91YmxlIFJlbmRl
clRoZW1lUXRNb2JpbGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIDAuOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFByb2dy
ZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCopIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJ
bmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFp
bnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFJlbmRlclRo
ZW1lUXRNb2JpbGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgc3R5bGUtPnNldEJveFNo
YWRvdyhudWxscHRyKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFNsaWRl
clRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIC8vIFdl
J3ZlIGFscmVhZHkgcGFpbnRlZCBpdCBpbiBwYWludFNsaWRlclRyYWNrKCksIG5vIG5lZWQgdG8g
ZG8gYW55dGhpbmcgaGVyZS4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhl
bWVRdE1vYmlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAg
IFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxl
bWVudCk7CisgICAgc3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZVF0TW9iaWxlOjpwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBJbnRSZWN0JiByKQoreworICAgIHJldHVybiBwYWludFRleHRGaWVsZChvLCBwaSwgcik7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAg
Ly8gUmVzZXR0aW5nIHRoZSBzdHlsZSBsaWtlIHRoaXMgbGVhZHMgdG8gZGlmZmVyZW5jZXMgbGlr
ZToKKyAgICAvLyAtIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAxNjh4
MjUgW2JnY29sb3I9I0ZGRkZGRl0gYm9yZGVyOiAoMnB4IGluc2V0ICMwMDAwMDApXQorICAgIC8v
ICsgUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2NngyNgorICAgIC8v
IGluIGxheW91dCB0ZXN0cyB3aGVuIGEgQ1NTIHN0eWxlIGlzIGFwcGxpZWQgdGhhdCBkb2Vzbid0
IGFmZmVjdCBiYWNrZ3JvdW5kIGNvbG9yLCBib3JkZXIgb3IKKyAgICAvLyBwYWRkaW5nLiBKdXN0
IHdvcnRoIGtlZXBpbmcgaW4gbWluZCEKKyAgICBzdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENv
bG9yOjp0cmFuc3BhcmVudCk7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUt
PnJlc2V0UGFkZGluZygpOworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxl
bWVudCogZSkgY29uc3QKK3sKKyAgICAvLyBMb2dpYyB0YWtlbiBmcm9tIFJlbmRlclRoZW1lQ2hy
b21pdW0uY3BwLgorICAgIC8vIFNjYWxlIHRoZSBidXR0b24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9u
dCBzaXplLgorICAgIGZsb2F0IGZvbnRTY2FsZSA9IHN0eWxlLT5mb250U2l6ZSgpIC8gZGVmYXVs
dENvbnRyb2xGb250UGl4ZWxTaXplOworICAgIGludCBjYW5jZWxCdXR0b25TaXplID0gbHJvdW5k
ZihxTWluKHFNYXgobWluQ2FuY2VsQnV0dG9uU2l6ZSwgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUg
KiBmb250U2NhbGUpLCBtYXhDYW5jZWxCdXR0b25TaXplKSk7CisgICAgc3R5bGUtPnNldFdpZHRo
KExlbmd0aChjYW5jZWxCdXR0b25TaXplLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKGNhbmNlbEJ1dHRvblNpemUsIEZpeGVkKSk7Cit9CisKKy8vIEZ1bmN0aW9uIHRha2Vu
IGZyb20gUmVuZGVyVGhlbWVDaHJvbWl1bS5jcHAKK0ludFJlY3QgUmVuZGVyVGhlbWVRdE1vYmls
ZTo6Y29udmVydFRvUGFpbnRpbmdSZWN0KFJlbmRlck9iamVjdCogaW5wdXRSZW5kZXJlciwgY29u
c3QgUmVuZGVyT2JqZWN0KiBwYXJ0UmVuZGVyZXIsIEludFJlY3QgcGFydFJlY3QsIGNvbnN0IElu
dFJlY3QmIGxvY2FsT2Zmc2V0KSBjb25zdAoreworICAgIC8vIENvbXB1dGUgYW4gb2Zmc2V0IGJl
dHdlZW4gdGhlIHBhcnQgcmVuZGVyZXIgYW5kIHRoZSBpbnB1dCByZW5kZXJlci4KKyAgICBJbnRT
aXplIG9mZnNldEZyb21JbnB1dFJlbmRlcmVyID0gLShwYXJ0UmVuZGVyZXItPm9mZnNldEZyb21B
bmNlc3RvckNvbnRhaW5lcihpbnB1dFJlbmRlcmVyKSk7CisgICAgLy8gTW92ZSB0aGUgcmVjdCBp
bnRvIHBhcnRSZW5kZXJlcidzIGNvb3Jkcy4KKyAgICBwYXJ0UmVjdC5tb3ZlKG9mZnNldEZyb21J
bnB1dFJlbmRlcmVyKTsKKyAgICAvLyBBY2NvdW50IGZvciB0aGUgbG9jYWwgZHJhd2luZyBvZmZz
ZXQuCisgICAgcGFydFJlY3QubW92ZShsb2NhbE9mZnNldC54KCksIGxvY2FsT2Zmc2V0LnkoKSk7
CisKKyAgICByZXR1cm4gcGFydFJlY3Q7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6
cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICAvLyBMb2dpYyBjb3BpZWQgZnJvbSBSZW5kZXJU
aGVtZUNocm9taXVtLmNwcC4KKworICAgIC8vIEdldCB0aGUgcmVuZGVyZXIgb2YgPGlucHV0PiBl
bGVtZW50LgorICAgIE5vZGUqIGlucHV0ID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rvck5vZGUo
KTsKKyAgICBpZiAoIWlucHV0LT5yZW5kZXJlcigpLT5pc0JveCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgUmVuZGVyQm94KiBpbnB1dFJlbmRlckJveCA9IHRvUmVuZGVyQm94KGlucHV0
LT5yZW5kZXJlcigpKTsKKyAgICBJbnRSZWN0IGlucHV0Q29udGVudEJveCA9IGlucHV0UmVuZGVy
Qm94LT5jb250ZW50Qm94UmVjdCgpOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgYnV0
dG9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveC4KKyAgICBp
bnQgY2FuY2VsQnV0dG9uU2l6ZSA9IHFNaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHFNaW4o
aW5wdXRDb250ZW50Qm94LmhlaWdodCgpLCByLmhlaWdodCgpKSk7CisgICAgLy8gQ2FsY3VsYXRl
IGNhbmNlbCBidXR0b24ncyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgaW5wdXQgZWxlbWVu
dC4KKyAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiBSb3VuZCB1cCB0aG91Z2gs
IHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNlbnRlciwgaXQgd2lsbAorICAgIC8v
IGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBvZiB0aGUgZmllbGQuIFRoaXMgdGVu
ZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KKyAgICBJbnRSZWN0IGNhbmNlbEJ1dHRv
blJlY3Qoby0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVyKGlucHV0UmVuZGVyQm94KS53aWR0
aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbnRlbnRCb3gueSgpICsg
KGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIGNhbmNlbEJ1dHRvblNpemUgKyAxKSAvIDIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvblNpemUsIGNhbmNlbEJ1dHRv
blNpemUpOworICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gY29udmVydFRvUGFpbnRpbmdSZWN0
KGlucHV0UmVuZGVyQm94LCBvLCBjYW5jZWxCdXR0b25SZWN0LCByKTsKKyAgICBzdGF0aWMgSW1h
Z2UqIGNhbmNlbEltYWdlID0gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKCJzZWFyY2hDYW5j
ZWxCdXR0b24iKS5yZWxlYXNlUmVmKCk7CisgICAgc3RhdGljIEltYWdlKiBjYW5jZWxQcmVzc2Vk
SW1hZ2UgPSBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoInNlYXJjaENhbmNlbEJ1dHRvblBy
ZXNzZWQiKS5yZWxlYXNlUmVmKCk7CisgICAgcGkuY29udGV4dC0+ZHJhd0ltYWdlKGlzUHJlc3Nl
ZChvKSA/IGNhbmNlbFByZXNzZWRJbWFnZSA6IGNhbmNlbEltYWdlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgby0+c3R5bGUoKS0+Y29sb3JTcGFjZSgpLCBwYWludGluZ1JlY3Qp
OworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rvciwg
UmVuZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFbGVtZW50KiBlKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKHNl
bGVjdG9yLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRT
ZWFyY2hGaWVsZERlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlbmRlclRo
ZW1lOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihvLCBwaSwgcik7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGVt
ZW50KiBlKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgUmVuZGVyVGhlbWU6
OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TdHlsZShzZWxlY3Rvciwgc3R5bGUs
IGUpOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlbmRlclRo
ZW1lOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgcGksIHIpOworfQorCiti
b29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OmNoZWNrTXVsdGlwbGUoUmVuZGVyT2JqZWN0KiBvKQor
eworICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBvID8gc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnQqPihvLT5ub2RlKCkpIDogMDsKKyAgICByZXR1cm4gc2VsZWN0ID8gc2VsZWN0
LT5tdWx0aXBsZSgpIDogZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c3Vw
cG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKSBjb25zdAoreworICAgIHN3aXRjaCAo
YXBwZWFyYW5jZSkgeworICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgY2FzZSBCdXR0b25Q
YXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKKyAgICBjYXNlIFRleHRBcmVhUGFydDoKKyAg
ICBjYXNlIExpc3Rib3hQYXJ0OgorICAgIGNhc2UgTWVudWxpc3RQYXJ0OgorICAgIGNhc2UgUmFk
aW9QYXJ0OgorICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgIGNhc2UgU2xpZGVySG9yaXpvbnRh
bFBhcnQ6CisgICAgY2FzZSBTbGlkZXJWZXJ0aWNhbFBhcnQ6CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGRlZmF1bHQ6IC8vIE5vIGZvciBhbGwgb3RoZXJzLi4uCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0UGFsZXR0ZUZy
b21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmIHBhbGV0dGUpIGNvbnN0Cit7CisgICAgc3Rh
dGljIFFQYWxldHRlIGxpZ2h0R3JheVBhbGV0dGUoUXQ6OmxpZ2h0R3JheSk7CisgICAgcGFsZXR0
ZSA9IGxpZ2h0R3JheVBhbGV0dGU7CisgICAgcmV0dXJuOworfQorCisjaWYgRU5BQkxFKFZJREVP
KQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdE1vYmlsZTo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVT
aGVldCgpCit7CisgICAgU3RyaW5nIHJlc3VsdCA9IFN0cmluZyhtZWRpYUNvbnRyb2xzUXRVc2Vy
QWdlbnRTdHlsZVNoZWV0LCBzaXplb2YobWVkaWFDb250cm9sc1F0VXNlckFnZW50U3R5bGVTaGVl
dCkpOworCisgICAgaWYgKG1fcGFnZSAmJiBtX3BhZ2UtPmNocm9tZSgpLT5yZXF1aXJlc0Z1bGxz
Y3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpCisgICAgICAgIHJlc3VsdCArPSBTdHJpbmcobWVkaWFD
b250cm9sc1F0RnVsbHNjcmVlblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRy
b2xzUXRGdWxsc2NyZWVuVXNlckFnZW50U3R5bGVTaGVldCkpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworLy8gSGVscGVyIGNsYXNzIHRvIHRyYW5zZm9ybSB0aGUgcGFpbnRlcidzIHdvcmxk
IG1hdHJpeCB0byB0aGUgb2JqZWN0J3MgY29udGVudCBhcmVhLCBzY2FsZWQgdG8gMCwwLDEwMCwx
MDAKK2NsYXNzIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgeworcHVibGljOgorICAgIFdvcmxkTWF0
cml4VHJhbnNmb3JtZXIoUVBhaW50ZXIqIHBhaW50ZXIsIFJlbmRlck9iamVjdCogcmVuZGVyT2Jq
ZWN0LCBjb25zdCBJbnRSZWN0JiByKSA6IG1fcGFpbnRlcihwYWludGVyKQorICAgIHsKKyAgICAg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gcmVuZGVyT2JqZWN0LT5zdHlsZSgpOworICAgICAgICBt
X29yaWdpbmFsVHJhbnNmb3JtID0gbV9wYWludGVyLT50cmFuc2Zvcm0oKTsKKyAgICAgICAgbV9w
YWludGVyLT50cmFuc2xhdGUoci54KCkgKyBzdHlsZS0+cGFkZGluZ0xlZnQoKS52YWx1ZSgpLCBy
LnkoKSArIHN0eWxlLT5wYWRkaW5nVG9wKCkudmFsdWUoKSk7CisgICAgICAgIG1fcGFpbnRlci0+
c2NhbGUoKHIud2lkdGgoKSAtIHN0eWxlLT5wYWRkaW5nTGVmdCgpLnZhbHVlKCkgLSBzdHlsZS0+
cGFkZGluZ1JpZ2h0KCkudmFsdWUoKSkgLyAxMDAuMCwKKyAgICAgICAgICAgICAoci5oZWlnaHQo
KSAtIHN0eWxlLT5wYWRkaW5nVG9wKCkudmFsdWUoKSAtIHN0eWxlLT5wYWRkaW5nQm90dG9tKCku
dmFsdWUoKSkgLyAxMDAuMCk7CisgICAgfQorCisgICAgfldvcmxkTWF0cml4VHJhbnNmb3JtZXIo
KSB7IG1fcGFpbnRlci0+c2V0VHJhbnNmb3JtKG1fb3JpZ2luYWxUcmFuc2Zvcm0pOyB9CisKK3By
aXZhdGU6CisgICAgUVBhaW50ZXIqIG1fcGFpbnRlcjsKKyAgICBRVHJhbnNmb3JtIG1fb3JpZ2lu
YWxUcmFuc2Zvcm07Cit9OworCitkb3VibGUgUmVuZGVyVGhlbWVRdE1vYmlsZTo6bWVkaWFDb250
cm9sc0Jhc2VsaW5lT3BhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIDAuNDsKK30KKwordm9p
ZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRlciogcGFp
bnRlciwgY29uc3QgSW50UmVjdCYgcikgY29uc3QKK3sKKyAgICBwYWludGVyLT5zZXRQZW4oUXQ6
Ok5vUGVuKTsKKyAgICBzdGF0aWMgUUNvbG9yIHRyYW5zcGFyZW50QmxhY2soMCwgMCwgMCwgbWVk
aWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpICogMjU1KTsKKyAgICBwYWludGVyLT5zZXRCcnVz
aCh0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBwYWludGVyLT5kcmF3Um91bmRlZFJlY3Qoci54KCks
IHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCksIDUuMCwgNS4wKTsKK30KKworc3RhdGljIGJv
b2wgbWVkaWFFbGVtZW50Q2FuUGxheShSZW5kZXJPYmplY3QqIG8pCit7CisgICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1lbnQobyk7CisgICAgaWYg
KCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtZWRp
YUVsZW1lbnQtPnJlYWR5U3RhdGUoKSA+IEhUTUxNZWRpYUVsZW1lbnQ6OkhBVkVfTUVUQURBVEEK
KyAgICAgICAgICAgfHwgKG1lZGlhRWxlbWVudC0+cmVhZHlTdGF0ZSgpID09IEhUTUxNZWRpYUVs
ZW1lbnQ6OkhBVkVfTk9USElORworICAgICAgICAgICAgICAgJiYgby0+c3R5bGUoKS0+YXBwZWFy
YW5jZSgpID09IE1lZGlhUGxheUJ1dHRvblBhcnQgJiYgbWVkaWFFbGVtZW50LT5wcmVsb2FkKCkg
PT0gIm5vbmUiKTsKK30KKworUUNvbG9yIFJlbmRlclRoZW1lUXRNb2JpbGU6OmdldE1lZGlhQ29u
dHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgUUNvbG9y
IGZnQ29sb3IgPSBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOworICAg
IGlmICghbykKKyAgICAgICAgcmV0dXJuIGZnQ29sb3I7CisKKyAgICBpZiAoby0+bm9kZSgpLT5h
Y3RpdmUoKSkKKyAgICAgICAgZmdDb2xvciA9IGZnQ29sb3IubGlnaHRlcigpOworCisgICAgaWYg
KCFtZWRpYUVsZW1lbnRDYW5QbGF5KG8pKSB7CisgICAgICAgIFFQYWxldHRlIHBhbCA9IFFBcHBs
aWNhdGlvbjo6cGFsZXR0ZSgpOworICAgICAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4
aXN0cyhwYWwpOworICAgICAgICBmZ0NvbG9yID0gcGFsLmJydXNoKFFQYWxldHRlOjpEaXNhYmxl
ZCwgUVBhbGV0dGU6OlRleHQpLmNvbG9yKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZnQ29sb3I7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVu
dE1lZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAo
IXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0
UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKworICAgIHBhaW50TWVk
aWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVy
IHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgY29uc3QgUVBvaW50RiBhcnJvd1Bv
bHlnb25bOV0gPSB7IFFQb2ludEYoMjAsIDApLCBRUG9pbnRGKDEwMCwgMCksIFFQb2ludEYoMTAw
LCA4MCksCisgICAgICAgICAgICBRUG9pbnRGKDgwLCA4MCksIFFQb2ludEYoODAsIDMwKSwgUVBv
aW50RigxMCwgMTAwKSwgUVBvaW50RigwLCA5MCksIFFQb2ludEYoNzAsIDIwKSwgUVBvaW50Rigy
MCwgMjApfTsKKworICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdy
b3VuZENvbG9yKG8pKTsKKyAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKGFycm93UG9seWdvbiwg
OSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6
cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRp
YUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVu
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFp
bnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVl
KTsKKworICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisKKyAgICBXb3Js
ZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgY29u
c3QgUVBvaW50RiBzcGVha2VyUG9seWdvbls2XSA9IHsgUVBvaW50RigyMCwgMzApLCBRUG9pbnRG
KDUwLCAzMCksIFFQb2ludEYoODAsIDApLAorICAgICAgICAgICAgUVBvaW50Rig4MCwgMTAwKSwg
UVBvaW50Rig1MCwgNzApLCBRUG9pbnRGKDIwLCA3MCl9OworCisgICAgcC5wYWludGVyLT5zZXRC
cnVzaChtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyBRdDo6ZGFya1JlZCA6IGdldE1lZGlhQ29udHJv
bEZvcmVncm91bmRDb2xvcihvKSk7CisgICAgcC5wYWludGVyLT5kcmF3UG9seWdvbihzcGVha2Vy
UG9seWdvbiwgNik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6cGFpbnRNZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBIVE1MTWVkaWFFbGVt
ZW50KiBtZWRpYUVsZW1lbnQgPSB0b1BhcmVudE1lZGlhRWxlbWVudChvKTsKKyAgICBpZiAoIW1l
ZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3R5bGVQYWludGVyIHAo
dGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFz
aW5nLCB0cnVlKTsKKworICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisK
KyAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7
CisgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3Io
bykpOworICAgIGlmIChtZWRpYUVsZW1lbnQtPmNhblBsYXkoKSkgeworICAgICAgICBjb25zdCBR
UG9pbnRGIHBsYXlQb2x5Z29uWzNdID0geyBRUG9pbnRGKDAsIDApLCBRUG9pbnRGKDEwMCwgNTAp
LCBRUG9pbnRGKDAsIDEwMCl9OworICAgICAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKHBsYXlQ
b2x5Z29uLCAzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KDAs
IDAsIDMwLCAxMDApOworICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KDcwLCAwLCAzMCwgMTAw
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1v
YmlsZTo6cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKQoreworICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQg
dGhpcyBhdCB0aGUgbW9tZW50LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZVF0TW9iaWxlOjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBwYWludCB0aGlzIGF0IHRoZSBtb21lbnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCiti
b29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQo
UVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQo
cC5wYWludGVyLCByKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIFJlbmRlclRo
ZW1lUXRNb2JpbGU6OmZvcm1hdE1lZGlhQ29udHJvbHNDdXJyZW50VGltZShmbG9hdCBjdXJyZW50
VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIGZvcm1hdE1lZGlhQ29u
dHJvbHNUaW1lKGN1cnJlbnRUaW1lKSArICIgLyAiICsgZm9ybWF0TWVkaWFDb250cm9sc1RpbWUo
ZHVyYXRpb24pOworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdE1vYmlsZTo6Zm9ybWF0TWVkaWFD
b250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBj
b25zdAoreworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9i
aWxlOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0ICpvLCBjb25zdCBQ
YWludEluZm8gJnBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmcikKK3sKKyAgICBTdHlsZVBhaW50
ZXIgcCh0aGlzLCBwYWludEluZm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRp
YWxpYXNpbmcsIHRydWUpOworCisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCBy
KTsKKworICAgIGlmICghby0+aXNTbGlkZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgSW50UmVjdCBiID0gdG9SZW5kZXJCb3gobyktPmNvbnRlbnRCb3hSZWN0KCk7CisKKyAgICAv
LyBQb3NpdGlvbiB0aGUgb3V0ZXIgcmVjdGFuZ2xlCisgICAgaW50IHRvcCA9IHIueSgpICsgYi55
KCk7CisgICAgaW50IGxlZnQgPSByLngoKSArIGIueCgpOworICAgIGludCB3aWR0aCA9IGIud2lk
dGgoKTsKKyAgICBpbnQgaGVpZ2h0ID0gYi5oZWlnaHQoKTsKKworICAgIC8vIEdldCB0aGUgc2Nh
bGUgY29sb3IgZnJvbSB0aGUgcGFnZSBjbGllbnQKKyAgICBRUGFsZXR0ZSBwYWwgPSBRQXBwbGlj
YXRpb246OnBhbGV0dGUoKTsKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhw
YWwpOworICAgIGNvbnN0IFFDb2xvciBoaWdobGlnaHRUZXh0ID0gcGFsLmJydXNoKFFQYWxldHRl
OjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHRlZFRleHQpLmNvbG9yKCk7CisgICAgY29uc3Qg
UUNvbG9yIHNjYWxlQ29sb3IoaGlnaGxpZ2h0VGV4dC5yZWQoKSwgaGlnaGxpZ2h0VGV4dC5ncmVl
bigpLCBoaWdobGlnaHRUZXh0LmJsdWUoKSwgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgp
ICogMjU1KTsKKworICAgIC8vIERyYXcgdGhlIG91dGVyIHJlY3RhbmdsZQorICAgIHAucGFpbnRl
ci0+c2V0QnJ1c2goc2NhbGVDb2xvcik7CisgICAgcC5wYWludGVyLT5kcmF3UmVjdChsZWZ0LCB0
b3AsIHdpZHRoLCBoZWlnaHQpOworCisgICAgaWYgKCFvLT5ub2RlKCkgfHwgIW8tPm5vZGUoKS0+
aGFzVGFnTmFtZShpbnB1dFRhZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEhUTUxJ
bnB1dEVsZW1lbnQqIHNsaWRlciA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihvLT5u
b2RlKCkpOworCisgICAgLy8gUG9zaXRpb24gdGhlIGlubmVyIHJlY3RhbmdsZQorICAgIGhlaWdo
dCA9IGhlaWdodCAqIHNsaWRlci0+dmFsdWVBc051bWJlcigpOworICAgIHRvcCArPSBiLmhlaWdo
dCgpIC0gaGVpZ2h0OworCisgICAgLy8gRHJhdyB0aGUgaW5uZXIgcmVjdGFuZ2xlCisgICAgcC5w
YWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsKKyAgICBwLnBhaW50ZXItPnNldEJydXNoKGdldE1l
ZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7CisgICAgcC5wYWludGVyLT5kcmF3UmVjdChs
ZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJP
YmplY3QgKm8sIGNvbnN0IFBhaW50SW5mbyAmcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQor
eworICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3RoaW5nIHRvIGRyYXcgaGVy
ZSwgdGhpcyBpcyBhbGwgZG9uZSBpbiB0aGUgdHJhY2sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCit7
CisgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gdG9QYXJlbnRNZWRpYUVsZW1l
bnQobyk7CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7CisgICAgaWYgKCFwLmlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQo
UVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICBwYWludE1lZGlhQmFja2dyb3Vu
ZChwLnBhaW50ZXIsIHIpOworCisgICAgaWYgKE1lZGlhUGxheWVyKiBwbGF5ZXIgPSBtZWRpYUVs
ZW1lbnQtPnBsYXllcigpKSB7CisgICAgICAgIC8vIEdldCB0aGUgYnVmZmVyZWQgcGFydHMgb2Yg
dGhlIG1lZGlhCisgICAgICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBidWZmZXJlZCA9IHBsYXllci0+
YnVmZmVyZWQoKTsKKyAgICAgICAgaWYgKGJ1ZmZlcmVkLT5sZW5ndGgoKSA+IDAgJiYgcGxheWVy
LT5kdXJhdGlvbigpIDwgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmluZmluaXR5KCkpIHsK
KyAgICAgICAgICAgIC8vIFNldCB0aGUgdHJhbnNmb3JtIGFuZCBicnVzaAorICAgICAgICAgICAg
V29ybGRNYXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAg
ICAgICAgICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29s
b3IoKSk7CisKKyAgICAgICAgICAgIC8vIFBhaW50IGVhY2ggYnVmZmVyZWQgc2VjdGlvbgorICAg
ICAgICAgICAgRXhjZXB0aW9uQ29kZSBleDsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgYnVmZmVyZWQtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBzdGFy
dFggPSAoYnVmZmVyZWQtPnN0YXJ0KGksIGV4KSAvIHBsYXllci0+ZHVyYXRpb24oKSkgKiAxMDA7
CisgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGggPSAoKGJ1ZmZlcmVkLT5lbmQoaSwgZXgpIC8g
cGxheWVyLT5kdXJhdGlvbigpKSAqIDEwMCkgLSBzdGFydFg7CisgICAgICAgICAgICAgICAgcC5w
YWludGVyLT5kcmF3UmVjdChzdGFydFgsIDM3LCB3aWR0aCwgMjYpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRo
ZW1lUXRNb2JpbGU6OnBhaW50TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEFTU0VSVChv
LT5ub2RlKCkpOworICAgIE5vZGUqIGhvc3ROb2RlID0gby0+bm9kZSgpLT5zaGFkb3dBbmNlc3Rv
ck5vZGUoKTsKKyAgICBBU1NFUlQoaG9zdE5vZGUpOworICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCA9IHRvUGFyZW50TWVkaWFFbGVtZW50KGhvc3ROb2RlKTsKKyAgICBpZiAoIW1l
ZGlhRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3R5bGVQYWludGVyIHAo
dGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFz
aW5nLCB0cnVlKTsKKworICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7CisgICAgcC5w
YWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoaG9zdE5vZGUt
PnJlbmRlcmVyKCkpKTsKKyAgICBwLnBhaW50ZXItPmRyYXdSZWN0KHIueCgpLCByLnkoKSwgci53
aWR0aCgpLCByLmhlaWdodCgpKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCit2
b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHls
ZSogc3R5bGUpIGNvbnN0Cit7CisgICAgLy8gdGltZWxpbmVUaHVtYkhlaWdodCBzaG91bGQgbWF0
Y2ggdGhlIGhlaWdodCBwcm9wZXJ0eSBvZiAtd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5l
IGluIG1lZGlhQ29udHJvbHNRdC5jc3MuCisgICAgY29uc3QgaW50IHRpbWVsaW5lVGh1bWJIZWln
aHQgPSAxMjsKKyAgICBjb25zdCBpbnQgdGltZWxpbmVUaHVtYldpZHRoID0gdGltZWxpbmVUaHVt
YkhlaWdodCAvIDM7CisgICAgLy8gdm9sdW1lVGh1bWJXaWR0aCBzaG91bGQgbWF0Y2ggdGhlIHdp
ZHRoIHByb3BlcnR5IG9mIC13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciBpbiBt
ZWRpYUNvbnRyb2xzUXQuY3NzLgorICAgIGNvbnN0IGludCB2b2x1bWVUaHVtYldpZHRoID0gMTI7
CisgICAgY29uc3QgaW50IHZvbHVtZVRodW1iSGVpZ2h0ID0gdm9sdW1lVGh1bWJXaWR0aCAvIDM7
CisgICAgQ29udHJvbFBhcnQgcGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisKKyAgICBpZiAo
cGFydCA9PSBNZWRpYVNsaWRlclRodW1iUGFydCkgeworICAgICAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKHRpbWVsaW5lVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnNldEhl
aWdodChMZW5ndGgodGltZWxpbmVUaHVtYkhlaWdodCwgRml4ZWQpKTsKKyAgICB9IGVsc2UgaWYg
KHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpIHsKKyAgICAgICAgc3R5bGUtPnNl
dEhlaWdodChMZW5ndGgodm9sdW1lVGh1bWJIZWlnaHQsIEZpeGVkKSk7CisgICAgICAgIHN0eWxl
LT5zZXRXaWR0aChMZW5ndGgodm9sdW1lVGh1bWJXaWR0aCwgRml4ZWQpKTsKKyAgICB9IGVsc2Ug
aWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRo
dW1iVmVydGljYWxQYXJ0KSB7CisKKyAgICAgICAgLy8gZXh0cmFjdGVkIGZyb20gUVdpbmRvd3NT
dHlsZQorICAgICAgICBjb25zdCBpbnQgd2lkdGggPSAxMTsKKyAgICAgICAgY29uc3QgaW50IGhl
aWdodCA9IDA7CisgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7
CisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwgRml4ZWQpKTsKKyAgICB9
Cit9CisKK2RvdWJsZSBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjYXJldEJsaW5rSW50ZXJ2YWwoKSBj
b25zdAoreworICAgIHJldHVybiBRQXBwbGljYXRpb246OmN1cnNvckZsYXNoVGltZSgpIC8gMTAw
MC4wIC8gMi4wOworfQorCitTdHJpbmcgUmVuZGVyVGhlbWVRdE1vYmlsZTo6ZmlsZUxpc3ROYW1l
Rm9yV2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29uc3QgRm9udCYgZm9u
dCwgaW50IHdpZHRoKQoreworICAgIGlmICh3aWR0aCA8PSAwKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKKyAgICBTdHJpbmcgc3RyaW5nOworICAgIGlmIChmaWxlbmFtZXMuaXNFbXB0eSgp
KQorICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOworICAg
IGVsc2UgaWYgKGZpbGVuYW1lcy5zaXplKCkgPT0gMSkgeworICAgICAgICBTdHJpbmcgZm5hbWUg
PSBmaWxlbmFtZXNbMF07CisgICAgICAgIFFGb250TWV0cmljcyBmbShmb250LmZvbnQoKSk7Cisg
ICAgICAgIHN0cmluZyA9IGZtLmVsaWRlZFRleHQoZm5hbWUsIFF0OjpFbGlkZUxlZnQsIHdpZHRo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgbiA9IGZpbGVuYW1lcy5zaXplKCk7CisgICAg
ICAgIHN0cmluZyA9IFFDb3JlQXBwbGljYXRpb246OnRyYW5zbGF0ZSgiUVdlYlBhZ2UiLCAiJW4g
ZmlsZShzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
bnVtYmVyIG9mIGNob3NlbiBmaWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFFDb3JlQXBwbGljYXRpb246OkNvZGVjRm9yVHIsIG4pOworICAgIH0KKwor
ICAgIHJldHVybiBzdHJpbmc7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhkZGIzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oCkBAIC0wLDAg
KzEsMjIwIEBACisKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgdGhlbWUgaW1wbGVt
ZW50YXRpb24gZm9yIGZvcm0gY29udHJvbHMgaW4gV2ViQ29yZS4KKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KyNpZm5kZWYgUmVuZGVyVGhlbWVRdE1vYmlsZV9oCisjZGVmaW5lIFJlbmRlclRoZW1lUXRNb2Jp
bGVfaAorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgorCisjaW5jbHVkZSA8UUJydXNoPgorCitRVF9CRUdJTl9OQU1FU1BBQ0UKK2NsYXNzIFFD
b2xvcjsKK2NsYXNzIFFQYWludGVyOworY2xhc3MgUVBpeG1hcDsKK2NsYXNzIFFTaXplOworUVRf
RU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBFTkFCTEUoUFJPR1JF
U1NfVEFHKQorY2xhc3MgUmVuZGVyUHJvZ3Jlc3M7CisjZW5kaWYKK2NsYXNzIFJlbmRlclN0eWxl
OworY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKKworY2xhc3MgUmVuZGVyVGhlbWVRdE1vYmlsZSA6
IHB1YmxpYyBSZW5kZXJUaGVtZSB7Citwcml2YXRlOgorICAgIFJlbmRlclRoZW1lUXRNb2JpbGUo
UGFnZSopOworICAgIHZpcnR1YWwgflJlbmRlclRoZW1lUXRNb2JpbGUoKTsKKworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoUGFnZSopOworCisgICAg
dmlydHVhbCBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUqKSBjb25z
dDsKKworICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0
KikgY29uc3Q7CisKKyAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdl
cyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KKyAgICB2aXJ0dWFs
IGJvb2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CisK
KyAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBhbnkgY29udHJvbCB0aW50aW5nIGlz
IHN1cHBvcnRlZCBhdCBhbGwuCisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQ29udHJvbFRpbnRz
KCkgY29uc3Q7CisKKyAgICAvLyBUaGUgcGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgorICAgIHZp
cnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9u
Rm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0
aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIENvbG9y
IHBsYXRmb3JtRm9jdXNSaW5nQ29sb3IoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzeXN0
ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworICAgIHZpcnR1YWwg
Q29sb3Igc3lzdGVtQ29sb3IoaW50IGNzc1ZhbHVlSWQpIGNvbnN0OworCisgICAgdmlydHVhbCBp
bnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAg
dmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0ludGVydmFsKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0
YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0
OworCisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5
bGUqKSBjb25zdDsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICB2aXJ0dWFsIFN0cmluZyBleHRy
YU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRl
clN0eWxlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IHNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0
b25TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRU
ZXh0QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50
TWVudUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
OworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWlu
dE1lbnVMaXN0QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyNpZiBFTkFC
TEUoUFJPR1JFU1NfVEFHKQorICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNs
aWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVj
dG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVh
bCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKENTU1N0eWxl
U2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNo
RmllbGREZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworI2lmIEVOQUJMRShQUk9HUkVT
U19UQUcpCisgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRp
b24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVw
ZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAgIC8v
IFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBi
YXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyopIGNvbnN0OworI2VuZGlmCisKKyNpZiBFTkFCTEUoVklERU8pCisgICAg
dmlydHVhbCBib29sIHBhaW50TWVkaWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRN
ZWRpYVBsYXlCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29s
IHBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTZWVrRm9yd2Fy
ZEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50
TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFDdXJyZW50VGltZShSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBi
b29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50TWVkaWFWb2x1
bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc0N1cnJlbnRUaW1l
KGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCBT
dHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUoZmxvYXQgY3VycmVudFRpbWUs
IGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFzT3duRGlzYWJsZWRT
dGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Citwcml2
YXRlOgorCisgICAgdm9pZCBwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRlciosIGNvbnN0IElu
dFJlY3QmKSBjb25zdDsKKyAgICBkb3VibGUgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgp
IGNvbnN0OworICAgIFFDb2xvciBnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoUmVuZGVy
T2JqZWN0KiA9IDApIGNvbnN0OworI2VuZGlmCisgICAgdm9pZCBjb21wdXRlU2l6ZUJhc2VkT25T
dHlsZShSZW5kZXJTdHlsZSopIGNvbnN0OworCitwcml2YXRlOgorICAgIHZpcnR1YWwgU3RyaW5n
IGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNv
bnN0IEZvbnQmLCBpbnQgd2lkdGgpOworCisgICAgYm9vbCBjaGVja011bHRpcGxlKFJlbmRlck9i
amVjdCopOworICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCkgY29uc3Q7CisgICAg
dm9pZCBzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdm9pZCBzZXRQ
b3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZvaWQgc2V0UGFsZXR0ZUZy
b21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmKSBjb25zdDsKKworICAgIGludCBmaW5kRnJh
bWVMaW5lV2lkdGgoKSBjb25zdCB7IHJldHVybiAyOyB9IC8vIFRha2VuIGRpcmVjdGx5IGZyb20g
UUNvbW1vblN0eWxlLgorCisgICAgSW50UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoUmVuZGVy
T2JqZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwg
SW50UmVjdCBwYXJ0UmVjdCwgY29uc3QgSW50UmVjdCYgbG9jYWxPZmZzZXQpIGNvbnN0OworCisg
ICAgUGFnZSogbV9wYWdlOworCisgICAgUVN0cmluZyBtX2J1dHRvbkZvbnRGYW1pbHk7Cit9Owor
CitjbGFzcyBTdHlsZVBhaW50ZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFN0eWxlUGFpbnRl
cihSZW5kZXJUaGVtZVF0TW9iaWxlKiwgY29uc3QgUGFpbnRJbmZvJik7CisgICAgflN0eWxlUGFp
bnRlcigpOworCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gcGFpbnRlcjt9CisK
KyAgICBRUGFpbnRlciogcGFpbnRlcjsKKworICAgIHZvaWQgZHJhd0xpbmVFZGl0KGNvbnN0IFFS
ZWN0JiwgYm9vbCBzdW5rZW4sIGJvb2wgZW5hYmxlZCA9IHRydWUpOworICAgIHZvaWQgZHJhd0No
ZWNrQm94KGNvbnN0IFFSZWN0JiwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQgPSB0cnVlKTsK
KyAgICB2b2lkIGRyYXdSYWRpb0J1dHRvbihjb25zdCBRUmVjdCYsIGJvb2wgY2hlY2tlZCwgYm9v
bCBlbmFibGVkID0gdHJ1ZSk7CisgICAgdm9pZCBkcmF3UHVzaEJ1dHRvbihjb25zdCBRUmVjdCYs
IGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQgPSB0cnVlKTsKKyAgICB2b2lkIGRyYXdDb21ib0Jv
eChjb25zdCBRUmVjdCYsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZW5hYmxlZCA9IHRydWUpOworCitw
cml2YXRlOgorICAgIHZvaWQgaW5pdChHcmFwaGljc0NvbnRleHQqKTsKKworICAgIHZvaWQgZHJh
d0NoZWNrZXIoUVBhaW50ZXIqLCBpbnQgc2l6ZSwgUUNvbG9yKSBjb25zdDsKKyAgICBRUGl4bWFw
IGZpbmRDaGVja2VyKGNvbnN0IFFSZWN0JiwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7CisKKyAgICB2
b2lkIGRyYXdSYWRpbyhRUGFpbnRlciosIGNvbnN0IFFTaXplJiwgYm9vbCBjaGVja2VkLCBRQ29s
b3IpIGNvbnN0OworICAgIFFQaXhtYXAgZmluZFJhZGlvKGNvbnN0IFFTaXplJiwgYm9vbCBjaGVj
a2VkLCBib29sIGRpc2FibGVkKSBjb25zdDsKKworICAgIFFTaXplIGdldEJ1dHRvbkltYWdlU2l6
ZShjb25zdCBRU2l6ZSYpIGNvbnN0OworICAgIHZvaWQgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQ
YWludGVyKiwgY29uc3QgUVNpemUmLCBRQ29sb3IpIGNvbnN0OworICAgIHZvaWQgZHJhd011bHRp
cGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBRU2l6ZSYsIFFDb2xvcikgY29uc3Q7Cisg
ICAgUVBpeG1hcCBmaW5kQ29tYm9CdXR0b24oY29uc3QgUVNpemUmLCBib29sIG11bHRpcGxlLCBi
b29sIGRpc2FibGVkKSBjb25zdDsKKworICAgIFFCcnVzaCBvbGRCcnVzaDsKKyAgICBib29sIG9s
ZEFudGlhbGlhc2luZzsKKworICAgIFFfRElTQUJMRV9DT1BZKFN0eWxlUGFpbnRlcik7Cit9Owor
fQorCisjZW5kaWYgLy8gUmVuZGVyVGhlbWVRdE1vYmlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwCmluZGV4IDZlZDAyZWEuLjQ5YTUyMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3Bw
CkBAIC0yNiwxMSArMjYsMTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgVVNF
KFFUX01PQklMRV9USEVNRSkKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgorCisjZWxzZQog
I2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUXQuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRo
ZW1lUXQuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgogI2luY2x1ZGUgIlNjcm9s
bFZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIApAQCAtNDIsMTUgKzQ2LDI0IEBACiAj
aW5jbHVkZSA8UVBhaW50ZXI+CiAjaW5jbHVkZSA8UVN0eWxlPgogI2luY2x1ZGUgPFFTdHlsZU9w
dGlvblNsaWRlcj4KKyNlbmRpZiAvLyBVU0UoUVRfTU9CSUxFX1RIRU1FKQogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKKyNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQorU2Nyb2xsYmFyVGhlbWUqIFNj
cm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCit7CisgICAgc3RhdGljIFNjcm9sbGJhclRoZW1l
IHRoZW1lOworICAgIHJldHVybiAmdGhlbWU7Cit9CisjZWxzZQogU2Nyb2xsYmFyVGhlbWUqIFNj
cm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCiB7CiAgICAgc3RhdGljIFNjcm9sbGJhclRoZW1l
UXQgdGhlbWU7CiAgICAgcmV0dXJuICZ0aGVtZTsKIH0KIAorCiBTY3JvbGxiYXJUaGVtZVF0Ojp+
U2Nyb2xsYmFyVGhlbWVRdCgpCiB7CiB9CkBAIC0yNjIsNSArMjc1LDYgQEAgUVN0eWxlKiBTY3Jv
bGxiYXJUaGVtZVF0OjpzdHlsZSgpIGNvbnN0CiAgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6c3R5
bGUoKTsKIH0KIAorI2VuZGlmIC8vIFVTRShRVF9NT0JJTEVfVEhFTUUpCiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJwYWdlLmNwcAppbmRleCAzNzZlZTcwLi4zZDMyOGQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCkBAIC0zMjY4LDExICszMjY4LDEzIEBAIGJvb2wgUVdlYlBhZ2U6OnN3YWxs
b3dDb250ZXh0TWVudUV2ZW50KFFDb250ZXh0TWVudUV2ZW50ICpldmVudCkKIHsKICAgICBkLT5w
YWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2xlYXJDb250ZXh0TWVudSgpOwogCisjaWYg
IVVTRShRVF9NT0JJTEVfVEhFTUUpCiAgICAgaWYgKFFXZWJGcmFtZSogd2ViRnJhbWUgPSBmcmFt
ZUF0KGV2ZW50LT5wb3MoKSkpIHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gUVdlYkZyYW1lUHJp
dmF0ZTo6Y29yZSh3ZWJGcmFtZSk7CiAgICAgICAgIGlmIChTY3JvbGxiYXIqIHNjcm9sbGJhciA9
IGZyYW1lLT52aWV3KCktPnNjcm9sbGJhckF0UG9pbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50
LCAxKS5wb3MoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5jb250ZXh0TWVudShQ
bGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIDEpKTsKICAgICB9CisjZW5kaWYKIAogICAgIFdlYkNv
cmU6OkZyYW1lKiBmb2N1c2VkRnJhbWUgPSBkLT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9j
dXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgZm9jdXNlZEZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2Vu
ZENvbnRleHRNZW51RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCAxKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdl
TG9nCmluZGV4IDM1MDBiZDAuLmE5NTg4N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTEtMDktMDggIFBpZXJyZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CisK
KyAgICAgICAgW1F0XSBSZW1vdmUgdGhlIFFTdHlsZSBkZXBlbmRlbmN5IGluIFF0J3MgbW9iaWxl
IHRoZW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
Nzc3MworCisgICAgICAgIFJlbW92YWwgb2YgdGhlIFFTdHlsZSBkZXBlbmRlbmN5IGZvciB0aGUg
bW9iaWxlIHRoZW1lLgorCisgICAgICAgIFRoaXMgcmVmYWN0b3Jpbmcgc3BsaXRzIHVwIFJlbmRl
clRoZW1lUXQgaW50byB0d28KKyAgICAgICAgaW1wbGVtZW50YXRpb24gZmlsZXMsIGEgUVN0eWxl
LWJhY2tlZCBvbmUsIGFuZCBhCisgICAgICAgIFJlbmRlclRoZW1lUXRNb2JpbGUgb25lIHRoYXQg
dXNlcyBRUGFpbnRlciBkaXJlY3RseS4KKworICAgICAgICBVc2Ugb2YgdGhlIG1vYmlsZSB0aGVt
ZSBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBhIGNvbXBpbGUgZmxhZy4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEFwaS9xd2VicGFnZS5jcHA6CisgICAg
ICAgIChRV2ViUGFnZTo6c3dhbGxvd0NvbnRleHRNZW51RXZlbnQpOgorCiAyMDExLTA5LTA1ICBK
b2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAg
W1F0XVtXSzJdIE1ha2UgVGlsZWREcmF3aW5nQXJlYSByZXF1ZXN0IHRpbGVzIG9ubHkgaW4gdGhl
IGRpcmVjdGlvbiB0aGUgdmlld3BvcnQgaXMgcGFubmVkIHRvLgpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGJmZTU1ZDcuLjEyMjhmOTMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MCBAQAorMjAxMS0wOS0wOCAgUGllcnJlIFJvc3NpICA8cGllcnJlLnJvc3NpQGdtYWlsLmNvbT4K
KworICAgICAgICBbUXRdIFJlbW92ZSB0aGUgUVN0eWxlIGRlcGVuZGVuY3kgaW4gUXQncyBtb2Jp
bGUgdGhlbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY3NzczCisKKyAgICAgICAgUmVtb3ZhbCBvZiB0aGUgUVN0eWxlIGRlcGVuZGVuY3kgZm9yIHRo
ZSBtb2JpbGUgdGhlbWUuCisKKyAgICAgICAgVGhpcyByZWZhY3RvcmluZyBzcGxpdHMgdXAgUmVu
ZGVyVGhlbWVRdCBpbnRvIHR3bworICAgICAgICBpbXBsZW1lbnRhdGlvbiBmaWxlcywgYSBRU3R5
bGUtYmFja2VkIG9uZSwgYW5kIGEKKyAgICAgICAgUmVuZGVyVGhlbWVRdE1vYmlsZSBvbmUgdGhh
dCB1c2VzIFFQYWludGVyIGRpcmVjdGx5LgorCisgICAgICAgIFVzZSBvZiB0aGUgbW9iaWxlIHRo
ZW1lIGNhbiBiZSB0cmlnZ2VyZWQgdmlhIGEgY29tcGlsZSBmbGFnLgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9idWlsZC13ZWJraXQ6
CisKIDIwMTEtMDktMDcgIEVyaWMgQm9yZW4gIDxib3JlbmV0QGdtYWlsLmNvbT4KIAogICAgICAg
ICBbQ2hyb21pdW1dIE1vZGlmeSBXZWJUb3VjaEV2ZW50IHN0cnVjdHVyZSB0byBtYXRjaCBXZWJD
b3JlOjpUb3VjaEV2ZW50CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdCBi
L1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CmluZGV4IDNmNWIwOTIuLmJhN2Q3ZmUgMTAwNzU1
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CisrKyBiL1Rvb2xzL1NjcmlwdHMvYnVp
bGQtd2Via2l0CkBAIC01NSw2ICs1NSw3IEBAIG15ICRjbGVhbiA9IDA7CiBteSAkdXNlR1lQID0g
MDsKIG15ICRtaW5pbWFsID0gMDsKIG15ICR2OCA9IDA7CitteSAkbW9iaWxlVGhlbWUgPSAwOwog
bXkgJGluc3RhbGxIZWFkZXJzOwogbXkgJGluc3RhbGxMaWJzOwogbXkgJHByZWZpeFBhdGg7CkBA
IC0zNDksNiArMzUwLDggQEAgZm9yZWFjaCAoQEFSR1YpIHsKICAgICAgICAgJG1pbmltYWwgPSAx
OwogICAgIH0gZWxzaWYgKCRfIGVxICctLXY4JykgewogICAgICAgICAkdjggPSAxOworICAgIH0g
ZWxzaWYgKCRfIGVxICctLW1vYmlsZS10aGVtZScpIHsKKyAgICAgICAgJG1vYmlsZVRoZW1lID0g
MTsKICAgICB9CiB9CiAKQEAgLTM4NSw2ICszODgsNyBAQCBVc2FnZTogJHByb2dyYW1OYW1lIFtv
cHRpb25zXSBbb3B0aW9ucyB0byBwYXNzIHRvIGJ1aWxkIHN5c3RlbV0KICAgLS1pbnN0YWxsLWhl
YWRlcnM9PHBhdGg+ICAgICAgICAgIFNldCBpbnN0YWxsYXRpb24gcGF0aCBmb3IgdGhlIGhlYWRl
cnMgKFF0IG9ubHkpCiAgIC0taW5zdGFsbC1saWJzPTxwYXRoPiAgICAgICAgICAgICBTZXQgaW5z
dGFsbGF0aW9uIHBhdGggZm9yIHRoZSBsaWJyYXJpZXMgKFF0IG9ubHkpCiAgIC0tdjggICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBVc2UgVjggYXMgSmF2YVNjcmlwdCBlbmdpbmUgKFF0IG9u
bHkpCisgIC0tbW9iaWxlLXRoZW1lICAgICAgICAgICAgICAgICAgICBVc2UgbW9iaWxlIHRoZW1l
IGluc3RlYWQgb2YgUVN0eWxlIChRdCBvbmx5KQogICAtMiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnVpbGQgV2ViS2l0MiAoUXQgb25seSkKIAogICAtLXByZWZpeD08cGF0aD4gICAg
ICAgICAgICAgICAgICAgU2V0IGluc3RhbGxhdGlvbiBwcmVmaXggdG8gdGhlIGdpdmVuIHBhdGgg
KEd0ay9FZmwgb25seSkKQEAgLTQwOCw2ICs0MTIsNyBAQCBteSAlb3B0aW9ucyA9ICgKICAgICAn
bWFrZWFyZ3M9cycgPT4gXCRtYWtlQXJncywKICAgICAnbWluaW1hbCcgPT4gXCRtaW5pbWFsLAog
ICAgICd2OCcgPT4gXCR2OCwKKyAgICAnbW9iaWxlLXRoZW1lJyA9PiBcJG1vYmlsZVRoZW1lLAog
ICAgICdvbmx5LXdlYmtpdCcgPT4gXCRvbmx5V2ViS2l0UHJvamVjdCwKICAgICAnbm8td2Via2l0
MicgPT4gXCRub1dlYktpdDIsCiApOwpAQCAtNTU5LDYgKzU2NCwxMCBAQCBpZiAoaXNHdGsoKSkg
ewogICAgIGlmICgkdjgpIHsKICAgICAgICAgcHVzaCBAb3B0aW9ucywgIkNPTkZJRys9djgiOwog
ICAgIH0KKworICAgIGlmICgkbW9iaWxlVGhlbWUpIHsKKyAgICAgICAgcHVzaCBAb3B0aW9ucywg
IkNPTkZJRys9dXNlX3F0X21vYmlsZV90aGVtZSI7CisgICAgfQogfQogCiAjIElmIGFza2VkIHRv
IGJ1aWxkIGp1c3QgdGhlIFdlYktpdCBwcm9qZWN0LCBvdmVyd3JpdGUgdGhlIHByb2plY3RzCi0t
IAoxLjcuNi4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114665</attachid>
            <date>2011-11-11 04:19:47 -0800</date>
            <delta_ts>2011-11-11 05:01:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67773-20111111132127.patch</filename>
            <type>text/plain</type>
            <size>151927</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk4NjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYWFlMTJhZDJhZjg0YmMy
M2VmOWMzYTIzMzkwNjQ2YTcwNWY1NTJlLi41Yjk4OTgyMjUzZDE2N2U1YzkwZjVkZmU4NTlkMTU0
YWY5MjhjMGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ0IEBACisyMDExLTExLTA5ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3Zl
IHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBpbiBRdCdzIG1vYmlsZSB0aGVtZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NzMKKworICAgICAgICBUaGlz
IHJlZmFjdG9yaW5nIHNwbGl0cyB1cCBSZW5kZXJUaGVtZVF0IHdpdGggdHdvCisgICAgICAgIHN1
YmNsYXNzZXMsIGEgUVN0eWxlLWJhY2tlZCBvbmUsIGFuZCBhIE1vYmlsZSB2ZXJzaW9uCisgICAg
ICAgIHRoYXQgdXNlcyB0aGUgb2xkIG1vYmlsZSB0aGVtZSBmb3Igbm93LgorCisgICAgICAgIFFT
dHlsZSBhdmFpbGFiaWxpdHkgaXMgZGV0ZWN0ZWQgYXQgY29tcGlsZSB0aW1lLCBhbmQKKyAgICAg
ICAgaXRzIHVzZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBRVF9XRUJLSVRfVVNFX01PQklMRV9USEVN
RQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IHRoZSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUXRNb2JpbGVX
ZWJTdHlsZS5jcHA6IFJlbW92ZWQuIFRoZSByZWxldmFudCBsb2dpYworICAgICAgICBub3cgbGl2
ZXMgd2l0aGluIFJlbmRlclRoZW1lUXRNb2JpbGUuCisgICAgICAgICogcGxhdGZvcm0vcXQvUXRN
b2JpbGVXZWJTdHlsZS5oOiBSZW1vdmVkLiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6aW5pdFN0eWxl
T3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBh
aW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpTdHlsZVBhaW50
ZXJRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjppbml0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OlJlbmRlclRoZW1lUVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjp+UmVuZGVyVGhlbWVRU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmZhbGxiYWNrU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVFTdHlsZTo6ZmluZEZyYW1lTGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUVN0eWxlOjppbmZsYXRlQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpzZXRCdXR0b25QYWRkaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFRleHRBcmVhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpzZXRQb3B1cFBhZGRpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJv
Z3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50UHJv
Z3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xp
ZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNs
aWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBh
aW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxl
OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUVN0eWxlOjppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXpl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OmRyYXdQcmltaXRpdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpkcmF3Q29udHJvbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJRU3R5bGU6OmRyYXdDb21wbGV4Q29udHJvbCk6CisgICAgICAgICogcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjpSZW5kZXJUaGVtZVF0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6Omlz
Q29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjppbmZsYXRl
QnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RSZXBh
aW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjptaW5pbXVtTWVudUxp
c3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVs
ZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9n
cmVzc0JhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdDo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVBsYXlCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1
bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRy
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVt
YlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Y2FyZXRCbGlua0ludGVy
dmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZvcldp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVBhaW50ZXI6On5TdHlsZVBhaW50ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6aXNWYWxpZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6ZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Z2V0U3R5bGVQYWludGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6U3R5bGVQYWludGVyTW9iaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0NoZWNrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2hlY2tlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdSYWRpbyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENvbWJvQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0xpbmVFZGl0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0NoZWNrQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1JhZGlvQnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1B1c2hCdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q29tYm9Cb3gpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1v
YmlsZTo6UmVuZGVyVGhlbWVRdE1vYmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0TW9iaWxlOjp+UmVuZGVyVGhlbWVRdE1vYmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0TW9iaWxlOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0QnV0dG9uU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0QnV0dG9uUGFkZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludEJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0RmllbGRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRG
aWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RNZW51
TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldFBv
cHVwUGFkZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWlu
dE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50
TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0TW9iaWxlOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpjaGVja011bHRpcGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNsaWRlclRodW1i
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZVF0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZVF0OjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVRdDo6cGFpbnRTY3JvbGxDb3JuZXIpOgorCiAyMDExLTExLTEwICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByOTk4NTEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDE5Mjk3NzczYzYzZWNkYzUzNjQwN2Rk
MTI5YzRkMTBhM2Q0NDhjOTUuLmRmN2RlZjgyMjZhNGNlYzAzYjY1NjEyYTM1ZTc0OWE2ZDYxZjkx
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMTEtMDkgIFBpZXJyZSBS
b3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CisKKyAgICAgICAgW1F0XSBSZW1vdmUgdGhl
IFFTdHlsZSBkZXBlbmRlbmN5IGluIFF0J3MgbW9iaWxlIHRoZW1lCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc3MworCisgICAgICAgIFRoaXMgcmVm
YWN0b3Jpbmcgc3BsaXRzIHVwIFJlbmRlclRoZW1lUXQgd2l0aCB0d28KKyAgICAgICAgc3ViY2xh
c3NlcywgYSBRU3R5bGUtYmFja2VkIG9uZSwgYW5kIGEgTW9iaWxlIHZlcnNpb24KKyAgICAgICAg
dGhhdCB1c2VzIHRoZSBvbGQgbW9iaWxlIHRoZW1lIGZvciBub3cuCisKKyAgICAgICAgUVN0eWxl
IGF2YWlsYWJpbGl0eSBpcyBkZXRlY3RlZCBhdCBjb21waWxlIHRpbWUsIGFuZAorICAgICAgICBp
dHMgdXNlIGlzIGRldGVybWluZWQgYnkgdGhlIFFUX1dFQktJVF9VU0VfTU9CSUxFX1RIRU1FCisg
ICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQ
YWdlOjpzd2FsbG93Q29udGV4dE1lbnVFdmVudCk6CisgICAgICAgICogdGVzdHMvdGVzdHMucHJp
OgorCiAyMDExLTExLTEwICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eu
b3JnPgogCiAgICAgICAgIFtRdF0gTWVyZ2UgUVRvdWNoV2ViVmlldyBhbmQgUURlc2t0b3BXZWJW
aWV3IGludG8gb25lIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAxZjBmMTNkZDFjM2JjNTUxYzc5MTY5
YTYwNDBhNmIwNDJlZTNjOWE2Li5lM2ZlYjM1NjJjMDYxNGE3NWU0ZWIzMTY0ZTkxNDJlNjA2OWU4
OWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKQEAgLTIwLDEwICsyMCw2IEBAIERFRklORVMgKz0gUVRfTUFLRURM
TAogCiBjb250YWlucyhRVF9DT05GSUcsIHJlZHVjZV9leHBvcnRzKTpDT05GSUcgKz0gaGlkZV9z
eW1ib2xzCiAKLWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRfTU9CSUxFX1RIRU1FPTEpIHsK
LSAgICBERUZJTkVTICs9IEVOQUJMRV9OT19MSVNUQk9YX1JFTkRFUklORz0xCi19Ci0KIGhhdmVR
dCg1KSB7CiAgICAgIyBBZGQgYSBRdFNjcmlwdCBkZXBlbmRlbmN5IGZvciB0aGUgdGltZSBiZWlu
ZywgaW4gb3JkZXIgdG8gcHVsbCBpbiB0aGUgaW5jbHVkZQogICAgICMgcGF0aCBmb3IgUXRTY3Jp
cHQgd2hlbiBpdCdzIGJ1aWx0IGFzIGEgc3RhbmRhbG9uZSBtb2R1bGUKQEAgLTIyMDYsOSArMjIw
Miw4IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggXAogICAg
IHBsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmggXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xp
ZW50LmggXAotICAgIHBsYXRmb3JtL3F0L1F0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIFwKICAg
ICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmggXAotICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJh
clRoZW1lUXQuaCBcCisgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oIFwKICAg
ICBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5oIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXIuaCBcCkBAIC0yNzc0LDcgKzI3NjksNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybVRvdWNoRXZlbnRRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtVG91Y2hQb2ludFF0LmNwcCBcCiAgICAgcGxhdGZvcm0v
cXQvUmVuZGVyVGhlbWVRdC5jcHAgXAotICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcCBc
CisgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAgXAogICAgIHBsYXRmb3Jt
L3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcCBcCkBAIC0yNzkzLDkgKzI3
ODgsMTIgQEAgU09VUkNFUyArPSBcCiAgICAgU09VUkNFUyArPSB4bWwvcGFyc2VyL1hNTERvY3Vt
ZW50UGFyc2VyUXQuY3BwCiB9CiAKLWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRfTU9CSUxF
X1RIRU1FPTEpIHsKLSAgICBIRUFERVJTICs9IHBsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUu
aAotICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vcXQvUXRNb2JpbGVXZWJTdHlsZS5jcHAKK2NvbnRh
aW5zKERFRklORVMsIEhBVkVfUVNUWUxFPTEpIHsKKyAgICBIRUFERVJTICs9IHBsYXRmb3JtL3F0
L1F0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUVN0eWxlLmggXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vcXQvU2Nyb2xs
YmFyVGhlbWVRdC5oCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHls
ZS5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCiB9CiAK
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HPTEpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAppbmRleCBjMzAwZmRjNDcwN2NmNjczYjQ5Mzhk
YmY0YmI1MmRlZTZhMTEyYTJmLi45NmFiNzAzYjI5NDc0YWZlMTE0NzE1ODcyNmJhMGIyMzk1YzNi
YWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCkBAIC0xOTksMTAg
KzE5OSwxMiBAQCBwcml2YXRlOgogaW5saW5lIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OnVzZXNN
ZW51TGlzdCgpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKE5PX0xJU1RCT1hfUkVOREVSSU5HKQorI2lm
IFBMQVRGT1JNKFFUKQorICAgIGlmICghcWdldGVudigiUVRfV0VCS0lUX1VTRV9NT0JJTEVfVEhF
TUUiKS5pc051bGwoKSkKKyNlbmRpZgogICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1
cm4gIW1fbXVsdGlwbGUgJiYgbV9zaXplIDw9IDE7CiAjZW5kaWYKKyAgICByZXR1cm4gIW1fbXVs
dGlwbGUgJiYgbV9zaXplIDw9IDE7CiB9CiAKIEhUTUxTZWxlY3RFbGVtZW50KiB0b0hUTUxTZWxl
Y3RFbGVtZW50KE5vZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1F0TW9iaWxlV2ViU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRNb2Jp
bGVXZWJTdHlsZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjYTE4MTdkNzIy
Yjk1ZWU5MjJmN2NmNjQ4ZmNkYjRlNTE5MWNhODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRNb2JpbGVX
ZWJTdHlsZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzODEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgot
ICovCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUXRNb2JpbGVXZWJTdHlsZS5oIgot
Ci0jaW5jbHVkZSAiUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94LmgiCi0KLSNpbmNsdWRlIDxRUGFp
bnRlcj4KLSNpbmNsdWRlIDxRUGl4bWFwQ2FjaGU+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uPgot
Ci1RdE1vYmlsZVdlYlN0eWxlOjpRdE1vYmlsZVdlYlN0eWxlKCkKLXsKLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBRUGVuJiBwZW4sIGNvbnN0IFFSZWN0JiByZWN0LCBjb25zdCBRQnJ1c2gmIGJy
dXNoKQotewotICAgIFFQZW4gb2xkUGVuID0gcGFpbnRlci0+cGVuKCk7Ci0gICAgUUJydXNoIG9s
ZEJydXNoID0gcGFpbnRlci0+YnJ1c2goKTsKLSAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQ
YWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwotICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwot
ICAgIHBhaW50ZXItPnNldEJydXNoKGJydXNoKTsKLQotICAgIGludCBsaW5lID0gMTsKLSAgICBw
YWludGVyLT5kcmF3Um91bmRlZFJlY3QocmVjdC5hZGp1c3RlZChsaW5lLCBsaW5lLCAtbGluZSwg
LWxpbmUpLAotICAgICAgICAgICAgLyogeFJhZGl1cyAqLyA1LjAsIC8qIHlSYWRpb3VzICovIDUu
MCk7Ci0gICAgcGFpbnRlci0+c2V0UGVuKG9sZFBlbik7Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2go
b2xkQnJ1c2gpOwotfQotCi12b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdDaGVja2VyKFFQYWlu
dGVyKiBwYWludGVyLCBpbnQgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAotewotICAgIGludCBi
b3JkZXIgPSBxTWluKHFNYXgoMSwgaW50KDAuMiAqIHNpemUpKSwgNik7Ci0gICAgaW50IGNoZWNr
ZXJTaXplID0gcU1heChzaXplIC0gMiAqIGJvcmRlciwgMyk7Ci0gICAgaW50IHdpZHRoID0gY2hl
Y2tlclNpemUgLyAzOwotICAgIGludCBtaWRkbGUgPSBxTWF4KDMgKiBjaGVja2VyU2l6ZSAvIDcs
IDMpOwotICAgIGludCB4ID0gKChzaXplIC0gY2hlY2tlclNpemUpID4+IDEpOwotICAgIGludCB5
ID0gKChzaXplIC0gY2hlY2tlclNpemUpID4+IDEpICsgKGNoZWNrZXJTaXplIC0gd2lkdGggLSBt
aWRkbGUpOwotICAgIFFWZWN0b3I8UUxpbmVGPiBsaW5lcyhjaGVja2VyU2l6ZSArIDEpOwotICAg
IHBhaW50ZXItPnNldFBlbihjb2xvcik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaWRkbGU7
ICsraSkgewotICAgICAgICBsaW5lc1tpXSA9IFFMaW5lRih4LCB5LCB4LCB5ICsgd2lkdGgpOwot
ICAgICAgICArK3g7Ci0gICAgICAgICsreTsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IG1pZGRs
ZTsgaSA8PSBjaGVja2VyU2l6ZTsgKytpKSB7Ci0gICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgs
IHksIHgsIHkgKyB3aWR0aCk7Ci0gICAgICAgICsreDsKLSAgICAgICAgLS15OwotICAgIH0KLSAg
ICBwYWludGVyLT5kcmF3TGluZXMobGluZXMuY29uc3REYXRhKCksIGxpbmVzLnNpemUoKSk7Ci19
Ci0KLVFQaXhtYXAgUXRNb2JpbGVXZWJTdHlsZTo6ZmluZENoZWNrZXIoY29uc3QgUVJlY3QmIHJl
Y3QsIGJvb2wgZGlzYWJsZWQpIGNvbnN0Ci17Ci0gICAgaW50IHNpemUgPSBxTWluKHJlY3Qud2lk
dGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgUVBpeG1hcCByZXN1bHQ7Ci0gICAgc3RhdGljIGNv
bnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS0iKSArIFFMYXRp
bjFTdHJpbmcobWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkrIFFMYXRpbjFTdHJpbmcoIi1jaGVj
a2VyLSIpOwotICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUp
ICsgUUxhdGluMVN0cmluZygiLSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJs
ZWQiKSA6IFFMYXRpbjFTdHJpbmcoImVuYWJsZWQiKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6
OmZpbmQoa2V5LCByZXN1bHQpKSB7Ci0gICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSwgc2l6
ZSk7Ci0gICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIFFQYWlu
dGVyIHBhaW50ZXIoJnJlc3VsdCk7Ci0gICAgICAgIGRyYXdDaGVja2VyKCZwYWludGVyLCBzaXpl
LCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBRUGl4
bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd1JhZGlvKFFQYWludGVyKiBwYWludGVy
LCBjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVja2VkLCBRQ29sb3IgY29sb3IpIGNvbnN0Ci17
Ci0gICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVl
KTsKLQotICAgIC8vIGdldCBtaW5vciBzaXplIHRvIGRvIG5vdCBwYWludCBhIHdpZGUgZWxpcHNl
Ci0gICAgcXJlYWwgc3F1YXJlU2l6ZSA9IHFNaW4oc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKLSAgICAvLyBkZWZsYXRlIG9uZSBwaXhlbAotICAgIFFSZWN0IHJlY3QgPSBRUmVjdChRUG9p
bnQoMSwgMSksIFFTaXplKHNxdWFyZVNpemUgLSAyLCBzcXVhcmVTaXplIC0gMikpOwotICAgIGNv
bnN0IFFQb2ludCBjZW50ZXJHcmFkaWVudChyZWN0LmJvdHRvbVJpZ2h0KCkgKiAwLjcpOwotCi0g
ICAgUVJhZGlhbEdyYWRpZW50IHJhZGlhbEdyYWRpZW50KGNlbnRlckdyYWRpZW50LCBjZW50ZXJH
cmFkaWVudC54KCkgLSAxKTsKLSAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6
OndoaXRlKTsKLSAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDAuNiwgUXQ6OndoaXRlKTsK
LSAgICByYWRpYWxHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwgY29sb3IpOwotCi0gICAgcGFpbnRl
ci0+c2V0UGVuKGNvbG9yKTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0gICAgcGFp
bnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2gocmFkaWFsR3Jh
ZGllbnQpOwotICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOwotCi0gICAgaW50IGJvcmRl
ciA9IDAuMSAqIChyZWN0LndpZHRoKCkgKyByZWN0LmhlaWdodCgpKTsKLSAgICBib3JkZXIgPSBx
TWluKHFNYXgoMiwgYm9yZGVyKSwgMTApOwotICAgIHJlY3QuYWRqdXN0KGJvcmRlciwgYm9yZGVy
LCAtYm9yZGVyLCAtYm9yZGVyKTsKLSAgICBpZiAoY2hlY2tlZCkgewotICAgICAgICBwYWludGVy
LT5zZXRQZW4oUXQ6Ok5vUGVuKTsKLSAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOwot
ICAgICAgICBwYWludGVyLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICB9Ci19Ci0KLVFQaXhtYXAg
UXRNb2JpbGVXZWJTdHlsZTo6ZmluZFJhZGlvKGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNr
ZWQsIGJvb2wgZGlzYWJsZWQpIGNvbnN0Ci17Ci0gICAgUVBpeG1hcCByZXN1bHQ7Ci0gICAgc3Rh
dGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS0iKSAr
IFFMYXRpbjFTdHJpbmcobWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkgKyBRTGF0aW4xU3RyaW5n
KCItcmFkaW8tIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIo
c2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKSArIFFTdHJpbmc6Om51bWJlcihzaXpl
LmhlaWdodCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKQotICAgICAgICArIChkaXNhYmxlZCA/IFFM
YXRpbjFTdHJpbmcoImRpc2FibGVkIikgOiBRTGF0aW4xU3RyaW5nKCJlbmFibGVkIikpICsgKGNo
ZWNrZWQgPyBRTGF0aW4xU3RyaW5nKCItY2hlY2tlZCIpIDogUUxhdGluMVN0cmluZygiIikpOwot
ICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgewotICAgICAgICByZXN1
bHQgPSBRUGl4bWFwKHNpemUpOwotICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQp
OwotICAgICAgICBRUGFpbnRlciBwYWludGVyKCZyZXN1bHQpOwotICAgICAgICBkcmF3UmFkaW8o
JnBhaW50ZXIsIHNpemUsIGNoZWNrZWQsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0Ojpk
YXJrR3JheSk7Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3
Q29udHJvbChDb250cm9sRWxlbWVudCBlbGVtZW50LCBjb25zdCBRU3R5bGVPcHRpb24qIG9wdGlv
biwgUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFXaWRnZXQqIHdpZGdldCkgY29uc3QKLXsKLSAg
ICBzd2l0Y2ggKGVsZW1lbnQpIHsKLSAgICBjYXNlIENFX0NoZWNrQm94OiB7Ci0gICAgICAgIFFS
ZWN0IHJlY3QgPSBvcHRpb24tPnJlY3Q7Ci0gICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZWQgPSAh
KG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9FbmFibGVkKTsKLQotICAgICAgICBRTGluZWFyR3JhZGll
bnQgbGluZWFyR3JhZGllbnQocmVjdC50b3BMZWZ0KCksIHJlY3QuYm90dG9tTGVmdCgpKTsKLSAg
ICAgICAgaWYgKGRpc2FibGVkKSB7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xv
ckF0KDAuMCwgUXQ6OmxpZ2h0R3JheSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRD
b2xvckF0KDAuNSwgUXQ6OndoaXRlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxp
bmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOwotICAgICAgICAgICAg
bGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjUsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBwYWludGVyLT5zZXRQZW4oUVBlbihkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBR
dDo6ZGFya0dyYXkpKTsKLSAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2gobGluZWFyR3JhZGllbnQp
OwotICAgICAgICBwYWludGVyLT5kcmF3UmVjdChyZWN0KTsKLSAgICAgICAgcmVjdC5hZGp1c3Qo
MSwgMSwgLTEsIC0xKTsKLQotICAgICAgICBpZiAob3B0aW9uLT5zdGF0ZSAmIFN0YXRlX09mZikK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFFQaXhtYXAgY2hlY2tlciA9IGZpbmRDaGVj
a2VyKHJlY3QsIGRpc2FibGVkKTsKLSAgICAgICAgaWYgKGNoZWNrZXIuaXNOdWxsKCkpCi0gICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICBpbnQgeCA9IChyZWN0LndpZHRoKCkgLSBjaGVja2Vy
LndpZHRoKCkpID4+IDE7Ci0gICAgICAgIGludCB5ID0gKHJlY3QuaGVpZ2h0KCkgLSBjaGVja2Vy
LmhlaWdodCgpKSA+PiAxOwotICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QueCgpICsg
eCwgcmVjdC55KCkgKyB5LCBjaGVja2VyKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNh
c2UgQ0VfUmFkaW9CdXR0b246IHsKLSAgICAgICAgY29uc3QgYm9vbCBkaXNhYmxlZCA9ICEob3B0
aW9uLT5zdGF0ZSAmIFN0YXRlX0VuYWJsZWQpOwotICAgICAgICBRUGl4bWFwIHJhZGlvID0gZmlu
ZFJhZGlvKG9wdGlvbi0+cmVjdC5zaXplKCksIG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9PbiwgZGlz
YWJsZWQpOwotICAgICAgICBpZiAocmFkaW8uaXNOdWxsKCkpCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgcGFpbnRlci0+ZHJhd1BpeG1hcChvcHRpb24tPnJlY3QueCgpLCBvcHRpb24tPnJl
Y3QueSgpLCByYWRpbyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIENFX1B1c2hC
dXR0b246IHsKLSAgICAgICAgY29uc3QgYm9vbCBkaXNhYmxlZCA9ICEob3B0aW9uLT5zdGF0ZSAm
IFN0YXRlX0VuYWJsZWQpOwotICAgICAgICBRUmVjdCByZWN0ID0gb3B0aW9uLT5yZWN0OwotICAg
ICAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5k
Q2FwLCBRdDo6Um91bmRKb2luKTsKLSAgICAgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7Ci0KLSAg
ICAgICAgY29uc3QgYm9vbCBzdW5rZW4gPSAob3B0aW9uLT5zdGF0ZSAmIFN0YXRlX1N1bmtlbik7
Ci0gICAgICAgIGlmIChzdW5rZW4pIHsKLSAgICAgICAgICAgIGRyYXdSZWN0YW5ndWxhckNvbnRy
b2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgUUJydXNoKFF0OjpkYXJrR3JheSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBRTGluZWFyR3JhZGllbnQg
bGluZWFyR3JhZGllbnQ7Ci0gICAgICAgIGlmIChkaXNhYmxlZCkgewotICAgICAgICAgICAgbGlu
ZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAgICAgICAgbGlu
ZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKHJlY3QudG9wTGVmdCgpKTsKLSAgICAgICAgICAgIGxp
bmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7Ci0gICAgICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwgUXQ6OndoaXRlKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsK
LSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChRUG9pbnQocmVjdC5ib3R0
b21MZWZ0KCkueCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5ib3R0b21MZWZ0KCku
eSgpIC0gLyogb2Zmc2V0IGxpbWl0IGZvciBncmFkaWVudCAqLyAyMCkpOwotICAgICAgICAgICAg
bGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKLSAgICAgICAgICAgIGxp
bmVhckdyYWRpZW50LnNldENvbG9yQXQoMC40LCBRdDo6d2hpdGUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0
LCBsaW5lYXJHcmFkaWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0Ogot
ICAgICAgICBRV2luZG93c1N0eWxlOjpkcmF3Q29udHJvbChlbGVtZW50LCBvcHRpb24sIHBhaW50
ZXIsIHdpZGdldCk7Ci0gICAgfQotfQotdm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3UHJpbWl0
aXZlKFByaW1pdGl2ZUVsZW1lbnQgZWxlbWVudCwgY29uc3QgUVN0eWxlT3B0aW9uKiBvcHRpb24s
IFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRV2lkZ2V0KiB3aWRnZXQpIGNvbnN0Ci17Ci0gICAg
c3dpdGNoIChlbGVtZW50KSB7Ci0gICAgY2FzZSBRU3R5bGU6OlBFX1BhbmVsTGluZUVkaXQ6IHsK
LSAgICAgICAgY29uc3QgYm9vbCBkaXNhYmxlZCA9ICEob3B0aW9uLT5zdGF0ZSAmIFN0YXRlX0Vu
YWJsZWQpOwotICAgICAgICBjb25zdCBib29sIHN1bmtlbiA9IChvcHRpb24tPnN0YXRlICYgU3Rh
dGVfU3Vua2VuKTsKLSAgICAgICAgUVJlY3QgcmVjdCA9IG9wdGlvbi0+cmVjdDsKLSAgICAgICAg
UVBlbiBwZW4oUXQ6OmRhcmtHcmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwg
UXQ6OlJvdW5kSm9pbik7Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihwZW4pOwotCi0gICAgICAg
IGlmIChzdW5rZW4pIHsKLSAgICAgICAgICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3Jv
dW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgUUJydXNoKFF0OjpkYXJrR3JheSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3Jh
ZGllbnQ7Ci0gICAgICAgIGlmIChkaXNhYmxlZCkgewotICAgICAgICAgICAgbGluZWFyR3JhZGll
bnQuc2V0U3RhcnQocmVjdC50b3BMZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0RmluYWxTdG9wKHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldENvbG9yQXQoMC4wLCBRdDo6bGlnaHRHcmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC50b3BMZWZ0KCkpOwotICAgICAg
ICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKFFQb2ludChyZWN0LnRvcExlZnQoKS54
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICByZWN0LnRvcExlZnQoKS55KCkgKyAvKiBvZmZz
ZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVu
dC5zZXRDb2xvckF0KDAuMCwgUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldENvbG9yQXQoMC4zNSwgUXQ6OndoaXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRy
YXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgbGluZWFy
R3JhZGllbnQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
UVdpbmRvd3NTdHlsZTo6ZHJhd1ByaW1pdGl2ZShlbGVtZW50LCBvcHRpb24sIHBhaW50ZXIsIHdp
ZGdldCk7Ci0gICAgfQotfQotCi12b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdNdWx0aXBsZUNv
bWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNv
bG9yKSBjb25zdAotewotICAgIGludCByZWN0V2lkdGggPSBzaXplLndpZHRoKCkgLSAxOwotICAg
IGludCB3aWR0aCA9IHFNYXgoMiwgcmVjdFdpZHRoID4+IDMpOwotICAgIGludCBkaXN0YW5jZSA9
IChyZWN0V2lkdGggLSAzICogd2lkdGgpID4+IDE7Ci0gICAgaW50IHRvcCA9IChzaXplLmhlaWdo
dCgpIC0gd2lkdGgpID4+IDE7Ci0KLSAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOwotICAgIHBh
aW50ZXItPnNldEJydXNoKGNvbG9yKTsKLQotICAgIHBhaW50ZXItPmRyYXdSZWN0KDAsIHRvcCwg
d2lkdGgsIHdpZHRoKTsKLSAgICBwYWludGVyLT5kcmF3UmVjdCh3aWR0aCArIGRpc3RhbmNlLCB0
b3AsIHdpZHRoLCB3aWR0aCk7Ci0gICAgcGFpbnRlci0+ZHJhd1JlY3QoMiAqICh3aWR0aCArIGRp
c3RhbmNlKSwgdG9wLCB3aWR0aCwgd2lkdGgpOwotfQotCi12b2lkIFF0TW9iaWxlV2ViU3R5bGU6
OmRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNp
emUsIFFDb2xvciBjb2xvcikgY29uc3QKLXsKLSAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7
Ci0gICAgaW50IG1pZGxlID0gd2lkdGggPj4gMTsKLSAgICBRVmVjdG9yPFFMaW5lPiBsaW5lcyh3
aWR0aCArIDEpOwotCi0gICAgZm9yIChpbnQgeCA9IDAsIHkgPSAwOyAgeCA8IG1pZGxlOyB4Kyss
IHkrKykgewotICAgICAgICBsaW5lc1t4XSA9IFFMaW5lKHgsIHksIHgsIHkgKyAyKTsKLSAgICAg
ICAgbGluZXNbeCArIG1pZGxlXSA9IFFMaW5lKHdpZHRoIC0geCAtIDEsIHksIHdpZHRoIC0geCAt
IDEsIHkgKyAyKTsKLSAgICB9Ci0gICAgLy8gSnVzdCB0byBlbnN1cmUgdGhlIGxpbmVzJyBpbnRl
cnNlY3Rpb24uCi0gICAgbGluZXNbd2lkdGhdID0gUUxpbmUobWlkbGUsIG1pZGxlLCBtaWRsZSwg
bWlkbGUgKyAyKTsKLQotICAgIHBhaW50ZXItPnNldFBlbihjb2xvcik7Ci0gICAgcGFpbnRlci0+
c2V0QnJ1c2goY29sb3IpOwotICAgIHBhaW50ZXItPmRyYXdMaW5lcyhsaW5lcyk7Ci19Ci0KLVFT
aXplIFF0TW9iaWxlV2ViU3R5bGU6OmdldEJ1dHRvbkltYWdlU2l6ZShjb25zdCBRU2l6ZSYgYnV0
dG9uU2l6ZSkgY29uc3QKLXsKLSAgICBjb25zdCBpbnQgYm9yZGVyID0gcU1heCgzLCBidXR0b25T
aXplLndpZHRoKCkgPj4gMykgPDwgMTsKLQotICAgIGludCB3aWR0aCA9IGJ1dHRvblNpemUud2lk
dGgoKSAtIGJvcmRlcjsKLSAgICBpbnQgaGVpZ2h0ID0gYnV0dG9uU2l6ZS5oZWlnaHQoKSAtIGJv
cmRlcjsKLQotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKLSAgICAgICAgcmV0dXJu
IFFTaXplKCk7Ci0KLSAgICBpZiAoaGVpZ2h0ID49ICh3aWR0aCA+PiAxKSkKLSAgICAgICAgd2lk
dGggPSB3aWR0aCA+PiAxIDw8IDE7Ci0gICAgZWxzZQotICAgICAgICB3aWR0aCA9IGhlaWdodCA8
PCAxOwotCi0gICAgcmV0dXJuIFFTaXplKHdpZHRoICsgMSwgd2lkdGgpOwotfQotCi1RUGl4bWFw
IFF0TW9iaWxlV2ViU3R5bGU6OmZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwgYm9v
bCBtdWx0aXBsZSwgYm9vbCBkaXNhYmxlZCkgY29uc3QKLXsKLSAgICBRUGl4bWFwIHJlc3VsdDsK
LSAgICBRU2l6ZSBpbWFnZVNpemUgPSBnZXRCdXR0b25JbWFnZVNpemUoc2l6ZSk7Ci0KLSAgICBp
ZiAoaW1hZ2VTaXplLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gUVBpeG1hcCgpOwotICAgIHN0
YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtIikg
KyBRTGF0aW4xU3RyaW5nKG1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpICsgUUxhdGluMVN0cmlu
ZygiLWNvbWJvLSIpOwotICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgKG11bHRpcGxlID8gUUxh
dGluMVN0cmluZygibXVsdGlwbGUtIikgOiBRTGF0aW4xU3RyaW5nKCJzaW1wbGUtIikpCi0gICAg
ICAgICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS53aWR0aCgpKSArIFFMYXRpbjFTdHJpbmco
Ii0iKSArIFFTdHJpbmc6Om51bWJlcihpbWFnZVNpemUuaGVpZ2h0KCkpCi0gICAgICAgICsgUUxh
dGluMVN0cmluZygiLSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6
IFFMYXRpbjFTdHJpbmcoImVuYWJsZWQiKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQo
a2V5LCByZXN1bHQpKSB7Ci0gICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoaW1hZ2VTaXplKTsKLSAg
ICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKLSAgICAgICAgUVBhaW50ZXIgcGFp
bnRlcigmcmVzdWx0KTsKLSAgICAgICAgaWYgKG11bHRpcGxlKQotICAgICAgICAgICAgZHJhd011
bHRpcGxlQ29tYm9CdXR0b24oJnBhaW50ZXIsIGltYWdlU2l6ZSwgZGlzYWJsZWQgPyBRdDo6bGln
aHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhd1Np
bXBsZUNvbWJvQnV0dG9uKCZwYWludGVyLCBpbWFnZVNpemUsIGRpc2FibGVkID8gUXQ6OmxpZ2h0
R3JheSA6IFF0OjpkYXJrR3JheSk7Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwg
cmVzdWx0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBRdE1vYmlsZVdl
YlN0eWxlOjpkcmF3Q29tcGxleENvbnRyb2woQ29tcGxleENvbnRyb2wgY29udHJvbCwgY29uc3Qg
UVN0eWxlT3B0aW9uQ29tcGxleCogb3B0aW9uLCBRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVdp
ZGdldCogd2lkZ2V0KSBjb25zdAotewotICAgIHN3aXRjaCAoY29udHJvbCkgewotICAgIGNhc2Ug
Q0NfQ29tYm9Cb3g6IHsKLSAgICAgICAgYm9vbCBtdWx0aXBsZSA9IGZhbHNlOwotICAgICAgICBj
b25zdCBib29sIGRpc2FibGVkID0gIShvcHRpb24tPnN0YXRlICYgU3RhdGVfRW5hYmxlZCk7Ci0K
LSAgICAgICAgY29uc3QgUVN0eWxlT3B0aW9uQ29tYm9Cb3gqIGNtYiA9IDA7Ci0gICAgICAgIGNv
bnN0IFdlYkNvcmU6OlF0U3R5bGVPcHRpb25XZWJDb21ib0JveCogd2ViQ29tYm8gPSBzdGF0aWNf
Y2FzdDxjb25zdCBXZWJDb3JlOjpRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3gqPihvcHRpb24pOwot
Ci0gICAgICAgIGlmICh3ZWJDb21ibykgewotICAgICAgICAgICAgbXVsdGlwbGUgPSB3ZWJDb21i
by0+bXVsdGlwbGUoKTsKLSAgICAgICAgICAgIGNtYiA9IHdlYkNvbWJvOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIGNtYiA9IHFzdHlsZW9wdGlvbl9jYXN0PGNvbnN0IFFTdHlsZU9wdGlv
bkNvbWJvQm94Kj4ob3B0aW9uKTsKLQotICAgICAgICBpZiAoIWNtYikgewotICAgICAgICAgICAg
UVdpbmRvd3NTdHlsZTo6ZHJhd0NvbXBsZXhDb250cm9sKGNvbnRyb2wsIG9wdGlvbiwgcGFpbnRl
ciwgd2lkZ2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KCEoY21iLT5zdWJDb250cm9scyAmIFNDX0NvbWJvQm94QXJyb3cpKQotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgUVJlY3QgcmVjdCA9IG9wdGlvbi0+cmVjdDsKLSAgICAgICAgUVBlbiBw
ZW4oUXQ6OmRhcmtHcmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJv
dW5kSm9pbik7Ci0gICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudDsKLSAgICAg
ICAgaWYgKGRpc2FibGVkKSB7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChy
ZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0
b3AocmVjdC50b3BMZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JB
dCgwLjAsIFF0OjpncmF5KTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQo
MS4wLCBRdDo6d2hpdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0RmluYWxTdG9wKFFQb2ludChyZWN0LmJvdHRvbUxlZnQoKS54KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZWN0LmJvdHRvbUxlZnQoKS55KCkgLSAvKiBvZmZzZXQgbGltaXQg
Zm9yIGdyYWRpZW50ICovIDIwKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xv
ckF0KDAuMCwgUXQ6OmdyYXkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JB
dCgwLjQsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkcmF3UmVjdGFuZ3VsYXJD
b250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsKLQot
ICAgICAgICByZWN0ID0gc3ViQ29udHJvbFJlY3QoQ0NfQ29tYm9Cb3gsIGNtYiwgU0NfQ29tYm9C
b3hBcnJvdywgd2lkZ2V0KTsKLSAgICAgICAgUVBpeG1hcCBwaWMgPSBmaW5kQ29tYm9CdXR0b24o
cmVjdC5zaXplKCksIG11bHRpcGxlLCBkaXNhYmxlZCk7Ci0KLSAgICAgICAgaWYgKHBpYy5pc051
bGwoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGludCB4ID0gKHJlY3Qud2lkdGgo
KSAtIHBpYy53aWR0aCgpKSA+PiAxOwotICAgICAgICBpbnQgeSA9IChyZWN0LmhlaWdodCgpIC0g
cGljLmhlaWdodCgpKSA+PiAxOwotICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QueCgp
ICsgeCwgcmVjdC55KCkgKyB5LCBwaWMpOwotCi0gICAgICAgIHBhaW50ZXItPnNldFBlbihkaXNh
YmxlZCA/IFF0OjpncmF5IDogUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgcGFpbnRlci0+ZHJhd0xp
bmUocmVjdC5sZWZ0KCkgLSAyLCByZWN0LnRvcCgpICsgMiwgcmVjdC5sZWZ0KCkgLSAyLCByZWN0
LmJvdHRvbSgpIC0gMik7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIFFXaW5kb3dzU3R5bGU6OmRyYXdDb21wbGV4Q29udHJvbChjb250cm9sLCBvcHRpb24s
IHBhaW50ZXIsIHdpZGdldCk7Ci0gICAgfQotfQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9RdE1vYmlsZVdlYlN0eWxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFi
OTlkMmI4YjVhMzljOTRjMGI5YTE3MmExOGZlNGJhZWMwNDI2OTAuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
UXRNb2JpbGVXZWJTdHlsZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykKLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKgotICovCi0KLSNpZm5kZWYgUXRNb2JpbGVXZWJTdHlsZV9oCi0jZGVmaW5lIFF0TW9iaWxl
V2ViU3R5bGVfaAotCi0jaW5jbHVkZSA8UVdpbmRvd3NTdHlsZT4KLQotY2xhc3MgUXRNb2JpbGVX
ZWJTdHlsZSA6IHB1YmxpYyBRV2luZG93c1N0eWxlIHsKLXB1YmxpYzoKLSAgICBRdE1vYmlsZVdl
YlN0eWxlKCk7Ci0KLSAgICB2b2lkIGRyYXdDb250cm9sKENvbnRyb2xFbGVtZW50LCBjb25zdCBR
U3R5bGVPcHRpb24qLCBRUGFpbnRlciosIGNvbnN0IFFXaWRnZXQqKSBjb25zdDsKLSAgICB2b2lk
IGRyYXdDb21wbGV4Q29udHJvbChDb21wbGV4Q29udHJvbCwgY29uc3QgUVN0eWxlT3B0aW9uQ29t
cGxleCosIFFQYWludGVyKiwgY29uc3QgUVdpZGdldCopIGNvbnN0OwotICAgIHZvaWQgZHJhd1By
aW1pdGl2ZShQcmltaXRpdmVFbGVtZW50LCBjb25zdCBRU3R5bGVPcHRpb24qLCBRUGFpbnRlcios
IGNvbnN0IFFXaWRnZXQqKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGRyYXdDaGVja2Vy
KFFQYWludGVyKiBwYWludGVyLCBpbnQgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdDsKLSAgICBR
UGl4bWFwIGZpbmRDaGVja2VyKGNvbnN0IFFSZWN0JiByZWN0LCBib29sIGRpc2FibGVkKSBjb25z
dDsKLQotICAgIHZvaWQgZHJhd1JhZGlvKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYg
c2l6ZSwgYm9vbCBjaGVja2VkLCBRQ29sb3IgY29sb3IpIGNvbnN0OwotICAgIFFQaXhtYXAgZmlu
ZFJhZGlvKGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIGJvb2wgZGlzYWJsZWQpIGNv
bnN0OwotCi0gICAgUVNpemUgZ2V0QnV0dG9uSW1hZ2VTaXplKGNvbnN0IFFTaXplJiBidXR0b25T
aXplKSBjb25zdDsKLSAgICB2b2lkIGRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFp
bnRlciwgY29uc3QgUVNpemUmIHNpemUsIFFDb2xvciBjb2xvcikgY29uc3Q7Ci0gICAgdm9pZCBk
cmF3TXVsdGlwbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNp
emUsIFFDb2xvciBjb2xvcikgY29uc3Q7Ci0gICAgUVBpeG1hcCBmaW5kQ29tYm9CdXR0b24oY29u
c3QgUVNpemUmIHNpemUsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZGlzYWJsZWQpIGNvbnN0OwotCi19
OwotCi0jZW5kaWYgLy8gUXRNb2JpbGVXZWJTdHlsZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9RdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1F0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oCmluZGV4IDI5YzgyMjBh
Y2E5MThkZmE2NDM3NmJlNWExZjBlZDY3ZWY5NTRjZTYuLmRhMTA5ZmUzMTI3YTJhYzM4MGJjMzY0
ZmQ2YTM2M2Q1OWM5ODc4NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1F0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1F0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oCkBAIC0zNCwxMSArMzQsNyBAQCBjbGFzcyBR
dFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3ggOiBwdWJsaWMgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggewog
cHVibGljOgogICAgIFF0U3R5bGVPcHRpb25XZWJDb21ib0JveChSZW5kZXJPYmplY3QqIG8pCiAg
ICAgICAgIDogUVN0eWxlT3B0aW9uQ29tYm9Cb3goKQotICAgICNpZiBFTkFCTEUoTk9fTElTVEJP
WF9SRU5ERVJJTkcpCiAgICAgICAgICwgbV9tdWx0aXBsZShjaGVja011bHRpcGxlKG8pKQotICAg
ICNlbHNlCi0gICAgICAgICwgbV9tdWx0aXBsZShmYWxzZSkKLSAgICAjZW5kaWYKICAgICB7CiAg
ICAgfQogCkBAIC00OSw2ICs0NSw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGNoZWNrTXVsdGlw
bGUoUmVuZGVyT2JqZWN0KiBvKQogICAgIHsKKyAgICAgICAgaWYgKCFxZ2V0ZW52KCJRVF9XRUJL
SVRfVVNFX01PQklMRV9USEVNRSIpLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gbyA/IHN0YXRpY19jYXN0PEhU
TUxTZWxlY3RFbGVtZW50Kj4oby0+bm9kZSgpKSA6IDA7CiAgICAgICAgIHJldHVybiBzZWxlY3Qg
PyBzZWxlY3QtPm11bHRpcGxlKCkgOiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDZkMDUwNDVj
MTVkN2M2NjRiNzZiOGIzMzViZDZhOTZkZTkwYjlkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcApAQCAtMCwwICsxLDgy
NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdC4KKyAq
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tA
a2RlLm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2Rl
Lm9yZz4KKyAqICAgICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKKworI2luY2x1ZGUgIkNTU0ZvbnRTZWxl
Y3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NWYWx1
ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50
UXQuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRm9udC5oIgorI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisj
aW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNsdWRlICJRdFN0eWxlT3B0aW9uV2ViQ29t
Ym9Cb3guaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFH
KQorI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCisjZW5kaWYKKyNpbmNsdWRlICJSZW5kZXJT
bGlkZXIuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVF0LmgiCisjaW5jbHVkZSAiU2xpZGVy
VGh1bWJFbGVtZW50LmgiCisjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKKworI2lu
Y2x1ZGUgPFFBcHBsaWNhdGlvbj4KKyNpbmNsdWRlIDxRQ29sb3I+CisjaW5jbHVkZSA8UUZpbGU+
CisjaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgorI2luY2x1ZGUgPFFMaW5lRWRpdD4KKyNpbmNsdWRl
IDxRTWFjU3R5bGU+CisjaW5jbHVkZSA8UVBhaW50ZXI+CisjaW5jbHVkZSA8UVBsYXN0aXF1ZVN0
eWxlPgorI2luY2x1ZGUgPFFQdXNoQnV0dG9uPgorI2luY2x1ZGUgPFFTdHlsZUZhY3Rvcnk+Cisj
aW5jbHVkZSA8UVN0eWxlT3B0aW9uQnV0dG9uPgorI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkZyYW1l
VjI+CisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKKyNpbmNsdWRlIDxRU3R5bGVPcHRpb25Qcm9n
cmVzc0JhclYyPgorI2VuZGlmCisjaW5jbHVkZSA8UVN0eWxlT3B0aW9uU2xpZGVyPgorI2luY2x1
ZGUgPFFXaWRnZXQ+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKworaW5saW5lIHN0YXRpYyB2b2lkIGluaXRTdHlsZU9wdGlvbihRV2lkZ2V0ICp3
aWRnZXQsIFFTdHlsZU9wdGlvbiYgb3B0aW9uKQoreworICAgIGlmICh3aWRnZXQpCisgICAgICAg
IG9wdGlvbi5pbml0RnJvbSh3aWRnZXQpOworICAgIGVsc2UgeworICAgICAgICAvKgorICAgICAg
ICAgIElmIGEgd2lkZ2V0IGlzIG5vdCBkaXJlY3RseSBhdmFpbGFibGUgZm9yIHJlbmRlcmluZywg
d2UgZmFsbGJhY2sgdG8gZGVmYXVsdAorICAgICAgICAgIHZhbHVlIGZvciBhbiBhY3RpdmUgd2lk
Z2V0LgorICAgICAgICAgKi8KKyAgICAgICAgb3B0aW9uLnN0YXRlID0gUVN0eWxlOjpTdGF0ZV9B
Y3RpdmUgfCBRU3R5bGU6OlN0YXRlX0VuYWJsZWQ7CisgICAgfQorfQorCisKK1FTaGFyZWRQb2lu
dGVyPFN0eWxlUGFpbnRlcj4gUmVuZGVyVGhlbWVRU3R5bGU6OmdldFN0eWxlUGFpbnRlcihjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbykKK3sKKyAgICByZXR1cm4gUVNoYXJlZFBvaW50ZXI8U3R5
bGVQYWludGVyPihuZXcgU3R5bGVQYWludGVyUVN0eWxlKHRoaXMsIHBhaW50SW5mbykpOworfQor
CitTdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShSZW5kZXJUaGVtZVFTdHls
ZSogdGhlbWUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQorICAgIDogU3R5bGVQYWludGVy
KHRoZW1lLCBwYWludEluZm8pCit7CisgICAgaW5pdChwYWludEluZm8uY29udGV4dCA/IHBhaW50
SW5mby5jb250ZXh0IDogMCwgdGhlbWUtPnFTdHlsZSgpKTsKK30KKworU3R5bGVQYWludGVyUVN0
eWxlOjpTdHlsZVBhaW50ZXJRU3R5bGUoU2Nyb2xsYmFyVGhlbWVRdCogdGhlbWUsIEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCkKKyAgICA6IFN0eWxlUGFpbnRlcigpCit7CisgICAgaW5pdChjb250
ZXh0LCB0aGVtZS0+c3R5bGUoKSk7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyUVN0eWxlOjppbml0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVN0eWxlKiB0aGVtZVN0eWxlKQoreworICAgIHBh
aW50ZXIgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
KTsKKyAgICB3aWRnZXQgPSAwOworICAgIFFQYWludERldmljZSogZGV2ID0gMDsKKyAgICBpZiAo
cGFpbnRlcikKKyAgICAgICAgZGV2ID0gcGFpbnRlci0+ZGV2aWNlKCk7CisgICAgaWYgKGRldiAm
JiBkZXYtPmRldlR5cGUoKSA9PSBRSW50ZXJuYWw6OldpZGdldCkKKyAgICAgICAgd2lkZ2V0ID0g
c3RhdGljX2Nhc3Q8UVdpZGdldCo+KGRldik7CisgICAgc3R5bGUgPSB0aGVtZVN0eWxlOworCisg
ICAgU3R5bGVQYWludGVyOjppbml0KGNvbnRleHQpOworfQorCitQYXNzUmVmUHRyPFJlbmRlclRo
ZW1lPiBSZW5kZXJUaGVtZVFTdHlsZTo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZVFTdHlsZShwYWdlKSk7Cit9CisKK1JlbmRlclRoZW1l
UVN0eWxlOjpSZW5kZXJUaGVtZVFTdHlsZShQYWdlKiBwYWdlKQorICAgIDogUmVuZGVyVGhlbWVR
dChwYWdlKQorI2lmbmRlZiBRVF9OT19MSU5FRURJVAorICAgICwgbV9saW5lRWRpdCgwKQorI2Vu
ZGlmCit7CisgICAgUVB1c2hCdXR0b24gYnV0dG9uOworICAgIFFGb250IGRlZmF1bHRCdXR0b25G
b250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOworICAgIG1fYnV0dG9uRm9udEZhbWls
eSA9IGRlZmF1bHRCdXR0b25Gb250LmZhbWlseSgpOworI2lmZGVmIFFfT1NfTUFDCisgICAgYnV0
dG9uLnNldEF0dHJpYnV0ZShRdDo6V0FfTWFjU21hbGxTaXplKTsKKyAgICBRRm9udEluZm8gZm9u
dEluZm8oZGVmYXVsdEJ1dHRvbkZvbnQpOworICAgIG1fYnV0dG9uRm9udFBpeGVsU2l6ZSA9IGZv
bnRJbmZvLnBpeGVsU2l6ZSgpOworI2VuZGlmCisKKyAgICBtX2ZhbGxiYWNrU3R5bGUgPSBRU3R5
bGVGYWN0b3J5OjpjcmVhdGUoUUxhdGluMVN0cmluZygid2luZG93cyIpKTsKK30KKworUmVuZGVy
VGhlbWVRU3R5bGU6On5SZW5kZXJUaGVtZVFTdHlsZSgpCit7CisgICAgZGVsZXRlIG1fZmFsbGJh
Y2tTdHlsZTsKKyNpZm5kZWYgUVRfTk9fTElORUVESVQKKyAgICBkZWxldGUgbV9saW5lRWRpdDsK
KyNlbmRpZgorfQorCisKKy8vIGZvciBzb21lIHdpZGdldCBwYWludGluZywgd2UgbmVlZCB0byBm
YWxsYmFjayB0byBXaW5kb3dzIHN0eWxlCitRU3R5bGUqIFJlbmRlclRoZW1lUVN0eWxlOjpmYWxs
YmFja1N0eWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fZmFsbGJhY2tTdHlsZSkgPyBtX2Zh
bGxiYWNrU3R5bGUgOiBRQXBwbGljYXRpb246OnN0eWxlKCk7Cit9CisKK1FTdHlsZSogUmVuZGVy
VGhlbWVRU3R5bGU6OnFTdHlsZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fcGFnZSkgeworICAgICAg
ICBRV2ViUGFnZUNsaWVudCogcGFnZUNsaWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgp
LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKTsKKworICAgICAgICBpZiAocGFnZUNsaWVudCkKKyAgICAg
ICAgICAgIHJldHVybiBwYWdlQ2xpZW50LT5zdHlsZSgpOworICAgIH0KKworICAgIHJldHVybiBR
QXBwbGljYXRpb246OnN0eWxlKCk7Cit9CisKK2ludCBSZW5kZXJUaGVtZVFTdHlsZTo6ZmluZEZy
YW1lTGluZVdpZHRoKFFTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisjaWZuZGVmIFFUX05PX0xJTkVF
RElUCisgICAgaWYgKCFtX2xpbmVFZGl0KQorICAgICAgICBtX2xpbmVFZGl0ID0gbmV3IFFMaW5l
RWRpdCgpOworI2VuZGlmCisKKyAgICBRU3R5bGVPcHRpb25GcmFtZVYyIG9wdDsKKyAgICBRV2lk
Z2V0KiB3aWRnZXQgPSAwOworI2lmbmRlZiBRVF9OT19MSU5FRURJVAorICAgIHdpZGdldCA9IG1f
bGluZUVkaXQ7CisjZW5kaWYKKyAgICByZXR1cm4gc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6
UE1fRGVmYXVsdEZyYW1lV2lkdGgsICZvcHQsIHdpZGdldCk7Cit9CisKK1FSZWN0IFJlbmRlclRo
ZW1lUVN0eWxlOjppbmZsYXRlQnV0dG9uUmVjdChjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBj
b25zdAoreworICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBvcHRpb247CisgICAgb3B0aW9uLnN0YXRl
IHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7CisgICAgb3B0aW9uLnJlY3QgPSBvcmlnaW5hbFJlY3Q7
CisKKyAgICBRUmVjdCBsYXlvdXRSZWN0ID0gcVN0eWxlKCktPnN1YkVsZW1lbnRSZWN0KFFTdHls
ZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sICZvcHRpb24sIDApOworICAgIGlmICghbGF5b3V0
UmVjdC5pc051bGwoKSkgeworICAgICAgICBpbnQgcGFkZGluZ0xlZnQgPSBsYXlvdXRSZWN0Lmxl
ZnQoKSAtIG9yaWdpbmFsUmVjdC5sZWZ0KCk7CisgICAgICAgIGludCBwYWRkaW5nUmlnaHQgPSBv
cmlnaW5hbFJlY3QucmlnaHQoKSAtIGxheW91dFJlY3QucmlnaHQoKTsKKyAgICAgICAgaW50IHBh
ZGRpbmdUb3AgPSBsYXlvdXRSZWN0LnRvcCgpIC0gb3JpZ2luYWxSZWN0LnRvcCgpOworICAgICAg
ICBpbnQgcGFkZGluZ0JvdHRvbSA9IG9yaWdpbmFsUmVjdC5ib3R0b20oKSAtIGxheW91dFJlY3Qu
Ym90dG9tKCk7CisKKyAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVjdC5hZGp1c3RlZCgtcGFkZGlu
Z0xlZnQsIC1wYWRkaW5nVG9wLCBwYWRkaW5nUmlnaHQsIHBhZGRpbmdCb3R0b20pOworICAgIH0K
KyAgICByZXR1cm4gb3JpZ2luYWxSZWN0OworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjpj
b21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0Cit7
CisgICAgUVNpemUgc2l6ZSgwLCAwKTsKKyAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVy
U3R5bGUtPmZvbnQoKS5mb250KCkpOworICAgIFFTdHlsZSogc3R5bGUgPSBxU3R5bGUoKTsKKwor
ICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgVGV4dEFy
ZWFQYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgorICAgIGNhc2UgVGV4dEZpZWxkUGFy
dDogeworICAgICAgICBpbnQgcGFkZGluZyA9IGZpbmRGcmFtZUxpbmVXaWR0aChzdHlsZSk7Cisg
ICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZywgRml4ZWQp
KTsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZywg
Rml4ZWQpKTsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRp
bmcsIEZpeGVkKSk7CisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0
aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIElmIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGFy
ZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uCisgICAgaWYgKCFy
ZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFyZW5kZXJTdHlsZS0+
aGVpZ2h0KCkuaXNBdXRvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAocmVuZGVy
U3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgQ2hlY2tib3hQYXJ0OiB7CisgICAgICAg
IFFTdHlsZU9wdGlvbiBzdHlsZU9wdGlvbjsKKyAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0g
UVN0eWxlOjpTdGF0ZV9TbWFsbDsKKyAgICAgICAgaW50IGNoZWNrQm94V2lkdGggPSBzdHlsZS0+
cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9JbmRpY2F0b3JXaWR0aCwgJnN0eWxlT3B0aW9uKTsKKyAg
ICAgICAgY2hlY2tCb3hXaWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAg
ICAgICBzaXplID0gUVNpemUoY2hlY2tCb3hXaWR0aCwgY2hlY2tCb3hXaWR0aCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIFJhZGlvUGFydDogeworICAgICAgICBRU3R5bGVPcHRp
b24gc3R5bGVPcHRpb247CisgICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3Rh
dGVfU21hbGw7CisgICAgICAgIGludCByYWRpb1dpZHRoID0gc3R5bGUtPnBpeGVsTWV0cmljKFFT
dHlsZTo6UE1fRXhjbHVzaXZlSW5kaWNhdG9yV2lkdGgsICZzdHlsZU9wdGlvbik7CisgICAgICAg
IHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgc2l6
ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvblBhcnQ6IHsKKyAgICAg
ICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOworICAgICAgICBzdHlsZU9wdGlvbi5z
dGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOworICAgICAgICBRU2l6ZSBjb250ZW50U2l6ZSA9
IGZtLnNpemUoUXQ6OlRleHRTaG93TW5lbW9uaWMsIFFTdHJpbmc6OmZyb21MYXRpbjEoIlgiKSk7
CisgICAgICAgIFFTaXplIHB1c2hCdXR0b25TaXplID0gc3R5bGUtPnNpemVGcm9tQ29udGVudHMo
UVN0eWxlOjpDVF9QdXNoQnV0dG9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgY29udGVudFNpemUsIDApOworICAg
ICAgICBzdHlsZU9wdGlvbi5yZWN0ID0gUVJlY3QoMCwgMCwgcHVzaEJ1dHRvblNpemUud2lkdGgo
KSwgcHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpOworICAgICAgICBRUmVjdCBsYXlvdXRSZWN0ID0g
c3R5bGUtPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0
aW9uLCAwKTsKKworICAgICAgICAvLyBJZiB0aGUgc3R5bGUgc3VwcG9ydHMgbGF5b3V0IHJlY3Rz
IHdlIHVzZSB0aGF0LCBhbmQgIGNvbXBlbnNhdGUgYWNjb3JkaW5nbHkKKyAgICAgICAgLy8gaW4g
cGFpbnRCdXR0b24oKSBiZWxvdy4KKyAgICAgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKQor
ICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQobGF5b3V0UmVjdC5oZWlnaHQoKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNpemUuc2V0SGVpZ2h0KHB1c2hCdXR0b25TaXplLmhlaWdodCgp
KTsKKworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBNZW51bGlzdFBhcnQ6IHsKKyAg
ICAgICAgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggc3R5bGVPcHRpb247CisgICAgICAgIHN0eWxlT3B0
aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7CisgICAgICAgIGludCBjb250ZW50SGVp
Z2h0ID0gcU1heChmbS5saW5lU3BhY2luZygpLCAxNCkgKyAyOworICAgICAgICBRU2l6ZSBtZW51
TGlzdFNpemUgPSBzdHlsZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGU6OkNUX0NvbWJvQm94LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5
bGVPcHRpb24sIFFTaXplKDAsIGNvbnRlbnRIZWlnaHQpLCAwKTsKKyAgICAgICAgc2l6ZS5zZXRI
ZWlnaHQobWVudUxpc3RTaXplLmhlaWdodCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIEZJWE1FOiBDaGVjayBp
cyBmbGF3ZWQsIHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8g
YWNjb3VudC4KKyAgICBpZiAocmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8o
KSAmJiBzaXplLndpZHRoKCkgPiAwKQorICAgICAgICByZW5kZXJTdHlsZS0+c2V0TWluV2lkdGgo
TGVuZ3RoKHNpemUud2lkdGgoKSwgRml4ZWQpKTsKKyAgICBpZiAocmVuZGVyU3R5bGUtPmhlaWdo
dCgpLmlzQXV0bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQorICAgICAgICByZW5kZXJTdHlsZS0+
c2V0TWluSGVpZ2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOworfQorCisKKwordm9p
ZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8g
RGl0Y2ggdGhlIGJvcmRlci4KKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKworI2lmZGVmIFFf
T1NfTUFDCisgICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBhcnQpIHsK
KyAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25vcmUgdGhlIHNwZWNpZmllZCBoZWlnaHQgZm9y
IDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50cworICAgICAgICAvLyB1bmxlc3MgYSBib3Jk
ZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3BlcnR5IGlzIGFsc28gc3BlY2lmaWVkLgorICAg
ICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisgICAgfQorI2VuZGlmCisKKyAg
ICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKKworI2lm
ZGVmIFFfT1NfTUFDIC8vIFVzZSBmaXhlZCBmb250IHNpemUgYW5kIGZhbWlseSBvbiBNYWMgKGxp
a2UgU2FmYXJpIGRvZXMpCisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUobV9i
dXR0b25Gb250UGl4ZWxTaXplKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXpl
KG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7CisjZWxzZQorICAgIGZvbnREZXNjcmlwdGlvbi5zZXRT
cGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0
Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKKyNlbmRpZgorCisgICAgRm9udEZhbWls
eSBmb250RmFtaWx5OworICAgIGZvbnRGYW1pbHkuc2V0RmFtaWx5KG1fYnV0dG9uRm9udEZhbWls
eSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShmb250RmFtaWx5KTsKKyAgICBzdHls
ZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgc3R5bGUtPmZvbnQo
KS51cGRhdGUoc2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpKTsKKyAgICBzdHlsZS0+c2V0TGluZUhl
aWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7CisgICAgc2V0QnV0dG9uU2l6
ZShzdHlsZSk7CisgICAgc2V0QnV0dG9uUGFkZGluZyhzdHlsZSk7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVRU3R5bGU6OnNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAor
eworICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBzdHlsZU9wdGlvbjsKKyAgICBzdHlsZU9wdGlvbi5z
dGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOworCisgICAgLy8gRmFrZSBhIGJ1dHRvbiByZWN0
IGhlcmUsIHNpbmNlIHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRlbHRhcworICAgIFFSZWN0IG9yaWdp
bmFsUmVjdCA9IFFSZWN0KDAsIDAsIDEwMCwgMzApOworICAgIHN0eWxlT3B0aW9uLnJlY3QgPSBv
cmlnaW5hbFJlY3Q7CisKKyAgICAvLyBEZWZhdWx0IHBhZGRpbmcgaXMgYmFzZWQgb24gdGhlIGJ1
dHRvbiBtYXJnaW4gcGl4ZWwgbWV0cmljCisgICAgaW50IGJ1dHRvbk1hcmdpbiA9IHFTdHlsZSgp
LT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0J1dHRvbk1hcmdpbiwgJnN0eWxlT3B0aW9uLCAwKTsK
KyAgICBpbnQgcGFkZGluZ0xlZnQgPSBidXR0b25NYXJnaW47CisgICAgaW50IHBhZGRpbmdSaWdo
dCA9IGJ1dHRvbk1hcmdpbjsKKyAgICBpbnQgcGFkZGluZ1RvcCA9IGJ1dHRvbk1hcmdpbjsKKyAg
ICBpbnQgcGFkZGluZ0JvdHRvbSA9IGJ1dHRvbk1hcmdpbjsKKworICAgIC8vIFRoZW4gY2hlY2sg
aWYgdGhlIHN0eWxlIHVzZXMgbGF5b3V0IG1hcmdpbnMKKyAgICBRUmVjdCBsYXlvdXRSZWN0ID0g
cVN0eWxlKCktPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVP
cHRpb24sIDApOworICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkgeworICAgICAgICBRUmVj
dCBjb250ZW50c1JlY3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNo
QnV0dG9uQ29udGVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIDApOworICAgICAgICBwYWRkaW5nTGVmdCA9IGNv
bnRlbnRzUmVjdC5sZWZ0KCkgLSBsYXlvdXRSZWN0LmxlZnQoKTsKKyAgICAgICAgcGFkZGluZ1Jp
Z2h0ID0gbGF5b3V0UmVjdC5yaWdodCgpIC0gY29udGVudHNSZWN0LnJpZ2h0KCk7CisgICAgICAg
IHBhZGRpbmdUb3AgPSBjb250ZW50c1JlY3QudG9wKCkgLSBsYXlvdXRSZWN0LnRvcCgpOworCisg
ICAgICAgIC8vIENhbid0IHVzZSB0aGlzIHJpZ2h0IG5vdyBiZWNhdXNlIHdlIGRvbid0IGhhdmUg
dGhlIGJhc2VsaW5lIHRvIGNvbXBlbnNhdGUKKyAgICAgICAgLy8gcGFkZGluZ0JvdHRvbSA9IGxh
eW91dFJlY3QuYm90dG9tKCkgLSBjb250ZW50c1JlY3QuYm90dG9tKCk7CisgICAgfQorICAgIHN0
eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7CisgICAgc3R5
bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0LCBGaXhlZCkpOworICAgIHN0
eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nVG9wLCBGaXhlZCkpOworICAgIHN0eWxl
LT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nQm90dG9tLCBGaXhlZCkpOworfQorCiti
b29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0
IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5
bGUgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgIHJldHVybiB0cnVl
OworCisgICAgUVN0eWxlT3B0aW9uQnV0dG9uIG9wdGlvbjsKKyAgICBpbml0U3R5bGVPcHRpb24o
cC53aWRnZXQsIG9wdGlvbik7CisgICAgb3B0aW9uLnJlY3QgPSByOworICAgIG9wdGlvbi5zdGF0
ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOworCisgICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9
IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7CisgICAgaWYgKGFwcGVh
cmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQgfHwgYXBwZWFyYW5jZSA9PSBCdXR0b25QYXJ0KSB7Cisg
ICAgICAgIG9wdGlvbi5yZWN0ID0gaW5mbGF0ZUJ1dHRvblJlY3Qob3B0aW9uLnJlY3QpOworICAg
ICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHVzaEJ1dHRvbiwgb3B0aW9uKTsKKyAgICB9
IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gUmFkaW9QYXJ0KQorICAgICAgIHAuZHJhd0NvbnRyb2wo
UVN0eWxlOjpDRV9SYWRpb0J1dHRvbiwgb3B0aW9uKTsKKyAgICBlbHNlIGlmIChhcHBlYXJhbmNl
ID09IENoZWNrYm94UGFydCkKKyAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfQ2hlY2tC
b3gsIG9wdGlvbik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVR
U3R5bGU6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHls
ZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIFJlc2V0dGluZyB0aGUgc3R5bGUg
bGlrZSB0aGlzIGxlYWRzIHRvIGRpZmZlcmVuY2VzIGxpa2U6CisgICAgLy8gLSBSZW5kZXJUZXh0
Q29udHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUgMTY4eDI1IFtiZ2NvbG9yPSNGRkZGRkZdIGJv
cmRlcjogKDJweCBpbnNldCAjMDAwMDAwKV0KKyAgICAvLyArIFJlbmRlclRleHRDb250cm9sIHtJ
TlBVVH0gYXQgKDIsMikgc2l6ZSAxNjZ4MjYKKyAgICAvLyBpbiBsYXlvdXQgdGVzdHMgd2hlbiBh
IENTUyBzdHlsZSBpcyBhcHBsaWVkIHRoYXQgZG9lc24ndCBhZmZlY3QgYmFja2dyb3VuZCBjb2xv
ciwgYm9yZGVyIG9yCisgICAgLy8gcGFkZGluZy4gSnVzdCB3b3J0aCBrZWVwaW5nIGluIG1pbmQh
CisgICAgc3R5bGUtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcjo6dHJhbnNwYXJlbnQpOworICAg
IHN0eWxlLT5yZXNldEJvcmRlcigpOworICAgIHN0eWxlLT5yZXNldFBhZGRpbmcoKTsKKyAgICBj
b21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBj
b25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkpOwor
ICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgUVN0eWxl
T3B0aW9uRnJhbWVWMiBwYW5lbDsKKyAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIHBhbmVs
KTsKKyAgICBwYW5lbC5yZWN0ID0gcjsKKyAgICBwYW5lbC5saW5lV2lkdGggPSBmaW5kRnJhbWVM
aW5lV2lkdGgocVN0eWxlKCkpOworICAgIHBhbmVsLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vu
a2VuOworICAgIHBhbmVsLmZlYXR1cmVzID0gUVN0eWxlT3B0aW9uRnJhbWVWMjo6Tm9uZTsKKwor
ICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIHRleHQgZmllbGQKKyAgICBD
b250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMocGFu
ZWwsIG8pOworICAgIGlmIChhcHBlYXJhbmNlICE9IFRleHRGaWVsZFBhcnQKKyAgICAgICAgJiYg
YXBwZWFyYW5jZSAhPSBTZWFyY2hGaWVsZFBhcnQKKyAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBU
ZXh0QXJlYVBhcnQKKyAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBMaXN0Ym94UGFydCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3cgcGFpbnQgdGhlIHRleHQgZmllbGQuCisgICAg
cC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxMaW5lRWRpdCwgcGFuZWwpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0VGV4dEFyZWFT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIGFkanVzdFRleHRGaWVsZFN0eWxlKHNlbGVjdG9y
LCBzdHlsZSwgZWxlbWVudCk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4
dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHIpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOworfQorCit2b2lkIFJl
bmRlclRoZW1lUVN0eWxlOjpzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAoreworICAgIGNvbnN0IGludCBwYWRkaW5nTGVmdCA9IDQ7CisgICAgY29uc3QgaW50IHBhZGRp
bmdSaWdodCA9IHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSB8fCBzdHlsZS0+d2lkdGgoKS5pc1Bl
cmNlbnQoKSA/IDUgOiA4OworCisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRk
aW5nTGVmdCwgRml4ZWQpKTsKKworICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94IG9wdDsKKyAgICBp
bnQgdyA9IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0J1dHRvbkljb25TaXplLCAm
b3B0LCAwKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQg
KyB3LCBGaXhlZCkpOworCisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDIsIEZpeGVk
KSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDIsIEZpeGVkKSk7Cit9CisK
KworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50
ZXJRU3R5bGUgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIFF0U3R5bGVPcHRpb25XZWJDb21ib0JveCBvcHQobyk7CisgICAgaW5p
dFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHQpOworICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVP
cHRpb25zKG9wdCwgbyk7CisKKyAgICBJbnRSZWN0IHJlY3QgPSByOworCisjaWYgZGVmaW5lZChR
X09TX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVfTUFDKQorICAgIC8vIFFNYWNTdHlsZSBt
YWtlcyB0aGUgY29tYm8gYm94ZXMgYSBsaXR0bGUgYml0IHNtYWxsZXIgdG8gbGVhdmUgc3BhY2Ug
Zm9yIHRoZSBmb2N1cyByZWN0LgorICAgIC8vIEJlY2F1c2Ugb2YgaXQsIHRoZSBjb21ibyBidXR0
b24gaXMgZHJhd24gYXQgYSBwb2ludCB0byB0aGUgbGVmdCBvZiB3aGVyZSBpdCB3YXMgZXhwZWN0
IHRvIGJlIGFuZCBtYXkgZW5kIHVwCisgICAgLy8gb3ZlcmxhcHBlZCB3aXRoIHRoZSB0ZXh0LiBU
aGlzIHdpbGwgZm9yY2UgUU1hY1N0eWxlIHRvIGRyYXcgdGhlIGNvbWJvIGJveCB3aXRoIHRoZSBl
eHBlY3RlZCB3aWR0aC4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUp
KQorICAgICAgICByZWN0LmluZmxhdGVYKDMpOworI2VuZGlmCisKKyAgICBjb25zdCBRUG9pbnQg
dG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BM
ZWZ0KTsKKyAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBvcHQucmVjdC5z
ZXRTaXplKHJlY3Quc2l6ZSgpKTsKKworICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6
Q0NfQ29tYm9Cb3gsIG9wdCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0TWVu
dUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3sKKyAgICAvLyBXT1JLQVJPVU5EIGJlY2F1c2UgaHRtbC5jc3Mgc3Bl
Y2lmaWVzIC13ZWJraXQtYm9yZGVyLXJhZGl1cyBmb3IgPHNlbGVjdD4gc28gd2Ugb3ZlcnJpZGUg
aXQgaGVyZQorICAgIC8vIHNlZSBhbHNvIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4Mzk5CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7CisKKyAgICAvLyBI
ZWlnaHQgaXMgbG9ja2VkIHRvIGF1dG8uCisgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0
bykpOworCisgICAgLy8gV2hpdGUtc3BhY2UgaXMgbG9ja2VkIHRvIHByZQorICAgIHN0eWxlLT5z
ZXRXaGl0ZVNwYWNlKFBSRSk7CisKKyAgICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7
CisKKyAgICAvLyBBZGQgaW4gdGhlIHBhZGRpbmcgdGhhdCB3ZSdkIGxpa2UgdG8gdXNlLgorICAg
IHNldFBvcHVwUGFkZGluZyhzdHlsZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBh
aW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikK
K3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFF0U3R5bGVPcHRpb25XZWJDb21ib0Jv
eCBvcHRpb24obyk7CisgICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOworICAg
IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7CisgICAgb3B0aW9uLnJl
Y3QgPSByOworCisgICAgLy8gZm9yIGRyYXdpbmcgdGhlIGNvbWJvIGJveCBhcnJvdywgcmVseSBv
bmx5IG9uIHRoZSBmYWxsYmFjayBzdHlsZQorICAgIHAuc3R5bGUgPSBmYWxsYmFja1N0eWxlKCk7
CisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19Db21ib0JveEFycm93OworICAg
IHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfQ29tYm9Cb3gsIG9wdGlvbik7CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorZG91YmxlIFJl
bmRlclRoZW1lUVN0eWxlOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclBy
b2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3QKK3sKKyAgICBpZiAocmVuZGVyUHJvZ3Jlc3Mt
PnBvc2l0aW9uKCkgPj0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBRU3R5bGVPcHRpb25Q
cm9ncmVzc0JhclYyIG9wdGlvbjsKKyAgICBvcHRpb24ucmVjdC5zZXRTaXplKHJlbmRlclByb2dy
ZXNzLT5zaXplKCkpOworICAgIC8vIEZJWE1FOiBVbnRpbCBodHRwOi8vYnVncmVwb3J0cy5xdC5u
b2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQsCisgICAgLy8gd2Ugc2ltdWxhdGUg
b25lIHNxdWFyZSBhbmltYXRpbmcgYWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgcmV0dXJu
IChvcHRpb24ucmVjdC53aWR0aCgpIC8gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1f
UHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9uKSkgKiBhbmltYXRpb25SZXBlYXRJbnRlcnZh
bEZvclByb2dyZXNzQmFyKHJlbmRlclByb2dyZXNzKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFT
dHlsZTo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
cGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKCFvLT5pc1Byb2dyZXNzKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGkpOwor
ICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBRU3R5bGVP
cHRpb25Qcm9ncmVzc0JhclYyIG9wdGlvbjsKKyAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQs
IG9wdGlvbik7CisgICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsK
KworICAgIFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mo
byk7CisgICAgb3B0aW9uLnJlY3QgPSByOworICAgIG9wdGlvbi5tYXhpbXVtID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICBvcHRpb24ubWluaW11bSA9IDA7CisgICAgb3B0
aW9uLnByb2dyZXNzID0gKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpICogc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSk7CisKKyAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9j
YXRpb24oKTsKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKKyAgICBvcHRpb24u
cmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKKyAgICBvcHRpb24ucmVjdC5zZXRTaXplKHIuc2l6
ZSgpKTsKKworICAgIGlmIChvcHRpb24ucHJvZ3Jlc3MgPCAwKSB7CisgICAgICAgIC8vIEZJWE1F
OiBVbnRpbCBodHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEg
aXMgZml4ZWQsCisgICAgICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFj
cm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0Vf
UHJvZ3Jlc3NCYXJHcm9vdmUsIG9wdGlvbik7CisgICAgICAgIGludCBjaHVua1dpZHRoID0gcVN0
eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0
aW9uKTsKKyAgICAgICAgUUNvbG9yIGNvbG9yID0gKG9wdGlvbi5wYWxldHRlLmhpZ2hsaWdodCgp
ID09IG9wdGlvbi5wYWxldHRlLmJhY2tncm91bmQoKSkgPyBvcHRpb24ucGFsZXR0ZS5jb2xvcihR
UGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxpZ2h0KSA6IG9wdGlvbi5wYWxldHRlLmNv
bG9yKFFQYWxldHRlOjpIaWdobGlnaHQpOworICAgICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnN0
eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJl
Y3Qob3B0aW9uLnJlY3QucmlnaHQoKSAtIGNodW5rV2lkdGggIC0gcmVuZGVyUHJvZ3Jlc3MtPmFu
aW1hdGlvblByb2dyZXNzKCkgKiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBv
cHRpb24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBw
LnBhaW50ZXItPmZpbGxSZWN0KHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICog
b3B0aW9uLnJlY3Qud2lkdGgoKSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCks
IGNvbG9yKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1By
b2dyZXNzQmFyLCBvcHRpb24pOworCisgICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQp
OworCisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIp
Cit7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGkpOworICAgIGlmICghcC5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9w
dGlvbjsKKyAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7CisgICAgb3B0aW9u
LnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJHcm9vdmU7CisgICAgQ29udHJvbFBhcnQg
YXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7Cisg
ICAgb3B0aW9uLnJlY3QgPSByOworICAgIGlmIChhcHBlYXJhbmNlID09IFNsaWRlclZlcnRpY2Fs
UGFydCkKKyAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIGlm
IChpc1ByZXNzZWQobykpCisgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1
bmtlbjsKKworICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRp
b24pOworCisgICAgaWYgKG9wdGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMpIHsK
KyAgICAgICAgUVN0eWxlT3B0aW9uRm9jdXNSZWN0IGZvY3VzT3B0aW9uOworICAgICAgICBmb2N1
c09wdGlvbi5yZWN0ID0gcjsKKyAgICAgICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfRnJh
bWVGb2N1c1JlY3QsIGZvY3VzT3B0aW9uKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRyYWNrU3R5bGUoQ1NTU3R5
bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAg
c3R5bGUtPnNldEJveFNoYWRvdyhudWxscHRyKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHls
ZTo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikK
K3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7CisgICAgaWYgKCFwLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0
aW9uOworICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKKyAgICBvcHRpb24u
c3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKKyAgICBDb250cm9sUGFydCBh
cHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKKyAg
ICBvcHRpb24ucmVjdCA9IHI7CisgICAgaWYgKGFwcGVhcmFuY2UgPT0gU2xpZGVyVGh1bWJWZXJ0
aWNhbFBhcnQpCisgICAgICAgIG9wdGlvbi5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0aWNhbDsKKyAg
ICBpZiAoaXNQcmVzc2VkKG8pKSB7CisgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9
IFFTdHlsZTo6U0NfU2xpZGVySGFuZGxlOworICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxl
OjpTdGF0ZV9TdW5rZW47CisgICAgfQorCisgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxl
OjpDQ19TbGlkZXIsIG9wdGlvbik7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciog
c2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxlbWVudCkgY29uc3QKK3sK
KyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzZWxlY3Rvciwgc3R5bGUs
IGVsZW1lbnQpOworICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Cit9CisKK2Jvb2wg
UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEludFJlY3QmIHIpCit7CisgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIHBpLCByKTsK
K30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGRTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNvbnN0Cit7CisgICAg
Ly8gUmVzZXR0aW5nIHRoZSBzdHlsZSBsaWtlIHRoaXMgbGVhZHMgdG8gZGlmZmVyZW5jZXMgbGlr
ZToKKyAgICAvLyAtIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAxNjh4
MjUgW2JnY29sb3I9I0ZGRkZGRl0gYm9yZGVyOiAoMnB4IGluc2V0ICMwMDAwMDApXQorICAgIC8v
ICsgUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2NngyNgorICAgIC8v
IGluIGxheW91dCB0ZXN0cyB3aGVuIGEgQ1NTIHN0eWxlIGlzIGFwcGxpZWQgdGhhdCBkb2Vzbid0
IGFmZmVjdCBiYWNrZ3JvdW5kIGNvbG9yLCBib3JkZXIgb3IKKyAgICAvLyBwYWRkaW5nLiBKdXN0
IHdvcnRoIGtlZXBpbmcgaW4gbWluZCEKKyAgICBzdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENv
bG9yOjp0cmFuc3BhcmVudCk7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUt
PnJlc2V0UGFkZGluZygpOworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGREZWNvcmF0aW9uU3R5
bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCog
ZSkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFJlbmRlclRoZW1lOjphZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOworfQorCiti
b29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OnBhaW50U2VhcmNoRmllbGREZWNvcmF0
aW9uKG8sIHBpLCByKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBS
ZW5kZXJTdHlsZSogc3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFbGVtZW50KiBlKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29y
YXRpb25TdHlsZShzZWxlY3Rvciwgc3R5bGUsIGUpOworfQorCitib29sIFJlbmRlclRoZW1lUVN0
eWxlOjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uKG8sIHBpLCByKTsKK30KKworI2lmbmRlZiBRVF9OT19TUElOQk9YCisKK2Jvb2wgUmVu
ZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgU3R5
bGVQYWludGVyUVN0eWxlIHAodGhpcywgcGFpbnRJbmZvKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgp
KQorICAgICAgIHJldHVybiB0cnVlOworCisgICAgUVN0eWxlT3B0aW9uU3BpbkJveCBvcHRpb247
CisgICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOworICAgIG9wdGlvbi5zdWJD
b250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwIHwgUVN0eWxlOjpTQ19TcGluQm94RG93bjsK
KyAgICBpZiAoIWlzUmVhZE9ubHlDb250cm9sKG8pKSB7CisgICAgICAgIGlmIChpc0VuYWJsZWQo
bykpCisgICAgICAgICAgICBvcHRpb24uc3RlcEVuYWJsZWQgPSBRQWJzdHJhY3RTcGluQm94OjpT
dGVwVXBFbmFibGVkIHwgUUFic3RyYWN0U3BpbkJveDo6U3RlcERvd25FbmFibGVkOworICAgICAg
ICBpZiAoaXNQcmVzc2VkKG8pKSB7CisgICAgICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxl
OjpTdGF0ZV9TdW5rZW47CisgICAgICAgICAgICBpZiAoaXNTcGluVXBCdXR0b25QYXJ0UHJlc3Nl
ZChvKSkKKyAgICAgICAgICAgICAgICBvcHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6
OlNDX1NwaW5Cb3hVcDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvcHRpb24u
YWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NwaW5Cb3hEb3duOworICAgICAgICB9Cisg
ICAgfQorICAgIC8vIFJlbmRlciB0aGUgc3BpbiBidXR0b25zIGZvciBMVFIgb3IgUlRMIGFjY29y
ZGluZ2x5LgorICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBvLT5zdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBRdDo6TGVmdFRvUmlnaHQgOiBRdDo6UmlnaHRUb0xlZnQ7CisKKyAgICBJ
bnRSZWN0IGJ1dHRvblJlY3QgPSByZWN0OworICAgIC8vIERlZmF1bHQgdG8gbW92aW5nIHRoZSBi
dXR0b25zIGEgbGl0dGxlIGJpdCB3aXRoaW4gdGhlIGVkaXRvciBmcmFtZS4KKyAgICBpbnQgaW5m
bGF0ZVggPSAtMjsKKyAgICBpbnQgaW5mbGF0ZVkgPSAtMjsKKyNpZiBkZWZpbmVkKFFfT1NfTUFD
KSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMpCisgICAgLy8gUU1hY1N0eWxlIHdpbGwgcG9z
aXRpb24gdGhlIGFxdWEgYnV0dG9ucyBmbHVzaCB0byB0aGUgcmlnaHQuCisgICAgLy8gVGhpcyB3
aWxsIG1vdmUgdGhlbSBtb3JlIHdpdGhpbiB0aGUgY29udHJvbCBmb3IgYmV0dGVyIHN0eWxlLCBh
IGxhCisgICAgLy8gQ2hyb21pdW0gbG9vayAmIGZlZWwuCisgICAgaWYgKHFvYmplY3RfY2FzdDxR
TWFjU3R5bGUqPihwLnN0eWxlKSkgeworICAgICAgICBpbmZsYXRlWCA9IC00OworICAgICAgICAv
LyBSZW5kZXIgbWluaSBhcXVhIHNwaW4gYnV0dG9ucyBmb3IgUU1hY1N0eWxlIHRvIGZpdCBuaWNl
bHkgaW50bworICAgICAgICAvLyB0aGUgZWRpdG9yIGFyZWEsIGxpa2UgQ2hyb21pdW0uCisgICAg
ICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX01pbmk7CisgICAgfQorI2VuZGlmCisj
aWYgIWRlZmluZWQoUVRfTk9fU1RZTEVfUExBU1RJUVVFKQorICAgIC8vIFFQbGFzdGlxdWVTdHls
ZSBsb29rcyBiZXN0IHdoZW4gdGhlIHNwaW4gYnV0dG9ucyBhcmUgZmx1c2ggd2l0aCB0aGUgZnJh
bWUncyBlZGdlLgorICAgIGlmIChxb2JqZWN0X2Nhc3Q8UVBsYXN0aXF1ZVN0eWxlKj4ocC5zdHls
ZSkpIHsKKyAgICAgICAgaW5mbGF0ZVggPSAwOworICAgICAgICBpbmZsYXRlWSA9IDA7CisgICAg
fQorI2VuZGlmCisKKyAgICBidXR0b25SZWN0LmluZmxhdGVYKGluZmxhdGVYKTsKKyAgICBidXR0
b25SZWN0LmluZmxhdGVZKGluZmxhdGVZKTsKKyAgICBvcHRpb24ucmVjdCA9IGJ1dHRvblJlY3Q7
CisKKyAgICBwLmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NwaW5Cb3gsIG9wdGlvbik7
CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKK0NvbnRyb2xQYXJ0IFJlbmRlclRoZW1l
UVN0eWxlOjppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVPcHRpb24mIG9wdGlv
biwgUmVuZGVyT2JqZWN0KiBvKSBjb25zdAoreworICAgIC8vIERlZmF1bHQgYml0czogbm8gZm9j
dXMsIG5vIG1vdXNlIG92ZXIKKyAgICBvcHRpb24uc3RhdGUgJj0gfihRU3R5bGU6OlN0YXRlX0hh
c0ZvY3VzIHwgUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXIpOworCisgICAgaWYgKGlzUmVhZE9ubHlD
b250cm9sKG8pKQorICAgICAgICAvLyBSZWFkb25seSBpcyBzdXBwb3J0ZWQgb24gdGV4dGZpZWxk
cy4KKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmVhZE9ubHk7CisKKyAg
ICBvcHRpb24uZGlyZWN0aW9uID0gUXQ6OkxlZnRUb1JpZ2h0OworCisgICAgaWYgKGlzSG92ZXJl
ZChvKSkKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTW91c2VPdmVyOwor
CisgICAgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMob3B0aW9uLnBhbGV0dGUpOwor
CisgICAgaWYgKCFpc0VuYWJsZWQobykpIHsKKyAgICAgICAgb3B0aW9uLnBhbGV0dGUuc2V0Q3Vy
cmVudENvbG9yR3JvdXAoUVBhbGV0dGU6OkRpc2FibGVkKTsKKyAgICAgICAgb3B0aW9uLnN0YXRl
ICY9IH5RU3R5bGU6OlN0YXRlX0VuYWJsZWQ7CisgICAgfQorCisgICAgUmVuZGVyU3R5bGUqIHN0
eWxlID0gby0+c3R5bGUoKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gTm9Db250
cm9sUGFydDsKKworICAgIENvbnRyb2xQYXJ0IHJlc3VsdCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7
CisgICAgaWYgKHN1cHBvcnRzRm9jdXMocmVzdWx0KSAmJiBpc0ZvY3VzZWQobykpIHsKKyAgICAg
ICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfSGFzRm9jdXM7CisgICAgICAgIG9wdGlv
bi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX0tleWJvYXJkRm9jdXNDaGFuZ2U7CisgICAgfQorCisg
ICAgaWYgKHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBXZWJDb3JlOjpSVEwpCisgICAgICAgIG9wdGlv
bi5kaXJlY3Rpb24gPSBRdDo6UmlnaHRUb0xlZnQ7CisKKyAgICBzd2l0Y2ggKHJlc3VsdCkgewor
ICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CisgICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgorICAg
IGNhc2UgQnV0dG9uUGFydDoKKyAgICBjYXNlIEJ1dHRvbkJldmVsUGFydDoKKyAgICBjYXNlIExp
c3RJdGVtUGFydDoKKyAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKKyAgICBjYXNlIFNlYXJj
aEZpZWxkUmVzdWx0c0J1dHRvblBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZENhbmNlbEJ1dHRv
blBhcnQ6IHsKKyAgICAgICAgaWYgKGlzUHJlc3NlZChvKSkKKyAgICAgICAgICAgIG9wdGlvbi5z
dGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKKyAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09
IFB1c2hCdXR0b25QYXJ0IHx8IHJlc3VsdCA9PSBCdXR0b25QYXJ0KQorICAgICAgICAgICAgb3B0
aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmFpc2VkOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBSYWRpb1BhcnQ6CisgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgICAgIG9w
dGlvbi5zdGF0ZSB8PSAoaXNDaGVja2VkKG8pID8gUVN0eWxlOjpTdGF0ZV9PbiA6IFFTdHlsZTo6
U3RhdGVfT2ZmKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFJlbmRl
clRoZW1lUVN0eWxlOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdAoreworICAgIGNvbnN0IENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgp
OworICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCkgeworICAgICAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0
aW9uOworICAgICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAg
ICAgICAgIG9wdGlvbi5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0aWNhbDsKKworICAgICAgICBRU3R5
bGUqIHFzdHlsZSA9IHFTdHlsZSgpOworCisgICAgICAgIGludCBsZW5ndGggPSBxc3R5bGUtPnBp
eGVsTWV0cmljKFFTdHlsZTo6UE1fU2xpZGVyTGVuZ3RoLCAmb3B0aW9uKTsKKyAgICAgICAgaW50
IHRoaWNrbmVzcyA9IHFzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJUaGlja25l
c3MsICZvcHRpb24pOworICAgICAgICBpZiAob3B0aW9uLm9yaWVudGF0aW9uID09IFF0OjpWZXJ0
aWNhbCkgeworICAgICAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh0aGlja25lc3MsIEZp
eGVkKSk7CisgICAgICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVk
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3Ro
KGxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRo
aWNrbmVzcywgRml4ZWQpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBSZW5kZXJU
aGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoc3R5bGUpOworfQorCit9CisKKy8vIHZpbTog
dHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5k
ZXJUaGVtZVFTdHlsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
U3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41NzQ3ZmU0N2VkZGQ0MmNjOTRiNjlmOGYzOWFkYmRiNWNkMTQ0
Mzk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRU3R5bGUuaApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlvbiBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3Jl
LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBSZW5kZXJUaGVtZVFTdHlsZV9oCisjZGVmaW5l
IFJlbmRlclRoZW1lUVN0eWxlX2gKKworI2luY2x1ZGUgIlJlbmRlclRoZW1lUXQuaCIKKworI2lu
Y2x1ZGUgPFFTdHlsZT4KKworUVRfQkVHSU5fTkFNRVNQQUNFCisjaWZuZGVmIFFUX05PX0xJTkVF
RElUCitjbGFzcyBRTGluZUVkaXQ7CisjZW5kaWYKK2NsYXNzIFFQYWludGVyOworY2xhc3MgUVdp
ZGdldDsKK1FUX0VORF9OQU1FU1BBQ0UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBT
Y3JvbGxiYXJUaGVtZVF0OworCitjbGFzcyBSZW5kZXJUaGVtZVFTdHlsZSA6IHB1YmxpYyBSZW5k
ZXJUaGVtZVF0IHsKK3ByaXZhdGU6CisgICAgUmVuZGVyVGhlbWVRU3R5bGUoUGFnZSopOworICAg
IHZpcnR1YWwgflJlbmRlclRoZW1lUVN0eWxlKCk7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxSZW5kZXJUaGVtZT4gY3JlYXRlKFBhZ2UqKTsKKworICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIFFTdHlsZSog
cVN0eWxlKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0
dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0Rmll
bGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAg
IHZpcnR1YWwgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0
QXJlYShSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50TWVu
dUxpc3QoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
CisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RN
ZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1l
bnQqKSBjb25zdDsKKworI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgLy8gUmV0dXJucyB0
aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KKyAgICB2
aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRyYWNr
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTbGlk
ZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBj
b25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2VhcmNoRmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2VhcmNoRmllbGREZWNvcmF0
aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbihSZW5kZXJPYmpl
Y3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworI2lmbmRlZiBRVF9OT19TUElOQk9YCisgICAgdmly
dHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAg
ICB2aXJ0dWFsIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4gZ2V0U3R5bGVQYWludGVyKGNv
bnN0IFBhaW50SW5mbyYpOworCisgICAgdmlydHVhbCBRUmVjdCBpbmZsYXRlQnV0dG9uUmVjdChj
b25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRQ
b3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBDb250cm9s
UGFydCBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVPcHRpb24mLCBSZW5kZXJP
YmplY3QqKSBjb25zdDsKKworICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSop
IGNvbnN0OworCisgICAgaW50IGZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqKSBjb25zdDsKKwor
ICAgIFFTdHlsZSogZmFsbGJhY2tTdHlsZSgpIGNvbnN0OworCisgICAgUGFnZSogbV9wYWdlOwor
CisjaWZkZWYgUV9PU19NQUMKKyAgICBpbnQgbV9idXR0b25Gb250UGl4ZWxTaXplOworI2VuZGlm
CisKKyAgICBRU3R5bGUqIG1fZmFsbGJhY2tTdHlsZTsKKyNpZm5kZWYgUVRfTk9fTElORUVESVQK
KyAgICBtdXRhYmxlIFFMaW5lRWRpdCogbV9saW5lRWRpdDsKKyNlbmRpZgorfTsKKworY2xhc3Mg
U3R5bGVQYWludGVyUVN0eWxlIDogcHVibGljIFN0eWxlUGFpbnRlciB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0eWxlKiwgY29uc3QgUGFp
bnRJbmZvJik7CisgICAgZXhwbGljaXQgU3R5bGVQYWludGVyUVN0eWxlKFNjcm9sbGJhclRoZW1l
UXQqLCBHcmFwaGljc0NvbnRleHQqKTsKKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIHN0eWxlICYmIFN0eWxlUGFpbnRlcjo6aXNWYWxpZCgpOyB9CisKKyAgICBRV2lkZ2V0KiB3
aWRnZXQ7CisgICAgUVN0eWxlKiBzdHlsZTsKKworICAgIHZvaWQgZHJhd1ByaW1pdGl2ZShRU3R5
bGU6OlByaW1pdGl2ZUVsZW1lbnQgcGUsIGNvbnN0IFFTdHlsZU9wdGlvbiYgb3B0KQorICAgIHsg
c3R5bGUtPmRyYXdQcmltaXRpdmUocGUsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KKyAgICB2
b2lkIGRyYXdDb250cm9sKFFTdHlsZTo6Q29udHJvbEVsZW1lbnQgY2UsIGNvbnN0IFFTdHlsZU9w
dGlvbiYgb3B0KQorICAgIHsgc3R5bGUtPmRyYXdDb250cm9sKGNlLCAmb3B0LCBwYWludGVyLCB3
aWRnZXQpOyB9CisgICAgdm9pZCBkcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDb21wbGV4Q29u
dHJvbCBjYywgY29uc3QgUVN0eWxlT3B0aW9uQ29tcGxleCYgb3B0KQorICAgIHsgc3R5bGUtPmRy
YXdDb21wbGV4Q29udHJvbChjYywgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQorCitwcml2YXRl
OgorICAgIHZvaWQgaW5pdChHcmFwaGljc0NvbnRleHQqLCBRU3R5bGUqKTsKKworICAgIFFfRElT
QUJMRV9DT1BZKFN0eWxlUGFpbnRlclFTdHlsZSkKK307CisKK30KKworI2VuZGlmIC8vIFJlbmRl
clRoZW1lUVN0eWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dC5jcHAKaW5kZXggYzBlOGFjN2ZiNTMzZTI5NWQ0Yjg1MTQ0ZTg2NjQ4Yjk0ZTMwOTA4Ny4uNzE2
YTZjZDhlZTZkOTgzMWE5M2EwZGVkZWQwMDIyYmU3Yjc3ZGI5NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAKQEAgLTMwLDc5ICszMCw0NCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lUXQuaCIKIAotI2luY2x1ZGUg
IkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKLSNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2lu
Y2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudFF0LmgiCiAjaW5jbHVkZSAi
Q29sb3IuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNs
dWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0jaW5jbHVk
ZSAiUXRNb2JpbGVXZWJTdHlsZS5oIgotI2VuZGlmCiAjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5n
cy5oIgogI2lmIEVOQUJMRShWSURFTykKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5o
IgogI2VuZGlmCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWludElu
Zm8uaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVk
ZSAiUVdlYlBhZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3gu
aCIKLSNpbmNsdWRlICJxd2Vic2V0dGluZ3MuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNp
ZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCiAjZW5k
aWYKLSNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgot
I2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUXQuaCIKLSNpbmNsdWRlICJTbGlkZXJUaHVtYkVsZW1l
bnQuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgIlRpbWVSYW5nZXMu
aCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgogCiAjaW5jbHVkZSA8UUFwcGxp
Y2F0aW9uPgogI2luY2x1ZGUgPFFDb2xvcj4KLSNpbmNsdWRlIDxRQ29yZUFwcGxpY2F0aW9uPgog
I2luY2x1ZGUgPFFGaWxlPgogI2luY2x1ZGUgPFFGb250TWV0cmljcz4KLSNpbmNsdWRlIDxRTGlu
ZUVkaXQ+Ci0jaW5jbHVkZSA8UU1hY1N0eWxlPgotI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1
ZGUgPFFQbGFzdGlxdWVTdHlsZT4KLSNpbmNsdWRlIDxRUHVzaEJ1dHRvbj4KLSNpbmNsdWRlIDxR
U3R5bGVGYWN0b3J5PgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkJ1dHRvbj4KLSNpbmNsdWRlIDxR
U3R5bGVPcHRpb25GcmFtZVYyPgotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0jaW5jbHVkZSA8
UVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMj4KLSNlbmRpZgotI2luY2x1ZGUgPFFTdHlsZU9wdGlv
blNsaWRlcj4KLSNpbmNsdWRlIDxRV2lkZ2V0PgorCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotaW5saW5lIHN0YXRpYyB2b2lkIGluaXRTdHls
ZU9wdGlvbihRV2lkZ2V0ICp3aWRnZXQsIFFTdHlsZU9wdGlvbiYgb3B0aW9uKQotewotICAgIGlm
ICh3aWRnZXQpCi0gICAgICAgIG9wdGlvbi5pbml0RnJvbSh3aWRnZXQpOwotICAgIGVsc2Ugewot
ICAgICAgICAvKgotICAgICAgICAgIElmIGEgd2lkZ2V0IGlzIG5vdCBkaXJlY3RseSBhdmFpbGFi
bGUgZm9yIHJlbmRlcmluZywgd2UgZmFsbGJhY2sgdG8gZGVmYXVsdAotICAgICAgICAgIHZhbHVl
IGZvciBhbiBhY3RpdmUgd2lkZ2V0LgotICAgICAgICAgKi8KLSAgICAgICAgb3B0aW9uLnN0YXRl
ID0gUVN0eWxlOjpTdGF0ZV9BY3RpdmUgfCBRU3R5bGU6OlN0YXRlX0VuYWJsZWQ7Ci0gICAgfQot
fQogLy8gVGhlc2UgdmFsdWVzIGFsbCBtYXRjaCBTYWZhcmkvV2luL0Nocm9taXVtCiBzdGF0aWMg
Y29uc3QgZmxvYXQgZGVmYXVsdENvbnRyb2xGb250UGl4ZWxTaXplID0gMTM7CiBzdGF0aWMgY29u
c3QgZmxvYXQgZGVmYXVsdENhbmNlbEJ1dHRvblNpemUgPSA5OwpAQCAtMTEzLDEyOSArNzgsMTMg
QEAgc3RhdGljIGNvbnN0IGZsb2F0IG1pblNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXpl
ID0gOTsKIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U2l6ZSA9IDMwOwogc3RhdGljIGNvbnN0IGZsb2F0IGRlZmF1bHRTZWFyY2hGaWVsZFJlc3VsdHNC
dXR0b25XaWR0aCA9IDE4OwogCi0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkKLW5hbWVzcGFjZSB7
Ci0gICAgZmxvYXQgYnV0dG9uUGFkZGluZ0xlZnQgPSAxODsKLSAgICBmbG9hdCBidXR0b25QYWRk
aW5nUmlnaHQgPSAxODsKLSAgICBmbG9hdCBidXR0b25QYWRkaW5nVG9wID0gMjsKLSAgICBmbG9h
dCBidXR0b25QYWRkaW5nQm90dG9tID0gMzsKLSAgICBmbG9hdCBtZW51TGlzdFBhZGRpbmcgPSA5
OwotICAgIGZsb2F0IHRleHRGaWVsZFBhZGRpbmcgPSA1OwotfQotI2VuZGlmCi0KLVN0eWxlUGFp
bnRlcjo6U3R5bGVQYWludGVyKFJlbmRlclRoZW1lUXQqIHRoZW1lLCBjb25zdCBQYWludEluZm8m
IHBhaW50SW5mbykKLXsKLSAgICBpbml0KHBhaW50SW5mby5jb250ZXh0ID8gcGFpbnRJbmZvLmNv
bnRleHQgOiAwLCB0aGVtZS0+cVN0eWxlKCkpOwotfQotCi1TdHlsZVBhaW50ZXI6OlN0eWxlUGFp
bnRlcihTY3JvbGxiYXJUaGVtZVF0KiB0aGVtZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQot
ewotICAgIGluaXQoY29udGV4dCwgdGhlbWUtPnN0eWxlKCkpOwotfQotCi12b2lkIFN0eWxlUGFp
bnRlcjo6aW5pdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFFTdHlsZSogdGhlbWVTdHlsZSkK
LXsKLSAgICBwYWludGVyID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKSk7Ci0gICAgd2lkZ2V0ID0gMDsKLSAgICBRUGFpbnREZXZpY2UqIGRldiA9IDA7
Ci0gICAgaWYgKHBhaW50ZXIpCi0gICAgICAgIGRldiA9IHBhaW50ZXItPmRldmljZSgpOwotICAg
IGlmIChkZXYgJiYgZGV2LT5kZXZUeXBlKCkgPT0gUUludGVybmFsOjpXaWRnZXQpCi0gICAgICAg
IHdpZGdldCA9IHN0YXRpY19jYXN0PFFXaWRnZXQqPihkZXYpOwotICAgIHN0eWxlID0gdGhlbWVT
dHlsZTsKLQotICAgIGlmIChwYWludGVyKSB7Ci0gICAgICAgIC8vIHRoZSBzdHlsZXMgb2Z0ZW4g
YXNzdW1lIGJlaW5nIGNhbGxlZCB3aXRoIGEgcHJpc3RpbmUgcGFpbnRlciB3aGVyZSBubyBicnVz
aCBpcyBzZXQsCi0gICAgICAgIC8vIHNvIHJlc2V0IGl0IG1hbnVhbGx5Ci0gICAgICAgIG9sZEJy
dXNoID0gcGFpbnRlci0+YnJ1c2goKTsKLSAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2goUXQ6Ok5v
QnJ1c2gpOwotCi0gICAgICAgIC8vIHBhaW50aW5nIHRoZSB3aWRnZXQgd2l0aCBhbnRpLWFsaWFz
aW5nIHdpbGwgbWFrZSBpdCBibHVycnkKLSAgICAgICAgLy8gZGlzYWJsZSBpdCBoZXJlIGFuZCBy
ZXN0b3JlIGl0IGxhdGVyCi0gICAgICAgIG9sZEFudGlhbGlhc2luZyA9IHBhaW50ZXItPnRlc3RS
ZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcpOwotICAgICAgICBwYWludGVyLT5zZXRS
ZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIGZhbHNlKTsKLSAgICB9Ci19Ci0KLVN0
eWxlUGFpbnRlcjo6flN0eWxlUGFpbnRlcigpCi17Ci0gICAgaWYgKHBhaW50ZXIpIHsKLSAgICAg
ICAgcGFpbnRlci0+c2V0QnJ1c2gob2xkQnJ1c2gpOwotICAgICAgICBwYWludGVyLT5zZXRSZW5k
ZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBvbGRBbnRpYWxpYXNpbmcpOwotICAgIH0K
LX0KLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVRdDo6Y3JlYXRlKFBhZ2Uq
IHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW5kZXJUaGVtZVF0KHBhZ2UpKTsK
LX0KLQotUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQ
YWdlKiBwYWdlKQotewotICAgIGlmIChwYWdlKQotICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWVR
dDo6Y3JlYXRlKHBhZ2UpOwotCi0gICAgc3RhdGljIFJlbmRlclRoZW1lKiBmYWxsYmFjayA9IFJl
bmRlclRoZW1lUXQ6OmNyZWF0ZSgwKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIGZhbGxiYWNrOwot
fQotCiBSZW5kZXJUaGVtZVF0OjpSZW5kZXJUaGVtZVF0KFBhZ2UqIHBhZ2UpCiAgICAgOiBSZW5k
ZXJUaGVtZSgpCiAgICAgLCBtX3BhZ2UocGFnZSkKLSAgICAsIG1fbGluZUVkaXQoMCkKLXsKLSAg
ICBRUHVzaEJ1dHRvbiBidXR0b247Ci0gICAgYnV0dG9uLnNldEF0dHJpYnV0ZShRdDo6V0FfTWFj
U21hbGxTaXplKTsKLSAgICBRRm9udCBkZWZhdWx0QnV0dG9uRm9udCA9IFFBcHBsaWNhdGlvbjo6
Zm9udCgmYnV0dG9uKTsKLSAgICBRRm9udEluZm8gZm9udEluZm8oZGVmYXVsdEJ1dHRvbkZvbnQp
OwotICAgIG1fYnV0dG9uRm9udEZhbWlseSA9IGRlZmF1bHRCdXR0b25Gb250LmZhbWlseSgpOwot
I2lmZGVmIFFfV1NfTUFDCi0gICAgbV9idXR0b25Gb250UGl4ZWxTaXplID0gZm9udEluZm8ucGl4
ZWxTaXplKCk7Ci0jZW5kaWYKLQotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgbV9mYWxs
YmFja1N0eWxlID0gbmV3IFF0TW9iaWxlV2ViU3R5bGU7Ci0jZWxzZQotICAgIG1fZmFsbGJhY2tT
dHlsZSA9IFFTdHlsZUZhY3Rvcnk6OmNyZWF0ZShRTGF0aW4xU3RyaW5nKCJ3aW5kb3dzIikpOwot
I2VuZGlmCi19Ci0KLVJlbmRlclRoZW1lUXQ6On5SZW5kZXJUaGVtZVF0KCkKLXsKLSAgICBkZWxl
dGUgbV9mYWxsYmFja1N0eWxlOwotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIGRlbGV0ZSBt
X2xpbmVFZGl0OwotI2VuZGlmCi19Ci0KLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotYm9vbCBS
ZW5kZXJUaGVtZVF0Ojppc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBj
b25zdCBCb3JkZXJEYXRhJiBib3JkZXIsIGNvbnN0IEZpbGxMYXllciYgZmlsbCwgY29uc3QgQ29s
b3ImIGJhY2tncm91bmRDb2xvcikgY29uc3QKIHsKLSAgICBzd2l0Y2ggKHN0eWxlLT5hcHBlYXJh
bmNlKCkpIHsKLSAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uUGFydDoK
LSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICBj
YXNlIFRleHRGaWVsZFBhcnQ6Ci0gICAgY2FzZSBUZXh0QXJlYVBhcnQ6Ci0gICAgICAgIC8vIFRl
c3QgdGhlIHN0eWxlIHRvIHNlZSBpZiB0aGUgVUEgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIG1hdGNo
LgotICAgICAgICByZXR1cm4gKHN0eWxlLT5ib3JkZXIoKSAhPSBib3JkZXIKLSAgICAgICAgICAg
ICAgICB8fCAqc3R5bGUtPmJhY2tncm91bmRMYXllcnMoKSAhPSBmaWxsCi0gICAgICAgICAgICAg
ICAgfHwgc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcikgIT0gYmFja2dyb3VuZENvbG9yKTsKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICBj
YXNlIFJhZGlvUGFydDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGZp
bGwsIGJhY2tncm91bmRDb2xvcik7Ci0gICAgfQorICAgIG1fYnV0dG9uRm9udEZhbWlseSA9IFFB
cHBsaWNhdGlvbjo6Zm9udCgpLmZhbWlseSgpOwogfQogCi1pbnQgUmVuZGVyVGhlbWVRdDo6cG9w
dXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAg
IHJldHVybiAxOwotfQotI2Vsc2UKIC8vIFJlbW92ZSB0aGlzIHdoZW4gU2VhcmNoRmllbGRQYXJ0
IGlzIHN0eWxlLWFibGUgaW4gUmVuZGVyVGhlbWU6OmlzQ29udHJvbFN0eWxlZCgpCiBib29sIFJl
bmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNv
bnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBmaWxsLCBjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewpAQCAtMjQ5LDM2ICs5OCwxMiBAQCBib29sIFJl
bmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNv
bnN0IEJvcmRlckRhdGEmCiAgICAgICAgIHJldHVybiBSZW5kZXJUaGVtZTo6aXNDb250cm9sU3R5
bGVkKHN0eWxlLCBib3JkZXIsIGZpbGwsIGJhY2tncm91bmRDb2xvcik7CiAgICAgfQogfQotI2Vu
ZGlmCi0KLS8vIGZvciBzb21lIHdpZGdldCBwYWludGluZywgd2UgbmVlZCB0byBmYWxsYmFjayB0
byBXaW5kb3dzIHN0eWxlCi1RU3R5bGUqIFJlbmRlclRoZW1lUXQ6OmZhbGxiYWNrU3R5bGUoKSBj
b25zdAotewotICAgIHJldHVybiAobV9mYWxsYmFja1N0eWxlKSA/IG1fZmFsbGJhY2tTdHlsZSA6
IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKLX0KLQotUVN0eWxlKiBSZW5kZXJUaGVtZVF0OjpxU3R5
bGUoKSBjb25zdAotewotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgcmV0dXJuIGZhbGxi
YWNrU3R5bGUoKTsKLSNlbmRpZgotCi0gICAgaWYgKG1fcGFnZSkgewotICAgICAgICBRV2ViUGFn
ZUNsaWVudCogcGFnZUNsaWVudCA9IG1fcGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wbGF0Zm9y
bVBhZ2VDbGllbnQoKTsKLQotICAgICAgICBpZiAocGFnZUNsaWVudCkKLSAgICAgICAgICAgIHJl
dHVybiBwYWdlQ2xpZW50LT5zdHlsZSgpOwotICAgIH0KLQotICAgIHJldHVybiBRQXBwbGljYXRp
b246OnN0eWxlKCk7Ci19CiAKIFN0cmluZyBSZW5kZXJUaGVtZVF0OjpleHRyYURlZmF1bHRTdHls
ZVNoZWV0KCkKIHsKICAgICBTdHJpbmcgcmVzdWx0ID0gUmVuZGVyVGhlbWU6OmV4dHJhRGVmYXVs
dFN0eWxlU2hlZXQoKTsKLSNpZiBFTkFCTEUoTk9fTElTVEJPWF9SRU5ERVJJTkcpCi0gICAgcmVz
dWx0ICs9IFN0cmluZyh0aGVtZVF0Tm9MaXN0Ym94ZXNVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXpl
b2YodGhlbWVRdE5vTGlzdGJveGVzVXNlckFnZW50U3R5bGVTaGVldCkpOwotI2VuZGlmCisgICAg
aWYgKCFxZ2V0ZW52KCJRVF9XRUJLSVRfVVNFX01PQklMRV9USEVNRSIpLmlzTnVsbCgpKQorICAg
ICAgICByZXN1bHQgKz0gU3RyaW5nKHRoZW1lUXROb0xpc3Rib3hlc1VzZXJBZ2VudFN0eWxlU2hl
ZXQsIHNpemVvZih0aGVtZVF0Tm9MaXN0Ym94ZXNVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMzQzLDM2ICsxNjgsOCBAQCBib29sIFJlbmRlclRoZW1l
UXQ6OnN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
aW50IFJlbmRlclRoZW1lUXQ6OmZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUqIHN0eWxlKSBjb25z
dAotewotI2lmbmRlZiBRVF9OT19MSU5FRURJVAotICAgIGlmICghbV9saW5lRWRpdCkKLSAgICAg
ICAgbV9saW5lRWRpdCA9IG5ldyBRTGluZUVkaXQoKTsKLSNlbmRpZgotCi0gICAgUVN0eWxlT3B0
aW9uRnJhbWVWMiBvcHQ7Ci0gICAgUVdpZGdldCogd2lkZ2V0ID0gMDsKLSNpZm5kZWYgUVRfTk9f
TElORUVESVQKLSAgICB3aWRnZXQgPSBtX2xpbmVFZGl0OwotI2VuZGlmCi0gICAgcmV0dXJuIHN0
eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0RlZmF1bHRGcmFtZVdpZHRoLCAmb3B0LCB3aWRn
ZXQpOwotfQotCi1zdGF0aWMgUVJlY3QgaW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9y
aWdpbmFsUmVjdCwgUVN0eWxlKiBzdHlsZSkKK1FSZWN0IFJlbmRlclRoZW1lUXQ6OmluZmxhdGVC
dXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0CiB7Ci0gICAgUVN0eWxl
T3B0aW9uQnV0dG9uIG9wdGlvbjsKLSAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9T
bWFsbDsKLSAgICBvcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVjdDsKLQotICAgIFFSZWN0IGxheW91
dFJlY3QgPSBzdHlsZS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0
SXRlbSwgJm9wdGlvbiwgMCk7Ci0gICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKSB7Ci0gICAg
ICAgIGludCBwYWRkaW5nTGVmdCA9IGxheW91dFJlY3QubGVmdCgpIC0gb3JpZ2luYWxSZWN0Lmxl
ZnQoKTsKLSAgICAgICAgaW50IHBhZGRpbmdSaWdodCA9IG9yaWdpbmFsUmVjdC5yaWdodCgpIC0g
bGF5b3V0UmVjdC5yaWdodCgpOwotICAgICAgICBpbnQgcGFkZGluZ1RvcCA9IGxheW91dFJlY3Qu
dG9wKCkgLSBvcmlnaW5hbFJlY3QudG9wKCk7Ci0gICAgICAgIGludCBwYWRkaW5nQm90dG9tID0g
b3JpZ2luYWxSZWN0LmJvdHRvbSgpIC0gbGF5b3V0UmVjdC5ib3R0b20oKTsKLQotICAgICAgICBy
ZXR1cm4gb3JpZ2luYWxSZWN0LmFkanVzdGVkKC1wYWRkaW5nTGVmdCwgLXBhZGRpbmdUb3AsIHBh
ZGRpbmdSaWdodCwgcGFkZGluZ0JvdHRvbSk7Ci0gICAgfQogICAgIHJldHVybiBvcmlnaW5hbFJl
Y3Q7CiB9CiAKQEAgLTM4NSw3ICsxODIsNyBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFJl
cGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCogbywgSW50UmVjdCYgcmVjdCkKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKICAgICBjYXNlIEJ1dHRvblBhcnQ6IHsK
LSAgICAgICAgUVJlY3QgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZUJ1dHRvblJlY3QocmVjdCwgcVN0
eWxlKCkpOworICAgICAgICBRUmVjdCBpbmZsYXRlZFJlY3QgPSBpbmZsYXRlQnV0dG9uUmVjdChy
ZWN0KTsKICAgICAgICAgcmVjdCA9IEludFJlY3QoaW5mbGF0ZWRSZWN0LngoKSwgaW5mbGF0ZWRS
ZWN0LnkoKSwgaW5mbGF0ZWRSZWN0LndpZHRoKCksIGluZmxhdGVkUmVjdC5oZWlnaHQoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ1Miw5MyArMjQ5LDExIEBAIENvbG9yIFJlbmRlclRo
ZW1lUXQ6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAogCiBpbnQgUmVuZGVyVGhl
bWVRdDo6bWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0CiB7CisgICAgLy8g
RklYTUU6IExhdGVyIHdlIG5lZWQgYSB3YXkgdG8gcXVlcnkgdGhlIFVJIHByb2Nlc3MgZm9yIHRo
ZSBkcGkKICAgICBjb25zdCBRRm9udE1ldHJpY3MgJmZtID0gUUFwcGxpY2F0aW9uOjpmb250TWV0
cmljcygpOwogICAgIHJldHVybiBmbS53aWR0aChRTGF0aW4xQ2hhcigneCcpKTsKIH0KIAotdm9p
ZCBSZW5kZXJUaGVtZVF0Ojpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVu
ZGVyU3R5bGUpIGNvbnN0Ci17Ci0gICAgUVNpemUgc2l6ZSgwLCAwKTsKLSAgICBjb25zdCBRRm9u
dE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpOwotICAgIFFTdHlsZSogc3R5
bGUgPSBxU3R5bGUoKTsKLQotICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkg
ewotICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgIGNhc2UgU2VhcmNoRmllbGRQYXJ0OgotICAg
IGNhc2UgVGV4dEZpZWxkUGFydDogewotICAgICAgICBpbnQgcGFkZGluZyA9IGZpbmRGcmFtZUxp
bmVXaWR0aChzdHlsZSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5n
dGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdSaWdo
dChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRp
bmdUb3AoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQ
YWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIElmIHRoZSB3
aWR0aCBhbmQgaGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcg
dG8gZG8uCi0gICAgaWYgKCFyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygp
ICYmICFyZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHN3aXRjaCAocmVuZGVyU3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgQ2hlY2ti
b3hQYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbiBzdHlsZU9wdGlvbjsKLSAgICAgICAgc3R5
bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLSAgICAgICAgaW50IGNoZWNr
Qm94V2lkdGggPSBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9JbmRpY2F0b3JXaWR0aCwg
JnN0eWxlT3B0aW9uKTsKLSAgICAgICAgY2hlY2tCb3hXaWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpOwotICAgICAgICBzaXplID0gUVNpemUoY2hlY2tCb3hXaWR0aCwgY2hlY2tC
b3hXaWR0aCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIFJhZGlvUGFydDogewot
ICAgICAgICBRU3R5bGVPcHRpb24gc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCByYWRpb1dpZHRoID0gc3R5
bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fRXhjbHVzaXZlSW5kaWNhdG9yV2lkdGgsICZzdHls
ZU9wdGlvbik7Ci0gICAgICAgIHJhZGlvV2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpv
b20oKTsKLSAgICAgICAgc2l6ZSA9IFFTaXplKHJhZGlvV2lkdGgsIHJhZGlvV2lkdGgpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0jaWYgIVVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgY2FzZSBQ
dXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvblBhcnQ6IHsKLSAgICAgICAgUVN0eWxlT3B0
aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBRU2l6ZSBjb250ZW50U2l6ZSA9IGZtLnNpemUoUXQ6
OlRleHRTaG93TW5lbW9uaWMsIFFTdHJpbmc6OmZyb21MYXRpbjEoIlgiKSk7Ci0gICAgICAgIFFT
aXplIHB1c2hCdXR0b25TaXplID0gc3R5bGUtPnNpemVGcm9tQ29udGVudHMoUVN0eWxlOjpDVF9Q
dXNoQnV0dG9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICZzdHlsZU9wdGlvbiwgY29udGVudFNpemUsIDApOwotICAgICAgICBzdHlsZU9w
dGlvbi5yZWN0ID0gUVJlY3QoMCwgMCwgcHVzaEJ1dHRvblNpemUud2lkdGgoKSwgcHVzaEJ1dHRv
blNpemUuaGVpZ2h0KCkpOwotICAgICAgICBRUmVjdCBsYXlvdXRSZWN0ID0gc3R5bGUtPnN1YkVs
ZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCAwKTsKLQot
ICAgICAgICAvLyBJZiB0aGUgc3R5bGUgc3VwcG9ydHMgbGF5b3V0IHJlY3RzIHdlIHVzZSB0aGF0
LCBhbmQgIGNvbXBlbnNhdGUgYWNjb3JkaW5nbHkKLSAgICAgICAgLy8gaW4gcGFpbnRCdXR0b24o
KSBiZWxvdy4KLSAgICAgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKQotICAgICAgICAgICAg
c2l6ZS5zZXRIZWlnaHQobGF5b3V0UmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHNpemUuc2V0SGVpZ2h0KHB1c2hCdXR0b25TaXplLmhlaWdodCgpKTsKLQotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBNZW51bGlzdFBhcnQ6IHsKLSAgICAgICAgUVN0eWxl
T3B0aW9uQ29tYm9Cb3ggc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9
IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCBjb250ZW50SGVpZ2h0ID0gcU1heChm
bS5saW5lU3BhY2luZygpLCAxNCkgKyAyOwotICAgICAgICBRU2l6ZSBtZW51TGlzdFNpemUgPSBz
dHlsZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGU6OkNUX0NvbWJvQm94LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIFFT
aXplKDAsIGNvbnRlbnRIZWlnaHQpLCAwKTsKLSAgICAgICAgc2l6ZS5zZXRIZWlnaHQobWVudUxp
c3RTaXplLmhlaWdodCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotI2VuZGlmCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IENoZWNrIGlzIGZs
YXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2Nv
dW50LgotICAgIGlmIChyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYm
IHNpemUud2lkdGgoKSA+IDApCi0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRNaW5XaWR0aChMZW5n
dGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgIGlmIChyZW5kZXJTdHlsZS0+aGVpZ2h0KCku
aXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCi0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRN
aW5IZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KIHZvaWQgUmVuZGVy
VGhlbWVRdDo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAg
ICBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShzdHlsZSk7CkBAIC01NTksMTE3ICsyNzQsMTEgQEAg
Ym9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFJhZGlvKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFp
bnRJbmZvJiBpLCBjb25zdCBJbnRSZWMKICAgICByZXR1cm4gcGFpbnRCdXR0b24obywgaSwgcik7
CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Ci17Ci0g
ICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KLSAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKLQotI2lm
ZGVmIFFfV1NfTUFDCi0gICAgaWYgKHN0eWxlLT5hcHBlYXJhbmNlKCkgPT0gUHVzaEJ1dHRvblBh
cnQpIHsKLSAgICAgICAgLy8gVGhlIE1hYyBwb3J0cyBpZ25vcmUgdGhlIHNwZWNpZmllZCBoZWln
aHQgZm9yIDxpbnB1dCB0eXBlPSJidXR0b24iPiBlbGVtZW50cwotICAgICAgICAvLyB1bmxlc3Mg
YSBib3JkZXIgYW5kL29yIGJhY2tncm91bmQgQ1NTIHByb3BlcnR5IGlzIGFsc28gc3BlY2lmaWVk
LgotICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGUtPmZvbnREZXNj
cmlwdGlvbigpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsK
LQotI2lmZGVmIFFfV1NfTUFDIC8vIFVzZSBmaXhlZCBmb250IHNpemUgYW5kIGZhbWlseSBvbiBN
YWMgKGxpa2UgU2FmYXJpIGRvZXMpCi0gICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNp
emUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0Q29tcHV0
ZWRTaXplKG1fYnV0dG9uRm9udFBpeGVsU2l6ZSk7Ci0jZWxzZQotICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRTcGVjaWZpZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLSAgICBmb250RGVzY3JpcHRp
b24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250U2l6ZSgpKTsKLSNlbmRpZgotCi0jaWYgIVVT
RShRVF9NT0JJTEVfVEhFTUUpCi0gICAgRm9udEZhbWlseSBmb250RmFtaWx5OwotICAgIGZvbnRG
YW1pbHkuc2V0RmFtaWx5KG1fYnV0dG9uRm9udEZhbWlseSk7Ci0gICAgZm9udERlc2NyaXB0aW9u
LnNldEZhbWlseShmb250RmFtaWx5KTsKLSAgICBzdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7Ci0gICAgc3R5bGUtPmZvbnQoKS51cGRhdGUoc2VsZWN0b3ItPmZvbnRT
ZWxlY3RvcigpKTsKLSNlbmRpZgotICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxl
Ojppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKLSAgICBz
ZXRCdXR0b25QYWRkaW5nKHN0eWxlKTsKLX0KLQogdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRCdXR0
b25TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIHsKICAgICBjb21wdXRlU2l6ZUJhc2Vk
T25TdHlsZShzdHlsZSk7CiB9CiAKLSNpZiAhVVNFKFFUX01PQklMRV9USEVNRSkKLXZvaWQgUmVu
ZGVyVGhlbWVRdDo6c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17
Ci0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9uOwotICAgIHN0eWxlT3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0KLSAgICAvLyBGYWtlIGEgYnV0dG9uIHJlY3Qg
aGVyZSwgc2luY2Ugd2UncmUganVzdCBjb21wdXRpbmcgZGVsdGFzCi0gICAgUVJlY3Qgb3JpZ2lu
YWxSZWN0ID0gUVJlY3QoMCwgMCwgMTAwLCAzMCk7Ci0gICAgc3R5bGVPcHRpb24ucmVjdCA9IG9y
aWdpbmFsUmVjdDsKLQotICAgIC8vIERlZmF1bHQgcGFkZGluZyBpcyBiYXNlZCBvbiB0aGUgYnV0
dG9uIG1hcmdpbiBwaXhlbCBtZXRyaWMKLSAgICBpbnQgYnV0dG9uTWFyZ2luID0gcVN0eWxlKCkt
PnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fQnV0dG9uTWFyZ2luLCAmc3R5bGVPcHRpb24sIDApOwot
ICAgIGludCBwYWRkaW5nTGVmdCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1JpZ2h0
ID0gYnV0dG9uTWFyZ2luOwotICAgIGludCBwYWRkaW5nVG9wID0gYnV0dG9uTWFyZ2luOwotICAg
IGludCBwYWRkaW5nQm90dG9tID0gYnV0dG9uTWFyZ2luOwotCi0gICAgLy8gVGhlbiBjaGVjayBp
ZiB0aGUgc3R5bGUgdXNlcyBsYXlvdXQgbWFyZ2lucwotICAgIFFSZWN0IGxheW91dFJlY3QgPSBx
U3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9w
dGlvbiwgMCk7Ci0gICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKSB7Ci0gICAgICAgIFFSZWN0
IGNvbnRlbnRzUmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hC
dXR0b25Db250ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0gICAgICAgIHBhZGRpbmdMZWZ0ID0gY29u
dGVudHNSZWN0LmxlZnQoKSAtIGxheW91dFJlY3QubGVmdCgpOwotICAgICAgICBwYWRkaW5nUmln
aHQgPSBsYXlvdXRSZWN0LnJpZ2h0KCkgLSBjb250ZW50c1JlY3QucmlnaHQoKTsKLSAgICAgICAg
cGFkZGluZ1RvcCA9IGNvbnRlbnRzUmVjdC50b3AoKSAtIGxheW91dFJlY3QudG9wKCk7Ci0KLSAg
ICAgICAgLy8gQ2FuJ3QgdXNlIHRoaXMgcmlnaHQgbm93IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0
aGUgYmFzZWxpbmUgdG8gY29tcGVuc2F0ZQotICAgICAgICAvLyBwYWRkaW5nQm90dG9tID0gbGF5
b3V0UmVjdC5ib3R0b20oKSAtIGNvbnRlbnRzUmVjdC5ib3R0b20oKTsKLSAgICB9Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAgICBzdHls
ZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQsIEZpeGVkKSk7Ci0gICAgc3R5
bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmdUb3AsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Ci19Ci0jZWxz
ZQotdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKiBzdHls
ZSkgY29uc3QKLXsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdMZWZ0KExlbmd0aChidXR0b25QYWRkaW5nTGVmdCwgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChidXR0b25QYWRkaW5nUmlnaHQsIEZpeGVkKSk7
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKGJ1dHRvblBhZGRpbmdUb3AsIEZpeGVk
KSk7Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKGJ1dHRvblBhZGRpbmdCb3R0
b20sIEZpeGVkKSk7Ci19Ci0jZW5kaWYKLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludEJ1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikK
LXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQot
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uQnV0dG9uIG9wdGlvbjsKLSAg
ICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnJlY3QgPSBy
OwotICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotCi0gICAgQ29udHJv
bFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwg
byk7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQgfHwgYXBwZWFyYW5jZSA9
PSBCdXR0b25QYXJ0KSB7Ci0gICAgICAgIG9wdGlvbi5yZWN0ID0gaW5mbGF0ZUJ1dHRvblJlY3Qo
b3B0aW9uLnJlY3QsIHFTdHlsZSgpKTsKLSAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNF
X1B1c2hCdXR0b24sIG9wdGlvbik7Ci0gICAgfSBlbHNlIGlmIChhcHBlYXJhbmNlID09IFJhZGlv
UGFydCkKLSAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUmFkaW9CdXR0b24sIG9wdGlv
bik7Ci0gICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBDaGVja2JveFBhcnQpCi0gICAgICAgcC5k
cmF3Q29udHJvbChRU3R5bGU6OkNFX0NoZWNrQm94LCBvcHRpb24pOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAg
IC8vIFJlc2V0dGluZyB0aGUgc3R5bGUgbGlrZSB0aGlzIGxlYWRzIHRvIGRpZmZlcmVuY2VzIGxp
a2U6CkBAIC02ODEsNDEgKzI5MCw2IEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0VGV4dEZp
ZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwKICAgICBzdHls
ZS0+cmVzZXRCb3JkZXIoKTsKICAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CiAgICAgY29tcHV0
ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOwotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAg
c3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aCh0ZXh0RmllbGRQYWRkaW5nLCBGaXhlZCkpOwot
ICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHRleHRGaWVsZFBhZGRpbmcsIEZpeGVk
KSk7Ci0jZW5kaWYKLX0KLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFRleHRGaWVsZChSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKLXsKLSAg
ICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvbkZyYW1lVjIgcGFuZWw7Ci0gICAgaW5p
dFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBwYW5lbCk7Ci0gICAgcGFuZWwucmVjdCA9IHI7Ci0gICAg
cGFuZWwubGluZVdpZHRoID0gZmluZEZyYW1lTGluZVdpZHRoKHFTdHlsZSgpKTsKLSNpZiBVU0Uo
UVRfTU9CSUxFX1RIRU1FKQotICAgIGlmIChpc1ByZXNzZWQobykpCi0gICAgICAgIHBhbmVsLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotI2Vsc2UKLSAgICBwYW5lbC5zdGF0ZSB8PSBR
U3R5bGU6OlN0YXRlX1N1bmtlbjsKLSNlbmRpZgotICAgIHBhbmVsLmZlYXR1cmVzID0gUVN0eWxl
T3B0aW9uRnJhbWVWMjo6Tm9uZTsKLQotICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRh
IGZvciBhIHRleHQgZmllbGQKLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6
ZUNvbW1vblFTdHlsZU9wdGlvbnMocGFuZWwsIG8pOwotICAgIGlmIChhcHBlYXJhbmNlICE9IFRl
eHRGaWVsZFBhcnQKLSAgICAgICAgJiYgYXBwZWFyYW5jZSAhPSBTZWFyY2hGaWVsZFBhcnQKLSAg
ICAgICAgJiYgYXBwZWFyYW5jZSAhPSBUZXh0QXJlYVBhcnQKLSAgICAgICAgJiYgYXBwZWFyYW5j
ZSAhPSBMaXN0Ym94UGFydCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBOb3cgcGFp
bnQgdGhlIHRleHQgZmllbGQuCi0gICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfUGFuZWxM
aW5lRWRpdCwgcGFuZWwpOwotICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBSZW5kZXJUaGVt
ZVF0OjphZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CkBAIC03NDIsNjYgKzMxNiwx
MyBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0U3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRQogCiAgICAgLy8gQWRkIGluIHRoZSBwYWRkaW5n
IHRoYXQgd2UnZCBsaWtlIHRvIHVzZS4KICAgICBzZXRQb3B1cFBhZGRpbmcoc3R5bGUpOwotI2lm
IFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aCht
ZW51TGlzdFBhZGRpbmcsIEZpeGVkKSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBSZW5kZXJUaGVtZVF0
OjpzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIGNvbnN0
IGludCBwYWRkaW5nTGVmdCA9IDQ7Ci0gICAgY29uc3QgaW50IHBhZGRpbmdSaWdodCA9IHN0eWxl
LT53aWR0aCgpLmlzRml4ZWQoKSB8fCBzdHlsZS0+d2lkdGgoKS5pc1BlcmNlbnQoKSA/IDUgOiA4
OwotCi0gICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQp
KTsKLQotICAgIFFTdHlsZU9wdGlvbkNvbWJvQm94IG9wdDsKLSAgICBpbnQgdyA9IHFTdHlsZSgp
LT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0J1dHRvbkljb25TaXplLCAmb3B0LCAwKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQgKyB3LCBGaXhlZCkpOwot
Ci0gICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDIsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKDIsIEZpeGVkKSk7Ci19Ci0KLQotYm9vbCBSZW5kZXJU
aGVtZVF0OjpwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIGkpOwotICAg
IGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUXRTdHlsZU9w
dGlvbldlYkNvbWJvQm94IG9wdChvKTsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9w
dCk7Ci0gICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0LCBvKTsKLQotICAgIElu
dFJlY3QgcmVjdCA9IHI7Ci0KLSNpZiBkZWZpbmVkKFFfV1NfTUFDKSAmJiAhZGVmaW5lZChRVF9O
T19TVFlMRV9NQUMpCi0gICAgLy8gUU1hY1N0eWxlIG1ha2VzIHRoZSBjb21ibyBib3hlcyBhIGxp
dHRsZSBiaXQgc21hbGxlciB0byBsZWF2ZSBzcGFjZSBmb3IgdGhlIGZvY3VzIHJlY3QuCi0gICAg
Ly8gQmVjYXVzZSBvZiBpdCwgdGhlIGNvbWJvIGJ1dHRvbiBpcyBkcmF3biBhdCBhIHBvaW50IHRv
IHRoZSBsZWZ0IG9mIHdoZXJlIGl0IHdhcyBleHBlY3QgdG8gYmUgYW5kIG1heSBlbmQgdXAKLSAg
ICAvLyBvdmVybGFwcGVkIHdpdGggdGhlIHRleHQuIFRoaXMgd2lsbCBmb3JjZSBRTWFjU3R5bGUg
dG8gZHJhdyB0aGUgY29tYm8gYm94IHdpdGggdGhlIGV4cGVjdGVkIHdpZHRoLgotICAgIGlmIChx
b2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4ocC5zdHlsZSkpCi0gICAgICAgIHJlY3QuaW5mbGF0ZVgo
Myk7Ci0jZW5kaWYKLQotICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigp
OwotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOwotICAgIG9wdC5yZWN0Lm1vdmVU
byhRUG9pbnQoMCwgMCkpOwotICAgIG9wdC5yZWN0LnNldFNpemUocmVjdC5zaXplKCkpOwotCi0g
ICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21ib0JveCwgb3B0KTsKLSAgICBw
LnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCiB2
b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7Ci0jaWYgVVNFKFFU
X01PQklMRV9USEVNRSkKLSAgICAvLyBNb2JpbGUgdGhlbWUgdXNlcyBib3JkZXIgcmFkaXVzLgot
I2Vsc2UKICAgICAvLyBXT1JLQVJPVU5EIGJlY2F1c2UgaHRtbC5jc3Mgc3BlY2lmaWVzIC13ZWJr
aXQtYm9yZGVyLXJhZGl1cyBmb3IgPHNlbGVjdD4gc28gd2Ugb3ZlcnJpZGUgaXQgaGVyZQogICAg
IC8vIHNlZSBhbHNvIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzk5
CiAgICAgc3R5bGUtPnJlc2V0Qm9yZGVyUmFkaXVzKCk7Ci0jZW5kaWYKIAogICAgIC8vIEhlaWdo
dCBpcyBsb2NrZWQgdG8gYXV0by4KICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7
CkBAIC04MTUsMjYgKzMzNiw2IEBAIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0CiAgICAgc2V0UG9w
dXBQYWRkaW5nKHN0eWxlKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lbnVMaXN0
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5
bGVQYWludGVyIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3ggb3B0aW9uKG8pOwotICAg
IGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBpbml0aWFsaXplQ29tbW9u
UVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLQotICAgIC8v
IGZvciBkcmF3aW5nIHRoZSBjb21ibyBib3ggYXJyb3csIHJlbHkgb25seSBvbiB0aGUgZmFsbGJh
Y2sgc3R5bGUKLSAgICBwLnN0eWxlID0gZmFsbGJhY2tTdHlsZSgpOwotICAgIG9wdGlvbi5zdWJD
b250cm9scyA9IFFTdHlsZTo6U0NfQ29tYm9Cb3hBcnJvdzsKLSAgICBwLmRyYXdDb21wbGV4Q29u
dHJvbChRU3R5bGU6OkNDX0NvbWJvQm94LCBvcHRpb24pOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKIGRvdWJsZSBSZW5kZXJUaGVtZVF0Ojphbmlt
YXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQ
cm9ncmVzcykgY29uc3QKIHsKQEAgLTg0NiwxMjMgKzM0NywxNyBAQCBkb3VibGUgUmVuZGVyVGhl
bWVRdDo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVz
cyogcmVuZAogICAgIHJldHVybiAwLjE7CiB9CiAKLWRvdWJsZSBSZW5kZXJUaGVtZVF0Ojphbmlt
YXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVz
cykgY29uc3QKLXsKLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0aW9uKCkgPj0gMCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyIG9wdGlvbjsK
LSAgICBvcHRpb24ucmVjdC5zZXRTaXplKHJlbmRlclByb2dyZXNzLT5zaXplKCkpOwotICAgIC8v
IEZJWE1FOiBVbnRpbCBodHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVH
LTkxNzEgaXMgZml4ZWQsCi0gICAgLy8gd2Ugc2ltdWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcg
YWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgcmV0dXJuIChvcHRpb24ucmVjdC53aWR0aCgp
IC8gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRo
LCAmb3B0aW9uKSkgKiBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKHJlbmRl
clByb2dyZXNzKTsKLX0KLQogdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0JhclN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25z
dAogewogICAgIHN0eWxlLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiB9Ci0KLWJvb2wgUmVuZGVy
VGhlbWVRdDo6cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgcGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgaWYgKCFvLT5pc1Byb2dyZXNzKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGkpOwotICAg
IGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRp
b25Qcm9ncmVzc0JhclYyIG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9w
dGlvbik7Ci0gICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLQot
ICAgIFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcyA9IHRvUmVuZGVyUHJvZ3Jlc3Mobyk7
Ci0gICAgb3B0aW9uLnJlY3QgPSByOwotICAgIG9wdGlvbi5tYXhpbXVtID0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBvcHRpb24ubWluaW11bSA9IDA7Ci0gICAgb3B0aW9u
LnByb2dyZXNzID0gKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpICogc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKSk7Ci0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHIubG9jYXRp
b24oKTsKLSAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBvcHRpb24ucmVj
dC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKLSAgICBvcHRpb24ucmVjdC5zZXRTaXplKHIuc2l6ZSgp
KTsKLQotICAgIGlmIChvcHRpb24ucHJvZ3Jlc3MgPCAwKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBV
bnRpbCBodHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMg
Zml4ZWQsCi0gICAgICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9z
cyB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgICAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJv
Z3Jlc3NCYXJHcm9vdmUsIG9wdGlvbik7Ci0gICAgICAgIGludCBjaHVua1dpZHRoID0gcVN0eWxl
KCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fUHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9u
KTsKLSAgICAgICAgUUNvbG9yIGNvbG9yID0gKG9wdGlvbi5wYWxldHRlLmhpZ2hsaWdodCgpID09
IG9wdGlvbi5wYWxldHRlLmJhY2tncm91bmQoKSkgPyBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFs
ZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxpZ2h0KSA6IG9wdGlvbi5wYWxldHRlLmNvbG9y
KFFQYWxldHRlOjpIaWdobGlnaHQpOwotICAgICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnN0eWxl
KCktPmRpcmVjdGlvbigpID09IFJUTCkKLSAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3Qo
b3B0aW9uLnJlY3QucmlnaHQoKSAtIGNodW5rV2lkdGggIC0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1h
dGlvblByb2dyZXNzKCkgKiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBvcHRp
b24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwLnBh
aW50ZXItPmZpbGxSZWN0KHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICogb3B0
aW9uLnJlY3Qud2lkdGgoKSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNv
bG9yKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dy
ZXNzQmFyLCBvcHRpb24pOwotCi0gICAgcC5wYWludGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQogI2VuZGlmCiAKLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFp
bnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAg
ICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwotICAgIGlu
aXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBvcHRpb24uc3ViQ29udHJvbHMg
PSBRU3R5bGU6OlNDX1NsaWRlckdyb292ZTsKLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0g
aW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAgICBvcHRpb24ucmVj
dCA9IHI7Ci0gICAgaWYgKGFwcGVhcmFuY2UgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQotICAgICAg
ICBvcHRpb24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgaWYgKGlzUHJlc3NlZChv
KSkKLSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotCi0gICAg
cC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7Ci0KLSAgICBp
ZiAob3B0aW9uLnN0YXRlICYgUVN0eWxlOjpTdGF0ZV9IYXNGb2N1cykgewotICAgICAgICBRU3R5
bGVPcHRpb25Gb2N1c1JlY3QgZm9jdXNPcHRpb247Ci0gICAgICAgIGZvY3VzT3B0aW9uLnJlY3Qg
PSByOwotICAgICAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9GcmFtZUZvY3VzUmVjdCwg
Zm9jdXNPcHRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBSZW5k
ZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewogICAgIHN0eWxlLT5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTbGlkZXJUaHVtYihS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXIg
cCh0aGlzLCBwaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihw
LndpZGdldCwgb3B0aW9uKTsKLSAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1Ns
aWRlckhhbmRsZTsKLSAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1v
blFTdHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0gICAgaWYg
KGFwcGVhcmFuY2UgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgIG9wdGlvbi5v
cmllbnRhdGlvbiA9IFF0OjpWZXJ0aWNhbDsKLSAgICBpZiAoaXNQcmVzc2VkKG8pKSB7Ci0gICAg
ICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVySGFuZGxlOwot
ICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47Ci0gICAgfQotCi0g
ICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7Ci0KLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0U2xpZGVyVGh1
bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJU
aHVtYlN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CkBAIC0xMDI4LDggKzQyMyw4IEBA
IGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY2FsZWQgYnV0
dG9uIHN0YXlzIHNxdWFyZSBhbmQgd2lsbCBmaXQgaW4gaXRzIHBhcmVudCdzIGJveC4KICAgICBp
bnQgY2FuY2VsQnV0dG9uU2l6ZSA9IHFNaW4oaW5wdXRDb250ZW50Qm94LndpZHRoKCksIHFNaW4o
aW5wdXRDb250ZW50Qm94LmhlaWdodCgpLCByLmhlaWdodCgpKSk7CiAgICAgLy8gQ2FsY3VsYXRl
IGNhbmNlbCBidXR0b24ncyBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgaW5wdXQgZWxlbWVu
dC4KLSAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNhbGx5LiAgUm91bmQgdXAgdGhvdWdo
LCBzbyBpZiBpdCBoYXMgdG8gYmUgb25lIHBpeGVsIG9mZi1jZW50ZXIsIGl0IHdpbGwKLSAgICAv
LyBiZSBvbmUgcGl4ZWwgY2xvc2VyIHRvIHRoZSBib3R0b20gb2YgdGhlIGZpZWxkLiAgVGhpcyB0
ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRoZSB0ZXh0LgorICAgIC8vIENlbnRlciB0aGUgYnV0
dG9uIHZlcnRpY2FsbHkuIFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQgaGFzIHRvIGJlIG9uZSBw
aXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCisgICAgLy8gYmUgb25lIHBpeGVsIGNsb3NlciB0byB0
aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gVGhpcyB0ZW5kcyB0byBsb29rIGJldHRlciB3aXRoIHRo
ZSB0ZXh0LgogICAgIEludFJlY3QgY2FuY2VsQnV0dG9uUmVjdChvLT5vZmZzZXRGcm9tQW5jZXN0
b3JDb250YWluZXIoaW5wdXRSZW5kZXJCb3gpLndpZHRoKCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlucHV0Q29udGVudEJveC55KCkgKyAoaW5wdXRDb250ZW50Qm94LmhlaWdodCgp
IC0gY2FuY2VsQnV0dG9uU2l6ZSArIDEpIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FuY2VsQnV0dG9uU2l6ZSwgY2FuY2VsQnV0dG9uU2l6ZSk7CkBAIC0xMDc4LDYwICs0NzMs
NiBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZQogICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgo
d2lkdGgsIEZpeGVkKSk7CiAgICAgc3R5bGUtPnNldE1pbldpZHRoKExlbmd0aCh3aWR0aCwgRml4
ZWQpKTsKIH0KLQotYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludElubmVyU3BpbkJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7Ci0gICAgaWYgKCFw
LmlzVmFsaWQoKSkKLSAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvblNwaW5C
b3ggb3B0aW9uOwotICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKLSAgICBv
cHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NwaW5Cb3hVcCB8IFFTdHlsZTo6U0NfU3Bp
bkJveERvd247Ci0gICAgaWYgKCFpc1JlYWRPbmx5Q29udHJvbChvKSkgewotICAgICAgICBpZiAo
aXNFbmFibGVkKG8pKQotICAgICAgICAgICAgb3B0aW9uLnN0ZXBFbmFibGVkID0gUUFic3RyYWN0
U3BpbkJveDo6U3RlcFVwRW5hYmxlZCB8IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBEb3duRW5hYmxl
ZDsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChvKSkgewotICAgICAgICAgICAgb3B0aW9uLnN0YXRl
IHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgICAgICAgICAgaWYgKGlzU3BpblVwQnV0dG9u
UGFydFByZXNzZWQobykpCi0gICAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xz
ID0gUVN0eWxlOjpTQ19TcGluQm94VXA7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgb3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94RG93bjsKLSAg
ICAgICAgfQotICAgIH0KLSAgICAvLyBSZW5kZXIgdGhlIHNwaW4gYnV0dG9ucyBmb3IgTFRSIG9y
IFJUTCBhY2NvcmRpbmdseS4KLSAgICBvcHRpb24uZGlyZWN0aW9uID0gby0+c3R5bGUoKS0+aXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpID8gUXQ6OkxlZnRUb1JpZ2h0IDogUXQ6OlJpZ2h0VG9MZWZ0
OwotCi0gICAgSW50UmVjdCBidXR0b25SZWN0ID0gcmVjdDsKLSAgICAvLyBEZWZhdWx0IHRvIG1v
dmluZyB0aGUgYnV0dG9ucyBhIGxpdHRsZSBiaXQgd2l0aGluIHRoZSBlZGl0b3IgZnJhbWUuCi0g
ICAgaW50IGluZmxhdGVYID0gLTI7Ci0gICAgaW50IGluZmxhdGVZID0gLTI7Ci0jaWYgZGVmaW5l
ZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVfTUFDKQotICAgIC8vIFFNYWNTdHls
ZSB3aWxsIHBvc2l0aW9uIHRoZSBhcXVhIGJ1dHRvbnMgZmx1c2ggdG8gdGhlIHJpZ2h0LgotICAg
IC8vIFRoaXMgd2lsbCBtb3ZlIHRoZW0gbW9yZSB3aXRoaW4gdGhlIGNvbnRyb2wgZm9yIGJldHRl
ciBzdHlsZSwgYSBsYQotICAgIC8vIENocm9taXVtIGxvb2sgJiBmZWVsLgotICAgIGlmIChxb2Jq
ZWN0X2Nhc3Q8UU1hY1N0eWxlKj4ocC5zdHlsZSkpIHsKLSAgICAgICAgaW5mbGF0ZVggPSAtNDsK
LSAgICAgICAgLy8gUmVuZGVyIG1pbmkgYXF1YSBzcGluIGJ1dHRvbnMgZm9yIFFNYWNTdHlsZSB0
byBmaXQgbmljZWx5IGludG8KLSAgICAgICAgLy8gdGhlIGVkaXRvciBhcmVhLCBsaWtlIENocm9t
aXVtLgotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9NaW5pOwotICAgIH0K
LSNlbmRpZgotI2lmIGRlZmluZWQoUV9XU19YMTEpICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX1BM
QVNUSVFVRSkKLSAgICAvLyBRUGxhc3RpcXVlU3R5bGUgbG9va3MgYmVzdCB3aGVuIHRoZSBzcGlu
IGJ1dHRvbnMgYXJlIGZsdXNoIHdpdGggdGhlIGZyYW1lJ3MgZWRnZS4KLSAgICBpZiAocW9iamVj
dF9jYXN0PFFQbGFzdGlxdWVTdHlsZSo+KHAuc3R5bGUpKSB7Ci0gICAgICAgIGluZmxhdGVYID0g
MDsKLSAgICAgICAgaW5mbGF0ZVkgPSAwOwotICAgIH0KLSNlbmRpZgotCi0gICAgYnV0dG9uUmVj
dC5pbmZsYXRlWChpbmZsYXRlWCk7Ci0gICAgYnV0dG9uUmVjdC5pbmZsYXRlWShpbmZsYXRlWSk7
Ci0gICAgb3B0aW9uLnJlY3QgPSBidXR0b25SZWN0OwotCi0gICAgcC5kcmF3Q29tcGxleENvbnRy
b2woUVN0eWxlOjpDQ19TcGluQm94LCBvcHRpb24pOwotICAgIHJldHVybiBmYWxzZTsKLX0KICNl
bmRpZgogCiBib29sIFJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQgYXBw
ZWFyYW5jZSkgY29uc3QKQEAgLTExNTUsMTEgKzQ5Niw2IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6
c3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKSBjb25zdAogCiB2b2lkIFJlbmRl
clRoZW1lUXQ6OnNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJiBwYWxl
dHRlKSBjb25zdAogewotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUpCi0gICAgc3RhdGljIFFQYWxl
dHRlIGxpZ2h0R3JheVBhbGV0dGUoUXQ6OmxpZ2h0R3JheSk7Ci0gICAgcGFsZXR0ZSA9IGxpZ2h0
R3JheVBhbGV0dGU7Ci0gICAgcmV0dXJuOwotI2VuZGlmCiAgICAgLy8gSWYgdGhlIHdlYnZpZXcg
aGFzIGEgY3VzdG9tIHBhbGV0dGUsIHVzZSBpdAogICAgIGlmICghbV9wYWdlKQogICAgICAgICBy
ZXR1cm47CkBAIC0xMTc1LDYzICs1MTEsNiBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OnNldFBhbGV0
dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJiBwYWxldHRlKSBjb25zdAogICAgIHBh
bGV0dGUgPSBwYWdlQ2xpZW50LT5wYWxldHRlKCk7CiB9CiAKLUNvbnRyb2xQYXJ0IFJlbmRlclRo
ZW1lUXQ6OmluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYgb3B0aW9u
LCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Ci17Ci0gICAgLy8gRGVmYXVsdCBiaXRzOiBubyBmb2N1
cywgbm8gbW91c2Ugb3ZlcgotICAgIG9wdGlvbi5zdGF0ZSAmPSB+KFFTdHlsZTo6U3RhdGVfSGFz
Rm9jdXMgfCBRU3R5bGU6OlN0YXRlX01vdXNlT3Zlcik7Ci0KLSAgICBpZiAoaXNSZWFkT25seUNv
bnRyb2wobykpCi0gICAgICAgIC8vIFJlYWRvbmx5IGlzIHN1cHBvcnRlZCBvbiB0ZXh0ZmllbGRz
LgotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SZWFkT25seTsKLQotICAg
IG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6TGVmdFRvUmlnaHQ7Ci0KLSAgICBpZiAoaXNIb3ZlcmVk
KG8pKQotICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7Ci0K
LSAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhvcHRpb24ucGFsZXR0ZSk7Ci0K
LSAgICBpZiAoIWlzRW5hYmxlZChvKSkgewotICAgICAgICBvcHRpb24ucGFsZXR0ZS5zZXRDdXJy
ZW50Q29sb3JHcm91cChRUGFsZXR0ZTo6RGlzYWJsZWQpOwotICAgICAgICBvcHRpb24uc3RhdGUg
Jj0gflFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKLSAgICB9Ci0KLSAgICBSZW5kZXJTdHlsZSogc3R5
bGUgPSBvLT5zdHlsZSgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiBOb0NvbnRy
b2xQYXJ0OwotCi0gICAgQ29udHJvbFBhcnQgcmVzdWx0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsK
LSAgICBpZiAoc3VwcG9ydHNGb2N1cyhyZXN1bHQpICYmIGlzRm9jdXNlZChvKSkgewotICAgICAg
ICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9IYXNGb2N1czsKLSAgICAgICAgb3B0aW9u
LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfS2V5Ym9hcmRGb2N1c0NoYW5nZTsKLSAgICB9Ci0KLSAg
ICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFdlYkNvcmU6OlJUTCkKLSAgICAgICAgb3B0aW9u
LmRpcmVjdGlvbiA9IFF0OjpSaWdodFRvTGVmdDsKLQotICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0g
ICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKLSAgICBjYXNlIFNxdWFyZUJ1dHRvblBhcnQ6Ci0gICAg
Y2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9uQmV2ZWxQYXJ0OgotICAgIGNhc2UgTGlz
dEl0ZW1QYXJ0OgotICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgotICAgIGNhc2UgU2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9u
UGFydDogewotICAgICAgICBpZiAoaXNQcmVzc2VkKG8pKQotICAgICAgICAgICAgb3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0g
UHVzaEJ1dHRvblBhcnQgfHwgcmVzdWx0ID09IEJ1dHRvblBhcnQpCi0gICAgICAgICAgICBvcHRp
b24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SYWlzZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICAgICAgb3B0
aW9uLnN0YXRlIHw9IChpc0NoZWNrZWQobykgPyBRU3R5bGU6OlN0YXRlX09uIDogUVN0eWxlOjpT
dGF0ZV9PZmYpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KICNpZiBFTkFCTEUo
VklERU8pCiAKIFN0cmluZyBSZW5kZXJUaGVtZVF0OjpleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNo
ZWV0KCkKQEAgLTEzMTEsMjAgKzU5MCwyMCBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVk
aWFGdWxsc2NyZWVuQnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJgogICAg
IGlmICghbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHlsZVBh
aW50ZXIgcCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgUVNo
YXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBwID0gZ2V0U3R5bGVQYWludGVyKHBhaW50SW5mbyk7
CisgICAgaWYgKHAuaXNOdWxsKCkgfHwgIXAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2lu
ZywgdHJ1ZSk7CisgICAgcC0+cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFs
aWFzaW5nLCB0cnVlKTsKIAotICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7
CisgICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC0+cGFpbnRlciwgcik7CiAKLSAgICBXb3JsZE1h
dHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7CisgICAgV29ybGRN
YXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zvcm1lcihwLT5wYWludGVyLCBvLCByKTsKICAgICBjb25z
dCBRUG9pbnRGIGFycm93UG9seWdvbls5XSA9IHsgUVBvaW50RigyMCwgMCksIFFQb2ludEYoMTAw
LCAwKSwgUVBvaW50RigxMDAsIDgwKSwKICAgICAgICAgICAgIFFQb2ludEYoODAsIDgwKSwgUVBv
aW50Rig4MCwgMzApLCBRUG9pbnRGKDEwLCAxMDApLCBRUG9pbnRGKDAsIDkwKSwgUVBvaW50Rig3
MCwgMjApLCBRUG9pbnRGKDIwLCAyMCl9OwogCi0gICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRN
ZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOwotICAgIHAucGFpbnRlci0+ZHJhd1BvbHln
b24oYXJyb3dQb2x5Z29uLCA5KTsKKyAgICBwLT5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNv
bnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIHAtPnBhaW50ZXItPmRyYXdQb2x5Z29uKGFy
cm93UG9seWdvbiwgOSk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMzM1LDIwICs2MTQs
MjAgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhTXV0ZUJ1dHRvbihSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnQKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZv
KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRl
cj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOworICAgIGlmIChwLmlzTnVsbCgpIHx8
ICFwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcC5wYWludGVyLT5z
ZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworICAgIHAtPnBhaW50
ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CiAKLSAgICBw
YWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworICAgIHBhaW50TWVkaWFCYWNrZ3Jv
dW5kKHAtPnBhaW50ZXIsIHIpOwogCi0gICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zv
cm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgdHJhbnNm
b3JtZXIocC0+cGFpbnRlciwgbywgcik7CiAgICAgY29uc3QgUVBvaW50RiBzcGVha2VyUG9seWdv
bls2XSA9IHsgUVBvaW50RigyMCwgMzApLCBRUG9pbnRGKDUwLCAzMCksIFFQb2ludEYoODAsIDAp
LAogICAgICAgICAgICAgUVBvaW50Rig4MCwgMTAwKSwgUVBvaW50Rig1MCwgNzApLCBRUG9pbnRG
KDIwLCA3MCl9OwogCi0gICAgcC5wYWludGVyLT5zZXRCcnVzaChtZWRpYUVsZW1lbnQtPm11dGVk
KCkgPyBRdDo6ZGFya1JlZCA6IGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7Ci0g
ICAgcC5wYWludGVyLT5kcmF3UG9seWdvbihzcGVha2VyUG9seWdvbiwgNik7CisgICAgcC0+cGFp
bnRlci0+c2V0QnJ1c2gobWVkaWFFbGVtZW50LT5tdXRlZCgpID8gUXQ6OmRhcmtSZWQgOiBnZXRN
ZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIHAtPnBhaW50ZXItPmRyYXdQb2x5
Z29uKHNwZWFrZXJQb2x5Z29uLCA2KTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTEzNTks
MjIgKzYzOCwyMiBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFQbGF5QnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludAogICAgIGlmICghbWVkaWFFbGVt
ZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBw
YWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgUVNoYXJlZFBvaW50ZXI8U3R5
bGVQYWludGVyPiBwID0gZ2V0U3R5bGVQYWludGVyKHBhaW50SW5mbyk7CisgICAgaWYgKHAuaXNO
dWxsKCkgfHwgIXAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBwLnBh
aW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisgICAg
cC0+cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsK
IAotICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisgICAgcGFpbnRNZWRp
YUJhY2tncm91bmQocC0+cGFpbnRlciwgcik7CiAKLSAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVy
IHRyYW5zZm9ybWVyKHAucGFpbnRlciwgbywgcik7Ci0gICAgcC5wYWludGVyLT5zZXRCcnVzaChn
ZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOworICAgIFdvcmxkTWF0cml4VHJhbnNm
b3JtZXIgdHJhbnNmb3JtZXIocC0+cGFpbnRlciwgbywgcik7CisgICAgcC0+cGFpbnRlci0+c2V0
QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKICAgICBpZiAobWVkaWFF
bGVtZW50LT5jYW5QbGF5KCkpIHsKICAgICAgICAgY29uc3QgUVBvaW50RiBwbGF5UG9seWdvblsz
XSA9IHsgUVBvaW50RigwLCAwKSwgUVBvaW50RigxMDAsIDUwKSwgUVBvaW50RigwLCAxMDApfTsK
LSAgICAgICAgcC5wYWludGVyLT5kcmF3UG9seWdvbihwbGF5UG9seWdvbiwgMyk7CisgICAgICAg
IHAtPnBhaW50ZXItPmRyYXdQb2x5Z29uKHBsYXlQb2x5Z29uLCAzKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KDAsIDAsIDMwLCAxMDApOwotICAgICAgICBwLnBh
aW50ZXItPmRyYXdSZWN0KDcwLCAwLCAzMCwgMTAwKTsKKyAgICAgICAgcC0+cGFpbnRlci0+ZHJh
d1JlY3QoMCwgMCwgMzAsIDEwMCk7CisgICAgICAgIHAtPnBhaW50ZXItPmRyYXdSZWN0KDcwLCAw
LCAzMCwgMTAwKTsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMzk0LDEyICs2NzMs
MTIgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2Vla0ZvcndhcmRCdXR0b24oUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwKIAogYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWlu
dE1lZGlhQ3VycmVudFRpbWUoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWlu
dEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgUVNoYXJlZFBvaW50ZXI8U3R5bGVQ
YWludGVyPiBwID0gZ2V0U3R5bGVQYWludGVyKHBhaW50SW5mbyk7CisgICAgaWYgKHAuaXNOdWxs
KCkgfHwgIXAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBwLnBhaW50
ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0gICAgcGFp
bnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKyAgICBwLT5wYWludGVyLT5zZXRSZW5k
ZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworICAgIHBhaW50TWVkaWFCYWNr
Z3JvdW5kKHAtPnBhaW50ZXIsIHIpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTQxNiwx
MyArNjk1LDEzIEBAIFN0cmluZyBSZW5kZXJUaGVtZVF0Ojpmb3JtYXRNZWRpYUNvbnRyb2xzUmVt
YWluaW5nVGltZShmbG9hdCBjdXJyZW50VGltZSwgZmxvYXQKIAogYm9vbCBSZW5kZXJUaGVtZVF0
OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0ICpvLCBjb25zdCBQYWlu
dEluZm8gJnBhaW50SW5mbywgY29uc3QgSW50UmVjdCAmcikKIHsKLSAgICBTdHlsZVBhaW50ZXIg
cCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgUVNoYXJlZFBv
aW50ZXI8U3R5bGVQYWludGVyPiBwID0gZ2V0U3R5bGVQYWludGVyKHBhaW50SW5mbyk7CisgICAg
aWYgKHAuaXNOdWxsKCkgfHwgIXAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1
ZSk7CisgICAgcC0+cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5n
LCB0cnVlKTsKIAotICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisgICAg
cGFpbnRNZWRpYUJhY2tncm91bmQocC0+cGFpbnRlciwgcik7CiAKICAgICBpZiAoIW8tPmlzU2xp
ZGVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0NDIsOCArNzIxLDggQEAgYm9vbCBS
ZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0ICpv
LCBjb25zdCBQYWludEluZm8KICAgICBjb25zdCBRQ29sb3Igc2NhbGVDb2xvcihoaWdobGlnaHRU
ZXh0LnJlZCgpLCBoaWdobGlnaHRUZXh0LmdyZWVuKCksIGhpZ2hsaWdodFRleHQuYmx1ZSgpLCBt
ZWRpYUNvbnRyb2xzQmFzZWxpbmVPcGFjaXR5KCkgKiAyNTUpOwogCiAgICAgLy8gRHJhdyB0aGUg
b3V0ZXIgcmVjdGFuZ2xlCi0gICAgcC5wYWludGVyLT5zZXRCcnVzaChzY2FsZUNvbG9yKTsKLSAg
ICBwLnBhaW50ZXItPmRyYXdSZWN0KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7CisgICAgcC0+
cGFpbnRlci0+c2V0QnJ1c2goc2NhbGVDb2xvcik7CisgICAgcC0+cGFpbnRlci0+ZHJhd1JlY3Qo
bGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIGlmICghby0+bm9kZSgpIHx8ICFvLT5u
b2RlKCktPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0x
NDU1LDE3ICs3MzQsMTcgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0ICpvLCBjb25zdCBQYWludEluZm8KICAgICB0b3AgKz0gYi5o
ZWlnaHQoKSAtIGhlaWdodDsKIAogICAgIC8vIERyYXcgdGhlIGlubmVyIHJlY3RhbmdsZQotICAg
IHAucGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7Ci0gICAgcC5wYWludGVyLT5zZXRCcnVzaChn
ZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOwotICAgIHAucGFpbnRlci0+ZHJhd1Jl
Y3QobGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBwLT5wYWludGVyLT5zZXRQZW4oUXQ6
Ok5vUGVuKTsKKyAgICBwLT5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3Jv
dW5kQ29sb3IobykpOworICAgIHAtPnBhaW50ZXItPmRyYXdSZWN0KGxlZnQsIHRvcCwgd2lkdGgs
IGhlaWdodCk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVRdDo6
cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKFJlbmRlck9iamVjdCAqbywgY29uc3QgUGFpbnRJ
bmZvICZwYWludEluZm8sIGNvbnN0IEludFJlY3QgJnIpCiB7Ci0gICAgU3R5bGVQYWludGVyIHAo
dGhpcywgcGFpbnRJbmZvKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgIFFTaGFyZWRQb2lu
dGVyPFN0eWxlUGFpbnRlcj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOworICAgIGlm
IChwLmlzTnVsbCgpIHx8ICFwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgLy8gTm90aGluZyB0byBkcmF3IGhlcmUsIHRoaXMgaXMgYWxsIGRvbmUgaW4gdGhlIHRyYWNr
CkBAIC0xNDc4LDI4ICs3NTcsMjggQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhU2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW4KICAgICBpZiAo
IW1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3R5bGVQYWludGVy
IHAodGhpcywgcGFpbnRJbmZvKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgIFFTaGFyZWRQ
b2ludGVyPFN0eWxlUGFpbnRlcj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOworICAg
IGlmIChwLmlzTnVsbCgpIHx8ICFwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRy
dWUpOworICAgIHAtPnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2lu
ZywgdHJ1ZSk7CiAKLSAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworICAg
IHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAtPnBhaW50ZXIsIHIpOwogCiAgICAgaWYgKE1lZGlhUGxh
eWVyKiBwbGF5ZXIgPSBtZWRpYUVsZW1lbnQtPnBsYXllcigpKSB7CiAgICAgICAgIC8vIEdldCB0
aGUgYnVmZmVyZWQgcGFydHMgb2YgdGhlIG1lZGlhCi0gICAgICAgIFBhc3NSZWZQdHI8VGltZVJh
bmdlcz4gYnVmZmVyZWQgPSBwbGF5ZXItPmJ1ZmZlcmVkKCk7CisgICAgICAgIFJlZlB0cjxUaW1l
UmFuZ2VzPiBidWZmZXJlZCA9IHBsYXllci0+YnVmZmVyZWQoKTsKICAgICAgICAgaWYgKGJ1ZmZl
cmVkLT5sZW5ndGgoKSA+IDAgJiYgcGxheWVyLT5kdXJhdGlvbigpIDwgc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OmluZmluaXR5KCkpIHsKICAgICAgICAgICAgIC8vIFNldCB0aGUgdHJhbnNm
b3JtIGFuZCBicnVzaAotICAgICAgICAgICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zv
cm1lcihwLnBhaW50ZXIsIG8sIHIpOwotICAgICAgICAgICAgcC5wYWludGVyLT5zZXRCcnVzaChn
ZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoKSk7CisgICAgICAgICAgICBXb3JsZE1hdHJp
eFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAtPnBhaW50ZXIsIG8sIHIpOworICAgICAgICAgICAg
cC0+cGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKCkpOwog
CiAgICAgICAgICAgICAvLyBQYWludCBlYWNoIGJ1ZmZlcmVkIHNlY3Rpb24KICAgICAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZXg7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1ZmZl
cmVkLT5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRYID0gKGJ1
ZmZlcmVkLT5zdGFydChpLCBleCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkpICogMTAwOwogICAgICAg
ICAgICAgICAgIGZsb2F0IHdpZHRoID0gKChidWZmZXJlZC0+ZW5kKGksIGV4KSAvIHBsYXllci0+
ZHVyYXRpb24oKSkgKiAxMDApIC0gc3RhcnRYOwotICAgICAgICAgICAgICAgIHAucGFpbnRlci0+
ZHJhd1JlY3Qoc3RhcnRYLCAzNywgd2lkdGgsIDI2KTsKKyAgICAgICAgICAgICAgICBwLT5wYWlu
dGVyLT5kcmF3UmVjdChzdGFydFgsIDM3LCB3aWR0aCwgMjYpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQpAQCAtMTUxNiwxNSArNzk1LDE1IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6
cGFpbnRNZWRpYVNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBw
YWluCiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkK
KyAgICBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IHAgPSBnZXRTdHlsZVBhaW50ZXIocGFp
bnRJbmZvKTsKKyAgICBpZiAocC5pc051bGwoKSB8fCAhcC0+aXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50
aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwLT5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVy
OjpBbnRpYWxpYXNpbmcsIHRydWUpOwogCi0gICAgcC5wYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVu
KTsKLSAgICBwLnBhaW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xv
cihob3N0Tm9kZS0+cmVuZGVyZXIoKSkpOwotICAgIHAucGFpbnRlci0+ZHJhd1JlY3Qoci54KCks
IHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOworICAgIHAtPnBhaW50ZXItPnNldFBlbihR
dDo6Tm9QZW4pOworICAgIHAtPnBhaW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVn
cm91bmRDb2xvcihob3N0Tm9kZS0+cmVuZGVyZXIoKSkpOworICAgIHAtPnBhaW50ZXItPmRyYXdS
ZWN0KHIueCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKIAogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTE1NDYsNDIgKzgyNSwyMiBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVz
dFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgfSBlbHNlIGlm
IChwYXJ0ID09IE1lZGlhVm9sdW1lU2xpZGVyVGh1bWJQYXJ0KSB7CiAgICAgICAgIHN0eWxlLT5z
ZXRIZWlnaHQoTGVuZ3RoKHZvbHVtZVRodW1iSGVpZ2h0LCBGaXhlZCkpOwogICAgICAgICBzdHls
ZS0+c2V0V2lkdGgoTGVuZ3RoKHZvbHVtZVRodW1iV2lkdGgsIEZpeGVkKSk7Ci0gICAgfSBlbHNl
IGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJU
aHVtYlZlcnRpY2FsUGFydCkgewotICAgICAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOwot
ICAgICAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgICAg
IG9wdGlvbi5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0aWNhbDsKLQotICAgICAgICBRU3R5bGUqIHFz
dHlsZSA9IHFTdHlsZSgpOwotCi0gICAgICAgIGludCBsZW5ndGggPSBxc3R5bGUtPnBpeGVsTWV0
cmljKFFTdHlsZTo6UE1fU2xpZGVyTGVuZ3RoLCAmb3B0aW9uKTsKLSAgICAgICAgaW50IHRoaWNr
bmVzcyA9IHFzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJUaGlja25lc3MsICZv
cHRpb24pOwotICAgICAgICBpZiAob3B0aW9uLm9yaWVudGF0aW9uID09IFF0OjpWZXJ0aWNhbCkg
ewotICAgICAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aCh0aGlja25lc3MsIEZpeGVkKSk7
Ci0gICAgICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChsZW5ndGgsIEZpeGVkKSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKGxlbmd0
aCwgRml4ZWQpKTsKLSAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKHRoaWNrbmVz
cywgRml4ZWQpKTsKLSAgICAgICAgfQogICAgIH0KIH0KIAogZG91YmxlIFJlbmRlclRoZW1lUXQ6
OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuICBRQXBwbGljYXRpb246
OmN1cnNvckZsYXNoVGltZSgpIC8gMTAwMC4wIC8gMi4wOworICAgIHJldHVybiBRQXBwbGljYXRp
b246OmN1cnNvckZsYXNoVGltZSgpIC8gMTAwMC4wIC8gMi4wOwogfQogCi1TdHJpbmcgUmVuZGVy
VGhlbWVRdDo6ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVu
YW1lcywgY29uc3QgRm9udCYgZm9udCwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxv
d2VkKQorU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZl
Y3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCkKIHsK
ICAgICBpZiAod2lkdGggPD0gMCkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgU3Ry
aW5nIHN0cmluZzsKLSAgICBpZiAoZmlsZW5hbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAo
bXVsdGlwbGVGaWxlc0FsbG93ZWQpCi0gICAgICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9G
aWxlc1NlbGVjdGVkTGFiZWwoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nID0g
ZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKLSAgICB9CisgICAgaWYgKGZpbGVuYW1l
cy5pc0VtcHR5KCkpCisgICAgICAgIHN0cmluZyA9IGZpbGVCdXR0b25Ob0ZpbGVTZWxlY3RlZExh
YmVsKCk7CiAgICAgZWxzZSBpZiAoZmlsZW5hbWVzLnNpemUoKSA9PSAxKSB7CiAgICAgICAgIFN0
cmluZyBmbmFtZSA9IGZpbGVuYW1lc1swXTsKICAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQu
Zm9udCgpKTsKQEAgLTE1OTYsNiArODU1LDQzIEBAIFN0cmluZyBSZW5kZXJUaGVtZVF0OjpmaWxl
TGlzdE5hbWVGb3JXaWR0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zCiAg
ICAgcmV0dXJuIHN0cmluZzsKIH0KIAorU3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIoUmVuZGVy
VGhlbWVRdCogdGhlbWUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQorICAgIDogcGFpbnRl
cigwKQoreworICAgIFFfVU5VU0VEKHRoZW1lKTsKKyAgICBpbml0KHBhaW50SW5mby5jb250ZXh0
ID8gcGFpbnRJbmZvLmNvbnRleHQgOiAwKTsKK30KKworU3R5bGVQYWludGVyOjpTdHlsZVBhaW50
ZXIoKQorICAgIDogcGFpbnRlcigwKQoreworfQorCit2b2lkIFN0eWxlUGFpbnRlcjo6aW5pdChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQ
YWludGVyKj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworCisgICAgaWYgKHBhaW50ZXIp
IHsKKyAgICAgICAgLy8gdGhlIHN0eWxlcyBvZnRlbiBhc3N1bWUgYmVpbmcgY2FsbGVkIHdpdGgg
YSBwcmlzdGluZSBwYWludGVyIHdoZXJlIG5vIGJydXNoIGlzIHNldCwKKyAgICAgICAgLy8gc28g
cmVzZXQgaXQgbWFudWFsbHkKKyAgICAgICAgb2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOwor
ICAgICAgICBwYWludGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7CisKKyAgICAgICAgLy8gcGFp
bnRpbmcgdGhlIHdpZGdldCB3aXRoIGFudGktYWxpYXNpbmcgd2lsbCBtYWtlIGl0IGJsdXJyeQor
ICAgICAgICAvLyBkaXNhYmxlIGl0IGhlcmUgYW5kIHJlc3RvcmUgaXQgbGF0ZXIKKyAgICAgICAg
b2xkQW50aWFsaWFzaW5nID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlh
bGlhc2luZyk7CisgICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlh
bGlhc2luZywgZmFsc2UpOworICAgIH0KK30KKworU3R5bGVQYWludGVyOjp+U3R5bGVQYWludGVy
KCkKK3sKKyAgICBpZiAocGFpbnRlcikgeworICAgICAgICBwYWludGVyLT5zZXRCcnVzaChvbGRC
cnVzaCk7CisgICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnRzKFFQYWludGVyOjpBbnRpYWxp
YXNpbmcsIG9sZEFudGlhbGlhc2luZyk7CisgICAgfQorfQorCiB9CiAKIC8vIHZpbTogdHM9NCBz
dz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgKaW5kZXgg
N2M3ZTY2ZjgwMjM5NTkxYzViYzIzYTE5OTRkZWQ3ZmZlNWI1YjViZS4uZWM1MWEzZjgyZjc4OTQx
ZjU4ZmNjZTcwMDZlZmU3N2FlODU1Nzk1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUXQuaApAQCAtMjQsMTIgKzI0LDEyIEBACiAKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgogCi0jaW5jbHVkZSA8UVN0eWxlPgorI2luY2x1ZGUgPFFCcnVzaD4KKyNpbmNsdWRl
IDxRU2hhcmVkUG9pbnRlcj4KKyNpbmNsdWRlIDxRU3RyaW5nPgogCiBRVF9CRUdJTl9OQU1FU1BB
Q0UKLWNsYXNzIFFMaW5lRWRpdDsKIGNsYXNzIFFQYWludGVyOwotY2xhc3MgUVdpZGdldDsKIFFU
X0VORF9OQU1FU1BBQ0UKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksMjIgKzM5LDE5IEBA
IGNsYXNzIFJlbmRlclByb2dyZXNzOwogI2VuZGlmCiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNz
IEhUTUxNZWRpYUVsZW1lbnQ7Ci1jbGFzcyBTY3JvbGxiYXJUaGVtZVF0OworY2xhc3MgU3R5bGVQ
YWludGVyOwogCiBjbGFzcyBSZW5kZXJUaGVtZVF0IDogcHVibGljIFJlbmRlclRoZW1lIHsKLXBy
aXZhdGU6Ci0gICAgUmVuZGVyVGhlbWVRdChQYWdlKiBwYWdlKTsKLSAgICB2aXJ0dWFsIH5SZW5k
ZXJUaGVtZVF0KCk7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZW5kZXJUaGVt
ZT4gY3JlYXRlKFBhZ2UqKTsKKyAgICBSZW5kZXJUaGVtZVF0KFBhZ2UqKTsKIAogICAgIFN0cmlu
ZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNI
b3Zlcihjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0
c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0OworICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0OwogCi0gICAg
dmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0
OworICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oY29uc3QgUmVuZGVyT2JqZWN0Kikg
Y29uc3Q7CiAKICAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBp
dHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KICAgICB2aXJ0dWFsIGJv
b2wgY29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0KikgY29uc3Q7CkBAIC02
Miw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICAvLyBBIGdlbmVyYWwgbWV0aG9kIGFza2luZyBpZiBh
bnkgY29udHJvbCB0aW50aW5nIGlzIHN1cHBvcnRlZCBhdCBhbGwuCiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzQ29udHJvbFRpbnRzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0
UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiBvLCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0KiwgSW50UmVjdCYp
OwogCiAgICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KICAgICB2aXJ0dWFsIENv
bG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CkBAIC04
MSw0OSArNzgsMzggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBkb3VibGUgY2FyZXRCbGlua0lu
dGVydmFsKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250cm9sU3R5bGVkKGNvbnN0
IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYsIGNvbnN0IEZpbGxMYXllciYsIGNvbnN0
IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwotI2lmIFVTRShRVF9NT0JJTEVfVEhFTUUp
Ci0gICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUq
KSBjb25zdDsKLSNlbmRpZgorICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3Qg
UmVuZGVyU3R5bGUqLCBjb25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3Qg
Q29sb3ImKSBjb25zdDsKIAogI2lmIEVOQUJMRShWSURFTykKICAgICB2aXJ0dWFsIFN0cmluZyBl
eHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCk7CiAjZW5kaWYKIAotICAgIFFTdHlsZSogcVN0
eWxlKCkgY29uc3Q7Ci0KIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDaGVja2Jv
eChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7
CisgICAgdmlydHVhbCBib29sIHBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDaGVja2JveFNp
emUoUmVuZGVyU3R5bGUqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludFJhZGlvKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldFJhZGlvU2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRCdXR0b25TaXplKFJlbmRlclN0eWxlKikg
Y29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3Qq
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFRleHRBcmVhU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVu
dCopIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3QoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOwogICAgIHZpcnR1YWwg
dm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0QnV0dG9u
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwg
UmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfVEFH
KQogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jik7CisgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRp
b24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVw
ZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OwogI2VuZGlm
CiAKLSAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNs
aWRlclRyYWNrU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBh
ZGp1c3RTbGlkZXJUaHVtYlN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKQEAgLTE0MCwxNCAr
MTI2LDYgQEAgcHJvdGVjdGVkOgogCiAjaWZuZGVmIFFUX05PX1NQSU5CT1gKICAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludElubmVyU3Bp
bkJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgLy8gUmV0dXJucyB0aGUg
cmVwZWF0IGludGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0g
ICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0OwotICAgIC8vIFJldHVybnMgdGhl
IGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgdmly
dHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVz
cyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCkBA
IC0xNjQsNjkgKzE0Miw1MCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0
TWVkaWFDb250cm9sc0N1cnJlbnRUaW1lKGZsb2F0IGN1cnJlbnRUaW1lLCBmbG9hdCBkdXJhdGlv
bikgY29uc3Q7CiAgICAgdmlydHVhbCBTdHJpbmcgZm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmlu
Z1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgaGFzT3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0KSBjb25z
dCB7IHJldHVybiB0cnVlOyB9Ci1wcml2YXRlOgogCi0gICAgdm9pZCBwYWludE1lZGlhQmFja2dy
b3VuZChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgSW50UmVjdCYgcikgY29uc3Q7CisgICAgdm9p
ZCBwYWludE1lZGlhQmFja2dyb3VuZChRUGFpbnRlciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsK
ICAgICBkb3VibGUgbWVkaWFDb250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpIGNvbnN0OwotICAgIFFD
b2xvciBnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoUmVuZGVyT2JqZWN0KiBvID0gMCkg
Y29uc3Q7CisgICAgUUNvbG9yIGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJP
YmplY3QqID0gMCkgY29uc3Q7CiAjZW5kaWYKLSAgICB2b2lkIGNvbXB1dGVTaXplQmFzZWRPblN0
eWxlKFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNv
bXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKikgY29uc3QgPSAwOwogCi1wcml2YXRl
OgotICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVG
aWxlc0FsbG93ZWQpOwotCi0gICAgYm9vbCBzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0KSBjb25z
dDsKKyAgICB2aXJ0dWFsIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBGb250JiwgaW50IHdpZHRoKTsKIAotICAgIENvbnRy
b2xQYXJ0IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKFFTdHlsZU9wdGlvbiYsIFJlbmRl
ck9iamVjdCopIGNvbnN0OwotCi0gICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxl
KikgY29uc3Q7Ci0gICAgdm9pZCBzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFFSZWN0IGluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5h
bFJlY3QpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0
cyhRUGFsZXR0ZSYpIGNvbnN0OwogCi0gICAgaW50IGZpbmRGcmFtZUxpbmVXaWR0aChRU3R5bGUq
IHN0eWxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UG9wdXBQYWRkaW5nKFJlbmRlclN0
eWxlKikgY29uc3QgPSAwOwogCi0gICAgUVN0eWxlKiBmYWxsYmFja1N0eWxlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IGdldFN0eWxlUGFpbnRlcihj
b25zdCBQYWludEluZm8mKSA9IDA7CisKKyAgICBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBh
cnQpIGNvbnN0OwogCiAgICAgSW50UmVjdCBjb252ZXJ0VG9QYWludGluZ1JlY3QoUmVuZGVyT2Jq
ZWN0KiBpbnB1dFJlbmRlcmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIHBhcnRSZW5kZXJlciwgSW50
UmVjdCBwYXJ0UmVjdCwgY29uc3QgSW50UmVjdCYgbG9jYWxPZmZzZXQpIGNvbnN0OwogCiAgICAg
UGFnZSogbV9wYWdlOwogCi0jaWZkZWYgUV9XU19NQUMKLSAgICBpbnQgbV9idXR0b25Gb250UGl4
ZWxTaXplOwotI2VuZGlmCiAgICAgUVN0cmluZyBtX2J1dHRvbkZvbnRGYW1pbHk7CiAKLSAgICBR
U3R5bGUqIG1fZmFsbGJhY2tTdHlsZTsKLSAgICBtdXRhYmxlIFFMaW5lRWRpdCogbV9saW5lRWRp
dDsKIH07CiAKIGNsYXNzIFN0eWxlUGFpbnRlciB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU3R5
bGVQYWludGVyKFJlbmRlclRoZW1lUXQqLCBjb25zdCBQYWludEluZm8mKTsKLSAgICBleHBsaWNp
dCBTdHlsZVBhaW50ZXIoU2Nyb2xsYmFyVGhlbWVRdCosIEdyYXBoaWNzQ29udGV4dCopOwotICAg
IH5TdHlsZVBhaW50ZXIoKTsKKyAgICB2aXJ0dWFsIH5TdHlsZVBhaW50ZXIoKTsKIAotICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIHBhaW50ZXIgJiYgc3R5bGU7IH0KKyAgICBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBwYWludGVyOyB9CiAKICAgICBRUGFpbnRlciogcGFp
bnRlcjsKLSAgICBRV2lkZ2V0KiB3aWRnZXQ7Ci0gICAgUVN0eWxlKiBzdHlsZTsKIAotICAgIHZv
aWQgZHJhd1ByaW1pdGl2ZShRU3R5bGU6OlByaW1pdGl2ZUVsZW1lbnQgcGUsIGNvbnN0IFFTdHls
ZU9wdGlvbiYgb3B0KQotICAgIHsgc3R5bGUtPmRyYXdQcmltaXRpdmUocGUsICZvcHQsIHBhaW50
ZXIsIHdpZGdldCk7IH0KLSAgICB2b2lkIGRyYXdDb250cm9sKFFTdHlsZTo6Q29udHJvbEVsZW1l
bnQgY2UsIGNvbnN0IFFTdHlsZU9wdGlvbiYgb3B0KQotICAgIHsgc3R5bGUtPmRyYXdDb250cm9s
KGNlLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOyB9Ci0gICAgdm9pZCBkcmF3Q29tcGxleENvbnRy
b2woUVN0eWxlOjpDb21wbGV4Q29udHJvbCBjYywgY29uc3QgUVN0eWxlT3B0aW9uQ29tcGxleCYg
b3B0KQotICAgIHsgc3R5bGUtPmRyYXdDb21wbGV4Q29udHJvbChjYywgJm9wdCwgcGFpbnRlciwg
d2lkZ2V0KTsgfQorcHJvdGVjdGVkOgorICAgIFN0eWxlUGFpbnRlcihSZW5kZXJUaGVtZVF0Kiwg
Y29uc3QgUGFpbnRJbmZvJik7CisgICAgU3R5bGVQYWludGVyKCk7CisgICAgdm9pZCBpbml0KEdy
YXBoaWNzQ29udGV4dCopOwogCiBwcml2YXRlOgotICAgIHZvaWQgaW5pdChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIFFTdHlsZSopOwotCiAgICAgUUJydXNoIG9sZEJydXNoOwogICAgIGJvb2wg
b2xkQW50aWFsaWFzaW5nOwogCi0gICAgUV9ESVNBQkxFX0NPUFkoU3R5bGVQYWludGVyKQogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dE1vYmlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9i
aWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lOTNmNjRiM2NlMjdjOWUzNTk4YTk4OTNjMDA5MjNmOTliZTg3
Mzc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVy
VGhlbWVRdE1vYmlsZS5jcHAKQEAgLTAsMCArMSw2NjYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lUXRNb2JpbGUuaCIKKworI2luY2x1ZGUg
IkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisj
aW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdz
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVkZSAiUGFzc1JlZlB0ci5oIgorI2luY2x1ZGUgIlFX
ZWJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaWYgRU5BQkxFKFBST0dS
RVNTX1RBRykKKyNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgorI2VuZGlmCisjaWYgSEFWRShR
U1RZTEUpCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRU3R5bGUuaCIKKyNlbmRpZgorCisjaW5jbHVk
ZSA8UUNvbG9yPgorI2luY2x1ZGUgPFFGaWxlPgorI2luY2x1ZGUgPFFGb250TWV0cmljcz4KKyNp
bmNsdWRlIDxRUGFpbnRlcj4KKyNpbmNsdWRlIDxRUGl4bWFwQ2FjaGU+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworLy8gQ29uc3RhbnRzIGV4
dHJhY3RlZCBmcm9tIFFDb21tb25TdHlsZSBhbmQgUVdpbmRvd3NTdHlsZQorc3RhdGljIGNvbnN0
IGludCBhcnJvd0JveFdpZHRoID0gMTY7CitzdGF0aWMgY29uc3QgaW50IGZyYW1lV2lkdGggPSAy
Oworc3RhdGljIGNvbnN0IGludCBjaGVja0JveFdpZHRoID0gMTM7CitzdGF0aWMgY29uc3QgaW50
IHJhZGlvV2lkdGggPSAxMjsKK3N0YXRpYyBjb25zdCBpbnQgYnV0dG9uSWNvblNpemUgPSAxNjsK
K3N0YXRpYyBjb25zdCBpbnQgc2xpZGVyV2lkdGggPSAxMTsKK3N0YXRpYyBjb25zdCBpbnQgc2xp
ZGVySGVpZ2h0ID0gMDsKKworLy8gT3RoZXIgY29uc3RhbnRzIHVzZWQgYnkgdGhlIG1vYmlsZSB0
aGVtZQorc3RhdGljIGZsb2F0IGJ1dHRvblBhZGRpbmdMZWZ0ID0gMTg7CitzdGF0aWMgZmxvYXQg
YnV0dG9uUGFkZGluZ1JpZ2h0ID0gMTg7CitzdGF0aWMgZmxvYXQgYnV0dG9uUGFkZGluZ1RvcCA9
IDI7CitzdGF0aWMgZmxvYXQgYnV0dG9uUGFkZGluZ0JvdHRvbSA9IDM7CitzdGF0aWMgZmxvYXQg
bWVudUxpc3RQYWRkaW5nID0gOTsKK3N0YXRpYyBmbG9hdCB0ZXh0RmllbGRQYWRkaW5nID0gNTsK
KworCitzdGF0aWMgaW5saW5lIHZvaWQgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQo
UVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNv
bnN0IFFCcnVzaCYgYnJ1c2gpCit7CisgICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5wZW4oKTsK
KyAgICBRQnJ1c2ggb2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOworICAgIHBhaW50ZXItPnNl
dFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisgICAgcGFpbnRlci0+
c2V0UGVuKHBlbik7CisgICAgcGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gpOworCisgICAgaW50IGxp
bmUgPSAxOworICAgIHBhaW50ZXItPmRyYXdSb3VuZGVkUmVjdChyZWN0LmFkanVzdGVkKGxpbmUs
IGxpbmUsIC1saW5lLCAtbGluZSksCisgICAgICAgICAgICAvKiB4UmFkaXVzICovIDUuMCwgLyog
eVJhZGlvdXMgKi8gNS4wKTsKKyAgICBwYWludGVyLT5zZXRQZW4ob2xkUGVuKTsKKyAgICBwYWlu
dGVyLT5zZXRCcnVzaChvbGRCcnVzaCk7Cit9CisKK1FTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRl
cj4gUmVuZGVyVGhlbWVRdE1vYmlsZTo6Z2V0U3R5bGVQYWludGVyKGNvbnN0IFBhaW50SW5mbyYg
cGkpCit7CisgICAgcmV0dXJuIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4obmV3IFN0eWxl
UGFpbnRlck1vYmlsZSh0aGlzLCBwaSkpOworfQorCitTdHlsZVBhaW50ZXJNb2JpbGU6OlN0eWxl
UGFpbnRlck1vYmlsZShSZW5kZXJUaGVtZVF0TW9iaWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8pCisgICAgOiBTdHlsZVBhaW50ZXIodGhlbWUsIHBhaW50SW5mbykKK3sKK30K
Kwordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdDaGVja2VyKFFQYWludGVyKiBwYWludGVy
LCBpbnQgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAoreworICAgIGludCBib3JkZXIgPSBxTWlu
KHFNYXgoMSwgaW50KDAuMiAqIHNpemUpKSwgNik7CisgICAgaW50IGNoZWNrZXJTaXplID0gcU1h
eChzaXplIC0gMiAqIGJvcmRlciwgMyk7CisgICAgaW50IHdpZHRoID0gY2hlY2tlclNpemUgLyAz
OworICAgIGludCBtaWRkbGUgPSBxTWF4KDMgKiBjaGVja2VyU2l6ZSAvIDcsIDMpOworICAgIGlu
dCB4ID0gKChzaXplIC0gY2hlY2tlclNpemUpID4+IDEpOworICAgIGludCB5ID0gKChzaXplIC0g
Y2hlY2tlclNpemUpID4+IDEpICsgKGNoZWNrZXJTaXplIC0gd2lkdGggLSBtaWRkbGUpOworICAg
IFFWZWN0b3I8UUxpbmVGPiBsaW5lcyhjaGVja2VyU2l6ZSArIDEpOworICAgIHBhaW50ZXItPnNl
dFBlbihjb2xvcik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtaWRkbGU7ICsraSkgeworICAg
ICAgICBsaW5lc1tpXSA9IFFMaW5lRih4LCB5LCB4LCB5ICsgd2lkdGgpOworICAgICAgICArK3g7
CisgICAgICAgICsreTsKKyAgICB9CisgICAgZm9yIChpbnQgaSA9IG1pZGRsZTsgaSA8PSBjaGVj
a2VyU2l6ZTsgKytpKSB7CisgICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgsIHksIHgsIHkgKyB3
aWR0aCk7CisgICAgICAgICsreDsKKyAgICAgICAgLS15OworICAgIH0KKyAgICBwYWludGVyLT5k
cmF3TGluZXMobGluZXMuY29uc3REYXRhKCksIGxpbmVzLnNpemUoKSk7Cit9CisKK1FQaXhtYXAg
U3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2hlY2tlcihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBk
aXNhYmxlZCkgY29uc3QKK3sKKyAgICBpbnQgc2l6ZSA9IHFNaW4ocmVjdC53aWR0aCgpLCByZWN0
LmhlaWdodCgpKTsKKyAgICBRUGl4bWFwIHJlc3VsdDsKKyAgICBzdGF0aWMgY29uc3QgUVN0cmlu
ZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFlbW81LW1vYmlsZS10aGVtZS1jaGVja2Vy
LSIpOworICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6bnVtYmVyKHNpemUpICsg
UUxhdGluMVN0cmluZygiLSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQi
KSA6IFFMYXRpbjFTdHJpbmcoImVuYWJsZWQiKSk7CisgICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZp
bmQoa2V5LCByZXN1bHQpKSB7CisgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSwgc2l6ZSk7
CisgICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFuc3BhcmVudCk7CisgICAgICAgIFFQYWludGVy
IHBhaW50ZXIoJnJlc3VsdCk7CisgICAgICAgIGRyYXdDaGVja2VyKCZwYWludGVyLCBzaXplLCBk
aXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOworICAgICAgICBRUGl4bWFw
Q2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIs
IGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIFFDb2xvciBjb2xvcikgY29uc3QKK3sK
KyAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUp
OworCisgICAgLy8gZ2V0IG1pbm9yIHNpemUgdG8gZG8gbm90IHBhaW50IGEgd2lkZSBlbGlwc2UK
KyAgICBxcmVhbCBzcXVhcmVTaXplID0gcU1pbihzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OworICAgIC8vIGRlZmxhdGUgb25lIHBpeGVsCisgICAgUVJlY3QgcmVjdCA9IFFSZWN0KFFQb2lu
dCgxLCAxKSwgUVNpemUoc3F1YXJlU2l6ZSAtIDIsIHNxdWFyZVNpemUgLSAyKSk7CisgICAgY29u
c3QgUVBvaW50IGNlbnRlckdyYWRpZW50KHJlY3QuYm90dG9tUmlnaHQoKSAqIDAuNyk7CisKKyAg
ICBRUmFkaWFsR3JhZGllbnQgcmFkaWFsR3JhZGllbnQoY2VudGVyR3JhZGllbnQsIGNlbnRlckdy
YWRpZW50LngoKSAtIDEpOworICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6
d2hpdGUpOworICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC42LCBRdDo6d2hpdGUpOwor
ICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBjb2xvcik7CisKKyAgICBwYWludGVy
LT5zZXRQZW4oY29sb3IpOworICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKKyAgICBwYWlu
dGVyLT5kcmF3RWxsaXBzZShyZWN0KTsKKyAgICBwYWludGVyLT5zZXRCcnVzaChyYWRpYWxHcmFk
aWVudCk7CisgICAgcGFpbnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7CisKKyAgICBpbnQgYm9yZGVy
ID0gMC4xICogKHJlY3Qud2lkdGgoKSArIHJlY3QuaGVpZ2h0KCkpOworICAgIGJvcmRlciA9IHFN
aW4ocU1heCgyLCBib3JkZXIpLCAxMCk7CisgICAgcmVjdC5hZGp1c3QoYm9yZGVyLCBib3JkZXIs
IC1ib3JkZXIsIC1ib3JkZXIpOworICAgIGlmIChjaGVja2VkKSB7CisgICAgICAgIHBhaW50ZXIt
PnNldFBlbihRdDo6Tm9QZW4pOworICAgICAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Cisg
ICAgICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOworICAgIH0KK30KKworUVBpeG1hcCBT
dHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyhjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBjaGVj
a2VkLCBib29sIGRpc2FibGVkKSBjb25zdAoreworICAgIFFQaXhtYXAgcmVzdWx0OworICAgIHN0
YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUtbW9i
aWxlLXRoZW1lLXJhZGlvLSIpOworICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgUVN0cmluZzo6
bnVtYmVyKHNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1i
ZXIoc2l6ZS5oZWlnaHQoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikKKyAgICAgICAgKyAoZGlzYWJs
ZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIp
KSArIChjaGVja2VkID8gUUxhdGluMVN0cmluZygiLWNoZWNrZWQiKSA6IFFMYXRpbjFTdHJpbmco
IiIpKTsKKyAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKKyAgICAg
ICAgcmVzdWx0ID0gUVBpeG1hcChzaXplKTsKKyAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5z
cGFyZW50KTsKKyAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0KTsKKyAgICAgICAgZHJh
d1JhZGlvKCZwYWludGVyLCBzaXplLCBjaGVja2VkLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkg
OiBRdDo6ZGFya0dyYXkpOworICAgICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3Vs
dCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyTW9i
aWxlOjpkcmF3TXVsdGlwbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNp
emUmIHNpemUsIFFDb2xvciBjb2xvcikgY29uc3QKK3sKKyAgICBpbnQgcmVjdFdpZHRoID0gc2l6
ZS53aWR0aCgpIC0gMTsKKyAgICBpbnQgd2lkdGggPSBxTWF4KDIsIHJlY3RXaWR0aCA+PiAzKTsK
KyAgICBpbnQgZGlzdGFuY2UgPSAocmVjdFdpZHRoIC0gMyAqIHdpZHRoKSA+PiAxOworICAgIGlu
dCB0b3AgPSAoc2l6ZS5oZWlnaHQoKSAtIHdpZHRoKSA+PiAxOworCisgICAgcGFpbnRlci0+c2V0
UGVuKGNvbG9yKTsKKyAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7CisKKyAgICBwYWludGVy
LT5kcmF3UmVjdCgwLCB0b3AsIHdpZHRoLCB3aWR0aCk7CisgICAgcGFpbnRlci0+ZHJhd1JlY3Qo
d2lkdGggKyBkaXN0YW5jZSwgdG9wLCB3aWR0aCwgd2lkdGgpOworICAgIHBhaW50ZXItPmRyYXdS
ZWN0KDIgKiAod2lkdGggKyBkaXN0YW5jZSksIHRvcCwgd2lkdGgsIHdpZHRoKTsKK30KKwordm9p
ZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdTaW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciogcGFp
bnRlciwgY29uc3QgUVNpemUmIHNpemUsIFFDb2xvciBjb2xvcikgY29uc3QKK3sKKyAgICBpbnQg
d2lkdGggPSBzaXplLndpZHRoKCk7CisgICAgaW50IG1pZGxlID0gd2lkdGggPj4gMTsKKyAgICBR
VmVjdG9yPFFMaW5lPiBsaW5lcyh3aWR0aCArIDEpOworCisgICAgZm9yIChpbnQgeCA9IDAsIHkg
PSAwOyAgeCA8IG1pZGxlOyB4KyssIHkrKykgeworICAgICAgICBsaW5lc1t4XSA9IFFMaW5lKHgs
IHksIHgsIHkgKyAyKTsKKyAgICAgICAgbGluZXNbeCArIG1pZGxlXSA9IFFMaW5lKHdpZHRoIC0g
eCAtIDEsIHksIHdpZHRoIC0geCAtIDEsIHkgKyAyKTsKKyAgICB9CisgICAgLy8gSnVzdCB0byBl
bnN1cmUgdGhlIGxpbmVzJyBpbnRlcnNlY3Rpb24uCisgICAgbGluZXNbd2lkdGhdID0gUUxpbmUo
bWlkbGUsIG1pZGxlLCBtaWRsZSwgbWlkbGUgKyAyKTsKKworICAgIHBhaW50ZXItPnNldFBlbihj
b2xvcik7CisgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOworICAgIHBhaW50ZXItPmRyYXdM
aW5lcyhsaW5lcyk7Cit9CisKK1FTaXplIFN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1h
Z2VTaXplKGNvbnN0IFFTaXplJiBidXR0b25TaXplKSBjb25zdAoreworICAgIGNvbnN0IGludCBi
b3JkZXIgPSBxTWF4KDMsIGJ1dHRvblNpemUud2lkdGgoKSA+PiAzKSA8PCAxOworCisgICAgaW50
IHdpZHRoID0gYnV0dG9uU2l6ZS53aWR0aCgpIC0gYm9yZGVyOworICAgIGludCBoZWlnaHQgPSBi
dXR0b25TaXplLmhlaWdodCgpIC0gYm9yZGVyOworCisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWln
aHQgPCAwKQorICAgICAgICByZXR1cm4gUVNpemUoKTsKKworICAgIGlmIChoZWlnaHQgPj0gKHdp
ZHRoID4+IDEpKQorICAgICAgICB3aWR0aCA9IHdpZHRoID4+IDEgPDwgMTsKKyAgICBlbHNlCisg
ICAgICAgIHdpZHRoID0gaGVpZ2h0IDw8IDE7CisKKyAgICByZXR1cm4gUVNpemUod2lkdGggKyAx
LCB3aWR0aCk7Cit9CisKK1FQaXhtYXAgU3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ29tYm9CdXR0
b24oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZGlzYWJsZWQpIGNvbnN0
Cit7CisgICAgUVBpeG1hcCByZXN1bHQ7CisgICAgUVNpemUgaW1hZ2VTaXplID0gZ2V0QnV0dG9u
SW1hZ2VTaXplKHNpemUpOworCisgICAgaWYgKGltYWdlU2l6ZS5pc051bGwoKSkKKyAgICAgICAg
cmV0dXJuIFFQaXhtYXAoKTsKKyAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0
aW4xU3RyaW5nKCIkcXQtbWFlbW81LW1vYmlsZS10aGVtZS1jb21iby0iKTsKKyAgICBRU3RyaW5n
IGtleSA9IHByZWZpeCArIChtdWx0aXBsZSA/IFFMYXRpbjFTdHJpbmcoIm11bHRpcGxlLSIpIDog
UUxhdGluMVN0cmluZygic2ltcGxlLSIpKQorICAgICAgICArIFFTdHJpbmc6Om51bWJlcihpbWFn
ZVNpemUud2lkdGgoKSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyBRU3RyaW5nOjpudW1iZXIoaW1h
Z2VTaXplLmhlaWdodCgpKQorICAgICAgICArIFFMYXRpbjFTdHJpbmcoIi0iKSArIChkaXNhYmxl
ZCA/IFFMYXRpbjFTdHJpbmcoImRpc2FibGVkIikgOiBRTGF0aW4xU3RyaW5nKCJlbmFibGVkIikp
OworICAgIGlmICghUVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgICAgICBy
ZXN1bHQgPSBRUGl4bWFwKGltYWdlU2l6ZSk7CisgICAgICAgIHJlc3VsdC5maWxsKFF0Ojp0cmFu
c3BhcmVudCk7CisgICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7CisgICAgICAgIGlm
IChtdWx0aXBsZSkKKyAgICAgICAgICAgIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKCZwYWludGVy
LCBpbWFnZVNpemUsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRyYXdTaW1wbGVDb21ib0J1dHRvbigmcGFpbnRlciwg
aW1hZ2VTaXplLCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOworICAg
ICAgICBRUGl4bWFwQ2FjaGU6Omluc2VydChrZXksIHJlc3VsdCk7CisgICAgfQorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3TGluZUVkaXQoY29u
c3QgUVJlY3QmIHJlY3QsIGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQpCit7CisgICAgUVBlbiBw
ZW4oUXQ6OmRhcmtHcmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJv
dW5kSm9pbik7CisgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7CisKKyAgICBpZiAoc3Vua2VuKSB7
CisgICAgICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwg
cmVjdCwgUUJydXNoKFF0OjpkYXJrR3JheSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50OworICAgIGlmICghZW5hYmxlZCkgewor
ICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LnRvcExlZnQoKSk7CisgICAgICAg
IGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChyZWN0LmJvdHRvbUxlZnQoKSk7CisgICAgICAg
IGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6bGlnaHRHcmF5KTsKKyAgICAgICAg
bGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC50b3BMZWZ0KCkpOworICAgICAg
ICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QudG9wTGVmdCgpLngoKSwK
KyAgICAgICAgICAgICAgICAgICAgcmVjdC50b3BMZWZ0KCkueSgpICsgLyogb2Zmc2V0IGxpbWl0
IGZvciBncmFkaWVudCAqLyAyMCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0
KDAuMCwgUXQ6OmRhcmtHcmF5KTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgw
LjM1LCBRdDo6d2hpdGUpOworICAgIH0KKworICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNr
Z3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgbGluZWFyR3JhZGllbnQpOworfQorCit2b2lkIFN0
eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0NoZWNrQm94KGNvbnN0IFFSZWN0JiByZWN0LCBib29sIGNo
ZWNrZWQsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBRTGluZWFyR3JhZGllbnQgbGluZWFyR3JhZGll
bnQocmVjdC50b3BMZWZ0KCksIHJlY3QuYm90dG9tTGVmdCgpKTsKKyAgICBpZiAoIWVuYWJsZWQp
IHsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpsaWdodEdyYXkp
OworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRlKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmRh
cmtHcmF5KTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjUsIFF0Ojp3aGl0
ZSk7CisgICAgfQorCisgICAgcGFpbnRlci0+c2V0UGVuKFFQZW4oZW5hYmxlZCA/IFF0OjpkYXJr
R3JheSA6IFF0OjpsaWdodEdyYXkpKTsKKyAgICBwYWludGVyLT5zZXRCcnVzaChsaW5lYXJHcmFk
aWVudCk7CisgICAgcGFpbnRlci0+ZHJhd1JlY3QocmVjdCk7CisgICAgY29uc3QgUVJlY3QgciA9
IHJlY3QuYWRqdXN0ZWQoMSwgMSwgLTEsIC0xKTsKKworICAgIGlmICghY2hlY2tlZCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUVBpeG1hcCBjaGVja2VyID0gZmluZENoZWNrZXIociwgIWVuYWJs
ZWQpOworICAgIGlmIChjaGVja2VyLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
bnQgeCA9IChyLndpZHRoKCkgLSBjaGVja2VyLndpZHRoKCkpID4+IDE7CisgICAgaW50IHkgPSAo
ci5oZWlnaHQoKSAtIGNoZWNrZXIuaGVpZ2h0KCkpID4+IDE7CisgICAgcGFpbnRlci0+ZHJhd1Bp
eG1hcChyLngoKSArIHgsIHIueSgpICsgeSwgY2hlY2tlcik7Cit9CisKK3ZvaWQgU3R5bGVQYWlu
dGVyTW9iaWxlOjpkcmF3UmFkaW9CdXR0b24oY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hlY2tl
ZCwgYm9vbCBlbmFibGVkKQoreworICAgIFFQaXhtYXAgcmFkaW8gPSBmaW5kUmFkaW8ocmVjdC5z
aXplKCksIGNoZWNrZWQsICFlbmFibGVkKTsKKyAgICBpZiAocmFkaW8uaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHJlY3QueCgpLCByZWN0LnkoKSwg
cmFkaW8pOworfQorCit2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1B1c2hCdXR0b24oY29u
c3QgUVJlY3QmIHJlY3QsIGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQpCit7CisgICAgUVBlbiBw
ZW4oUXQ6OmRhcmtHcmF5LCAxLjAsIFF0OjpTb2xpZExpbmUsIFF0OjpSb3VuZENhcCwgUXQ6OlJv
dW5kSm9pbik7CisgICAgcGFpbnRlci0+c2V0UGVuKHBlbik7CisKKyAgICBpZiAoc3Vua2VuKSB7
CisgICAgICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwg
cmVjdCwgUUJydXNoKFF0OjpkYXJrR3JheSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdyYWRpZW50OworICAgIGlmICghZW5hYmxlZCkgewor
ICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7CisgICAg
ICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChyZWN0LnRvcExlZnQoKSk7CisgICAgICAg
IGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7CisgICAgICAgIGxpbmVh
ckdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGxpbmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKKyAgICAgICAg
bGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKFFQb2ludChyZWN0LmJvdHRvbUxlZnQoKS54KCks
CisgICAgICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tTGVmdCgpLnkoKSAtIC8qIG9mZnNldCBs
aW1pdCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29s
b3JBdCgwLjAsIFF0OjpncmF5KTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgw
LjQsIFF0Ojp3aGl0ZSk7CisgICAgfQorCisgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tn
cm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBsaW5lYXJHcmFkaWVudCk7Cit9CisKK3ZvaWQgU3R5
bGVQYWludGVyTW9iaWxlOjpkcmF3Q29tYm9Cb3goY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgbXVs
dGlwbGUsIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwg
UXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKKyAgICBRTGluZWFy
R3JhZGllbnQgbGluZWFyR3JhZGllbnQ7CisgICAgaWYgKCFlbmFibGVkKSB7CisgICAgICAgIGxp
bmVhckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKKyAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0RmluYWxTdG9wKHJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3Jh
ZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QuYm90dG9tTGVmdCgpLngoKSwKKyAgICAgICAg
ICAgICAgICAgICAgcmVjdC5ib3R0b21MZWZ0KCkueSgpIC0gLyogb2Zmc2V0IGxpbWl0IGZvciBn
cmFkaWVudCAqLyAyMCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwg
UXQ6OmdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNCwgUXQ6Ondo
aXRlKTsKKyAgICB9CisKKyAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWlu
dGVyLCBwZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsKKworICAgIGNvbnN0IFFSZWN0IHIocmVj
dC54KCkgKyByZWN0LndpZHRoKCkgLSBmcmFtZVdpZHRoIC0gYXJyb3dCb3hXaWR0aCwgcmVjdC55
KCkgKyBmcmFtZVdpZHRoCisgICAgICAgICAgICAgICAgICAgLCBhcnJvd0JveFdpZHRoLCByZWN0
LmhlaWdodCgpIC0gMiAqIGZyYW1lV2lkdGgpOworICAgIFFQaXhtYXAgcGljID0gZmluZENvbWJv
QnV0dG9uKHIuc2l6ZSgpLCBtdWx0aXBsZSwgIWVuYWJsZWQpOworCisgICAgaWYgKHBpYy5pc051
bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IHggPSAoci53aWR0aCgpIC0gcGljLndp
ZHRoKCkpID4+IDE7CisgICAgaW50IHkgPSAoci5oZWlnaHQoKSAtIHBpYy5oZWlnaHQoKSkgPj4g
MTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHIueCgpICsgeCwgci55KCkgKyB5LCBwaWMpOwor
CisgICAgcGFpbnRlci0+c2V0UGVuKGVuYWJsZWQgPyBRdDo6ZGFya0dyYXkgOiBRdDo6Z3JheSk7
CisgICAgcGFpbnRlci0+ZHJhd0xpbmUoci5sZWZ0KCkgLSAyLCByLnRvcCgpICsgMiwgci5sZWZ0
KCkgLSAyLCByLmJvdHRvbSgpIC0gMik7Cit9CisKKworUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4g
UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y3JlYXRlKFBhZ2UqIHBhZ2UpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBSZW5kZXJUaGVtZVF0TW9iaWxlKHBhZ2UpKTsKK30KKworUGFzc1JlZlB0cjxS
ZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWU6OnRoZW1lRm9yUGFnZShQYWdlKiBwYWdlKQoreworICAg
IGlmIChwYWdlKSB7CisjaWYgSEFWRShRU1RZTEUpCisgICAgICAgIGlmIChxZ2V0ZW52KCJRVF9X
RUJLSVRfVVNFX01PQklMRV9USEVNRSIpLmlzTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIFJl
bmRlclRoZW1lUVN0eWxlOjpjcmVhdGUocGFnZSk7CisjZWxzZQorICAgICAgICBxcHV0ZW52KCJR
VF9XRUJLSVRfVVNFX01PQklMRV9USEVNRSIsIFFCeXRlQXJyYXkoIjEiKSk7CisjZW5kaWYKKyAg
ICAgICAgcmV0dXJuIFJlbmRlclRoZW1lUXRNb2JpbGU6OmNyZWF0ZShwYWdlKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIGZhbGxiYWNrID0gUmVuZGVyVGhlbWVRdE1vYmlsZTo6
Y3JlYXRlKDApLnJlbGVhc2VSZWYoKTsKKyAgICByZXR1cm4gZmFsbGJhY2s7Cit9CisKK1JlbmRl
clRoZW1lUXRNb2JpbGU6OlJlbmRlclRoZW1lUXRNb2JpbGUoUGFnZSogcGFnZSkKKyAgICA6IFJl
bmRlclRoZW1lUXQocGFnZSkKK3sKK30KKworUmVuZGVyVGhlbWVRdE1vYmlsZTo6flJlbmRlclRo
ZW1lUXRNb2JpbGUoKQoreworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OmlzQ29udHJv
bFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRl
ciwgY29uc3QgRmlsbExheWVyJiBmaWxsLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBj
b25zdAoreworICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgeworICAgIGNhc2UgQ2hl
Y2tib3hQYXJ0OgorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxl
ZChzdHlsZSwgYm9yZGVyLCBmaWxsLCBiYWNrZ3JvdW5kQ29sb3IpOworICAgIH0KK30KKworaW50
IFJlbmRlclRoZW1lUXRNb2JpbGU6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0
eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSogcmVuZGVyU3R5
bGUpIGNvbnN0Cit7CisgICAgUVNpemUgc2l6ZSgwLCAwKTsKKyAgICBjb25zdCBRRm9udE1ldHJp
Y3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpOworCisgICAgc3dpdGNoIChyZW5kZXJT
dHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBT
ZWFyY2hGaWVsZFBhcnQ6CisgICAgY2FzZSBUZXh0RmllbGRQYXJ0OiB7CisgICAgICAgIGludCBw
YWRkaW5nID0gZnJhbWVXaWR0aDsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdMZWZ0
KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGlu
Z1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0
UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICAgICAgcmVuZGVyU3R5bGUt
PnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gSWYg
dGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90
aGluZyB0byBkby4KKyAgICBpZiAoIXJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JB
dXRvKCkgJiYgIXJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBD
aGVja2JveFBhcnQ6IHsKKyAgICAgICAgY29uc3QgaW50IHcgPSBjaGVja0JveFdpZHRoICogcmVu
ZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgc2l6ZSA9IFFTaXplKHcsIHcpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBSYWRpb1BhcnQ6IHsKKyAgICAgICAgY29u
c3QgaW50IHcgPSByYWRpb1dpZHRoICogcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAg
ICAgICAgc2l6ZSA9IFFTaXplKHcsIHcpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gRklYTUU6IENoZWNrIGlzIGZs
YXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2Nv
dW50LgorICAgIGlmIChyZW5kZXJTdHlsZS0+d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYm
IHNpemUud2lkdGgoKSA+IDApCisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRNaW5XaWR0aChMZW5n
dGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGlmIChyZW5kZXJTdHlsZS0+aGVpZ2h0KCku
aXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRN
aW5IZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Cit9CisKK3ZvaWQgUmVuZGVy
VGhlbWVRdE1vYmlsZTo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0
b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gRGl0Y2gg
dGhlIGJvcmRlci4KKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKworICAgIEZvbnREZXNjcmlw
dGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgZm9u
dERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOworCisgICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOworICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOworCisgICAgc3R5bGUtPnNl
dExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHNldEJ1
dHRvblNpemUoc3R5bGUpOworICAgIHNldEJ1dHRvblBhZGRpbmcoc3R5bGUpOworfQorCisKK3Zv
aWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5
bGUpIGNvbnN0Cit7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIHN0eWxl
LT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoYnV0dG9uUGFkZGluZ0xlZnQsIEZpeGVkKSk7CisgICAg
c3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoYnV0dG9uUGFkZGluZ1JpZ2h0LCBGaXhlZCkp
OworICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChidXR0b25QYWRkaW5nVG9wLCBGaXhl
ZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChidXR0b25QYWRkaW5nQm90
dG9tLCBGaXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50QnV0dG9u
KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQor
eworICAgIFN0eWxlUGFpbnRlck1vYmlsZSBwKHRoaXMsIGkpOworICAgIGlmICghcC5pc1ZhbGlk
KCkpCisgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0g
by0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIGlmIChhcHBlYXJhbmNlID09IFB1c2hCdXR0
b25QYXJ0IHx8IGFwcGVhcmFuY2UgPT0gQnV0dG9uUGFydCkgeworICAgICAgICBwLmRyYXdQdXNo
QnV0dG9uKHIsIGlzUHJlc3NlZChvKSk7CisgICAgfSBlbHNlIGlmIChhcHBlYXJhbmNlID09IFJh
ZGlvUGFydCkKKyAgICAgICBwLmRyYXdSYWRpb0J1dHRvbihyLCBpc0NoZWNrZWQobykpOworICAg
IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hlY2tib3hQYXJ0KQorICAgICAgIHAuZHJhd0NoZWNr
Qm94KHIsIGlzQ2hlY2tlZChvKSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVu
ZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8gUmVzZXR0aW5n
IHRoZSBzdHlsZSBsaWtlIHRoaXMgbGVhZHMgdG8gZGlmZmVyZW5jZXMgbGlrZToKKyAgICAvLyAt
IFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAxNjh4MjUgW2JnY29sb3I9
I0ZGRkZGRl0gYm9yZGVyOiAoMnB4IGluc2V0ICMwMDAwMDApXQorICAgIC8vICsgUmVuZGVyVGV4
dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2NngyNgorICAgIC8vIGluIGxheW91dCB0
ZXN0cyB3aGVuIGEgQ1NTIHN0eWxlIGlzIGFwcGxpZWQgdGhhdCBkb2Vzbid0IGFmZmVjdCBiYWNr
Z3JvdW5kIGNvbG9yLCBib3JkZXIgb3IKKyAgICAvLyBwYWRkaW5nLiBKdXN0IHdvcnRoIGtlZXBp
bmcgaW4gbWluZCEKKyAgICBzdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yOjp0cmFuc3Bh
cmVudCk7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUtPnJlc2V0UGFkZGlu
ZygpOworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKKyAgICBzdHlsZS0+c2V0
UGFkZGluZ0xlZnQoTGVuZ3RoKHRleHRGaWVsZFBhZGRpbmcsIEZpeGVkKSk7CisgICAgc3R5bGUt
PnNldFBhZGRpbmdSaWdodChMZW5ndGgodGV4dEZpZWxkUGFkZGluZywgRml4ZWQpKTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50
ZXJNb2JpbGUgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBvLT5zdHlsZSgpLT5hcHBl
YXJhbmNlKCk7CisgICAgaWYgKGFwcGVhcmFuY2UgIT0gVGV4dEZpZWxkUGFydAorICAgICAgICAm
JiBhcHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNlICE9
IFRleHRBcmVhUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNlICE9IExpc3Rib3hQYXJ0KQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBwYWludCB0aGUgdGV4dCBmaWVsZC4KKyAg
ICBwLmRyYXdMaW5lRWRpdChyLCAvKnN1bmtlbiA9ICovaXNQcmVzc2VkKG8pKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0TWVudUxpc3RT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29u
c3QKK3sKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKworICAgIC8vIEhlaWdodCBpcyBsb2Nr
ZWQgdG8gYXV0by4KKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisKKyAgICAv
LyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCisgICAgc3R5bGUtPnNldFdoaXRlU3BhY2Uo
UFJFKTsKKworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKKworICAgIC8vIEFk
ZCBpbiB0aGUgcGFkZGluZyB0aGF0IHdlJ2QgbGlrZSB0byB1c2UuCisgICAgc2V0UG9wdXBQYWRk
aW5nKHN0eWxlKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKG1lbnVMaXN0UGFk
ZGluZywgRml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRQb3B1cFBh
ZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIGNvbnN0IGludCBwYWRkaW5n
TGVmdCA9IDQ7CisgICAgY29uc3QgaW50IHBhZGRpbmdSaWdodCA9IHN0eWxlLT53aWR0aCgpLmlz
Rml4ZWQoKSB8fCBzdHlsZS0+d2lkdGgoKS5pc1BlcmNlbnQoKSA/IDUgOiA4OworCisgICAgc3R5
bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVmdCwgRml4ZWQpKTsKKyAgICBzdHls
ZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmlnaHQgKyBidXR0b25JY29uU2l6ZSwg
Rml4ZWQpKTsKKworICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aCgyLCBGaXhlZCkpOwor
ICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCgyLCBGaXhlZCkpOworfQorCisKK2Jv
b2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJN
b2JpbGUgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOworICAgIHAu
cGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworICAgIGNvbnN0IFFSZWN0IHJlY3QoUVBvaW50
KDAsIDApLCByLnNpemUoKSk7CisKKyAgICBwLmRyYXdDb21ib0JveChyZWN0LCBjaGVja011bHRp
cGxlKG8pKTsKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVudUxpc3RCdXR0
b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBh
aW50ZXJNb2JpbGUgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHAuZHJhd0NvbWJvQm94KHIsIGNoZWNrTXVsdGlwbGUobykpOwor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKK2RvdWJs
ZSBSZW5kZXJUaGVtZVF0TW9iaWxlOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiAwLjsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWlu
dFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3Qg
SW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOwor
fQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTbGlkZXJUcmFjayhS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBh
aW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCit7Cisg
ICAgLy8gV2UndmUgYWxyZWFkeSBwYWludGVkIGl0IGluIHBhaW50U2xpZGVyVHJhY2soKSwgbm8g
bmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLgorICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6Y2hlY2tNdWx0aXBsZShS
ZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9
IG8gPyBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+KG8tPm5vZGUoKSkgOiAwOworICAg
IHJldHVybiBzZWxlY3QgPyBzZWxlY3QtPm11bHRpcGxlKCkgOiBmYWxzZTsKK30KKwordm9pZCBS
ZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFs
ZXR0ZSYgcGFsZXR0ZSkgY29uc3QKK3sKKyAgICBzdGF0aWMgUVBhbGV0dGUgbGlnaHRHcmF5UGFs
ZXR0ZShRdDo6bGlnaHRHcmF5KTsKKyAgICBwYWxldHRlID0gbGlnaHRHcmF5UGFsZXR0ZTsKKyAg
ICByZXR1cm47Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0U2xpZGVyVGh1
bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBjb25zdCBDb250cm9sUGFy
dCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBpZiAocGFydCA9PSBTbGlkZXJUaHVt
Ykhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpIHsKKyAg
ICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJXaWR0aCwgRml4ZWQpKTsKKyAgICAg
ICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVySGVpZ2h0LCBGaXhlZCkpOworICAgIH0g
ZWxzZQorICAgICAgICBSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoc3R5bGUp
OworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZjYjQ2ZWNhMmQx
NDBhNjk3NTQ4NGYzZGM3ODlkOTA1MWZhZWQ1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuaApAQCAtMCwwICsxLDExMCBA
QAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0aGVtZSBpbXBsZW1lbnRhdGlvbiBm
b3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworI2lmbmRlZiBS
ZW5kZXJUaGVtZVF0TW9iaWxlX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVRdE1vYmlsZV9oCisKKyNp
bmNsdWRlICJSZW5kZXJUaGVtZVF0LmgiCisKKyNpbmNsdWRlIDxRQnJ1c2g+CisKK1FUX0JFR0lO
X05BTUVTUEFDRQorY2xhc3MgUUNvbG9yOworY2xhc3MgUVBpeG1hcDsKK2NsYXNzIFFTaXplOwor
UVRfRU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlclRo
ZW1lUXRNb2JpbGUgOiBwdWJsaWMgUmVuZGVyVGhlbWVRdCB7Citwcml2YXRlOgorICAgIFJlbmRl
clRoZW1lUXRNb2JpbGUoUGFnZSopOworICAgIHZpcnR1YWwgflJlbmRlclRoZW1lUXRNb2JpbGUo
KTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUo
UGFnZSopOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBS
ZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBD
b2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKworICAgIHZpcnR1YWwgaW50IHBvcHVwSW50
ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9u
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0TWVudUxpc3RT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFH
KQorICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBw
cm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFBy
b2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKyNlbmRpZgorCisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVHJhY2soUmVuZGVyT2Jq
ZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgYm9v
bCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0
IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShS
ZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWlu
dGVyPiBnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJik7CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBjaGVja011bHRpcGxlKFJlbmRlck9iamVjdCopIGNvbnN0OworICAgIHZvaWQgc2V0QnV0
dG9uUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZvaWQgc2V0UG9wdXBQYWRkaW5n
KFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVu
dElmRXhpc3RzKFFQYWxldHRlJikgY29uc3Q7Cit9OworCitjbGFzcyBTdHlsZVBhaW50ZXJNb2Jp
bGUgOiBwdWJsaWMgU3R5bGVQYWludGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTdHlsZVBh
aW50ZXJNb2JpbGUoUmVuZGVyVGhlbWVRdE1vYmlsZSosIGNvbnN0IFBhaW50SW5mbyYpOworCisg
ICAgdm9pZCBkcmF3TGluZUVkaXQoY29uc3QgUVJlY3QmLCBib29sIHN1bmtlbiwgYm9vbCBlbmFi
bGVkID0gdHJ1ZSk7CisgICAgdm9pZCBkcmF3Q2hlY2tCb3goY29uc3QgUVJlY3QmLCBib29sIGNo
ZWNrZWQsIGJvb2wgZW5hYmxlZCA9IHRydWUpOworICAgIHZvaWQgZHJhd1JhZGlvQnV0dG9uKGNv
bnN0IFFSZWN0JiwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQgPSB0cnVlKTsKKyAgICB2b2lk
IGRyYXdQdXNoQnV0dG9uKGNvbnN0IFFSZWN0JiwgYm9vbCBzdW5rZW4sIGJvb2wgZW5hYmxlZCA9
IHRydWUpOworICAgIHZvaWQgZHJhd0NvbWJvQm94KGNvbnN0IFFSZWN0JiwgYm9vbCBtdWx0aXBs
ZSwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkcmF3Q2hlY2tl
cihRUGFpbnRlciosIGludCBzaXplLCBRQ29sb3IpIGNvbnN0OworICAgIFFQaXhtYXAgZmluZENo
ZWNrZXIoY29uc3QgUVJlY3QmLCBib29sIGRpc2FibGVkKSBjb25zdDsKKworICAgIHZvaWQgZHJh
d1JhZGlvKFFQYWludGVyKiwgY29uc3QgUVNpemUmLCBib29sIGNoZWNrZWQsIFFDb2xvcikgY29u
c3Q7CisgICAgUVBpeG1hcCBmaW5kUmFkaW8oY29uc3QgUVNpemUmLCBib29sIGNoZWNrZWQsIGJv
b2wgZGlzYWJsZWQpIGNvbnN0OworCisgICAgUVNpemUgZ2V0QnV0dG9uSW1hZ2VTaXplKGNvbnN0
IFFTaXplJikgY29uc3Q7CisgICAgdm9pZCBkcmF3U2ltcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIq
LCBjb25zdCBRU2l6ZSYsIFFDb2xvcikgY29uc3Q7CisgICAgdm9pZCBkcmF3TXVsdGlwbGVDb21i
b0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTaXplJiwgUUNvbG9yKSBjb25zdDsKKyAgICBRUGl4
bWFwIGZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYsIGJvb2wgbXVsdGlwbGUsIGJvb2wgZGlz
YWJsZWQpIGNvbnN0OworCisgICAgUV9ESVNBQkxFX0NPUFkoU3R5bGVQYWludGVyTW9iaWxlKTsK
K307Cit9CisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZVF0TW9iaWxlX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAKaW5kZXggM2RhNWE3NGY4NmQ0
NTM3Mjg0OWRjYzc0MzNiMDFiZDRhMDE0ZjA1MS4uNzA2ODZjZWI2MTVmMjNiZGUwMzhkMzFlOGY3
Y2Y2ZGJiMzUxNWQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Ny
b2xsYmFyVGhlbWVRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xs
YmFyVGhlbWVRdC5jcHAKQEAgLTI2LDMxICsyNiw0NyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmICFIQVZFKFFTVFlMRSkKKyNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgor
CisjZWxzZQogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUXQuaCIKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgotI2luY2x1ZGUg
IlJlbmRlclRoZW1lUXQuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lUXRNb2JpbGUuaCIKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5j
bHVkZSAiU2Nyb2xsYmFyLmgiCiAKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+Ci0jaWZkZWYgUV9X
U19NQUMKKyNpZmRlZiBRX09TX01BQwogI2luY2x1ZGUgPFFNYWNTdHlsZT4KICNlbmRpZgogI2lu
Y2x1ZGUgPFFNZW51PgogI2luY2x1ZGUgPFFQYWludGVyPgogI2luY2x1ZGUgPFFTdHlsZT4KICNp
bmNsdWRlIDxRU3R5bGVPcHRpb25TbGlkZXI+CisjZW5kaWYgLy8gSEFWRShRU1RZTEUpCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRp
dmVUaGVtZSgpCiB7Ci0gICAgc3RhdGljIFNjcm9sbGJhclRoZW1lUXQgdGhlbWU7Ci0gICAgcmV0
dXJuICZ0aGVtZTsKKyAgICBzdGF0aWMgU2Nyb2xsYmFyVGhlbWUqIHRoZW1lID0gMDsKKyAgICBp
ZiAodGhlbWUpCisgICAgICAgIHJldHVybiB0aGVtZTsKKyNpZiBIQVZFKFFTVFlMRSkKKyAgICBp
ZiAocWdldGVudigiUVRfV0VCS0lUX1VTRV9NT0JJTEVfVEhFTUUiKS5pc051bGwoKSkKKyAgICAg
ICAgdGhlbWUgPSBuZXcgU2Nyb2xsYmFyVGhlbWVRdCgpOworICAgIGVsc2UKKyNlbmRpZgorICAg
ICAgICB0aGVtZSA9IG5ldyBTY3JvbGxiYXJUaGVtZSgpOworICAgIHJldHVybiB0aGVtZTsKIH0K
IAorI2lmIEhBVkUoUVNUWUxFKQogU2Nyb2xsYmFyVGhlbWVRdDo6flNjcm9sbGJhclRoZW1lUXQo
KQogewogfQpAQCAtMTQ2LDcgKzE2Miw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVRdDo6cGFpbnQo
U2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250CiAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIGdyYXBo
aWNzQ29udGV4dCk7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywgZ3JhcGhpY3NDb250
ZXh0KTsKICAgICBpZiAoIXAuaXNWYWxpZCgpKQogICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTE1
NSw3ICsxNzEsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lUXQ6OnBhaW50KFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udAogCiAgICAgcC5wYWludGVyLT5z
ZXRDbGlwUmVjdChvcHQtPnJlY3QuaW50ZXJzZWN0ZWQoZGFtYWdlUmVjdCksIFF0OjpJbnRlcnNl
Y3RDbGlwKTsKIAotI2lmZGVmIFFfV1NfTUFDCisjaWZkZWYgUV9PU19NQUMKICAgICAvLyBGSVhN
RTogV2UgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSB3aWRnZXQgc3R5bGUgYnV0IHRvZGF5IFNjcm9s
bGJhclRoZW1lIGlzIG5vdCBhd2FyZSBvZiB0aGUgcGFnZSBzbyB3ZQogICAgIC8vIGNhbid0IGdl
dCB0aGUgd2lkZ2V0LgogICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxlKj4oc3R5bGUoKSkp
CkBAIC0yMDAsOSArMjE2LDYgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZVF0OjppbnZhbGlkYXRlUGFy
dChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCkKIAogaW50IFNjcm9sbGJhclRo
ZW1lUXQ6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSkKIHsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIHJldHVybiAwOwotI2VuZGlmCiAg
ICAgUVN0eWxlT3B0aW9uU2xpZGVyIG87CiAgICAgby5vcmllbnRhdGlvbiA9IFF0OjpWZXJ0aWNh
bDsKICAgICBvLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hvcml6b250YWw7CkBAIC0yNDMsNyAr
MjU2LDcgQEAgaW50IFNjcm9sbGJhclRoZW1lUXQ6OnRyYWNrTGVuZ3RoKFNjcm9sbGJhciogc2Ny
b2xsYmFyKQogCiB2b2lkIFNjcm9sbGJhclRoZW1lUXQ6OnBhaW50U2Nyb2xsQ29ybmVyKFNjcm9s
bFZpZXcqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
Ci0gICAgU3R5bGVQYWludGVyIHAodGhpcywgY29udGV4dCk7CisgICAgU3R5bGVQYWludGVyUVN0
eWxlIHAodGhpcywgY29udGV4dCk7CiAgICAgaWYgKCFwLmlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0yNTcsNSArMjcwLDYgQEAgUVN0eWxlKiBTY3JvbGxiYXJUaGVtZVF0OjpzdHls
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKIH0KIAorI2VuZGlm
IC8vIEhBVkUoUVNUWUxFKQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9x
d2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5jcHAKaW5kZXggOTg1
NzdiNWNkY2QxZGU4ZTRkYTk5MDU2NzM5Zjc2OGZkYmM0Y2VkMS4uNDZlMDIxOWVlNjcyY2QzNjNh
YmU3NmY3NTk4YmQ1Nzg3NzM0MTI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9BcGkv
cXdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJwYWdlLmNwcApAQCAt
MzI3MiwxMSArMzI3MiwxNSBAQCBib29sIFFXZWJQYWdlOjpzd2FsbG93Q29udGV4dE1lbnVFdmVu
dChRQ29udGV4dE1lbnVFdmVudCAqZXZlbnQpCiB7CiAgICAgZC0+cGFnZS0+Y29udGV4dE1lbnVD
b250cm9sbGVyKCktPmNsZWFyQ29udGV4dE1lbnUoKTsKIAotICAgIGlmIChRV2ViRnJhbWUqIHdl
YkZyYW1lID0gZnJhbWVBdChldmVudC0+cG9zKCkpKSB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9
IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUod2ViRnJhbWUpOwotICAgICAgICBpZiAoU2Nyb2xsYmFy
KiBzY3JvbGxiYXIgPSBmcmFtZS0+dmlldygpLT5zY3JvbGxiYXJBdFBvaW50KFBsYXRmb3JtTW91
c2VFdmVudChldmVudCwgMSkucG9zKCkpKQotICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+
Y29udGV4dE1lbnUoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCAxKSk7CisjaWYgSEFWRShRU1RZ
TEUpCisgICAgaWYgKHFnZXRlbnYoIlFUX1dFQktJVF9VU0VfTU9CSUxFX1RIRU1FIikuaXNOdWxs
KCkpIHsKKyAgICAgICAgaWYgKFFXZWJGcmFtZSogd2ViRnJhbWUgPSBmcmFtZUF0KGV2ZW50LT5w
b3MoKSkpIHsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNv
cmUod2ViRnJhbWUpOworICAgICAgICAgICAgaWYgKFNjcm9sbGJhciogc2Nyb2xsYmFyID0gZnJh
bWUtPnZpZXcoKS0+c2Nyb2xsYmFyQXRQb2ludChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIDEp
LnBvcygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5jb250ZXh0TWVudShQ
bGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIDEpKTsKKyAgICAgICAgfQogICAgIH0KKyNlbmRpZgog
CiAgICAgV2ViQ29yZTo6RnJhbWUqIGZvY3VzZWRGcmFtZSA9IGQtPnBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBmb2N1c2VkRnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIDEp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJpIGIvU291cmNl
L1dlYktpdC9xdC90ZXN0cy90ZXN0cy5wcmkKaW5kZXggYjY5OTljYmJhODM2NjBiODg2ZDlkODg0
MzU0MzY4YWU0NmQ2OGIwMy4uMmEwODEzNmIxOWRmNmY5MDMyNzg0ZjhiNGRhMzJhNzdmYzRjZjU2
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC90ZXN0cy90ZXN0cy5wcmkKKysrIGIvU291
cmNlL1dlYktpdC9xdC90ZXN0cy90ZXN0cy5wcmkKQEAgLTI3LDggKzI3LDUgQEAgaGF2ZVF0KDUp
IHsKICAgICBjb250YWlucyhRVF9DT05GSUcsIGRlY2xhcmF0aXZlKTogUVQgKz0gZGVjbGFyYXRp
dmUKIH0KIAotIyBVc2UgdGhlIFF0IE1vYmlsZSB0aGVtZSBpZiBpdCBpcyBpbiB0aGUgQ09ORklH
Ci11c2VfcXRfbW9iaWxlX3RoZW1lOiBERUZJTkVTICs9IFdURl9VU0VfUVRfTU9CSUxFX1RIRU1F
PTEKLQogIyBUaGlzIGRlZmluZSBpcyB1c2VkIGJ5IHNvbWUgdGVzdHMgdG8gbG9vayB1cCByZXNv
dXJjZXMgaW4gdGhlIHNvdXJjZSB0cmVlCiBERUZJTkVTICs9IFRFU1RTX1NPVVJDRV9ESVI9XFxc
IiQkUFdEL1xcXCIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCAyYTlkMzY2OWFhOWE3MmRjNDYyMWMwNGZhYjgzNWZjNWQxNmQzYTA2Li41NGVkZTMy
Y2RlMGE1NDA1ZWJjYTljNmE1NDJkMmM3ZDk5MjdlYmZjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMTEtMDkg
IFBpZXJyZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CisKKyAgICAgICAgW1F0XSBS
ZW1vdmUgdGhlIFFTdHlsZSBkZXBlbmRlbmN5IGluIFF0J3MgbW9iaWxlIHRoZW1lCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc3MworCisgICAgICAg
IFRoaXMgcmVmYWN0b3Jpbmcgc3BsaXRzIHVwIFJlbmRlclRoZW1lUXQgd2l0aCB0d28KKyAgICAg
ICAgc3ViY2xhc3NlcywgYSBRU3R5bGUtYmFja2VkIG9uZSwgYW5kIGEgTW9iaWxlIHZlcnNpb24K
KyAgICAgICAgdGhhdCB1c2VzIHRoZSBvbGQgbW9iaWxlIHRoZW1lIGZvciBub3cuCisKKyAgICAg
ICAgUVN0eWxlIGF2YWlsYWJpbGl0eSBpcyBkZXRlY3RlZCBhdCBjb21waWxlIHRpbWUsIGFuZAor
ICAgICAgICBpdHMgdXNlIGlzIGRldGVybWluZWQgYnkgdGhlIFFUX1dFQktJVF9VU0VfTU9CSUxF
X1RIRU1FCisgICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9xdC9BY3RpdmF0ZUZvbnRzUXQuY3BwOgorICAgICAgICAoV1RSOjphY3RpdmF0ZUZv
bnRzKToKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZjogSEFW
RV9RU1RZTEUgZGV0ZWN0aW9uLAorICAgICAgICBiYXNlZCBvbiBhdmFpbGFiaWxpdHkgb2YgUXRX
aWRnZXRzLgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2ViY29yZS5wcmY6IGNs
ZWFudXAuCisKIDIwMTEtMTEtMTAgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24uaGF1c21hbm5Abm9r
aWEuY29tPgogCiAgICAgICAgIFtRdF0gRml4IGtleWJvYXJkIHJlbGF0ZWQgbGF5b3V0IHRlc3Rz
IGFmdGVyIEFQSSByZWZhY3RvcmluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9xdC9BY3RpdmF0ZUZvbnRzUXQuY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9BY3RpdmF0ZUZvbnRzUXQuY3BwCmluZGV4IGI4YmUy
NTEwNzJhMzQzOGM0YmQzNmM3OGZlZjE0YWEyODVlOWNiYzEuLmYyMWI4YzljNGRkZTRlMTE2MTk3
MzJjNTllYTI1MzRiY2MwMDdkNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvcXQvQWN0aXZhdGVGb250c1F0LmNwcAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3F0L0FjdGl2YXRlRm9udHNRdC5jcHAKQEAgLTg5LDcg
Kzg5LDkgQEAgdm9pZCBhY3RpdmF0ZUZvbnRzKCkKICNlbmRpZgogCiAgICAgUUFwcGxpY2F0aW9u
OjpzZXRHcmFwaGljc1N5c3RlbShRTGF0aW4xU3RyaW5nKCJyYXN0ZXIiKSk7CisjaWYgSEFWRShR
U1RZTEUpCiAgICAgUUFwcGxpY2F0aW9uOjpzZXRTdHlsZShuZXcgUVdpbmRvd3NTdHlsZSk7Cisj
ZW5kaWYKIAogI2lmIGRlZmluZWQoUV9XU19YMTEpCiAgICAgUVgxMUluZm86OnNldEFwcERwaVgo
MCwgOTYpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJl
cy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgppbmRleCAz
ODJhZmZiYTNlMjAwMzI2NTU1MGRkNzYxMzZkMTFhODdiZDFmOTIwLi5kOTBhZTRjMGExMzE4MmZi
ZmUzZGNhNzM2YmYyZDQ0OTNhZTA3NjA4IDEwMDY0NAotLS0gYS9Ub29scy9xbWFrZS9ta3NwZWNz
L2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVz
L2ZlYXR1cmVzLnByZgpAQCAtNzIsNiArNzIsNyBAQCBpc0VtcHR5KEhBVkVfUVJBV0ZPTlQpIHsK
ICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU9fVFJBQ0s9Lik6IERFRklORVMgKz0gRU5B
QkxFX1ZJREVPX1RSQUNLPTAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVE9VQ0hfSUNPTl9M
T0FESU5HPS4pOiBERUZJTkVTICs9IEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkc9MAogIWNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9BTklNQVRJT05fQVBJPS4pOiBERUZJTkVTICs9IEVOQUJMRV9B
TklNQVRJT05fQVBJPTAKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTk9fTElTVEJPWF9SRU5E
RVJJTkc9Lik6IERFRklORVMgKz0gRU5BQkxFX05PX0xJU1RCT1hfUkVOREVSSU5HPTEKIAogIyBT
Vkcgc3VwcG9ydAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MCkgewpAQCAtOTYsNiAr
OTcsOSBAQCBpc0VtcHR5KEhBVkVfUVJBV0ZPTlQpIHsKICAgICB9CiB9CiAKKyMgUVN0eWxlIGRl
dGVjdGlvbgoraGF2ZVF0KDQpfCFpc0VtcHR5KFFULndpZGdldHMubmFtZSk6IERFRklORVMgKz0g
SEFWRV9RU1RZTEU9MQorCiAjIFdlYkdMIHN1cHBvcnQKIGNvbnRhaW5zKFFUX0NPTkZJRywgb3Bl
bmdsKTohd2luMzItKiB7CiAgICAgIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XRUJHTD0uKTog
REVGSU5FUyArPSBFTkFCTEVfV0VCR0w9MQpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVj
cy9mZWF0dXJlcy93ZWJjb3JlLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2Vi
Y29yZS5wcmYKaW5kZXggYzBlNWI5ODQ1MGNmNjkwNGZjMTAzMWYxOTI1ODk4MWEzNTRiZWJjMy4u
ODdhZGNjOThkMzRjNjUxMTE4NTRiYWNjODljNjM2MTMyZWU2OTgyYiAxMDA2NDQKLS0tIGEvVG9v
bHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93ZWJjb3JlLnByZgorKysgYi9Ub29scy9xbWFrZS9t
a3NwZWNzL2ZlYXR1cmVzL3dlYmNvcmUucHJmCkBAIC0yODUsOCArMjg1LDYgQEAgdW5peHx3aW4z
Mi1nKysqIHsKIAogZW5hYmxlX2Zhc3RfbW9iaWxlX3Njcm9sbGluZzogREVGSU5FUyArPSBFTkFC
TEVfRkFTVF9NT0JJTEVfU0NST0xMSU5HPTEKIAotdXNlX3F0X21vYmlsZV90aGVtZTogREVGSU5F
UyArPSBXVEZfVVNFX1FUX01PQklMRV9USEVNRT0xCi0KIGNvbmZpZ19zdGVwIHsKICAgICBwYXRo
VG9XZWJDb3JlT3V0cHV0ID0gJCRidWlsZERpckZvclNvdXJjZShTb3VyY2UvV2ViQ29yZSkvJCRX
RUJDT1JFX0RFU1RESVIKICAgICBsaW5rU3RhdGljTGlicmFyeSgkJHBhdGhUb1dlYkNvcmVPdXRw
dXQsICQkV0VCQ09SRV9UQVJHRVQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114674</attachid>
            <date>2011-11-11 05:01:30 -0800</date>
            <delta_ts>2011-11-11 06:20:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67773-20111111140309.patch</filename>
            <type>text/plain</type>
            <size>152281</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk4NjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYWFlMTJhZDJhZjg0YmMy
M2VmOWMzYTIzMzkwNjQ2YTcwNWY1NTJlLi41Yjk4OTgyMjUzZDE2N2U1YzkwZjVkZmU4NTlkMTU0
YWY5MjhjMGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ0IEBACisyMDExLTExLTA5ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3Zl
IHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBpbiBRdCdzIG1vYmlsZSB0aGVtZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NzMKKworICAgICAgICBUaGlz
IHJlZmFjdG9yaW5nIHNwbGl0cyB1cCBSZW5kZXJUaGVtZVF0IHdpdGggdHdvCisgICAgICAgIHN1
YmNsYXNzZXMsIGEgUVN0eWxlLWJhY2tlZCBvbmUsIGFuZCBhIE1vYmlsZSB2ZXJzaW9uCisgICAg
ICAgIHRoYXQgdXNlcyB0aGUgb2xkIG1vYmlsZSB0aGVtZSBmb3Igbm93LgorCisgICAgICAgIFFT
dHlsZSBhdmFpbGFiaWxpdHkgaXMgZGV0ZWN0ZWQgYXQgY29tcGlsZSB0aW1lLCBhbmQKKyAgICAg
ICAgaXRzIHVzZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBRVF9XRUJLSVRfVVNFX01PQklMRV9USEVN
RQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IHRoZSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUXRNb2JpbGVX
ZWJTdHlsZS5jcHA6IFJlbW92ZWQuIFRoZSByZWxldmFudCBsb2dpYworICAgICAgICBub3cgbGl2
ZXMgd2l0aGluIFJlbmRlclRoZW1lUXRNb2JpbGUuCisgICAgICAgICogcGxhdGZvcm0vcXQvUXRN
b2JpbGVXZWJTdHlsZS5oOiBSZW1vdmVkLiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6aW5pdFN0eWxl
T3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBh
aW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpTdHlsZVBhaW50
ZXJRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjppbml0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OlJlbmRlclRoZW1lUVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjp+UmVuZGVyVGhlbWVRU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmZhbGxiYWNrU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVFTdHlsZTo6ZmluZEZyYW1lTGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUVN0eWxlOjppbmZsYXRlQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpzZXRCdXR0b25QYWRkaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFRleHRBcmVhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpzZXRQb3B1cFBhZGRpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJv
Z3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50UHJv
Z3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xp
ZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNs
aWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBh
aW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxl
OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUVN0eWxlOjppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXpl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OmRyYXdQcmltaXRpdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpkcmF3Q29udHJvbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJRU3R5bGU6OmRyYXdDb21wbGV4Q29udHJvbCk6CisgICAgICAgICogcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjpSZW5kZXJUaGVtZVF0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6Omlz
Q29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjppbmZsYXRl
QnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RSZXBh
aW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjptaW5pbXVtTWVudUxp
c3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVs
ZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9n
cmVzc0JhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdDo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVBsYXlCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1
bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRy
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVt
YlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Y2FyZXRCbGlua0ludGVy
dmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZvcldp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVBhaW50ZXI6On5TdHlsZVBhaW50ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6aXNWYWxpZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6ZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Z2V0U3R5bGVQYWludGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6U3R5bGVQYWludGVyTW9iaWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0NoZWNrZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2hlY2tlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdSYWRpbyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENvbWJvQnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0xpbmVFZGl0KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0NoZWNrQm94KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1JhZGlvQnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1B1c2hCdXR0b24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q29tYm9Cb3gpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lOjp0aGVtZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1v
YmlsZTo6UmVuZGVyVGhlbWVRdE1vYmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0TW9iaWxlOjp+UmVuZGVyVGhlbWVRdE1vYmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0TW9iaWxlOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0QnV0dG9uU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0QnV0dG9uUGFkZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludEJ1dHRvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0RmllbGRT
dHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRG
aWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RNZW51
TGlzdFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldFBv
cHVwUGFkZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWlu
dE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50
TWVudUxpc3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6
YW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0TW9iaWxlOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpjaGVja011bHRpcGxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNsaWRlclRodW1i
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZVF0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJU
aGVtZVF0OjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFy
VGhlbWVRdDo6cGFpbnRTY3JvbGxDb3JuZXIpOgorCiAyMDExLTExLTEwICBTaGVyaWZmIEJvdCAg
PHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByOTk4NTEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDE5Mjk3NzczYzYzZWNkYzUzNjQwN2Rk
MTI5YzRkMTBhM2Q0NDhjOTUuLmRmN2RlZjgyMjZhNGNlYzAzYjY1NjEyYTM1ZTc0OWE2ZDYxZjkx
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMTEtMDkgIFBpZXJyZSBS
b3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CisKKyAgICAgICAgW1F0XSBSZW1vdmUgdGhl
IFFTdHlsZSBkZXBlbmRlbmN5IGluIFF0J3MgbW9iaWxlIHRoZW1lCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc3MworCisgICAgICAgIFRoaXMgcmVm
YWN0b3Jpbmcgc3BsaXRzIHVwIFJlbmRlclRoZW1lUXQgd2l0aCB0d28KKyAgICAgICAgc3ViY2xh
c3NlcywgYSBRU3R5bGUtYmFja2VkIG9uZSwgYW5kIGEgTW9iaWxlIHZlcnNpb24KKyAgICAgICAg
dGhhdCB1c2VzIHRoZSBvbGQgbW9iaWxlIHRoZW1lIGZvciBub3cuCisKKyAgICAgICAgUVN0eWxl
IGF2YWlsYWJpbGl0eSBpcyBkZXRlY3RlZCBhdCBjb21waWxlIHRpbWUsIGFuZAorICAgICAgICBp
dHMgdXNlIGlzIGRldGVybWluZWQgYnkgdGhlIFFUX1dFQktJVF9VU0VfTU9CSUxFX1RIRU1FCisg
ICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQ
YWdlOjpzd2FsbG93Q29udGV4dE1lbnVFdmVudCk6CisgICAgICAgICogdGVzdHMvdGVzdHMucHJp
OgorCiAyMDExLTExLTEwICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eu
b3JnPgogCiAgICAgICAgIFtRdF0gTWVyZ2UgUVRvdWNoV2ViVmlldyBhbmQgUURlc2t0b3BXZWJW
aWV3IGludG8gb25lIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAxZjBmMTNkZDFjM2JjNTUxYzc5MTY5
YTYwNDBhNmIwNDJlZTNjOWE2Li5lM2ZlYjM1NjJjMDYxNGE3NWU0ZWIzMTY0ZTkxNDJlNjA2OWU4
OWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKQEAgLTIwLDEwICsyMCw2IEBAIERFRklORVMgKz0gUVRfTUFLRURM
TAogCiBjb250YWlucyhRVF9DT05GSUcsIHJlZHVjZV9leHBvcnRzKTpDT05GSUcgKz0gaGlkZV9z
eW1ib2xzCiAKLWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRfTU9CSUxFX1RIRU1FPTEpIHsK
LSAgICBERUZJTkVTICs9IEVOQUJMRV9OT19MSVNUQk9YX1JFTkRFUklORz0xCi19Ci0KIGhhdmVR
dCg1KSB7CiAgICAgIyBBZGQgYSBRdFNjcmlwdCBkZXBlbmRlbmN5IGZvciB0aGUgdGltZSBiZWlu
ZywgaW4gb3JkZXIgdG8gcHVsbCBpbiB0aGUgaW5jbHVkZQogICAgICMgcGF0aCBmb3IgUXRTY3Jp
cHQgd2hlbiBpdCdzIGJ1aWx0IGFzIGEgc3RhbmRhbG9uZSBtb2R1bGUKQEAgLTIyMDYsOSArMjIw
Miw4IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggXAogICAg
IHBsYXRmb3JtL3F0L0Nvb2tpZUphclF0LmggXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xp
ZW50LmggXAotICAgIHBsYXRmb3JtL3F0L1F0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIFwKICAg
ICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmggXAotICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJh
clRoZW1lUXQuaCBcCisgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oIFwKICAg
ICBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRv
ci5oIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXIuaCBcCkBAIC0yNzc0LDcgKzI3NjksNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybVRvdWNoRXZlbnRRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL3F0L1BsYXRmb3JtVG91Y2hQb2ludFF0LmNwcCBcCiAgICAgcGxhdGZvcm0v
cXQvUmVuZGVyVGhlbWVRdC5jcHAgXAotICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcCBc
CisgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAgXAogICAgIHBsYXRmb3Jt
L3F0L1Njcm9sbGJhclRoZW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQu
Y3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcCBcCkBAIC0yNzkzLDkgKzI3
ODgsMTIgQEAgU09VUkNFUyArPSBcCiAgICAgU09VUkNFUyArPSB4bWwvcGFyc2VyL1hNTERvY3Vt
ZW50UGFyc2VyUXQuY3BwCiB9CiAKLWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRfTU9CSUxF
X1RIRU1FPTEpIHsKLSAgICBIRUFERVJTICs9IHBsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUu
aAotICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vcXQvUXRNb2JpbGVXZWJTdHlsZS5jcHAKK2NvbnRh
aW5zKERFRklORVMsIEhBVkVfUVNUWUxFPTEpIHsKKyAgICBIRUFERVJTICs9IHBsYXRmb3JtL3F0
L1F0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL3F0
L1JlbmRlclRoZW1lUVN0eWxlLmggXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vcXQvU2Nyb2xs
YmFyVGhlbWVRdC5oCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHls
ZS5jcHAgXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCiB9CiAK
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HPTEpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAppbmRleCBjMzAwZmRjNDcwN2NmNjczYjQ5Mzhk
YmY0YmI1MmRlZTZhMTEyYTJmLi5lNDJmMzM2ZThmZjM4YmYyMTliNWZhMzU4ZjUwNGI1ZTFkMmE0
NmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCkBAIC0yOSw2ICsy
OSw5IEBACiAjaW5jbHVkZSAiQ29sbGVjdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIK
ICNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaWYgUExBVEZPUk0oUVQpCisj
aW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xOTksMTAgKzIwMiwxMiBAQCBwcml2YXRlOgog
aW5saW5lIGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OnVzZXNNZW51TGlzdCgpIGNvbnN0CiB7CiAj
aWYgRU5BQkxFKE5PX0xJU1RCT1hfUkVOREVSSU5HKQorI2lmIFBMQVRGT1JNKFFUKQorICAgIGlm
IChSZW5kZXJUaGVtZVF0Ojp1c2VNb2JpbGVUaGVtZSgpKQorI2VuZGlmCiAgICAgcmV0dXJuIHRy
dWU7Ci0jZWxzZQotICAgIHJldHVybiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMTsKICNlbmRp
ZgorICAgIHJldHVybiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMTsKIH0KIAogSFRNTFNlbGVj
dEVsZW1lbnQqIHRvSFRNTFNlbGVjdEVsZW1lbnQoTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRNb2JpbGVXZWJTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0eWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNmNhMTgxN2Q3MjJiOTVlZTkyMmY3Y2Y2NDhmY2RiNGU1MTkxY2E4NC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0eWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJR
dE1vYmlsZVdlYlN0eWxlLmgiCi0KLSNpbmNsdWRlICJRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3gu
aCIKLQotI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFQaXhtYXBDYWNoZT4KLSNpbmNs
dWRlIDxRU3R5bGVPcHRpb24+Ci0KLVF0TW9iaWxlV2ViU3R5bGU6OlF0TW9iaWxlV2ViU3R5bGUo
KQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tn
cm91bmQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJl
Y3QsIGNvbnN0IFFCcnVzaCYgYnJ1c2gpCi17Ci0gICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5w
ZW4oKTsKLSAgICBRQnJ1c2ggb2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOwotICAgIHBhaW50
ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0gICAgcGFp
bnRlci0+c2V0UGVuKHBlbik7Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gpOwotCi0gICAg
aW50IGxpbmUgPSAxOwotICAgIHBhaW50ZXItPmRyYXdSb3VuZGVkUmVjdChyZWN0LmFkanVzdGVk
KGxpbmUsIGxpbmUsIC1saW5lLCAtbGluZSksCi0gICAgICAgICAgICAvKiB4UmFkaXVzICovIDUu
MCwgLyogeVJhZGlvdXMgKi8gNS4wKTsKLSAgICBwYWludGVyLT5zZXRQZW4ob2xkUGVuKTsKLSAg
ICBwYWludGVyLT5zZXRCcnVzaChvbGRCcnVzaCk7Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHls
ZTo6ZHJhd0NoZWNrZXIoUVBhaW50ZXIqIHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29sb3Ip
IGNvbnN0Ci17Ci0gICAgaW50IGJvcmRlciA9IHFNaW4ocU1heCgxLCBpbnQoMC4yICogc2l6ZSkp
LCA2KTsKLSAgICBpbnQgY2hlY2tlclNpemUgPSBxTWF4KHNpemUgLSAyICogYm9yZGVyLCAzKTsK
LSAgICBpbnQgd2lkdGggPSBjaGVja2VyU2l6ZSAvIDM7Ci0gICAgaW50IG1pZGRsZSA9IHFNYXgo
MyAqIGNoZWNrZXJTaXplIC8gNywgMyk7Ci0gICAgaW50IHggPSAoKHNpemUgLSBjaGVja2VyU2l6
ZSkgPj4gMSk7Ci0gICAgaW50IHkgPSAoKHNpemUgLSBjaGVja2VyU2l6ZSkgPj4gMSkgKyAoY2hl
Y2tlclNpemUgLSB3aWR0aCAtIG1pZGRsZSk7Ci0gICAgUVZlY3RvcjxRTGluZUY+IGxpbmVzKGNo
ZWNrZXJTaXplICsgMSk7Ci0gICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1pZGRsZTsgKytpKSB7Ci0gICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgs
IHksIHgsIHkgKyB3aWR0aCk7Ci0gICAgICAgICsreDsKLSAgICAgICAgKyt5OwotICAgIH0KLSAg
ICBmb3IgKGludCBpID0gbWlkZGxlOyBpIDw9IGNoZWNrZXJTaXplOyArK2kpIHsKLSAgICAgICAg
bGluZXNbaV0gPSBRTGluZUYoeCwgeSwgeCwgeSArIHdpZHRoKTsKLSAgICAgICAgKyt4OwotICAg
ICAgICAtLXk7Ci0gICAgfQotICAgIHBhaW50ZXItPmRyYXdMaW5lcyhsaW5lcy5jb25zdERhdGEo
KSwgbGluZXMuc2l6ZSgpKTsKLX0KLQotUVBpeG1hcCBRdE1vYmlsZVdlYlN0eWxlOjpmaW5kQ2hl
Y2tlcihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBkaXNhYmxlZCkgY29uc3QKLXsKLSAgICBpbnQg
c2l6ZSA9IHFNaW4ocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBRUGl4bWFwIHJl
c3VsdDsKLSAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIk
cXQtbWFlbW81LSIpICsgUUxhdGluMVN0cmluZyhtZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSsg
UUxhdGluMVN0cmluZygiLWNoZWNrZXItIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBR
U3RyaW5nOjpudW1iZXIoc2l6ZSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBR
TGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKTsKLSAg
ICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0
ID0gUVBpeG1hcChzaXplLCBzaXplKTsKLSAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFy
ZW50KTsKLSAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0KTsKLSAgICAgICAgZHJhd0No
ZWNrZXIoJnBhaW50ZXIsIHNpemUsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJr
R3JheSk7Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3UmFk
aW8oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIFFD
b2xvciBjb2xvcikgY29uc3QKLXsKLSAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVy
OjpBbnRpYWxpYXNpbmcsIHRydWUpOwotCi0gICAgLy8gZ2V0IG1pbm9yIHNpemUgdG8gZG8gbm90
IHBhaW50IGEgd2lkZSBlbGlwc2UKLSAgICBxcmVhbCBzcXVhcmVTaXplID0gcU1pbihzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOwotICAgIC8vIGRlZmxhdGUgb25lIHBpeGVsCi0gICAgUVJl
Y3QgcmVjdCA9IFFSZWN0KFFQb2ludCgxLCAxKSwgUVNpemUoc3F1YXJlU2l6ZSAtIDIsIHNxdWFy
ZVNpemUgLSAyKSk7Ci0gICAgY29uc3QgUVBvaW50IGNlbnRlckdyYWRpZW50KHJlY3QuYm90dG9t
UmlnaHQoKSAqIDAuNyk7Ci0KLSAgICBRUmFkaWFsR3JhZGllbnQgcmFkaWFsR3JhZGllbnQoY2Vu
dGVyR3JhZGllbnQsIGNlbnRlckdyYWRpZW50LngoKSAtIDEpOwotICAgIHJhZGlhbEdyYWRpZW50
LnNldENvbG9yQXQoMC4wLCBRdDo6d2hpdGUpOwotICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9y
QXQoMC42LCBRdDo6d2hpdGUpOwotICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBj
b2xvcik7Ci0KLSAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOwotICAgIHBhaW50ZXItPnNldEJy
dXNoKGNvbG9yKTsKLSAgICBwYWludGVyLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICBwYWludGVy
LT5zZXRCcnVzaChyYWRpYWxHcmFkaWVudCk7Ci0gICAgcGFpbnRlci0+ZHJhd0VsbGlwc2UocmVj
dCk7Ci0KLSAgICBpbnQgYm9yZGVyID0gMC4xICogKHJlY3Qud2lkdGgoKSArIHJlY3QuaGVpZ2h0
KCkpOwotICAgIGJvcmRlciA9IHFNaW4ocU1heCgyLCBib3JkZXIpLCAxMCk7Ci0gICAgcmVjdC5h
ZGp1c3QoYm9yZGVyLCBib3JkZXIsIC1ib3JkZXIsIC1ib3JkZXIpOwotICAgIGlmIChjaGVja2Vk
KSB7Ci0gICAgICAgIHBhaW50ZXItPnNldFBlbihRdDo6Tm9QZW4pOwotICAgICAgICBwYWludGVy
LT5zZXRCcnVzaChjb2xvcik7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOwot
ICAgIH0KLX0KLQotUVBpeG1hcCBRdE1vYmlsZVdlYlN0eWxlOjpmaW5kUmFkaW8oY29uc3QgUVNp
emUmIHNpemUsIGJvb2wgY2hlY2tlZCwgYm9vbCBkaXNhYmxlZCkgY29uc3QKLXsKLSAgICBRUGl4
bWFwIHJlc3VsdDsKLSAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3Ry
aW5nKCIkcXQtbWFlbW81LSIpICsgUUxhdGluMVN0cmluZyhtZXRhT2JqZWN0KCktPmNsYXNzTmFt
ZSgpKSArIFFMYXRpbjFTdHJpbmcoIi1yYWRpby0iKTsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZp
eCArIFFTdHJpbmc6Om51bWJlcihzaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsg
UVN0cmluZzo6bnVtYmVyKHNpemUuaGVpZ2h0KCkpICsgUUxhdGluMVN0cmluZygiLSIpCi0gICAg
ICAgICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFTdHJp
bmcoImVuYWJsZWQiKSkgKyAoY2hlY2tlZCA/IFFMYXRpbjFTdHJpbmcoIi1jaGVja2VkIikgOiBR
TGF0aW4xU3RyaW5nKCIiKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1
bHQpKSB7Ci0gICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSk7Ci0gICAgICAgIHJlc3VsdC5m
aWxsKFF0Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7
Ci0gICAgICAgIGRyYXdSYWRpbygmcGFpbnRlciwgc2l6ZSwgY2hlY2tlZCwgZGlzYWJsZWQgPyBR
dDo6bGlnaHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgUVBpeG1hcENhY2hlOjppbnNl
cnQoa2V5LCByZXN1bHQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFF0
TW9iaWxlV2ViU3R5bGU6OmRyYXdDb250cm9sKENvbnRyb2xFbGVtZW50IGVsZW1lbnQsIGNvbnN0
IFFTdHlsZU9wdGlvbiogb3B0aW9uLCBRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVdpZGdldCog
d2lkZ2V0KSBjb25zdAotewotICAgIHN3aXRjaCAoZWxlbWVudCkgewotICAgIGNhc2UgQ0VfQ2hl
Y2tCb3g6IHsKLSAgICAgICAgUVJlY3QgcmVjdCA9IG9wdGlvbi0+cmVjdDsKLSAgICAgICAgY29u
c3QgYm9vbCBkaXNhYmxlZCA9ICEob3B0aW9uLT5zdGF0ZSAmIFN0YXRlX0VuYWJsZWQpOwotCi0g
ICAgICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudChyZWN0LnRvcExlZnQoKSwgcmVj
dC5ib3R0b21MZWZ0KCkpOwotICAgICAgICBpZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIGxp
bmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6bGlnaHRHcmF5KTsKLSAgICAgICAgICAg
IGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC41LCBRdDo6d2hpdGUpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpkYXJr
R3JheSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6Ondo
aXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHBhaW50ZXItPnNldFBlbihRUGVuKGRpc2FibGVk
ID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSkpOwotICAgICAgICBwYWludGVyLT5zZXRC
cnVzaChsaW5lYXJHcmFkaWVudCk7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdSZWN0KHJlY3QpOwot
ICAgICAgICByZWN0LmFkanVzdCgxLCAxLCAtMSwgLTEpOwotCi0gICAgICAgIGlmIChvcHRpb24t
PnN0YXRlICYgU3RhdGVfT2ZmKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgUVBpeG1h
cCBjaGVja2VyID0gZmluZENoZWNrZXIocmVjdCwgZGlzYWJsZWQpOwotICAgICAgICBpZiAoY2hl
Y2tlci5pc051bGwoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGludCB4ID0gKHJl
Y3Qud2lkdGgoKSAtIGNoZWNrZXIud2lkdGgoKSkgPj4gMTsKLSAgICAgICAgaW50IHkgPSAocmVj
dC5oZWlnaHQoKSAtIGNoZWNrZXIuaGVpZ2h0KCkpID4+IDE7Ci0gICAgICAgIHBhaW50ZXItPmRy
YXdQaXhtYXAocmVjdC54KCkgKyB4LCByZWN0LnkoKSArIHksIGNoZWNrZXIpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBDRV9SYWRpb0J1dHRvbjogewotICAgICAgICBjb25zdCBi
b29sIGRpc2FibGVkID0gIShvcHRpb24tPnN0YXRlICYgU3RhdGVfRW5hYmxlZCk7Ci0gICAgICAg
IFFQaXhtYXAgcmFkaW8gPSBmaW5kUmFkaW8ob3B0aW9uLT5yZWN0LnNpemUoKSwgb3B0aW9uLT5z
dGF0ZSAmIFN0YXRlX09uLCBkaXNhYmxlZCk7Ci0gICAgICAgIGlmIChyYWRpby5pc051bGwoKSkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKG9wdGlvbi0+
cmVjdC54KCksIG9wdGlvbi0+cmVjdC55KCksIHJhZGlvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgQ0VfUHVzaEJ1dHRvbjogewotICAgICAgICBjb25zdCBib29sIGRpc2FibGVk
ID0gIShvcHRpb24tPnN0YXRlICYgU3RhdGVfRW5hYmxlZCk7Ci0gICAgICAgIFFSZWN0IHJlY3Qg
PSBvcHRpb24tPnJlY3Q7Ci0gICAgICAgIFFQZW4gcGVuKFF0OjpkYXJrR3JheSwgMS4wLCBRdDo6
U29saWRMaW5lLCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpvaW4pOwotICAgICAgICBwYWludGVy
LT5zZXRQZW4ocGVuKTsKLQotICAgICAgICBjb25zdCBib29sIHN1bmtlbiA9IChvcHRpb24tPnN0
YXRlICYgU3RhdGVfU3Vua2VuKTsKLSAgICAgICAgaWYgKHN1bmtlbikgewotICAgICAgICAgICAg
ZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1
c2goUXQ6OmRhcmtHcmF5KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudDsKLSAgICAgICAgaWYgKGRpc2FibGVk
KSB7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQo
KSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0
KCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5
KTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQo
cmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxT
dG9wKFFQb2ludChyZWN0LmJvdHRvbUxlZnQoKS54KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LmJvdHRvbUxlZnQoKS55KCkgLSAvKiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICov
IDIwKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6Omdy
YXkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjQsIFF0Ojp3aGl0
ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3Vu
ZChwYWludGVyLCBwZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFFXaW5kb3dzU3R5bGU6OmRyYXdDb250cm9sKGVs
ZW1lbnQsIG9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKLSAgICB9Ci19Ci12b2lkIFF0TW9iaWxl
V2ViU3R5bGU6OmRyYXdQcmltaXRpdmUoUHJpbWl0aXZlRWxlbWVudCBlbGVtZW50LCBjb25zdCBR
U3R5bGVPcHRpb24qIG9wdGlvbiwgUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFXaWRnZXQqIHdp
ZGdldCkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGVsZW1lbnQpIHsKLSAgICBjYXNlIFFTdHlsZTo6
UEVfUGFuZWxMaW5lRWRpdDogewotICAgICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRp
b24tPnN0YXRlICYgU3RhdGVfRW5hYmxlZCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgc3Vua2VuID0g
KG9wdGlvbi0+c3RhdGUgJiBTdGF0ZV9TdW5rZW4pOwotICAgICAgICBRUmVjdCByZWN0ID0gb3B0
aW9uLT5yZWN0OwotICAgICAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlk
TGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKLSAgICAgICAgcGFpbnRlci0+c2V0
UGVuKHBlbik7Ci0KLSAgICAgICAgaWYgKHN1bmtlbikgewotICAgICAgICAgICAgZHJhd1JlY3Rh
bmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRh
cmtHcmF5KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFFMaW5l
YXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudDsKLSAgICAgICAgaWYgKGRpc2FibGVkKSB7Ci0gICAg
ICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAg
ICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC5ib3R0b21MZWZ0KCkpOwotICAg
ICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpsaWdodEdyYXkpOwot
ICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0
LnRvcExlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBv
aW50KHJlY3QudG9wTGVmdCgpLngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QudG9w
TGVmdCgpLnkoKSArIC8qIG9mZnNldCBsaW1pdCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKLSAgICAg
ICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOwotICAg
ICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjM1LCBRdDo6d2hpdGUpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRl
ciwgcGVuLCByZWN0LCBsaW5lYXJHcmFkaWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICBkZWZhdWx0OgotICAgICAgICBRV2luZG93c1N0eWxlOjpkcmF3UHJpbWl0aXZlKGVsZW1lbnQs
IG9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKLSAgICB9Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJT
dHlsZTo6ZHJhd011bHRpcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFT
aXplJiBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0Ci17Ci0gICAgaW50IHJlY3RXaWR0aCA9IHNp
emUud2lkdGgoKSAtIDE7Ci0gICAgaW50IHdpZHRoID0gcU1heCgyLCByZWN0V2lkdGggPj4gMyk7
Ci0gICAgaW50IGRpc3RhbmNlID0gKHJlY3RXaWR0aCAtIDMgKiB3aWR0aCkgPj4gMTsKLSAgICBp
bnQgdG9wID0gKHNpemUuaGVpZ2h0KCkgLSB3aWR0aCkgPj4gMTsKLQotICAgIHBhaW50ZXItPnNl
dFBlbihjb2xvcik7Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOwotCi0gICAgcGFpbnRl
ci0+ZHJhd1JlY3QoMCwgdG9wLCB3aWR0aCwgd2lkdGgpOwotICAgIHBhaW50ZXItPmRyYXdSZWN0
KHdpZHRoICsgZGlzdGFuY2UsIHRvcCwgd2lkdGgsIHdpZHRoKTsKLSAgICBwYWludGVyLT5kcmF3
UmVjdCgyICogKHdpZHRoICsgZGlzdGFuY2UpLCB0b3AsIHdpZHRoLCB3aWR0aCk7Ci19Ci0KLXZv
aWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAotewotICAgIGludCB3
aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbWlkbGUgPSB3aWR0aCA+PiAxOwotICAgIFFW
ZWN0b3I8UUxpbmU+IGxpbmVzKHdpZHRoICsgMSk7Ci0KLSAgICBmb3IgKGludCB4ID0gMCwgeSA9
IDA7ICB4IDwgbWlkbGU7IHgrKywgeSsrKSB7Ci0gICAgICAgIGxpbmVzW3hdID0gUUxpbmUoeCwg
eSwgeCwgeSArIDIpOwotICAgICAgICBsaW5lc1t4ICsgbWlkbGVdID0gUUxpbmUod2lkdGggLSB4
IC0gMSwgeSwgd2lkdGggLSB4IC0gMSwgeSArIDIpOwotICAgIH0KLSAgICAvLyBKdXN0IHRvIGVu
c3VyZSB0aGUgbGluZXMnIGludGVyc2VjdGlvbi4KLSAgICBsaW5lc1t3aWR0aF0gPSBRTGluZSht
aWRsZSwgbWlkbGUsIG1pZGxlLCBtaWRsZSArIDIpOwotCi0gICAgcGFpbnRlci0+c2V0UGVuKGNv
bG9yKTsKLSAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0gICAgcGFpbnRlci0+ZHJhd0xp
bmVzKGxpbmVzKTsKLX0KLQotUVNpemUgUXRNb2JpbGVXZWJTdHlsZTo6Z2V0QnV0dG9uSW1hZ2VT
aXplKGNvbnN0IFFTaXplJiBidXR0b25TaXplKSBjb25zdAotewotICAgIGNvbnN0IGludCBib3Jk
ZXIgPSBxTWF4KDMsIGJ1dHRvblNpemUud2lkdGgoKSA+PiAzKSA8PCAxOwotCi0gICAgaW50IHdp
ZHRoID0gYnV0dG9uU2l6ZS53aWR0aCgpIC0gYm9yZGVyOwotICAgIGludCBoZWlnaHQgPSBidXR0
b25TaXplLmhlaWdodCgpIC0gYm9yZGVyOwotCi0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQg
PCAwKQotICAgICAgICByZXR1cm4gUVNpemUoKTsKLQotICAgIGlmIChoZWlnaHQgPj0gKHdpZHRo
ID4+IDEpKQotICAgICAgICB3aWR0aCA9IHdpZHRoID4+IDEgPDwgMTsKLSAgICBlbHNlCi0gICAg
ICAgIHdpZHRoID0gaGVpZ2h0IDw8IDE7Ci0KLSAgICByZXR1cm4gUVNpemUod2lkdGggKyAxLCB3
aWR0aCk7Ci19Ci0KLVFQaXhtYXAgUXRNb2JpbGVXZWJTdHlsZTo6ZmluZENvbWJvQnV0dG9uKGNv
bnN0IFFTaXplJiBzaXplLCBib29sIG11bHRpcGxlLCBib29sIGRpc2FibGVkKSBjb25zdAotewot
ICAgIFFQaXhtYXAgcmVzdWx0OwotICAgIFFTaXplIGltYWdlU2l6ZSA9IGdldEJ1dHRvbkltYWdl
U2l6ZShzaXplKTsKLQotICAgIGlmIChpbWFnZVNpemUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBRUGl4bWFwKCk7Ci0gICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0
cmluZygiJHF0LW1hZW1vNS0iKSArIFFMYXRpbjFTdHJpbmcobWV0YU9iamVjdCgpLT5jbGFzc05h
bWUoKSkgKyBRTGF0aW4xU3RyaW5nKCItY29tYm8tIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVm
aXggKyAobXVsdGlwbGUgPyBRTGF0aW4xU3RyaW5nKCJtdWx0aXBsZS0iKSA6IFFMYXRpbjFTdHJp
bmcoInNpbXBsZS0iKSkKLSAgICAgICAgKyBRU3RyaW5nOjpudW1iZXIoaW1hZ2VTaXplLndpZHRo
KCkpICsgUUxhdGluMVN0cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgKyBRTGF0aW4xU3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4x
U3RyaW5nKCJkaXNhYmxlZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKTsKLSAgICBpZiAo
IVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gUVBp
eG1hcChpbWFnZVNpemUpOwotICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwot
ICAgICAgICBRUGFpbnRlciBwYWludGVyKCZyZXN1bHQpOwotICAgICAgICBpZiAobXVsdGlwbGUp
Ci0gICAgICAgICAgICBkcmF3TXVsdGlwbGVDb21ib0J1dHRvbigmcGFpbnRlciwgaW1hZ2VTaXpl
LCBkaXNhYmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBkcmF3U2ltcGxlQ29tYm9CdXR0b24oJnBhaW50ZXIsIGltYWdlU2l6ZSwg
ZGlzYWJsZWQgPyBRdDo6bGlnaHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgUVBpeG1h
cENhY2hlOjppbnNlcnQoa2V5LCByZXN1bHQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdDb21wbGV4Q29udHJvbChDb21wbGV4Q29u
dHJvbCBjb250cm9sLCBjb25zdCBRU3R5bGVPcHRpb25Db21wbGV4KiBvcHRpb24sIFFQYWludGVy
KiBwYWludGVyLCBjb25zdCBRV2lkZ2V0KiB3aWRnZXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChj
b250cm9sKSB7Ci0gICAgY2FzZSBDQ19Db21ib0JveDogewotICAgICAgICBib29sIG11bHRpcGxl
ID0gZmFsc2U7Ci0gICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZWQgPSAhKG9wdGlvbi0+c3RhdGUg
JiBTdGF0ZV9FbmFibGVkKTsKLQotICAgICAgICBjb25zdCBRU3R5bGVPcHRpb25Db21ib0JveCog
Y21iID0gMDsKLSAgICAgICAgY29uc3QgV2ViQ29yZTo6UXRTdHlsZU9wdGlvbldlYkNvbWJvQm94
KiB3ZWJDb21ibyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OlF0U3R5bGVPcHRpb25XZWJD
b21ib0JveCo+KG9wdGlvbik7Ci0KLSAgICAgICAgaWYgKHdlYkNvbWJvKSB7Ci0gICAgICAgICAg
ICBtdWx0aXBsZSA9IHdlYkNvbWJvLT5tdWx0aXBsZSgpOwotICAgICAgICAgICAgY21iID0gd2Vi
Q29tYm87Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY21iID0gcXN0eWxlb3B0aW9uX2Nh
c3Q8Y29uc3QgUVN0eWxlT3B0aW9uQ29tYm9Cb3gqPihvcHRpb24pOwotCi0gICAgICAgIGlmICgh
Y21iKSB7Ci0gICAgICAgICAgICBRV2luZG93c1N0eWxlOjpkcmF3Q29tcGxleENvbnRyb2woY29u
dHJvbCwgb3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIShjbWItPnN1YkNvbnRyb2xzICYgU0NfQ29tYm9Cb3hBcnJv
dykpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBRUmVjdCByZWN0ID0gb3B0aW9uLT5y
ZWN0OwotICAgICAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwg
UXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKLSAgICAgICAgUUxpbmVhckdyYWRpZW50IGxp
bmVhckdyYWRpZW50OwotICAgICAgICBpZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIGxpbmVh
ckdyYWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgICAgIGxpbmVh
ckdyYWRpZW50LnNldEZpbmFsU3RvcChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOwotICAgICAgICAgICAgbGluZWFy
R3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0g
ICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QuYm90dG9t
TGVmdCgpLngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tTGVmdCgpLnko
KSAtIC8qIG9mZnNldCBsaW1pdCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKLSAgICAgICAgICAgIGxp
bmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7Ci0gICAgICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNCwgUXQ6OndoaXRlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwg
bGluZWFyR3JhZGllbnQpOwotCi0gICAgICAgIHJlY3QgPSBzdWJDb250cm9sUmVjdChDQ19Db21i
b0JveCwgY21iLCBTQ19Db21ib0JveEFycm93LCB3aWRnZXQpOwotICAgICAgICBRUGl4bWFwIHBp
YyA9IGZpbmRDb21ib0J1dHRvbihyZWN0LnNpemUoKSwgbXVsdGlwbGUsIGRpc2FibGVkKTsKLQot
ICAgICAgICBpZiAocGljLmlzTnVsbCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
aW50IHggPSAocmVjdC53aWR0aCgpIC0gcGljLndpZHRoKCkpID4+IDE7Ci0gICAgICAgIGludCB5
ID0gKHJlY3QuaGVpZ2h0KCkgLSBwaWMuaGVpZ2h0KCkpID4+IDE7Ci0gICAgICAgIHBhaW50ZXIt
PmRyYXdQaXhtYXAocmVjdC54KCkgKyB4LCByZWN0LnkoKSArIHksIHBpYyk7Ci0KLSAgICAgICAg
cGFpbnRlci0+c2V0UGVuKGRpc2FibGVkID8gUXQ6OmdyYXkgOiBRdDo6ZGFya0dyYXkpOwotICAg
ICAgICBwYWludGVyLT5kcmF3TGluZShyZWN0LmxlZnQoKSAtIDIsIHJlY3QudG9wKCkgKyAyLCBy
ZWN0LmxlZnQoKSAtIDIsIHJlY3QuYm90dG9tKCkgLSAyKTsKLQotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUVdpbmRvd3NTdHlsZTo6ZHJhd0NvbXBsZXhDb250
cm9sKGNvbnRyb2wsIG9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKLSAgICB9Ci19Ci0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMWI5OWQyYjhiNWEzOWM5NGMwYjlhMTcyYTE4ZmU0YmFlYzA0MjY5
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0eWxlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9u
IGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
LSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBRdE1vYmlsZVdlYlN0eWxl
X2gKLSNkZWZpbmUgUXRNb2JpbGVXZWJTdHlsZV9oCi0KLSNpbmNsdWRlIDxRV2luZG93c1N0eWxl
PgotCi1jbGFzcyBRdE1vYmlsZVdlYlN0eWxlIDogcHVibGljIFFXaW5kb3dzU3R5bGUgewotcHVi
bGljOgotICAgIFF0TW9iaWxlV2ViU3R5bGUoKTsKLQotICAgIHZvaWQgZHJhd0NvbnRyb2woQ29u
dHJvbEVsZW1lbnQsIGNvbnN0IFFTdHlsZU9wdGlvbiosIFFQYWludGVyKiwgY29uc3QgUVdpZGdl
dCopIGNvbnN0OwotICAgIHZvaWQgZHJhd0NvbXBsZXhDb250cm9sKENvbXBsZXhDb250cm9sLCBj
b25zdCBRU3R5bGVPcHRpb25Db21wbGV4KiwgUVBhaW50ZXIqLCBjb25zdCBRV2lkZ2V0KikgY29u
c3Q7Ci0gICAgdm9pZCBkcmF3UHJpbWl0aXZlKFByaW1pdGl2ZUVsZW1lbnQsIGNvbnN0IFFTdHls
ZU9wdGlvbiosIFFQYWludGVyKiwgY29uc3QgUVdpZGdldCopIGNvbnN0OwotCi1wcml2YXRlOgot
ICAgIHZvaWQgZHJhd0NoZWNrZXIoUVBhaW50ZXIqIHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3Ig
Y29sb3IpIGNvbnN0OwotICAgIFFQaXhtYXAgZmluZENoZWNrZXIoY29uc3QgUVJlY3QmIHJlY3Qs
IGJvb2wgZGlzYWJsZWQpIGNvbnN0OwotCi0gICAgdm9pZCBkcmF3UmFkaW8oUVBhaW50ZXIqIHBh
aW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIFFDb2xvciBjb2xvcikgY29u
c3Q7Ci0gICAgUVBpeG1hcCBmaW5kUmFkaW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tl
ZCwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7Ci0KLSAgICBRU2l6ZSBnZXRCdXR0b25JbWFnZVNpemUo
Y29uc3QgUVNpemUmIGJ1dHRvblNpemUpIGNvbnN0OwotICAgIHZvaWQgZHJhd1NpbXBsZUNvbWJv
QnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9y
KSBjb25zdDsKLSAgICB2b2lkIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdDsKLSAgICBRUGl4bWFw
IGZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBtdWx0aXBsZSwgYm9vbCBk
aXNhYmxlZCkgY29uc3Q7Ci0KLX07Ci0KLSNlbmRpZiAvLyBRdE1vYmlsZVdlYlN0eWxlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0U3R5bGVPcHRpb25XZWJDb21i
b0JveC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRTdHlsZU9wdGlvbldlYkNvbWJv
Qm94LmgKaW5kZXggMjljODIyMGFjYTkxOGRmYTY0Mzc2YmU1YTFmMGVkNjdlZjk1NGNlNi4uZGFl
MTY5NjVhZWVjZjQyZGVmYzJjM2U5MTIxMDU0NzFkNTQ5NGMwZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94LmgKQEAgLTIz
LDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgogCiAjaW5jbHVkZSA8
UVN0eWxlT3B0aW9uPgogCkBAIC0zNCwxMSArMzUsNyBAQCBjbGFzcyBRdFN0eWxlT3B0aW9uV2Vi
Q29tYm9Cb3ggOiBwdWJsaWMgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggewogcHVibGljOgogICAgIFF0
U3R5bGVPcHRpb25XZWJDb21ib0JveChSZW5kZXJPYmplY3QqIG8pCiAgICAgICAgIDogUVN0eWxl
T3B0aW9uQ29tYm9Cb3goKQotICAgICNpZiBFTkFCTEUoTk9fTElTVEJPWF9SRU5ERVJJTkcpCiAg
ICAgICAgICwgbV9tdWx0aXBsZShjaGVja011bHRpcGxlKG8pKQotICAgICNlbHNlCi0gICAgICAg
ICwgbV9tdWx0aXBsZShmYWxzZSkKLSAgICAjZW5kaWYKICAgICB7CiAgICAgfQogCkBAIC00OSw2
ICs0Niw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGNoZWNrTXVsdGlwbGUoUmVuZGVyT2JqZWN0
KiBvKQogICAgIHsKKyAgICAgICAgaWYgKFJlbmRlclRoZW1lUXQ6OnVzZU1vYmlsZVRoZW1lKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBz
ZWxlY3QgPSBvID8gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihvLT5ub2RlKCkpIDog
MDsKICAgICAgICAgcmV0dXJuIHNlbGVjdCA/IHNlbGVjdC0+bXVsdGlwbGUoKSA6IGZhbHNlOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1l
UVN0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi40NmQwNTA0NWMxNWQ3YzY2NGI3NmI4YjMzNWJkNmE5NmRlOTBiOWRk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRU3R5bGUuY3BwCkBAIC0wLDAgKzEsODI0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQg
b2YgdGhlIFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBD
b3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA2
IERpcmsgTXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5o
IgorCisjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxl
Y3Rvci5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDaHJvbWUu
aCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRRdC5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udFNlbGVj
dG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0
cmluZ3MuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgorI2lu
Y2x1ZGUgIlF0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5o
IgorI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIK
KyNlbmRpZgorI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lUXQuaCIKKyNpbmNsdWRlICJTbGlkZXJUaHVtYkVsZW1lbnQuaCIKKyNpbmNsdWRlICJVc2Vy
QWdlbnRTdHlsZVNoZWV0cy5oIgorCisjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgorI2luY2x1ZGUg
PFFDb2xvcj4KKyNpbmNsdWRlIDxRRmlsZT4KKyNpbmNsdWRlIDxRRm9udE1ldHJpY3M+CisjaW5j
bHVkZSA8UUxpbmVFZGl0PgorI2luY2x1ZGUgPFFNYWNTdHlsZT4KKyNpbmNsdWRlIDxRUGFpbnRl
cj4KKyNpbmNsdWRlIDxRUGxhc3RpcXVlU3R5bGU+CisjaW5jbHVkZSA8UVB1c2hCdXR0b24+Cisj
aW5jbHVkZSA8UVN0eWxlRmFjdG9yeT4KKyNpbmNsdWRlIDxRU3R5bGVPcHRpb25CdXR0b24+Cisj
aW5jbHVkZSA8UVN0eWxlT3B0aW9uRnJhbWVWMj4KKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQor
I2luY2x1ZGUgPFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjI+CisjZW5kaWYKKyNpbmNsdWRlIDxR
U3R5bGVPcHRpb25TbGlkZXI+CisjaW5jbHVkZSA8UVdpZGdldD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitpbmxpbmUgc3RhdGljIHZvaWQg
aW5pdFN0eWxlT3B0aW9uKFFXaWRnZXQgKndpZGdldCwgUVN0eWxlT3B0aW9uJiBvcHRpb24pCit7
CisgICAgaWYgKHdpZGdldCkKKyAgICAgICAgb3B0aW9uLmluaXRGcm9tKHdpZGdldCk7CisgICAg
ZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAgSWYgYSB3aWRnZXQgaXMgbm90IGRpcmVjdGx5
IGF2YWlsYWJsZSBmb3IgcmVuZGVyaW5nLCB3ZSBmYWxsYmFjayB0byBkZWZhdWx0CisgICAgICAg
ICAgdmFsdWUgZm9yIGFuIGFjdGl2ZSB3aWRnZXQuCisgICAgICAgICAqLworICAgICAgICBvcHRp
b24uc3RhdGUgPSBRU3R5bGU6OlN0YXRlX0FjdGl2ZSB8IFFTdHlsZTo6U3RhdGVfRW5hYmxlZDsK
KyAgICB9Cit9CisKKworUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBSZW5kZXJUaGVtZVFT
dHlsZTo6Z2V0U3R5bGVQYWludGVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAg
IHJldHVybiBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+KG5ldyBTdHlsZVBhaW50ZXJRU3R5
bGUodGhpcywgcGFpbnRJbmZvKSk7Cit9CisKK1N0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWlu
dGVyUVN0eWxlKFJlbmRlclRoZW1lUVN0eWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8pCisgICAgOiBTdHlsZVBhaW50ZXIodGhlbWUsIHBhaW50SW5mbykKK3sKKyAgICBpbml0
KHBhaW50SW5mby5jb250ZXh0ID8gcGFpbnRJbmZvLmNvbnRleHQgOiAwLCB0aGVtZS0+cVN0eWxl
KCkpOworfQorCitTdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShTY3JvbGxi
YXJUaGVtZVF0KiB0aGVtZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorICAgIDogU3R5bGVQ
YWludGVyKCkKK3sKKyAgICBpbml0KGNvbnRleHQsIHRoZW1lLT5zdHlsZSgpKTsKK30KKwordm9p
ZCBTdHlsZVBhaW50ZXJRU3R5bGU6OmluaXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBRU3R5
bGUqIHRoZW1lU3R5bGUpCit7CisgICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4o
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHdpZGdldCA9IDA7CisgICAgUVBhaW50
RGV2aWNlKiBkZXYgPSAwOworICAgIGlmIChwYWludGVyKQorICAgICAgICBkZXYgPSBwYWludGVy
LT5kZXZpY2UoKTsKKyAgICBpZiAoZGV2ICYmIGRldi0+ZGV2VHlwZSgpID09IFFJbnRlcm5hbDo6
V2lkZ2V0KQorICAgICAgICB3aWRnZXQgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4oZGV2KTsKKyAg
ICBzdHlsZSA9IHRoZW1lU3R5bGU7CisKKyAgICBTdHlsZVBhaW50ZXI6OmluaXQoY29udGV4dCk7
Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUo
UGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lUVN0eWxl
KHBhZ2UpKTsKK30KKworUmVuZGVyVGhlbWVRU3R5bGU6OlJlbmRlclRoZW1lUVN0eWxlKFBhZ2Uq
IHBhZ2UpCisgICAgOiBSZW5kZXJUaGVtZVF0KHBhZ2UpCisjaWZuZGVmIFFUX05PX0xJTkVFRElU
CisgICAgLCBtX2xpbmVFZGl0KDApCisjZW5kaWYKK3sKKyAgICBRUHVzaEJ1dHRvbiBidXR0b247
CisgICAgUUZvbnQgZGVmYXVsdEJ1dHRvbkZvbnQgPSBRQXBwbGljYXRpb246OmZvbnQoJmJ1dHRv
bik7CisgICAgbV9idXR0b25Gb250RmFtaWx5ID0gZGVmYXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7
CisjaWZkZWYgUV9PU19NQUMKKyAgICBidXR0b24uc2V0QXR0cmlidXRlKFF0OjpXQV9NYWNTbWFs
bFNpemUpOworICAgIFFGb250SW5mbyBmb250SW5mbyhkZWZhdWx0QnV0dG9uRm9udCk7CisgICAg
bV9idXR0b25Gb250UGl4ZWxTaXplID0gZm9udEluZm8ucGl4ZWxTaXplKCk7CisjZW5kaWYKKwor
ICAgIG1fZmFsbGJhY2tTdHlsZSA9IFFTdHlsZUZhY3Rvcnk6OmNyZWF0ZShRTGF0aW4xU3RyaW5n
KCJ3aW5kb3dzIikpOworfQorCitSZW5kZXJUaGVtZVFTdHlsZTo6flJlbmRlclRoZW1lUVN0eWxl
KCkKK3sKKyAgICBkZWxldGUgbV9mYWxsYmFja1N0eWxlOworI2lmbmRlZiBRVF9OT19MSU5FRURJ
VAorICAgIGRlbGV0ZSBtX2xpbmVFZGl0OworI2VuZGlmCit9CisKKworLy8gZm9yIHNvbWUgd2lk
Z2V0IHBhaW50aW5nLCB3ZSBuZWVkIHRvIGZhbGxiYWNrIHRvIFdpbmRvd3Mgc3R5bGUKK1FTdHls
ZSogUmVuZGVyVGhlbWVRU3R5bGU6OmZhbGxiYWNrU3R5bGUoKSBjb25zdAoreworICAgIHJldHVy
biAobV9mYWxsYmFja1N0eWxlKSA/IG1fZmFsbGJhY2tTdHlsZSA6IFFBcHBsaWNhdGlvbjo6c3R5
bGUoKTsKK30KKworUVN0eWxlKiBSZW5kZXJUaGVtZVFTdHlsZTo6cVN0eWxlKCkgY29uc3QKK3sK
KyAgICBpZiAobV9wYWdlKSB7CisgICAgICAgIFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0g
bV9wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworCisgICAg
ICAgIGlmIChwYWdlQ2xpZW50KQorICAgICAgICAgICAgcmV0dXJuIHBhZ2VDbGllbnQtPnN0eWxl
KCk7CisgICAgfQorCisgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKK30KKworaW50
IFJlbmRlclRoZW1lUVN0eWxlOjpmaW5kRnJhbWVMaW5lV2lkdGgoUVN0eWxlKiBzdHlsZSkgY29u
c3QKK3sKKyNpZm5kZWYgUVRfTk9fTElORUVESVQKKyAgICBpZiAoIW1fbGluZUVkaXQpCisgICAg
ICAgIG1fbGluZUVkaXQgPSBuZXcgUUxpbmVFZGl0KCk7CisjZW5kaWYKKworICAgIFFTdHlsZU9w
dGlvbkZyYW1lVjIgb3B0OworICAgIFFXaWRnZXQqIHdpZGdldCA9IDA7CisjaWZuZGVmIFFUX05P
X0xJTkVFRElUCisgICAgd2lkZ2V0ID0gbV9saW5lRWRpdDsKKyNlbmRpZgorICAgIHJldHVybiBz
dHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9EZWZhdWx0RnJhbWVXaWR0aCwgJm9wdCwgd2lk
Z2V0KTsKK30KKworUVJlY3QgUmVuZGVyVGhlbWVRU3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KGNv
bnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0Cit7CisgICAgUVN0eWxlT3B0aW9uQnV0dG9u
IG9wdGlvbjsKKyAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKKyAgICBv
cHRpb24ucmVjdCA9IG9yaWdpbmFsUmVjdDsKKworICAgIFFSZWN0IGxheW91dFJlY3QgPSBxU3R5
bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwgJm9w
dGlvbiwgMCk7CisgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKSB7CisgICAgICAgIGludCBw
YWRkaW5nTGVmdCA9IGxheW91dFJlY3QubGVmdCgpIC0gb3JpZ2luYWxSZWN0LmxlZnQoKTsKKyAg
ICAgICAgaW50IHBhZGRpbmdSaWdodCA9IG9yaWdpbmFsUmVjdC5yaWdodCgpIC0gbGF5b3V0UmVj
dC5yaWdodCgpOworICAgICAgICBpbnQgcGFkZGluZ1RvcCA9IGxheW91dFJlY3QudG9wKCkgLSBv
cmlnaW5hbFJlY3QudG9wKCk7CisgICAgICAgIGludCBwYWRkaW5nQm90dG9tID0gb3JpZ2luYWxS
ZWN0LmJvdHRvbSgpIC0gbGF5b3V0UmVjdC5ib3R0b20oKTsKKworICAgICAgICByZXR1cm4gb3Jp
Z2luYWxSZWN0LmFkanVzdGVkKC1wYWRkaW5nTGVmdCwgLXBhZGRpbmdUb3AsIHBhZGRpbmdSaWdo
dCwgcGFkZGluZ0JvdHRvbSk7CisgICAgfQorICAgIHJldHVybiBvcmlnaW5hbFJlY3Q7Cit9CisK
K3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0
eWxlKiByZW5kZXJTdHlsZSkgY29uc3QKK3sKKyAgICBRU2l6ZSBzaXplKDAsIDApOworICAgIGNv
bnN0IFFGb250TWV0cmljcyBmbShyZW5kZXJTdHlsZS0+Zm9udCgpLmZvbnQoKSk7CisgICAgUVN0
eWxlKiBzdHlsZSA9IHFTdHlsZSgpOworCisgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFy
YW5jZSgpKSB7CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBh
cnQ6CisgICAgY2FzZSBUZXh0RmllbGRQYXJ0OiB7CisgICAgICAgIGludCBwYWRkaW5nID0gZmlu
ZEZyYW1lTGluZVdpZHRoKHN0eWxlKTsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdM
ZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFk
ZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+
c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICAgICAgcmVuZGVyU3R5
bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8g
SWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUg
bm90aGluZyB0byBkby4KKyAgICBpZiAoIXJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2lj
T3JBdXRvKCkgJiYgIXJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgY2Fz
ZSBDaGVja2JveFBhcnQ6IHsKKyAgICAgICAgUVN0eWxlT3B0aW9uIHN0eWxlT3B0aW9uOworICAg
ICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOworICAgICAgICBp
bnQgY2hlY2tCb3hXaWR0aCA9IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0luZGljYXRv
cldpZHRoLCAmc3R5bGVPcHRpb24pOworICAgICAgICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0
eWxlLT5lZmZlY3RpdmVab29tKCk7CisgICAgICAgIHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRo
LCBjaGVja0JveFdpZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUmFkaW9Q
YXJ0OiB7CisgICAgICAgIFFTdHlsZU9wdGlvbiBzdHlsZU9wdGlvbjsKKyAgICAgICAgc3R5bGVP
cHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKKyAgICAgICAgaW50IHJhZGlvV2lk
dGggPSBzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0
aCwgJnN0eWxlT3B0aW9uKTsKKyAgICAgICAgcmFkaW9XaWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZm
ZWN0aXZlWm9vbSgpOworICAgICAgICBzaXplID0gUVNpemUocmFkaW9XaWR0aCwgcmFkaW9XaWR0
aCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAg
IGNhc2UgQnV0dG9uUGFydDogeworICAgICAgICBRU3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRp
b247CisgICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Cisg
ICAgICAgIFFTaXplIGNvbnRlbnRTaXplID0gZm0uc2l6ZShRdDo6VGV4dFNob3dNbmVtb25pYywg
UVN0cmluZzo6ZnJvbUxhdGluMSgiWCIpKTsKKyAgICAgICAgUVNpemUgcHVzaEJ1dHRvblNpemUg
PSBzdHlsZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGU6OkNUX1B1c2hCdXR0b24sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0
aW9uLCBjb250ZW50U2l6ZSwgMCk7CisgICAgICAgIHN0eWxlT3B0aW9uLnJlY3QgPSBRUmVjdCgw
LCAwLCBwdXNoQnV0dG9uU2l6ZS53aWR0aCgpLCBwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgIFFSZWN0IGxheW91dFJlY3QgPSBzdHlsZS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpT
RV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIDApOworCisgICAgICAgIC8vIElmIHRoZSBz
dHlsZSBzdXBwb3J0cyBsYXlvdXQgcmVjdHMgd2UgdXNlIHRoYXQsIGFuZCAgY29tcGVuc2F0ZSBh
Y2NvcmRpbmdseQorICAgICAgICAvLyBpbiBwYWludEJ1dHRvbigpIGJlbG93LgorICAgICAgICBp
ZiAoIWxheW91dFJlY3QuaXNOdWxsKCkpCisgICAgICAgICAgICBzaXplLnNldEhlaWdodChsYXlv
dXRSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZS5zZXRIZWln
aHQocHVzaEJ1dHRvblNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIE1lbnVsaXN0UGFydDogeworICAgICAgICBRU3R5bGVPcHRpb25Db21ib0JveCBzdHls
ZU9wdGlvbjsKKyAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFs
bDsKKyAgICAgICAgaW50IGNvbnRlbnRIZWlnaHQgPSBxTWF4KGZtLmxpbmVTcGFjaW5nKCksIDE0
KSArIDI7CisgICAgICAgIFFTaXplIG1lbnVMaXN0U2l6ZSA9IHN0eWxlLT5zaXplRnJvbUNvbnRl
bnRzKFFTdHlsZTo6Q1RfQ29tYm9Cb3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgUVNpemUoMCwgY29udGVudEhlaWdo
dCksIDApOworICAgICAgICBzaXplLnNldEhlaWdodChtZW51TGlzdFNpemUuaGVpZ2h0KCkpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgLy8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtl
IG1pbi13aWR0aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgorICAgIGlmIChyZW5kZXJTdHlsZS0+
d2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmIHNpemUud2lkdGgoKSA+IDApCisgICAgICAg
IHJlbmRlclN0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOwor
ICAgIGlmIChyZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+
IDApCisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0
KCksIEZpeGVkKSk7Cit9CisKKworCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RCdXR0
b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KikgY29uc3QKK3sKKyAgICAvLyBEaXRjaCB0aGUgYm9yZGVyLgorICAgIHN0eWxlLT5y
ZXNldEJvcmRlcigpOworCisjaWZkZWYgUV9PU19NQUMKKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSA9PSBQdXNoQnV0dG9uUGFydCkgeworICAgICAgICAvLyBUaGUgTWFjIHBvcnRzIGlnbm9y
ZSB0aGUgc3BlY2lmaWVkIGhlaWdodCBmb3IgPGlucHV0IHR5cGU9ImJ1dHRvbiI+IGVsZW1lbnRz
CisgICAgICAgIC8vIHVubGVzcyBhIGJvcmRlciBhbmQvb3IgYmFja2dyb3VuZCBDU1MgcHJvcGVy
dHkgaXMgYWxzbyBzcGVjaWZpZWQuCisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1
dG8pKTsKKyAgICB9CisjZW5kaWYKKworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRp
b24gPSBzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldElz
QWJzb2x1dGVTaXplKHRydWUpOworCisjaWZkZWYgUV9PU19NQUMgLy8gVXNlIGZpeGVkIGZvbnQg
c2l6ZSBhbmQgZmFtaWx5IG9uIE1hYyAobGlrZSBTYWZhcmkgZG9lcykKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0U3BlY2lmaWVkU2l6ZShtX2J1dHRvbkZvbnRQaXhlbFNpemUpOworICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKKyNlbHNl
CisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc3R5bGUtPmZvbnRTaXplKCkp
OworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoc3R5bGUtPmZvbnRTaXplKCkp
OworI2VuZGlmCisKKyAgICBGb250RmFtaWx5IGZvbnRGYW1pbHk7CisgICAgZm9udEZhbWlseS5z
ZXRGYW1pbHkobV9idXR0b25Gb250RmFtaWx5KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0RmFt
aWx5KGZvbnRGYW1pbHkpOworICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2Ny
aXB0aW9uKTsKKyAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShzZWxlY3Rvci0+Zm9udFNlbGVjdG9y
KCkpOworICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhl
aWdodCgpKTsKKyAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKKyAgICBzZXRCdXR0b25QYWRkaW5n
KHN0eWxlKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0QnV0dG9uUGFkZGluZyhS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0eWxl
T3B0aW9uOworICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7CisK
KyAgICAvLyBGYWtlIGEgYnV0dG9uIHJlY3QgaGVyZSwgc2luY2Ugd2UncmUganVzdCBjb21wdXRp
bmcgZGVsdGFzCisgICAgUVJlY3Qgb3JpZ2luYWxSZWN0ID0gUVJlY3QoMCwgMCwgMTAwLCAzMCk7
CisgICAgc3R5bGVPcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVjdDsKKworICAgIC8vIERlZmF1bHQg
cGFkZGluZyBpcyBiYXNlZCBvbiB0aGUgYnV0dG9uIG1hcmdpbiBwaXhlbCBtZXRyaWMKKyAgICBp
bnQgYnV0dG9uTWFyZ2luID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fQnV0dG9u
TWFyZ2luLCAmc3R5bGVPcHRpb24sIDApOworICAgIGludCBwYWRkaW5nTGVmdCA9IGJ1dHRvbk1h
cmdpbjsKKyAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gYnV0dG9uTWFyZ2luOworICAgIGludCBwYWRk
aW5nVG9wID0gYnV0dG9uTWFyZ2luOworICAgIGludCBwYWRkaW5nQm90dG9tID0gYnV0dG9uTWFy
Z2luOworCisgICAgLy8gVGhlbiBjaGVjayBpZiB0aGUgc3R5bGUgdXNlcyBsYXlvdXQgbWFyZ2lu
cworICAgIFFSZWN0IGxheW91dFJlY3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxl
OjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7CisgICAgaWYgKCFsYXlvdXRSZWN0
LmlzTnVsbCgpKSB7CisgICAgICAgIFFSZWN0IGNvbnRlbnRzUmVjdCA9IHFTdHlsZSgpLT5zdWJF
bGVtZW50UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25Db250ZW50cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7
CisgICAgICAgIHBhZGRpbmdMZWZ0ID0gY29udGVudHNSZWN0LmxlZnQoKSAtIGxheW91dFJlY3Qu
bGVmdCgpOworICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXlvdXRSZWN0LnJpZ2h0KCkgLSBjb250
ZW50c1JlY3QucmlnaHQoKTsKKyAgICAgICAgcGFkZGluZ1RvcCA9IGNvbnRlbnRzUmVjdC50b3Ao
KSAtIGxheW91dFJlY3QudG9wKCk7CisKKyAgICAgICAgLy8gQ2FuJ3QgdXNlIHRoaXMgcmlnaHQg
bm93IGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYmFzZWxpbmUgdG8gY29tcGVuc2F0ZQorICAg
ICAgICAvLyBwYWRkaW5nQm90dG9tID0gbGF5b3V0UmVjdC5ib3R0b20oKSAtIGNvbnRlbnRzUmVj
dC5ib3R0b20oKTsKKyAgICB9CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRk
aW5nTGVmdCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRk
aW5nUmlnaHQsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRp
bmdUb3AsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRp
bmdCb3R0b20sIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
KQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkpOworICAgIGlmICghcC5pc1Zh
bGlkKCkpCisgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0
aW9uOworICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKKyAgICBvcHRpb24u
cmVjdCA9IHI7CisgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7CisKKyAg
ICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMo
b3B0aW9uLCBvKTsKKyAgICBpZiAoYXBwZWFyYW5jZSA9PSBQdXNoQnV0dG9uUGFydCB8fCBhcHBl
YXJhbmNlID09IEJ1dHRvblBhcnQpIHsKKyAgICAgICAgb3B0aW9uLnJlY3QgPSBpbmZsYXRlQnV0
dG9uUmVjdChvcHRpb24ucmVjdCk7CisgICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Q
dXNoQnV0dG9uLCBvcHRpb24pOworICAgIH0gZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBSYWRpb1Bh
cnQpCisgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1JhZGlvQnV0dG9uLCBvcHRpb24p
OworICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hlY2tib3hQYXJ0KQorICAgICAgIHAuZHJh
d0NvbnRyb2woUVN0eWxlOjpDRV9DaGVja0JveCwgb3B0aW9uKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NT
U3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7Cisg
ICAgLy8gUmVzZXR0aW5nIHRoZSBzdHlsZSBsaWtlIHRoaXMgbGVhZHMgdG8gZGlmZmVyZW5jZXMg
bGlrZToKKyAgICAvLyAtIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAx
Njh4MjUgW2JnY29sb3I9I0ZGRkZGRl0gYm9yZGVyOiAoMnB4IGluc2V0ICMwMDAwMDApXQorICAg
IC8vICsgUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2NngyNgorICAg
IC8vIGluIGxheW91dCB0ZXN0cyB3aGVuIGEgQ1NTIHN0eWxlIGlzIGFwcGxpZWQgdGhhdCBkb2Vz
bid0IGFmZmVjdCBiYWNrZ3JvdW5kIGNvbG9yLCBib3JkZXIgb3IKKyAgICAvLyBwYWRkaW5nLiBK
dXN0IHdvcnRoIGtlZXBpbmcgaW4gbWluZCEKKyAgICBzdHlsZS0+c2V0QmFja2dyb3VuZENvbG9y
KENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5
bGUtPnJlc2V0UGFkZGluZygpOworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsK
K30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQ
YWludGVyUVN0eWxlIHAodGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBRU3R5bGVPcHRpb25GcmFtZVYyIHBhbmVsOworICAgIGluaXRT
dHlsZU9wdGlvbihwLndpZGdldCwgcGFuZWwpOworICAgIHBhbmVsLnJlY3QgPSByOworICAgIHBh
bmVsLmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aChxU3R5bGUoKSk7CisgICAgcGFuZWwu
c3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47CisgICAgcGFuZWwuZmVhdHVyZXMgPSBRU3R5
bGVPcHRpb25GcmFtZVYyOjpOb25lOworCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRh
dGEgZm9yIGEgdGV4dCBmaWVsZAorICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFs
aXplQ29tbW9uUVN0eWxlT3B0aW9ucyhwYW5lbCwgbyk7CisgICAgaWYgKGFwcGVhcmFuY2UgIT0g
VGV4dEZpZWxkUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAor
ICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFRleHRBcmVhUGFydAorICAgICAgICAmJiBhcHBlYXJh
bmNlICE9IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBw
YWludCB0aGUgdGV4dCBmaWVsZC4KKyAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5l
bExpbmVFZGl0LCBwYW5lbCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRo
ZW1lUVN0eWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgYWRq
dXN0VGV4dEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBh
aW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0Rmll
bGQobywgaSwgcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFBvcHVwUGFkZGlu
ZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29uc3QgaW50IHBhZGRpbmdMZWZ0
ID0gNDsKKyAgICBjb25zdCBpbnQgcGFkZGluZ1JpZ2h0ID0gc3R5bGUtPndpZHRoKCkuaXNGaXhl
ZCgpIHx8IHN0eWxlLT53aWR0aCgpLmlzUGVyY2VudCgpID8gNSA6IDg7CisKKyAgICBzdHlsZS0+
c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOworCisgICAgUVN0eWxl
T3B0aW9uQ29tYm9Cb3ggb3B0OworICAgIGludCB3ID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFT
dHlsZTo6UE1fQnV0dG9uSWNvblNpemUsICZvcHQsIDApOworICAgIHN0eWxlLT5zZXRQYWRkaW5n
UmlnaHQoTGVuZ3RoKHBhZGRpbmdSaWdodCArIHcsIEZpeGVkKSk7CisKKyAgICBzdHlsZS0+c2V0
UGFkZGluZ1RvcChMZW5ndGgoMiwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRv
bShMZW5ndGgoMiwgRml4ZWQpKTsKK30KKworCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWlu
dE1lbnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkpOworICAgIGlmICgh
cC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgUXRTdHlsZU9wdGlvbldl
YkNvbWJvQm94IG9wdChvKTsKKyAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdCk7Cisg
ICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0LCBvKTsKKworICAgIEludFJlY3Qg
cmVjdCA9IHI7CisKKyNpZiBkZWZpbmVkKFFfT1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlM
RV9NQUMpCisgICAgLy8gUU1hY1N0eWxlIG1ha2VzIHRoZSBjb21ibyBib3hlcyBhIGxpdHRsZSBi
aXQgc21hbGxlciB0byBsZWF2ZSBzcGFjZSBmb3IgdGhlIGZvY3VzIHJlY3QuCisgICAgLy8gQmVj
YXVzZSBvZiBpdCwgdGhlIGNvbWJvIGJ1dHRvbiBpcyBkcmF3biBhdCBhIHBvaW50IHRvIHRoZSBs
ZWZ0IG9mIHdoZXJlIGl0IHdhcyBleHBlY3QgdG8gYmUgYW5kIG1heSBlbmQgdXAKKyAgICAvLyBv
dmVybGFwcGVkIHdpdGggdGhlIHRleHQuIFRoaXMgd2lsbCBmb3JjZSBRTWFjU3R5bGUgdG8gZHJh
dyB0aGUgY29tYm8gYm94IHdpdGggdGhlIGV4cGVjdGVkIHdpZHRoLgorICAgIGlmIChxb2JqZWN0
X2Nhc3Q8UU1hY1N0eWxlKj4ocC5zdHlsZSkpCisgICAgICAgIHJlY3QuaW5mbGF0ZVgoMyk7Cisj
ZW5kaWYKKworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOworICAg
IHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworICAgIG9wdC5yZWN0Lm1vdmVUbyhRUG9p
bnQoMCwgMCkpOworICAgIG9wdC5yZWN0LnNldFNpemUocmVjdC5zaXplKCkpOworCisgICAgcC5k
cmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21ib0JveCwgb3B0KTsKKyAgICBwLnBhaW50
ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJl
bmRlclRoZW1lUVN0eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0
b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIFdPUktB
Uk9VTkQgYmVjYXVzZSBodG1sLmNzcyBzcGVjaWZpZXMgLXdlYmtpdC1ib3JkZXItcmFkaXVzIGZv
ciA8c2VsZWN0PiBzbyB3ZSBvdmVycmlkZSBpdCBoZXJlCisgICAgLy8gc2VlIGFsc28gaHR0cDov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzOTkKKyAgICBzdHlsZS0+cmVzZXRC
b3JkZXJSYWRpdXMoKTsKKworICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0by4KKyAgICBz
dHlsZS0+c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisKKyAgICAvLyBXaGl0ZS1zcGFjZSBpcyBs
b2NrZWQgdG8gcHJlCisgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKworICAgIGNvbXB1
dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKKworICAgIC8vIEFkZCBpbiB0aGUgcGFkZGluZyB0
aGF0IHdlJ2QgbGlrZSB0byB1c2UuCisgICAgc2V0UG9wdXBQYWRkaW5nKHN0eWxlKTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRo
aXMsIGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94IG9wdGlvbihvKTsKKyAgICBpbml0U3R5bGVPcHRp
b24ocC53aWRnZXQsIG9wdGlvbik7CisgICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMo
b3B0aW9uLCBvKTsKKyAgICBvcHRpb24ucmVjdCA9IHI7CisKKyAgICAvLyBmb3IgZHJhd2luZyB0
aGUgY29tYm8gYm94IGFycm93LCByZWx5IG9ubHkgb24gdGhlIGZhbGxiYWNrIHN0eWxlCisgICAg
cC5zdHlsZSA9IGZhbGxiYWNrU3R5bGUoKTsKKyAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5
bGU6OlNDX0NvbWJvQm94QXJyb3c7CisgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpD
Q19Db21ib0JveCwgb3B0aW9uKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVOQUJM
RShQUk9HUkVTU19UQUcpCitkb3VibGUgUmVuZGVyVGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0
aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdAor
eworICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSA+PSAwKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOworICAgIG9wdGlv
bi5yZWN0LnNldFNpemUocmVuZGVyUHJvZ3Jlc3MtPnNpemUoKSk7CisgICAgLy8gRklYTUU6IFVu
dGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBm
aXhlZCwKKyAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhl
IHByb2dyZXNzIGJhci4KKyAgICByZXR1cm4gKG9wdGlvbi5yZWN0LndpZHRoKCkgLyBxU3R5bGUo
KS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24p
KSAqIGFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3Mp
OworfQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9i
amVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBp
ZiAoIW8tPmlzUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHlsZVBh
aW50ZXJRU3R5bGUgcCh0aGlzLCBwaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOworICAg
IGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKKyAgICBpbml0aWFsaXplQ29tbW9u
UVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOworCisgICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclBy
b2dyZXNzID0gdG9SZW5kZXJQcm9ncmVzcyhvKTsKKyAgICBvcHRpb24ucmVjdCA9IHI7CisgICAg
b3B0aW9uLm1heGltdW0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgIG9w
dGlvbi5taW5pbXVtID0gMDsKKyAgICBvcHRpb24ucHJvZ3Jlc3MgPSAocmVuZGVyUHJvZ3Jlc3Mt
PnBvc2l0aW9uKCkgKiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKKworICAgIGNv
bnN0IFFQb2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOworICAgIHAucGFpbnRlci0+dHJhbnNs
YXRlKHRvcExlZnQpOworICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworICAg
IG9wdGlvbi5yZWN0LnNldFNpemUoci5zaXplKCkpOworCisgICAgaWYgKG9wdGlvbi5wcm9ncmVz
cyA8IDApIHsKKyAgICAgICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5v
a2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKKyAgICAgICAgLy8gd2Ugc2ltdWxh
dGUgb25lIHNxdWFyZSBhbmltYXRpbmcgYWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgICAg
IHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhckdyb292ZSwgb3B0aW9uKTsKKyAg
ICAgICAgaW50IGNodW5rV2lkdGggPSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Q
cm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24pOworICAgICAgICBRQ29sb3IgY29sb3IgPSAo
b3B0aW9uLnBhbGV0dGUuaGlnaGxpZ2h0KCkgPT0gb3B0aW9uLnBhbGV0dGUuYmFja2dyb3VuZCgp
KSA/IG9wdGlvbi5wYWxldHRlLmNvbG9yKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdo
bGlnaHQpIDogb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkhpZ2hsaWdodCk7CisgICAg
ICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAg
ICAgICAgICAgcC5wYWludGVyLT5maWxsUmVjdChvcHRpb24ucmVjdC5yaWdodCgpIC0gY2h1bmtX
aWR0aCAgLSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5yZWN0
LndpZHRoKCksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3QocmVuZGVyUHJvZ3Jl
c3MtPmFuaW1hdGlvblByb2dyZXNzKCkgKiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dp
ZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOworICAgIH0gZWxzZQorICAgICAgICBw
LmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXIsIG9wdGlvbik7CisKKyAgICBwLnBh
aW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5k
aWYKKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmpl
Y3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0
aGlzLCBwaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBRU3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOworICAgIGluaXRTdHlsZU9wdGlvbihwLndp
ZGdldCwgb3B0aW9uKTsKKyAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRl
ckdyb292ZTsKKyAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFT
dHlsZU9wdGlvbnMob3B0aW9uLCBvKTsKKyAgICBvcHRpb24ucmVjdCA9IHI7CisgICAgaWYgKGFw
cGVhcmFuY2UgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQorICAgICAgICBvcHRpb24ub3JpZW50YXRp
b24gPSBRdDo6VmVydGljYWw7CisgICAgaWYgKGlzUHJlc3NlZChvKSkKKyAgICAgICAgb3B0aW9u
LnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOworCisgICAgcC5kcmF3Q29tcGxleENvbnRy
b2woUVN0eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7CisKKyAgICBpZiAob3B0aW9uLnN0YXRlICYg
UVN0eWxlOjpTdGF0ZV9IYXNGb2N1cykgeworICAgICAgICBRU3R5bGVPcHRpb25Gb2N1c1JlY3Qg
Zm9jdXNPcHRpb247CisgICAgICAgIGZvY3VzT3B0aW9uLnJlY3QgPSByOworICAgICAgICBwLmRy
YXdQcmltaXRpdmUoUVN0eWxlOjpQRV9GcmFtZUZvY3VzUmVjdCwgZm9jdXNPcHRpb24pOworICAg
IH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRq
dXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwor
fQorCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVj
dCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRo
aXMsIHBpKTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CisgICAgaW5pdFN0eWxlT3B0aW9uKHAud2lk
Z2V0LCBvcHRpb24pOworICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVy
SGFuZGxlOworICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0
eWxlT3B0aW9ucyhvcHRpb24sIG8pOworICAgIG9wdGlvbi5yZWN0ID0gcjsKKyAgICBpZiAoYXBw
ZWFyYW5jZSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgb3B0aW9uLm9yaWVu
dGF0aW9uID0gUXQ6OlZlcnRpY2FsOworICAgIGlmIChpc1ByZXNzZWQobykpIHsKKyAgICAgICAg
b3B0aW9uLmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7CisgICAg
ICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKKyAgICB9CisKKyAgICBw
LmRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgb3B0aW9uKTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1
bWJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBF
bGVtZW50KiBlbGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJU
aHVtYlN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CisgICAgc3R5bGUtPnNldEJveFNo
YWRvdyhudWxscHRyKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hG
aWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4g
cGFpbnRUZXh0RmllbGQobywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjph
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJT
dHlsZSogc3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RWxlbWVudCogZSkgY29uc3QKK3sKKyAgICAvLyBSZXNldHRpbmcgdGhlIHN0eWxlIGxpa2UgdGhp
cyBsZWFkcyB0byBkaWZmZXJlbmNlcyBsaWtlOgorICAgIC8vIC0gUmVuZGVyVGV4dENvbnRyb2wg
e0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2OHgyNSBbYmdjb2xvcj0jRkZGRkZGXSBib3JkZXI6ICgy
cHggaW5zZXQgIzAwMDAwMCldCisgICAgLy8gKyBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0
ICgyLDIpIHNpemUgMTY2eDI2CisgICAgLy8gaW4gbGF5b3V0IHRlc3RzIHdoZW4gYSBDU1Mgc3R5
bGUgaXMgYXBwbGllZCB0aGF0IGRvZXNuJ3QgYWZmZWN0IGJhY2tncm91bmQgY29sb3IsIGJvcmRl
ciBvcgorICAgIC8vIHBhZGRpbmcuIEp1c3Qgd29ydGgga2VlcGluZyBpbiBtaW5kIQorICAgIHN0
eWxlLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBzdHlsZS0+
cmVzZXRCb3JkZXIoKTsKKyAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgY29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoc3R5bGUpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3Rvciwg
UmVuZGVyU3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFbGVtZW50KiBlKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKHNl
bGVjdG9yLCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2Vh
cmNoRmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50
UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVt
ZTo6cGFpbnRTZWFyY2hGaWVsZERlY29yYXRpb24obywgcGksIHIpOworfQorCit2b2lkIFJlbmRl
clRoZW1lUVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQq
IGUpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZW5kZXJUaGVtZTo6YWRq
dXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7
Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0
JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgcGksIHIpOworfQorCisjaWZuZGVm
IFFUX05PX1NQSU5CT1gKKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRJbm5lclNwaW5C
dXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwYWludElu
Zm8pOworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBR
U3R5bGVPcHRpb25TcGluQm94IG9wdGlvbjsKKyAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQs
IG9wdGlvbik7CisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAg
fCBRU3R5bGU6OlNDX1NwaW5Cb3hEb3duOworICAgIGlmICghaXNSZWFkT25seUNvbnRyb2wobykp
IHsKKyAgICAgICAgaWYgKGlzRW5hYmxlZChvKSkKKyAgICAgICAgICAgIG9wdGlvbi5zdGVwRW5h
YmxlZCA9IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBVcEVuYWJsZWQgfCBRQWJzdHJhY3RTcGluQm94
OjpTdGVwRG93bkVuYWJsZWQ7CisgICAgICAgIGlmIChpc1ByZXNzZWQobykpIHsKKyAgICAgICAg
ICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKKyAgICAgICAgICAgIGlm
IChpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2VkKG8pKQorICAgICAgICAgICAgICAgIG9wdGlvbi5h
Y3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0Nf
U3BpbkJveERvd247CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gUmVuZGVyIHRoZSBzcGluIGJ1
dHRvbnMgZm9yIExUUiBvciBSVEwgYWNjb3JkaW5nbHkuCisgICAgb3B0aW9uLmRpcmVjdGlvbiA9
IG8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFF0OjpMZWZ0VG9SaWdodCA6
IFF0OjpSaWdodFRvTGVmdDsKKworICAgIEludFJlY3QgYnV0dG9uUmVjdCA9IHJlY3Q7CisgICAg
Ly8gRGVmYXVsdCB0byBtb3ZpbmcgdGhlIGJ1dHRvbnMgYSBsaXR0bGUgYml0IHdpdGhpbiB0aGUg
ZWRpdG9yIGZyYW1lLgorICAgIGludCBpbmZsYXRlWCA9IC0yOworICAgIGludCBpbmZsYXRlWSA9
IC0yOworI2lmIGRlZmluZWQoUV9PU19NQUMpICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX01BQykK
KyAgICAvLyBRTWFjU3R5bGUgd2lsbCBwb3NpdGlvbiB0aGUgYXF1YSBidXR0b25zIGZsdXNoIHRv
IHRoZSByaWdodC4KKyAgICAvLyBUaGlzIHdpbGwgbW92ZSB0aGVtIG1vcmUgd2l0aGluIHRoZSBj
b250cm9sIGZvciBiZXR0ZXIgc3R5bGUsIGEgbGEKKyAgICAvLyBDaHJvbWl1bSBsb29rICYgZmVl
bC4KKyAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUpKSB7CisgICAgICAg
IGluZmxhdGVYID0gLTQ7CisgICAgICAgIC8vIFJlbmRlciBtaW5pIGFxdWEgc3BpbiBidXR0b25z
IGZvciBRTWFjU3R5bGUgdG8gZml0IG5pY2VseSBpbnRvCisgICAgICAgIC8vIHRoZSBlZGl0b3Ig
YXJlYSwgbGlrZSBDaHJvbWl1bS4KKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3Rh
dGVfTWluaTsKKyAgICB9CisjZW5kaWYKKyNpZiAhZGVmaW5lZChRVF9OT19TVFlMRV9QTEFTVElR
VUUpCisgICAgLy8gUVBsYXN0aXF1ZVN0eWxlIGxvb2tzIGJlc3Qgd2hlbiB0aGUgc3BpbiBidXR0
b25zIGFyZSBmbHVzaCB3aXRoIHRoZSBmcmFtZSdzIGVkZ2UuCisgICAgaWYgKHFvYmplY3RfY2Fz
dDxRUGxhc3RpcXVlU3R5bGUqPihwLnN0eWxlKSkgeworICAgICAgICBpbmZsYXRlWCA9IDA7Cisg
ICAgICAgIGluZmxhdGVZID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGJ1dHRvblJlY3QuaW5m
bGF0ZVgoaW5mbGF0ZVgpOworICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVkoaW5mbGF0ZVkpOworICAg
IG9wdGlvbi5yZWN0ID0gYnV0dG9uUmVjdDsKKworICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFT
dHlsZTo6Q0NfU3BpbkJveCwgb3B0aW9uKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYK
KworQ29udHJvbFBhcnQgUmVuZGVyVGhlbWVRU3R5bGU6OmluaXRpYWxpemVDb21tb25RU3R5bGVP
cHRpb25zKFFTdHlsZU9wdGlvbiYgb3B0aW9uLCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7Cisg
ICAgLy8gRGVmYXVsdCBiaXRzOiBubyBmb2N1cywgbm8gbW91c2Ugb3ZlcgorICAgIG9wdGlvbi5z
dGF0ZSAmPSB+KFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMgfCBRU3R5bGU6OlN0YXRlX01vdXNlT3Zl
cik7CisKKyAgICBpZiAoaXNSZWFkT25seUNvbnRyb2wobykpCisgICAgICAgIC8vIFJlYWRvbmx5
IGlzIHN1cHBvcnRlZCBvbiB0ZXh0ZmllbGRzLgorICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0
eWxlOjpTdGF0ZV9SZWFkT25seTsKKworICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6TGVmdFRv
UmlnaHQ7CisKKyAgICBpZiAoaXNIb3ZlcmVkKG8pKQorICAgICAgICBvcHRpb24uc3RhdGUgfD0g
UVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXI7CisKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJ
ZkV4aXN0cyhvcHRpb24ucGFsZXR0ZSk7CisKKyAgICBpZiAoIWlzRW5hYmxlZChvKSkgeworICAg
ICAgICBvcHRpb24ucGFsZXR0ZS5zZXRDdXJyZW50Q29sb3JHcm91cChRUGFsZXR0ZTo6RGlzYWJs
ZWQpOworICAgICAgICBvcHRpb24uc3RhdGUgJj0gflFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKKyAg
ICB9CisKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5zdHlsZSgpOworICAgIGlmICghc3R5
bGUpCisgICAgICAgIHJldHVybiBOb0NvbnRyb2xQYXJ0OworCisgICAgQ29udHJvbFBhcnQgcmVz
dWx0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBpZiAoc3VwcG9ydHNGb2N1cyhyZXN1bHQp
ICYmIGlzRm9jdXNlZChvKSkgeworICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0
ZV9IYXNGb2N1czsKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfS2V5Ym9h
cmRGb2N1c0NoYW5nZTsKKyAgICB9CisKKyAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFdl
YkNvcmU6OlJUTCkKKyAgICAgICAgb3B0aW9uLmRpcmVjdGlvbiA9IFF0OjpSaWdodFRvTGVmdDsK
KworICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBj
YXNlIFNxdWFyZUJ1dHRvblBhcnQ6CisgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0
dG9uQmV2ZWxQYXJ0OgorICAgIGNhc2UgTGlzdEl0ZW1QYXJ0OgorICAgIGNhc2UgTWVudWxpc3RC
dXR0b25QYXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uUGFydDoKKyAgICBj
YXNlIFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDogeworICAgICAgICBpZiAoaXNQcmVzc2Vk
KG8pKQorICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwor
ICAgICAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHVzaEJ1dHRvblBhcnQgfHwgcmVzdWx0ID09IEJ1
dHRvblBhcnQpCisgICAgICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SYWlz
ZWQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFJhZGlvUGFydDoKKyAgICBjYXNl
IENoZWNrYm94UGFydDoKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IChpc0NoZWNrZWQobykgPyBR
U3R5bGU6OlN0YXRlX09uIDogUVN0eWxlOjpTdGF0ZV9PZmYpOworICAgIH0KKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1i
U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29uc3QgQ29udHJvbFBhcnQg
cGFydCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJI
b3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAg
ICAgIFFTdHlsZU9wdGlvblNsaWRlciBvcHRpb247CisgICAgICAgIGlmIChwYXJ0ID09IFNsaWRl
clRodW1iVmVydGljYWxQYXJ0KQorICAgICAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6
OlZlcnRpY2FsOworCisgICAgICAgIFFTdHlsZSogcXN0eWxlID0gcVN0eWxlKCk7CisKKyAgICAg
ICAgaW50IGxlbmd0aCA9IHFzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJMZW5n
dGgsICZvcHRpb24pOworICAgICAgICBpbnQgdGhpY2tuZXNzID0gcXN0eWxlLT5waXhlbE1ldHJp
YyhRU3R5bGU6OlBNX1NsaWRlclRoaWNrbmVzcywgJm9wdGlvbik7CisgICAgICAgIGlmIChvcHRp
b24ub3JpZW50YXRpb24gPT0gUXQ6OlZlcnRpY2FsKSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0
V2lkdGgoTGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRI
ZWlnaHQoTGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOworICAgICAgICAgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgodGhpY2tuZXNzLCBGaXhlZCkpOworICAgICAgICB9Cisg
ICAgfSBlbHNlCisgICAgICAgIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZShz
dHlsZSk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3NDdmZTQ3ZWRk
ZDQyY2M5NGI2OWY4ZjM5YWRiZGI1Y2QxNDQzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oCkBAIC0wLDAgKzEsMTQ4IEBA
CisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZv
ciBmb3JtIGNvbnRyb2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5v
a2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFJl
bmRlclRoZW1lUVN0eWxlX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVfaAorCisjaW5jbHVk
ZSAiUmVuZGVyVGhlbWVRdC5oIgorCisjaW5jbHVkZSA8UVN0eWxlPgorCitRVF9CRUdJTl9OQU1F
U1BBQ0UKKyNpZm5kZWYgUVRfTk9fTElORUVESVQKK2NsYXNzIFFMaW5lRWRpdDsKKyNlbmRpZgor
Y2xhc3MgUVBhaW50ZXI7CitjbGFzcyBRV2lkZ2V0OworUVRfRU5EX05BTUVTUEFDRQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1lUXQ7CisKK2NsYXNzIFJlbmRl
clRoZW1lUVN0eWxlIDogcHVibGljIFJlbmRlclRoZW1lUXQgeworcHJpdmF0ZToKKyAgICBSZW5k
ZXJUaGVtZVFTdHlsZShQYWdlKik7CisgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVRU3R5bGUoKTsK
KworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoUGFn
ZSopOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHls
ZSopIGNvbnN0OworCisgICAgUVN0eWxlKiBxU3R5bGUoKSBjb25zdDsKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9u
KFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFT
dHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisK
KyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlz
dEJ1dHRvbihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisjaWYgRU5BQkxFKFBST0dS
RVNTX1RBRykKKyAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZv
ciB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9u
Rm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRQcm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVy
U3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJU
aHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50
U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9p
ZCBhZGp1c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVu
ZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNv
cmF0aW9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisjaWZu
ZGVmIFFUX05PX1NQSU5CT1gKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24o
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlm
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUo
UmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgUVNoYXJlZFBvaW50ZXI8U3R5bGVQ
YWludGVyPiBnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJik7CisKKyAgICB2aXJ0dWFs
IFFSZWN0IGluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0
OworCisgICAgdmlydHVhbCB2b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0
OworCitwcml2YXRlOgorICAgIENvbnRyb2xQYXJ0IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRp
b25zKFFTdHlsZU9wdGlvbiYsIFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgdm9pZCBzZXRC
dXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICBpbnQgZmluZEZyYW1lTGlu
ZVdpZHRoKFFTdHlsZSopIGNvbnN0OworCisgICAgUVN0eWxlKiBmYWxsYmFja1N0eWxlKCkgY29u
c3Q7CisKKyAgICBQYWdlKiBtX3BhZ2U7CisKKyNpZmRlZiBRX09TX01BQworICAgIGludCBtX2J1
dHRvbkZvbnRQaXhlbFNpemU7CisjZW5kaWYKKworICAgIFFTdHlsZSogbV9mYWxsYmFja1N0eWxl
OworI2lmbmRlZiBRVF9OT19MSU5FRURJVAorICAgIG11dGFibGUgUUxpbmVFZGl0KiBtX2xpbmVF
ZGl0OworI2VuZGlmCit9OworCitjbGFzcyBTdHlsZVBhaW50ZXJRU3R5bGUgOiBwdWJsaWMgU3R5
bGVQYWludGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXJRU3R5bGUoUmVu
ZGVyVGhlbWVRU3R5bGUqLCBjb25zdCBQYWludEluZm8mKTsKKyAgICBleHBsaWNpdCBTdHlsZVBh
aW50ZXJRU3R5bGUoU2Nyb2xsYmFyVGhlbWVRdCosIEdyYXBoaWNzQ29udGV4dCopOworCisgICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gc3R5bGUgJiYgU3R5bGVQYWludGVyOjppc1Zh
bGlkKCk7IH0KKworICAgIFFXaWRnZXQqIHdpZGdldDsKKyAgICBRU3R5bGUqIHN0eWxlOworCisg
ICAgdm9pZCBkcmF3UHJpbWl0aXZlKFFTdHlsZTo6UHJpbWl0aXZlRWxlbWVudCBwZSwgY29uc3Qg
UVN0eWxlT3B0aW9uJiBvcHQpCisgICAgeyBzdHlsZS0+ZHJhd1ByaW1pdGl2ZShwZSwgJm9wdCwg
cGFpbnRlciwgd2lkZ2V0KTsgfQorICAgIHZvaWQgZHJhd0NvbnRyb2woUVN0eWxlOjpDb250cm9s
RWxlbWVudCBjZSwgY29uc3QgUVN0eWxlT3B0aW9uJiBvcHQpCisgICAgeyBzdHlsZS0+ZHJhd0Nv
bnRyb2woY2UsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KKyAgICB2b2lkIGRyYXdDb21wbGV4
Q29udHJvbChRU3R5bGU6OkNvbXBsZXhDb250cm9sIGNjLCBjb25zdCBRU3R5bGVPcHRpb25Db21w
bGV4JiBvcHQpCisgICAgeyBzdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKGNjLCAmb3B0LCBwYWlu
dGVyLCB3aWRnZXQpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4
dCosIFFTdHlsZSopOworCisgICAgUV9ESVNBQkxFX0NPUFkoU3R5bGVQYWludGVyUVN0eWxlKQor
fTsKKworfQorCisjZW5kaWYgLy8gUmVuZGVyVGhlbWVRU3R5bGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAppbmRleCBjMGU4YWM3ZmI1MzNlMjk1ZDRi
ODUxNDRlODY2NDhiOTRlMzA5MDg3Li4yYWNkYTM3ZTJiYzU5MTUyZTAwYjJmODcxZjE2ZDU2ZDg1
NzYxOTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNw
cApAQCAtMzAsNzkgKzMwLDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWVRdC5oIgogCi0jaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRl
ICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hy
b21lQ2xpZW50UXQuaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaWYgVVNF
KFFUX01PQklMRV9USEVNRSkKLSNpbmNsdWRlICJRdE1vYmlsZVdlYlN0eWxlLmgiCi0jZW5kaWYK
ICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1
ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjZW5kaWYKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgotI2luY2x1ZGUg
IlF0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIgotI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCiAjaW5jbHVk
ZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKICNlbmRpZgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgog
I2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRdC5oIgot
I2luY2x1ZGUgIlNsaWRlclRodW1iRWxlbWVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1l
LmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hl
ZXRzLmgiCiAKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUNvbG9yPgotI2lu
Y2x1ZGUgPFFDb3JlQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUZpbGU+CiAjaW5jbHVkZSA8UUZv
bnRNZXRyaWNzPgotI2luY2x1ZGUgPFFMaW5lRWRpdD4KLSNpbmNsdWRlIDxRTWFjU3R5bGU+Ci0j
aW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVBsYXN0aXF1ZVN0eWxlPgotI2luY2x1ZGUg
PFFQdXNoQnV0dG9uPgotI2luY2x1ZGUgPFFTdHlsZUZhY3Rvcnk+Ci0jaW5jbHVkZSA8UVN0eWxl
T3B0aW9uQnV0dG9uPgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkZyYW1lVjI+Ci0jaWYgRU5BQkxF
KFBST0dSRVNTX1RBRykKLSNpbmNsdWRlIDxRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyPgotI2Vu
ZGlmCi0jaW5jbHVkZSA8UVN0eWxlT3B0aW9uU2xpZGVyPgotI2luY2x1ZGUgPFFXaWRnZXQ+CisK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1p
bmxpbmUgc3RhdGljIHZvaWQgaW5pdFN0eWxlT3B0aW9uKFFXaWRnZXQgKndpZGdldCwgUVN0eWxl
T3B0aW9uJiBvcHRpb24pCi17Ci0gICAgaWYgKHdpZGdldCkKLSAgICAgICAgb3B0aW9uLmluaXRG
cm9tKHdpZGdldCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAgSWYgYSB3aWRn
ZXQgaXMgbm90IGRpcmVjdGx5IGF2YWlsYWJsZSBmb3IgcmVuZGVyaW5nLCB3ZSBmYWxsYmFjayB0
byBkZWZhdWx0Ci0gICAgICAgICAgdmFsdWUgZm9yIGFuIGFjdGl2ZSB3aWRnZXQuCi0gICAgICAg
ICAqLwotICAgICAgICBvcHRpb24uc3RhdGUgPSBRU3R5bGU6OlN0YXRlX0FjdGl2ZSB8IFFTdHls
ZTo6U3RhdGVfRW5hYmxlZDsKLSAgICB9Ci19CiAvLyBUaGVzZSB2YWx1ZXMgYWxsIG1hdGNoIFNh
ZmFyaS9XaW4vQ2hyb21pdW0KIHN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Q29udHJvbEZvbnRQ
aXhlbFNpemUgPSAxMzsKIHN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6
ZSA9IDk7CkBAIC0xMTMsMTI5ICs3OCwxMyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNo
RmllbGRSZXN1bHRzRGVjb3JhdGlvblNpemUgPSA5Owogc3RhdGljIGNvbnN0IGZsb2F0IG1heFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gMzA7CiBzdGF0aWMgY29uc3QgZmxvYXQg
ZGVmYXVsdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoID0gMTg7CiAKLSNpZiBVU0UoUVRf
TU9CSUxFX1RIRU1FKQotbmFtZXNwYWNlIHsKLSAgICBmbG9hdCBidXR0b25QYWRkaW5nTGVmdCA9
IDE4OwotICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdSaWdodCA9IDE4OwotICAgIGZsb2F0IGJ1dHRv
blBhZGRpbmdUb3AgPSAyOwotICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdCb3R0b20gPSAzOwotICAg
IGZsb2F0IG1lbnVMaXN0UGFkZGluZyA9IDk7Ci0gICAgZmxvYXQgdGV4dEZpZWxkUGFkZGluZyA9
IDU7Ci19Ci0jZW5kaWYKLQotU3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVR
dCogdGhlbWUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQotewotICAgIGluaXQocGFpbnRJ
bmZvLmNvbnRleHQgPyBwYWludEluZm8uY29udGV4dCA6IDAsIHRoZW1lLT5xU3R5bGUoKSk7Ci19
Ci0KLVN0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKFNjcm9sbGJhclRoZW1lUXQqIHRoZW1lLCBH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgaW5pdChjb250ZXh0LCB0aGVtZS0+c3R5
bGUoKSk7Ci19Ci0KLXZvaWQgU3R5bGVQYWludGVyOjppbml0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgUVN0eWxlKiB0aGVtZVN0eWxlKQotewotICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxR
UGFpbnRlcio+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB3aWRnZXQgPSAwOwot
ICAgIFFQYWludERldmljZSogZGV2ID0gMDsKLSAgICBpZiAocGFpbnRlcikKLSAgICAgICAgZGV2
ID0gcGFpbnRlci0+ZGV2aWNlKCk7Ci0gICAgaWYgKGRldiAmJiBkZXYtPmRldlR5cGUoKSA9PSBR
SW50ZXJuYWw6OldpZGdldCkKLSAgICAgICAgd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UVdpZGdldCo+
KGRldik7Ci0gICAgc3R5bGUgPSB0aGVtZVN0eWxlOwotCi0gICAgaWYgKHBhaW50ZXIpIHsKLSAg
ICAgICAgLy8gdGhlIHN0eWxlcyBvZnRlbiBhc3N1bWUgYmVpbmcgY2FsbGVkIHdpdGggYSBwcmlz
dGluZSBwYWludGVyIHdoZXJlIG5vIGJydXNoIGlzIHNldCwKLSAgICAgICAgLy8gc28gcmVzZXQg
aXQgbWFudWFsbHkKLSAgICAgICAgb2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOwotICAgICAg
ICBwYWludGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7Ci0KLSAgICAgICAgLy8gcGFpbnRpbmcg
dGhlIHdpZGdldCB3aXRoIGFudGktYWxpYXNpbmcgd2lsbCBtYWtlIGl0IGJsdXJyeQotICAgICAg
ICAvLyBkaXNhYmxlIGl0IGhlcmUgYW5kIHJlc3RvcmUgaXQgbGF0ZXIKLSAgICAgICAgb2xkQW50
aWFsaWFzaW5nID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2lu
Zyk7Ci0gICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2lu
ZywgZmFsc2UpOwotICAgIH0KLX0KLQotU3R5bGVQYWludGVyOjp+U3R5bGVQYWludGVyKCkKLXsK
LSAgICBpZiAocGFpbnRlcikgewotICAgICAgICBwYWludGVyLT5zZXRCcnVzaChvbGRCcnVzaCk7
Ci0gICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnRzKFFQYWludGVyOjpBbnRpYWxpYXNpbmcs
IG9sZEFudGlhbGlhc2luZyk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBS
ZW5kZXJUaGVtZVF0OjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFJlbmRlclRoZW1lUXQocGFnZSkpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBS
ZW5kZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgaWYgKHBhZ2UpCi0g
ICAgICAgIHJldHVybiBSZW5kZXJUaGVtZVF0OjpjcmVhdGUocGFnZSk7Ci0KLSAgICBzdGF0aWMg
UmVuZGVyVGhlbWUqIGZhbGxiYWNrID0gUmVuZGVyVGhlbWVRdDo6Y3JlYXRlKDApLmxlYWtSZWYo
KTsKLSAgICByZXR1cm4gZmFsbGJhY2s7Ci19Ci0KIFJlbmRlclRoZW1lUXQ6OlJlbmRlclRoZW1l
UXQoUGFnZSogcGFnZSkKICAgICA6IFJlbmRlclRoZW1lKCkKICAgICAsIG1fcGFnZShwYWdlKQot
ICAgICwgbV9saW5lRWRpdCgwKQotewotICAgIFFQdXNoQnV0dG9uIGJ1dHRvbjsKLSAgICBidXR0
b24uc2V0QXR0cmlidXRlKFF0OjpXQV9NYWNTbWFsbFNpemUpOwotICAgIFFGb250IGRlZmF1bHRC
dXR0b25Gb250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOwotICAgIFFGb250SW5mbyBm
b250SW5mbyhkZWZhdWx0QnV0dG9uRm9udCk7Ci0gICAgbV9idXR0b25Gb250RmFtaWx5ID0gZGVm
YXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7Ci0jaWZkZWYgUV9XU19NQUMKLSAgICBtX2J1dHRvbkZv
bnRQaXhlbFNpemUgPSBmb250SW5mby5waXhlbFNpemUoKTsKLSNlbmRpZgotCi0jaWYgVVNFKFFU
X01PQklMRV9USEVNRSkKLSAgICBtX2ZhbGxiYWNrU3R5bGUgPSBuZXcgUXRNb2JpbGVXZWJTdHls
ZTsKLSNlbHNlCi0gICAgbV9mYWxsYmFja1N0eWxlID0gUVN0eWxlRmFjdG9yeTo6Y3JlYXRlKFFM
YXRpbjFTdHJpbmcoIndpbmRvd3MiKSk7Ci0jZW5kaWYKLX0KLQotUmVuZGVyVGhlbWVRdDo6flJl
bmRlclRoZW1lUXQoKQotewotICAgIGRlbGV0ZSBtX2ZhbGxiYWNrU3R5bGU7Ci0jaWZuZGVmIFFU
X05PX0xJTkVFRElUCi0gICAgZGVsZXRlIG1fbGluZUVkaXQ7Ci0jZW5kaWYKLX0KLQotI2lmIFVT
RShRVF9NT0JJTEVfVEhFTUUpCi1ib29sIFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3Qg
RmlsbExheWVyJiBmaWxsLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewot
ICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgTWVudWxpc3RQYXJ0OgotICAgIGNh
c2UgU2VhcmNoRmllbGRQYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRl
eHRBcmVhUGFydDoKLSAgICAgICAgLy8gVGVzdCB0aGUgc3R5bGUgdG8gc2VlIGlmIHRoZSBVQSBi
b3JkZXIgYW5kIGJhY2tncm91bmQgbWF0Y2guCi0gICAgICAgIHJldHVybiAoc3R5bGUtPmJvcmRl
cigpICE9IGJvcmRlcgotICAgICAgICAgICAgICAgIHx8ICpzdHlsZS0+YmFja2dyb3VuZExheWVy
cygpICE9IGZpbGwKLSAgICAgICAgICAgICAgICB8fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSAhPSBiYWNrZ3JvdW5kQ29sb3IpOwotICAg
IGNhc2UgQ2hlY2tib3hQYXJ0OgotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRy
b2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dyb3VuZENvbG9yKTsKLSAgICB9Cisg
ICAgbV9idXR0b25Gb250RmFtaWx5ID0gUUFwcGxpY2F0aW9uOjpmb250KCkuZmFtaWx5KCk7CiB9
CiAKLWludCBSZW5kZXJUaGVtZVF0Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDE7Ci19Ci0jZWxzZQogLy8gUmVtb3Zl
IHRoaXMgd2hlbiBTZWFyY2hGaWVsZFBhcnQgaXMgc3R5bGUtYWJsZSBpbiBSZW5kZXJUaGVtZTo6
aXNDb250cm9sU3R5bGVkKCkKIGJvb2wgUmVuZGVyVGhlbWVRdDo6aXNDb250cm9sU3R5bGVkKGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBG
aWxsTGF5ZXImIGZpbGwsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CkBA
IC0yNDksMzYgKzk4LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6aXNDb250cm9sU3R5bGVkKGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYKICAgICAgICAgcmV0dXJu
IFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dy
b3VuZENvbG9yKTsKICAgICB9CiB9Ci0jZW5kaWYKLQotLy8gZm9yIHNvbWUgd2lkZ2V0IHBhaW50
aW5nLCB3ZSBuZWVkIHRvIGZhbGxiYWNrIHRvIFdpbmRvd3Mgc3R5bGUKLVFTdHlsZSogUmVuZGVy
VGhlbWVRdDo6ZmFsbGJhY2tTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtX2ZhbGxiYWNr
U3R5bGUpID8gbV9mYWxsYmFja1N0eWxlIDogUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwotfQotCi1R
U3R5bGUqIFJlbmRlclRoZW1lUXQ6OnFTdHlsZSgpIGNvbnN0Ci17Ci0jaWYgVVNFKFFUX01PQklM
RV9USEVNRSkKLSAgICByZXR1cm4gZmFsbGJhY2tTdHlsZSgpOwotI2VuZGlmCi0KLSAgICBpZiAo
bV9wYWdlKSB7Ci0gICAgICAgIFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gbV9wYWdlLT5j
aHJvbWUoKS0+Y2xpZW50KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotCi0gICAgICAgIGlmIChw
YWdlQ2xpZW50KQotICAgICAgICAgICAgcmV0dXJuIHBhZ2VDbGllbnQtPnN0eWxlKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKLX0KIAogU3RyaW5nIFJlbmRl
clRoZW1lUXQ6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQogewogICAgIFN0cmluZyByZXN1bHQg
PSBSZW5kZXJUaGVtZTo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOwotI2lmIEVOQUJMRShOT19M
SVNUQk9YX1JFTkRFUklORykKLSAgICByZXN1bHQgKz0gU3RyaW5nKHRoZW1lUXROb0xpc3Rib3hl
c1VzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVF0Tm9MaXN0Ym94ZXNVc2VyQWdlbnRT
dHlsZVNoZWV0KSk7Ci0jZW5kaWYKKyAgICBpZiAodXNlTW9iaWxlVGhlbWUoKSkKKyAgICAgICAg
cmVzdWx0ICs9IFN0cmluZyh0aGVtZVF0Tm9MaXN0Ym94ZXNVc2VyQWdlbnRTdHlsZVNoZWV0LCBz
aXplb2YodGhlbWVRdE5vTGlzdGJveGVzVXNlckFnZW50U3R5bGVTaGVldCkpOwogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKQEAgLTM0MywzNiArMTY4LDggQEAgYm9vbCBSZW5kZXJUaGVtZVF0Ojpz
dXBwb3J0c0NvbnRyb2xUaW50cygpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBS
ZW5kZXJUaGVtZVF0OjpmaW5kRnJhbWVMaW5lV2lkdGgoUVN0eWxlKiBzdHlsZSkgY29uc3QKLXsK
LSNpZm5kZWYgUVRfTk9fTElORUVESVQKLSAgICBpZiAoIW1fbGluZUVkaXQpCi0gICAgICAgIG1f
bGluZUVkaXQgPSBuZXcgUUxpbmVFZGl0KCk7Ci0jZW5kaWYKLQotICAgIFFTdHlsZU9wdGlvbkZy
YW1lVjIgb3B0OwotICAgIFFXaWRnZXQqIHdpZGdldCA9IDA7Ci0jaWZuZGVmIFFUX05PX0xJTkVF
RElUCi0gICAgd2lkZ2V0ID0gbV9saW5lRWRpdDsKLSNlbmRpZgotICAgIHJldHVybiBzdHlsZS0+
cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9EZWZhdWx0RnJhbWVXaWR0aCwgJm9wdCwgd2lkZ2V0KTsK
LX0KLQotc3RhdGljIFFSZWN0IGluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5h
bFJlY3QsIFFTdHlsZSogc3R5bGUpCitRUmVjdCBSZW5kZXJUaGVtZVF0OjppbmZsYXRlQnV0dG9u
UmVjdChjb25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdAogewotICAgIFFTdHlsZU9wdGlv
bkJ1dHRvbiBvcHRpb247Ci0gICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7
Ci0gICAgb3B0aW9uLnJlY3QgPSBvcmlnaW5hbFJlY3Q7Ci0KLSAgICBRUmVjdCBsYXlvdXRSZWN0
ID0gc3R5bGUtPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0s
ICZvcHRpb24sIDApOwotICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkgewotICAgICAgICBp
bnQgcGFkZGluZ0xlZnQgPSBsYXlvdXRSZWN0LmxlZnQoKSAtIG9yaWdpbmFsUmVjdC5sZWZ0KCk7
Ci0gICAgICAgIGludCBwYWRkaW5nUmlnaHQgPSBvcmlnaW5hbFJlY3QucmlnaHQoKSAtIGxheW91
dFJlY3QucmlnaHQoKTsKLSAgICAgICAgaW50IHBhZGRpbmdUb3AgPSBsYXlvdXRSZWN0LnRvcCgp
IC0gb3JpZ2luYWxSZWN0LnRvcCgpOwotICAgICAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IG9yaWdp
bmFsUmVjdC5ib3R0b20oKSAtIGxheW91dFJlY3QuYm90dG9tKCk7Ci0KLSAgICAgICAgcmV0dXJu
IG9yaWdpbmFsUmVjdC5hZGp1c3RlZCgtcGFkZGluZ0xlZnQsIC1wYWRkaW5nVG9wLCBwYWRkaW5n
UmlnaHQsIHBhZGRpbmdCb3R0b20pOwotICAgIH0KICAgICByZXR1cm4gb3JpZ2luYWxSZWN0Owog
fQogCkBAIC0zODUsNyArMTgyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RSZXBhaW50
UmVjdChjb25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJlY3QmIHJlY3QpCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAg
ICAgIFFSZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVCdXR0b25SZWN0KHJlY3QsIHFTdHlsZSgp
KTsKKyAgICAgICAgUVJlY3QgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZUJ1dHRvblJlY3QocmVjdCk7
CiAgICAgICAgIHJlY3QgPSBJbnRSZWN0KGluZmxhdGVkUmVjdC54KCksIGluZmxhdGVkUmVjdC55
KCksIGluZmxhdGVkUmVjdC53aWR0aCgpLCBpbmZsYXRlZFJlY3QuaGVpZ2h0KCkpOwogICAgICAg
ICBicmVhazsKICAgICB9CkBAIC00NTIsOTMgKzI0OSwxMSBAQCBDb2xvciBSZW5kZXJUaGVtZVF0
OjpzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3QKIAogaW50IFJlbmRlclRoZW1lUXQ6
Om1pbmltdW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdAogeworICAgIC8vIEZJWE1F
OiBMYXRlciB3ZSBuZWVkIGEgd2F5IHRvIHF1ZXJ5IHRoZSBVSSBwcm9jZXNzIGZvciB0aGUgZHBp
CiAgICAgY29uc3QgUUZvbnRNZXRyaWNzICZmbSA9IFFBcHBsaWNhdGlvbjo6Zm9udE1ldHJpY3Mo
KTsKICAgICByZXR1cm4gZm0ud2lkdGgoUUxhdGluMUNoYXIoJ3gnKSk7CiB9CiAKLXZvaWQgUmVu
ZGVyVGhlbWVRdDo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0
eWxlKSBjb25zdAotewotICAgIFFTaXplIHNpemUoMCwgMCk7Ci0gICAgY29uc3QgUUZvbnRNZXRy
aWNzIGZtKHJlbmRlclN0eWxlLT5mb250KCkuZm9udCgpKTsKLSAgICBRU3R5bGUqIHN0eWxlID0g
cVN0eWxlKCk7Ci0KLSAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKLSAg
ICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICBjYXNl
IFRleHRGaWVsZFBhcnQ6IHsKLSAgICAgICAgaW50IHBhZGRpbmcgPSBmaW5kRnJhbWVMaW5lV2lk
dGgoc3R5bGUpOwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBh
ZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVu
Z3RoKHBhZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9w
KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGlu
Z0JvdHRvbShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBJZiB0aGUgd2lkdGgg
YW5kIGhlaWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRv
LgotICAgIGlmICghcmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAh
cmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBz
d2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIENoZWNrYm94UGFy
dDogewotICAgICAgICBRU3R5bGVPcHRpb24gc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0
aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCBjaGVja0JveFdp
ZHRoID0gc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fSW5kaWNhdG9yV2lkdGgsICZzdHls
ZU9wdGlvbik7Ci0gICAgICAgIGNoZWNrQm94V2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2
ZVpvb20oKTsKLSAgICAgICAgc2l6ZSA9IFFTaXplKGNoZWNrQm94V2lkdGgsIGNoZWNrQm94V2lk
dGgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBSYWRpb1BhcnQ6IHsKLSAgICAg
ICAgUVN0eWxlT3B0aW9uIHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8
PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBpbnQgcmFkaW9XaWR0aCA9IHN0eWxlLT5w
aXhlbE1ldHJpYyhRU3R5bGU6OlBNX0V4Y2x1c2l2ZUluZGljYXRvcldpZHRoLCAmc3R5bGVPcHRp
b24pOwotICAgICAgICByYWRpb1dpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7
Ci0gICAgICAgIHNpemUgPSBRU2l6ZShyYWRpb1dpZHRoLCByYWRpb1dpZHRoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotI2lmICFVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIGNhc2UgUHVzaEJ1
dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbkJ1
dHRvbiBzdHlsZU9wdGlvbjsKLSAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpT
dGF0ZV9TbWFsbDsKLSAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXplKFF0OjpUZXh0
U2hvd01uZW1vbmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOwotICAgICAgICBRU2l6ZSBw
dXNoQnV0dG9uU2l6ZSA9IHN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZTo6Q1RfUHVzaEJ1
dHRvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmc3R5bGVPcHRpb24sIGNvbnRlbnRTaXplLCAwKTsKLSAgICAgICAgc3R5bGVPcHRpb24u
cmVjdCA9IFFSZWN0KDAsIDAsIHB1c2hCdXR0b25TaXplLndpZHRoKCksIHB1c2hCdXR0b25TaXpl
LmhlaWdodCgpKTsKLSAgICAgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHN0eWxlLT5zdWJFbGVtZW50
UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0KLSAgICAg
ICAgLy8gSWYgdGhlIHN0eWxlIHN1cHBvcnRzIGxheW91dCByZWN0cyB3ZSB1c2UgdGhhdCwgYW5k
ICBjb21wZW5zYXRlIGFjY29yZGluZ2x5Ci0gICAgICAgIC8vIGluIHBhaW50QnV0dG9uKCkgYmVs
b3cuCi0gICAgICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkKLSAgICAgICAgICAgIHNpemUu
c2V0SGVpZ2h0KGxheW91dFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzaXplLnNldEhlaWdodChwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgTWVudWxpc3RQYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlv
bkNvbWJvQm94IHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFNYXgoZm0ubGlu
ZVNwYWNpbmcoKSwgMTQpICsgMjsKLSAgICAgICAgUVNpemUgbWVudUxpc3RTaXplID0gc3R5bGUt
PnNpemVGcm9tQ29udGVudHMoUVN0eWxlOjpDVF9Db21ib0JveCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCBRU2l6ZSgw
LCBjb250ZW50SGVpZ2h0KSwgMCk7Ci0gICAgICAgIHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6
ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZgotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBDaGVjayBpcyBmbGF3ZWQs
IHNpbmNlIGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNjb3VudC4K
LSAgICBpZiAocmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXpl
LndpZHRoKCkgPiAwKQotICAgICAgICByZW5kZXJTdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHNp
emUud2lkdGgoKSwgRml4ZWQpKTsKLSAgICBpZiAocmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0
bygpICYmIHNpemUuaGVpZ2h0KCkgPiAwKQotICAgICAgICByZW5kZXJTdHlsZS0+c2V0TWluSGVp
Z2h0KExlbmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQotCiB2b2lkIFJlbmRlclRoZW1l
UXQ6OnNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgY29t
cHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5bGUpOwpAQCAtNTU5LDExNyArMjc0LDExIEBAIGJvb2wg
UmVuZGVyVGhlbWVRdDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjCiAgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
IHNlbGVjdG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIC8v
IERpdGNoIHRoZSBib3JkZXIuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0KLSNpZmRlZiBR
X1dTX01BQwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0KSB7
Ci0gICAgICAgIC8vIFRoZSBNYWMgcG9ydHMgaWdub3JlIHRoZSBzcGVjaWZpZWQgaGVpZ2h0IGZv
ciA8aW5wdXQgdHlwZT0iYnV0dG9uIj4gZWxlbWVudHMKLSAgICAgICAgLy8gdW5sZXNzIGEgYm9y
ZGVyIGFuZC9vciBiYWNrZ3JvdW5kIENTUyBwcm9wZXJ0eSBpcyBhbHNvIHNwZWNpZmllZC4KLSAg
ICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOwotICAgIH0KLSNlbmRpZgotCi0g
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7Ci0KLSNp
ZmRlZiBRX1dTX01BQyAvLyBVc2UgZml4ZWQgZm9udCBzaXplIGFuZCBmYW1pbHkgb24gTWFjIChs
aWtlIFNhZmFyaSBkb2VzKQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKG1f
YnV0dG9uRm9udFBpeGVsU2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6
ZShtX2J1dHRvbkZvbnRQaXhlbFNpemUpOwotI2Vsc2UKLSAgICBmb250RGVzY3JpcHRpb24uc2V0
U3BlY2lmaWVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNl
dENvbXB1dGVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7Ci0jZW5kaWYKLQotI2lmICFVU0UoUVRf
TU9CSUxFX1RIRU1FKQotICAgIEZvbnRGYW1pbHkgZm9udEZhbWlseTsKLSAgICBmb250RmFtaWx5
LnNldEZhbWlseShtX2J1dHRvbkZvbnRGYW1pbHkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRG
YW1pbHkoZm9udEZhbWlseSk7Ci0gICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVz
Y3JpcHRpb24pOwotICAgIHN0eWxlLT5mb250KCkudXBkYXRlKHNlbGVjdG9yLT5mb250U2VsZWN0
b3IoKSk7Ci0jZW5kaWYKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7Ci0gICAgc2V0QnV0
dG9uUGFkZGluZyhzdHlsZSk7Ci19Ci0KIHZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0QnV0dG9uU2l6
ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgY29tcHV0ZVNpemVCYXNlZE9uU3R5
bGUoc3R5bGUpOwogfQogCi0jaWYgIVVTRShRVF9NT0JJTEVfVEhFTUUpCi12b2lkIFJlbmRlclRo
ZW1lUXQ6OnNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAg
IFFTdHlsZU9wdGlvbkJ1dHRvbiBzdHlsZU9wdGlvbjsKLSAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8
PSBRU3R5bGU6OlN0YXRlX1NtYWxsOwotCi0gICAgLy8gRmFrZSBhIGJ1dHRvbiByZWN0IGhlcmUs
IHNpbmNlIHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRlbHRhcwotICAgIFFSZWN0IG9yaWdpbmFsUmVj
dCA9IFFSZWN0KDAsIDAsIDEwMCwgMzApOwotICAgIHN0eWxlT3B0aW9uLnJlY3QgPSBvcmlnaW5h
bFJlY3Q7Ci0KLSAgICAvLyBEZWZhdWx0IHBhZGRpbmcgaXMgYmFzZWQgb24gdGhlIGJ1dHRvbiBt
YXJnaW4gcGl4ZWwgbWV0cmljCi0gICAgaW50IGJ1dHRvbk1hcmdpbiA9IHFTdHlsZSgpLT5waXhl
bE1ldHJpYyhRU3R5bGU6OlBNX0J1dHRvbk1hcmdpbiwgJnN0eWxlT3B0aW9uLCAwKTsKLSAgICBp
bnQgcGFkZGluZ0xlZnQgPSBidXR0b25NYXJnaW47Ci0gICAgaW50IHBhZGRpbmdSaWdodCA9IGJ1
dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGluZ1RvcCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQg
cGFkZGluZ0JvdHRvbSA9IGJ1dHRvbk1hcmdpbjsKLQotICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhl
IHN0eWxlIHVzZXMgbGF5b3V0IG1hcmdpbnMKLSAgICBRUmVjdCBsYXlvdXRSZWN0ID0gcVN0eWxl
KCktPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24s
IDApOwotICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkgewotICAgICAgICBRUmVjdCBjb250
ZW50c1JlY3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9u
Q29udGVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmc3R5bGVPcHRpb24sIDApOwotICAgICAgICBwYWRkaW5nTGVmdCA9IGNvbnRlbnRz
UmVjdC5sZWZ0KCkgLSBsYXlvdXRSZWN0LmxlZnQoKTsKLSAgICAgICAgcGFkZGluZ1JpZ2h0ID0g
bGF5b3V0UmVjdC5yaWdodCgpIC0gY29udGVudHNSZWN0LnJpZ2h0KCk7Ci0gICAgICAgIHBhZGRp
bmdUb3AgPSBjb250ZW50c1JlY3QudG9wKCkgLSBsYXlvdXRSZWN0LnRvcCgpOwotCi0gICAgICAg
IC8vIENhbid0IHVzZSB0aGlzIHJpZ2h0IG5vdyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdGhlIGJh
c2VsaW5lIHRvIGNvbXBlbnNhdGUKLSAgICAgICAgLy8gcGFkZGluZ0JvdHRvbSA9IGxheW91dFJl
Y3QuYm90dG9tKCkgLSBjb250ZW50c1JlY3QuYm90dG9tKCk7Ci0gICAgfQotICAgIHN0eWxlLT5z
ZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNl
dFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5z
ZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nVG9wLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQ
YWRkaW5nQm90dG9tKExlbmd0aChwYWRkaW5nQm90dG9tLCBGaXhlZCkpOwotfQotI2Vsc2UKLXZv
aWQgUmVuZGVyVGhlbWVRdDo6c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0Ci17Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN0eWxlLT5zZXRQ
YWRkaW5nTGVmdChMZW5ndGgoYnV0dG9uUGFkZGluZ0xlZnQsIEZpeGVkKSk7Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdSaWdodChMZW5ndGgoYnV0dG9uUGFkZGluZ1JpZ2h0LCBGaXhlZCkpOwotICAg
IHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChidXR0b25QYWRkaW5nVG9wLCBGaXhlZCkpOwot
ICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChidXR0b25QYWRkaW5nQm90dG9tLCBG
aXhlZCkpOwotfQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRCdXR0b24oUmVu
ZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0g
ICAgU3R5bGVQYWludGVyIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBvcHRpb247Ci0gICAgaW5p
dFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLSAg
ICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLQotICAgIENvbnRyb2xQYXJ0
IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwot
ICAgIGlmIChhcHBlYXJhbmNlID09IFB1c2hCdXR0b25QYXJ0IHx8IGFwcGVhcmFuY2UgPT0gQnV0
dG9uUGFydCkgewotICAgICAgICBvcHRpb24ucmVjdCA9IGluZmxhdGVCdXR0b25SZWN0KG9wdGlv
bi5yZWN0LCBxU3R5bGUoKSk7Ci0gICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9QdXNo
QnV0dG9uLCBvcHRpb24pOwotICAgIH0gZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBSYWRpb1BhcnQp
Ci0gICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1JhZGlvQnV0dG9uLCBvcHRpb24pOwot
ICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hlY2tib3hQYXJ0KQotICAgICAgIHAuZHJhd0Nv
bnRyb2woUVN0eWxlOjpDRV9DaGVja0JveCwgb3B0aW9uKTsKLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQogdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICAvLyBS
ZXNldHRpbmcgdGhlIHN0eWxlIGxpa2UgdGhpcyBsZWFkcyB0byBkaWZmZXJlbmNlcyBsaWtlOgpA
QCAtNjgxLDQxICsyOTAsNiBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVsZFN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgc3R5bGUtPnJl
c2V0Qm9yZGVyKCk7CiAgICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOwogICAgIGNvbXB1dGVTaXpl
QmFzZWRPblN0eWxlKHN0eWxlKTsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIHN0eWxl
LT5zZXRQYWRkaW5nTGVmdChMZW5ndGgodGV4dEZpZWxkUGFkZGluZywgRml4ZWQpKTsKLSAgICBz
dHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aCh0ZXh0RmllbGRQYWRkaW5nLCBGaXhlZCkpOwot
I2VuZGlmCi19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5
bGVQYWludGVyIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25GcmFtZVYyIHBhbmVsOwotICAgIGluaXRTdHls
ZU9wdGlvbihwLndpZGdldCwgcGFuZWwpOwotICAgIHBhbmVsLnJlY3QgPSByOwotICAgIHBhbmVs
LmxpbmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aChxU3R5bGUoKSk7Ci0jaWYgVVNFKFFUX01P
QklMRV9USEVNRSkKLSAgICBpZiAoaXNQcmVzc2VkKG8pKQotICAgICAgICBwYW5lbC5zdGF0ZSB8
PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSNlbHNlCi0gICAgcGFuZWwuc3RhdGUgfD0gUVN0eWxl
OjpTdGF0ZV9TdW5rZW47Ci0jZW5kaWYKLSAgICBwYW5lbC5mZWF0dXJlcyA9IFFTdHlsZU9wdGlv
bkZyYW1lVjI6Ok5vbmU7Ci0KLSAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0YSBmb3Ig
YSB0ZXh0IGZpZWxkCi0gICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21t
b25RU3R5bGVPcHRpb25zKHBhbmVsLCBvKTsKLSAgICBpZiAoYXBwZWFyYW5jZSAhPSBUZXh0Rmll
bGRQYXJ0Ci0gICAgICAgICYmIGFwcGVhcmFuY2UgIT0gU2VhcmNoRmllbGRQYXJ0Ci0gICAgICAg
ICYmIGFwcGVhcmFuY2UgIT0gVGV4dEFyZWFQYXJ0Ci0gICAgICAgICYmIGFwcGVhcmFuY2UgIT0g
TGlzdGJveFBhcnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTm93IHBhaW50IHRo
ZSB0ZXh0IGZpZWxkLgotICAgIHAuZHJhd1ByaW1pdGl2ZShRU3R5bGU6OlBFX1BhbmVsTGluZUVk
aXQsIHBhbmVsKTsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVRdDo6
YWRqdXN0VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdApAQCAtNzQyLDY2ICszMTYsMTMgQEAg
dm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEUKIAogICAgIC8vIEFkZCBpbiB0aGUgcGFkZGluZyB0aGF0
IHdlJ2QgbGlrZSB0byB1c2UuCiAgICAgc2V0UG9wdXBQYWRkaW5nKHN0eWxlKTsKLSNpZiBVU0Uo
UVRfTU9CSUxFX1RIRU1FKQotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgobWVudUxp
c3RQYWRkaW5nLCBGaXhlZCkpOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0
UG9wdXBQYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBjb25zdCBpbnQg
cGFkZGluZ0xlZnQgPSA0OwotICAgIGNvbnN0IGludCBwYWRkaW5nUmlnaHQgPSBzdHlsZS0+d2lk
dGgoKS5pc0ZpeGVkKCkgfHwgc3R5bGUtPndpZHRoKCkuaXNQZXJjZW50KCkgPyA1IDogODsKLQot
ICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7Ci0K
LSAgICBRU3R5bGVPcHRpb25Db21ib0JveCBvcHQ7Ci0gICAgaW50IHcgPSBxU3R5bGUoKS0+cGl4
ZWxNZXRyaWMoUVN0eWxlOjpQTV9CdXR0b25JY29uU2l6ZSwgJm9wdCwgMCk7Ci0gICAgc3R5bGUt
PnNldFBhZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0ICsgdywgRml4ZWQpKTsKLQotICAg
IHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aCgyLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQ
YWRkaW5nQm90dG9tKExlbmd0aCgyLCBGaXhlZCkpOwotfQotCi0KLWJvb2wgUmVuZGVyVGhlbWVR
dDo6cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29u
c3QgSW50UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBpKTsKLSAgICBpZiAo
IXAuaXNWYWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFF0U3R5bGVPcHRpb25X
ZWJDb21ib0JveCBvcHQobyk7Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHQpOwot
ICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdCwgbyk7Ci0KLSAgICBJbnRSZWN0
IHJlY3QgPSByOwotCi0jaWYgZGVmaW5lZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZ
TEVfTUFDKQotICAgIC8vIFFNYWNTdHlsZSBtYWtlcyB0aGUgY29tYm8gYm94ZXMgYSBsaXR0bGUg
Yml0IHNtYWxsZXIgdG8gbGVhdmUgc3BhY2UgZm9yIHRoZSBmb2N1cyByZWN0LgotICAgIC8vIEJl
Y2F1c2Ugb2YgaXQsIHRoZSBjb21ibyBidXR0b24gaXMgZHJhd24gYXQgYSBwb2ludCB0byB0aGUg
bGVmdCBvZiB3aGVyZSBpdCB3YXMgZXhwZWN0IHRvIGJlIGFuZCBtYXkgZW5kIHVwCi0gICAgLy8g
b3ZlcmxhcHBlZCB3aXRoIHRoZSB0ZXh0LiBUaGlzIHdpbGwgZm9yY2UgUU1hY1N0eWxlIHRvIGRy
YXcgdGhlIGNvbWJvIGJveCB3aXRoIHRoZSBleHBlY3RlZCB3aWR0aC4KLSAgICBpZiAocW9iamVj
dF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUpKQotICAgICAgICByZWN0LmluZmxhdGVYKDMpOwot
I2VuZGlmCi0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsKLSAg
ICBwLnBhaW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBvcHQucmVjdC5tb3ZlVG8oUVBv
aW50KDAsIDApKTsKLSAgICBvcHQucmVjdC5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKLQotICAgIHAu
ZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfQ29tYm9Cb3gsIG9wdCk7Ci0gICAgcC5wYWlu
dGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwotICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBS
ZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewotI2lmIFVTRShRVF9NT0JJ
TEVfVEhFTUUpCi0gICAgLy8gTW9iaWxlIHRoZW1lIHVzZXMgYm9yZGVyIHJhZGl1cy4KLSNlbHNl
CiAgICAgLy8gV09SS0FST1VORCBiZWNhdXNlIGh0bWwuY3NzIHNwZWNpZmllcyAtd2Via2l0LWJv
cmRlci1yYWRpdXMgZm9yIDxzZWxlY3Q+IHNvIHdlIG92ZXJyaWRlIGl0IGhlcmUKICAgICAvLyBz
ZWUgYWxzbyBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM5OQogICAg
IHN0eWxlLT5yZXNldEJvcmRlclJhZGl1cygpOwotI2VuZGlmCiAKICAgICAvLyBIZWlnaHQgaXMg
bG9ja2VkIHRvIGF1dG8uCiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOwpAQCAt
ODE1LDI2ICszMzYsNiBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0QnV0dG9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdAogICAgIHNldFBvcHVwUGFk
ZGluZyhzdHlsZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZW51TGlzdEJ1dHRv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFp
bnRlciBwKHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94IG9wdGlvbihvKTsKLSAgICBpbml0
U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgaW5pdGlhbGl6ZUNvbW1vblFTdHls
ZU9wdGlvbnMob3B0aW9uLCBvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0KLSAgICAvLyBmb3Ig
ZHJhd2luZyB0aGUgY29tYm8gYm94IGFycm93LCByZWx5IG9ubHkgb24gdGhlIGZhbGxiYWNrIHN0
eWxlCi0gICAgcC5zdHlsZSA9IGZhbGxiYWNrU3R5bGUoKTsKLSAgICBvcHRpb24uc3ViQ29udHJv
bHMgPSBRU3R5bGU6OlNDX0NvbWJvQm94QXJyb3c7Ci0gICAgcC5kcmF3Q29tcGxleENvbnRyb2wo
UVN0eWxlOjpDQ19Db21ib0JveCwgb3B0aW9uKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQog
I2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCiBkb3VibGUgUmVuZGVyVGhlbWVRdDo6YW5pbWF0aW9u
UmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jl
c3MpIGNvbnN0CiB7CkBAIC04NDYsMTIzICszNDcsMTcgQEAgZG91YmxlIFJlbmRlclRoZW1lUXQ6
OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJl
bmQKICAgICByZXR1cm4gMC4xOwogfQogCi1kb3VibGUgUmVuZGVyVGhlbWVRdDo6YW5pbWF0aW9u
RHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNv
bnN0Ci17Ci0gICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49IDApCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgUVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMiBvcHRpb247Ci0gICAg
b3B0aW9uLnJlY3Quc2V0U2l6ZShyZW5kZXJQcm9ncmVzcy0+c2l6ZSgpKTsKLSAgICAvLyBGSVhN
RTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcx
IGlzIGZpeGVkLAotICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9z
cyB0aGUgcHJvZ3Jlc3MgYmFyLgotICAgIHJldHVybiAob3B0aW9uLnJlY3Qud2lkdGgoKSAvIHFT
dHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9w
dGlvbikpICogYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihyZW5kZXJQcm9n
cmVzcyk7Ci19Ci0KIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsK
ICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQotCi1ib29sIFJlbmRlclRoZW1l
UXQ6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBp
LCBjb25zdCBJbnRSZWN0JiByKQotewotICAgIGlmICghby0+aXNQcm9ncmVzcygpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBpKTsKLSAgICBpZiAo
IXAuaXNWYWxpZCgpKQotICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uUHJv
Z3Jlc3NCYXJWMiBvcHRpb247Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24p
OwotICAgIGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7Ci0KLSAgICBS
ZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKG8pOwotICAg
IG9wdGlvbi5yZWN0ID0gcjsKLSAgICBvcHRpb24ubWF4aW11bSA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCk7Ci0gICAgb3B0aW9uLm1pbmltdW0gPSAwOwotICAgIG9wdGlvbi5wcm9n
cmVzcyA9IChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSAqIHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpOwotCi0gICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSByLmxvY2F0aW9uKCk7
Ci0gICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7Ci0gICAgb3B0aW9uLnJlY3QubW92
ZVRvKFFQb2ludCgwLCAwKSk7Ci0gICAgb3B0aW9uLnJlY3Quc2V0U2l6ZShyLnNpemUoKSk7Ci0K
LSAgICBpZiAob3B0aW9uLnByb2dyZXNzIDwgMCkgewotICAgICAgICAvLyBGSVhNRTogVW50aWwg
aHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVk
LAotICAgICAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhl
IHByb2dyZXNzIGJhci4KLSAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNz
QmFyR3Jvb3ZlLCBvcHRpb24pOwotICAgICAgICBpbnQgY2h1bmtXaWR0aCA9IHFTdHlsZSgpLT5w
aXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbik7Ci0g
ICAgICAgIFFDb2xvciBjb2xvciA9IChvcHRpb24ucGFsZXR0ZS5oaWdobGlnaHQoKSA9PSBvcHRp
b24ucGFsZXR0ZS5iYWNrZ3JvdW5kKCkpID8gb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6
OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodCkgOiBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFs
ZXR0ZTo6SGlnaGxpZ2h0KTsKLSAgICAgICAgaWYgKHJlbmRlclByb2dyZXNzLT5zdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBSVEwpCi0gICAgICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0KG9wdGlv
bi5yZWN0LnJpZ2h0KCkgLSBjaHVua1dpZHRoICAtIHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Q
cm9ncmVzcygpICogb3B0aW9uLnJlY3Qud2lkdGgoKSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJl
Y3QuaGVpZ2h0KCksIGNvbG9yKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcC5wYWludGVy
LT5maWxsUmVjdChyZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5y
ZWN0LndpZHRoKCksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7
Ci0gICAgfSBlbHNlCi0gICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jh
ciwgb3B0aW9uKTsKLQotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKLQotICAg
IHJldHVybiBmYWxzZTsKLX0KICNlbmRpZgogCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50U2xp
ZGVyVHJhY2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5
bGVQYWludGVyIHAodGhpcywgcGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKLSAgICBpbml0U3R5
bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0
eWxlOjpTQ19TbGlkZXJHcm9vdmU7Ci0gICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRp
YWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7Ci0gICAgb3B0aW9uLnJlY3QgPSBy
OwotICAgIGlmIChhcHBlYXJhbmNlID09IFNsaWRlclZlcnRpY2FsUGFydCkKLSAgICAgICAgb3B0
aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwotICAgIGlmIChpc1ByZXNzZWQobykpCi0g
ICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLQotICAgIHAuZHJh
d0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRpb24pOwotCi0gICAgaWYgKG9w
dGlvbi5zdGF0ZSAmIFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMpIHsKLSAgICAgICAgUVN0eWxlT3B0
aW9uRm9jdXNSZWN0IGZvY3VzT3B0aW9uOwotICAgICAgICBmb2N1c09wdGlvbi5yZWN0ID0gcjsK
LSAgICAgICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfRnJhbWVGb2N1c1JlY3QsIGZvY3Vz
T3B0aW9uKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyVGhl
bWVRdDo6YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51
bGxwdHIpOwogfQogCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWludGVyIHAodGhp
cywgcGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRn
ZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJI
YW5kbGU7Ci0gICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5
bGVPcHRpb25zKG9wdGlvbiwgbyk7Ci0gICAgb3B0aW9uLnJlY3QgPSByOwotICAgIGlmIChhcHBl
YXJhbmNlID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAgICBvcHRpb24ub3JpZW50
YXRpb24gPSBRdDo6VmVydGljYWw7Ci0gICAgaWYgKGlzUHJlc3NlZChvKSkgewotICAgICAgICBv
cHRpb24uYWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKLSAgICAg
ICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgIH0KLQotICAgIHAu
ZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRpb24pOwotCi0gICAgcmV0
dXJuIGZhbHNlOwotfQotCiB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU3R5
bGUoQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJT
dHlsZShzZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtMTAyOCw4ICs0MjMsOCBAQCBib29s
IFJlbmRlclRoZW1lUXQ6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZgogICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGJ1dHRvbiBz
dGF5cyBzcXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3guCiAgICAgaW50IGNh
bmNlbEJ1dHRvblNpemUgPSBxTWluKGlucHV0Q29udGVudEJveC53aWR0aCgpLCBxTWluKGlucHV0
Q29udGVudEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSkpOwogICAgIC8vIENhbGN1bGF0ZSBjYW5j
ZWwgYnV0dG9uJ3MgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGlucHV0IGVsZW1lbnQuCi0g
ICAgLy8gQ2VudGVyIHRoZSBidXR0b24gdmVydGljYWxseS4gIFJvdW5kIHVwIHRob3VnaCwgc28g
aWYgaXQgaGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCi0gICAgLy8gYmUg
b25lIHBpeGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVuZHMg
dG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KKyAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2
ZXJ0aWNhbGx5LiBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwg
b2ZmLWNlbnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJv
dHRvbSBvZiB0aGUgZmllbGQuIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4
dC4KICAgICBJbnRSZWN0IGNhbmNlbEJ1dHRvblJlY3Qoby0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29u
dGFpbmVyKGlucHV0UmVuZGVyQm94KS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dENvbnRlbnRCb3gueSgpICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIGNh
bmNlbEJ1dHRvblNpemUgKyAxKSAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh
bmNlbEJ1dHRvblNpemUsIGNhbmNlbEJ1dHRvblNpemUpOwpAQCAtMTA3OCw2MCArNDczLDYgQEAg
dm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShDU1NTdHlsZVNl
bGVjdG9yKiBzZWxlY3RvciwgUmVuZGUKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRo
LCBGaXhlZCkpOwogICAgIHN0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7
CiB9Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1Zh
bGlkKCkpCi0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25TcGluQm94IG9w
dGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9u
LnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAgfCBRU3R5bGU6OlNDX1NwaW5Cb3hE
b3duOwotICAgIGlmICghaXNSZWFkT25seUNvbnRyb2wobykpIHsKLSAgICAgICAgaWYgKGlzRW5h
YmxlZChvKSkKLSAgICAgICAgICAgIG9wdGlvbi5zdGVwRW5hYmxlZCA9IFFBYnN0cmFjdFNwaW5C
b3g6OlN0ZXBVcEVuYWJsZWQgfCBRQWJzdHJhY3RTcGluQm94OjpTdGVwRG93bkVuYWJsZWQ7Ci0g
ICAgICAgIGlmIChpc1ByZXNzZWQobykpIHsKLSAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBR
U3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICAgICAgICAgIGlmIChpc1NwaW5VcEJ1dHRvblBhcnRQ
cmVzc2VkKG8pKQotICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFT
dHlsZTo6U0NfU3BpbkJveFVwOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9w
dGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveERvd247Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgLy8gUmVuZGVyIHRoZSBzcGluIGJ1dHRvbnMgZm9yIExUUiBvciBSVEwg
YWNjb3JkaW5nbHkuCi0gICAgb3B0aW9uLmRpcmVjdGlvbiA9IG8tPnN0eWxlKCktPmlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IFF0OjpMZWZ0VG9SaWdodCA6IFF0OjpSaWdodFRvTGVmdDsKLQot
ICAgIEludFJlY3QgYnV0dG9uUmVjdCA9IHJlY3Q7Ci0gICAgLy8gRGVmYXVsdCB0byBtb3Zpbmcg
dGhlIGJ1dHRvbnMgYSBsaXR0bGUgYml0IHdpdGhpbiB0aGUgZWRpdG9yIGZyYW1lLgotICAgIGlu
dCBpbmZsYXRlWCA9IC0yOwotICAgIGludCBpbmZsYXRlWSA9IC0yOwotI2lmIGRlZmluZWQoUV9X
U19NQUMpICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX01BQykKLSAgICAvLyBRTWFjU3R5bGUgd2ls
bCBwb3NpdGlvbiB0aGUgYXF1YSBidXR0b25zIGZsdXNoIHRvIHRoZSByaWdodC4KLSAgICAvLyBU
aGlzIHdpbGwgbW92ZSB0aGVtIG1vcmUgd2l0aGluIHRoZSBjb250cm9sIGZvciBiZXR0ZXIgc3R5
bGUsIGEgbGEKLSAgICAvLyBDaHJvbWl1bSBsb29rICYgZmVlbC4KLSAgICBpZiAocW9iamVjdF9j
YXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUpKSB7Ci0gICAgICAgIGluZmxhdGVYID0gLTQ7Ci0gICAg
ICAgIC8vIFJlbmRlciBtaW5pIGFxdWEgc3BpbiBidXR0b25zIGZvciBRTWFjU3R5bGUgdG8gZml0
IG5pY2VseSBpbnRvCi0gICAgICAgIC8vIHRoZSBlZGl0b3IgYXJlYSwgbGlrZSBDaHJvbWl1bS4K
LSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTWluaTsKLSAgICB9Ci0jZW5k
aWYKLSNpZiBkZWZpbmVkKFFfV1NfWDExKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9QTEFTVElR
VUUpCi0gICAgLy8gUVBsYXN0aXF1ZVN0eWxlIGxvb2tzIGJlc3Qgd2hlbiB0aGUgc3BpbiBidXR0
b25zIGFyZSBmbHVzaCB3aXRoIHRoZSBmcmFtZSdzIGVkZ2UuCi0gICAgaWYgKHFvYmplY3RfY2Fz
dDxRUGxhc3RpcXVlU3R5bGUqPihwLnN0eWxlKSkgewotICAgICAgICBpbmZsYXRlWCA9IDA7Ci0g
ICAgICAgIGluZmxhdGVZID0gMDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGJ1dHRvblJlY3QuaW5m
bGF0ZVgoaW5mbGF0ZVgpOwotICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVkoaW5mbGF0ZVkpOwotICAg
IG9wdGlvbi5yZWN0ID0gYnV0dG9uUmVjdDsKLQotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFT
dHlsZTo6Q0NfU3BpbkJveCwgb3B0aW9uKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19CiAjZW5kaWYK
IAogYm9vbCBSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFu
Y2UpIGNvbnN0CkBAIC0xMTU1LDExICs0OTYsNiBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnN1cHBv
cnRzRm9jdXMoQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkgY29uc3QKIAogdm9pZCBSZW5kZXJUaGVt
ZVF0OjpzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYgcGFsZXR0ZSkg
Y29uc3QKIHsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIHN0YXRpYyBRUGFsZXR0ZSBs
aWdodEdyYXlQYWxldHRlKFF0OjpsaWdodEdyYXkpOwotICAgIHBhbGV0dGUgPSBsaWdodEdyYXlQ
YWxldHRlOwotICAgIHJldHVybjsKLSNlbmRpZgogICAgIC8vIElmIHRoZSB3ZWJ2aWV3IGhhcyBh
IGN1c3RvbSBwYWxldHRlLCB1c2UgaXQKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMTE3NSw2MyArNTExLDYgQEAgdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRQYWxldHRlRnJv
bVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYgcGFsZXR0ZSkgY29uc3QKICAgICBwYWxldHRl
ID0gcGFnZUNsaWVudC0+cGFsZXR0ZSgpOwogfQogCi1Db250cm9sUGFydCBSZW5kZXJUaGVtZVF0
Ojppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVPcHRpb24mIG9wdGlvbiwgUmVu
ZGVyT2JqZWN0KiBvKSBjb25zdAotewotICAgIC8vIERlZmF1bHQgYml0czogbm8gZm9jdXMsIG5v
IG1vdXNlIG92ZXIKLSAgICBvcHRpb24uc3RhdGUgJj0gfihRU3R5bGU6OlN0YXRlX0hhc0ZvY3Vz
IHwgUVN0eWxlOjpTdGF0ZV9Nb3VzZU92ZXIpOwotCi0gICAgaWYgKGlzUmVhZE9ubHlDb250cm9s
KG8pKQotICAgICAgICAvLyBSZWFkb25seSBpcyBzdXBwb3J0ZWQgb24gdGV4dGZpZWxkcy4KLSAg
ICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmVhZE9ubHk7Ci0KLSAgICBvcHRp
b24uZGlyZWN0aW9uID0gUXQ6OkxlZnRUb1JpZ2h0OwotCi0gICAgaWYgKGlzSG92ZXJlZChvKSkK
LSAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTW91c2VPdmVyOwotCi0gICAg
c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMob3B0aW9uLnBhbGV0dGUpOwotCi0gICAg
aWYgKCFpc0VuYWJsZWQobykpIHsKLSAgICAgICAgb3B0aW9uLnBhbGV0dGUuc2V0Q3VycmVudENv
bG9yR3JvdXAoUVBhbGV0dGU6OkRpc2FibGVkKTsKLSAgICAgICAgb3B0aW9uLnN0YXRlICY9IH5R
U3R5bGU6OlN0YXRlX0VuYWJsZWQ7Ci0gICAgfQotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0g
by0+c3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gTm9Db250cm9sUGFy
dDsKLQotICAgIENvbnRyb2xQYXJ0IHJlc3VsdCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7Ci0gICAg
aWYgKHN1cHBvcnRzRm9jdXMocmVzdWx0KSAmJiBpc0ZvY3VzZWQobykpIHsKLSAgICAgICAgb3B0
aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfSGFzRm9jdXM7Ci0gICAgICAgIG9wdGlvbi5zdGF0
ZSB8PSBRU3R5bGU6OlN0YXRlX0tleWJvYXJkRm9jdXNDaGFuZ2U7Ci0gICAgfQotCi0gICAgaWYg
KHN0eWxlLT5kaXJlY3Rpb24oKSA9PSBXZWJDb3JlOjpSVEwpCi0gICAgICAgIG9wdGlvbi5kaXJl
Y3Rpb24gPSBRdDo6UmlnaHRUb0xlZnQ7Ci0KLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNh
c2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgotICAgIGNhc2Ug
QnV0dG9uUGFydDoKLSAgICBjYXNlIEJ1dHRvbkJldmVsUGFydDoKLSAgICBjYXNlIExpc3RJdGVt
UGFydDoKLSAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxk
UmVzdWx0c0J1dHRvblBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6
IHsKLSAgICAgICAgaWYgKGlzUHJlc3NlZChvKSkKLSAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8
PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLSAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IFB1c2hC
dXR0b25QYXJ0IHx8IHJlc3VsdCA9PSBCdXR0b25QYXJ0KQotICAgICAgICAgICAgb3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmFpc2VkOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
Y2FzZSBSYWRpb1BhcnQ6Ci0gICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgIG9wdGlvbi5z
dGF0ZSB8PSAoaXNDaGVja2VkKG8pID8gUVN0eWxlOjpTdGF0ZV9PbiA6IFFTdHlsZTo6U3RhdGVf
T2ZmKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAjaWYgRU5BQkxFKFZJREVP
KQogCiBTdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgp
CkBAIC0xMzExLDIwICs1OTAsMjAgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhRnVs
bHNjcmVlbkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYKICAgICBpZiAo
IW1lZGlhRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3R5bGVQYWludGVy
IHAodGhpcywgcGFpbnRJbmZvKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgIFFTaGFyZWRQ
b2ludGVyPFN0eWxlUGFpbnRlcj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOworICAg
IGlmIChwLmlzTnVsbCgpIHx8ICFwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgcC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRy
dWUpOworICAgIHAtPnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2lu
ZywgdHJ1ZSk7CiAKLSAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworICAg
IHBhaW50TWVkaWFCYWNrZ3JvdW5kKHAtPnBhaW50ZXIsIHIpOwogCi0gICAgV29ybGRNYXRyaXhU
cmFuc2Zvcm1lciB0cmFuc2Zvcm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAgIFdvcmxkTWF0cml4
VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIocC0+cGFpbnRlciwgbywgcik7CiAgICAgY29uc3QgUVBv
aW50RiBhcnJvd1BvbHlnb25bOV0gPSB7IFFQb2ludEYoMjAsIDApLCBRUG9pbnRGKDEwMCwgMCks
IFFQb2ludEYoMTAwLCA4MCksCiAgICAgICAgICAgICBRUG9pbnRGKDgwLCA4MCksIFFQb2ludEYo
ODAsIDMwKSwgUVBvaW50RigxMCwgMTAwKSwgUVBvaW50RigwLCA5MCksIFFQb2ludEYoNzAsIDIw
KSwgUVBvaW50RigyMCwgMjApfTsKIAotICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFD
b250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKLSAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKGFy
cm93UG9seWdvbiwgOSk7CisgICAgcC0+cGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9s
Rm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBwLT5wYWludGVyLT5kcmF3UG9seWdvbihhcnJvd1Bv
bHlnb24sIDkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTMzNSwyMCArNjE0LDIwIEBA
IGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50CiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7Ci0g
ICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IHAg
PSBnZXRTdHlsZVBhaW50ZXIocGFpbnRJbmZvKTsKKyAgICBpZiAocC5pc051bGwoKSB8fCAhcC0+
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHAucGFpbnRlci0+c2V0UmVu
ZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwLT5wYWludGVyLT5z
ZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwogCi0gICAgcGFpbnRN
ZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChw
LT5wYWludGVyLCByKTsKIAotICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIo
cC5wYWludGVyLCBvLCByKTsKKyAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVy
KHAtPnBhaW50ZXIsIG8sIHIpOwogICAgIGNvbnN0IFFQb2ludEYgc3BlYWtlclBvbHlnb25bNl0g
PSB7IFFQb2ludEYoMjAsIDMwKSwgUVBvaW50Rig1MCwgMzApLCBRUG9pbnRGKDgwLCAwKSwKICAg
ICAgICAgICAgIFFQb2ludEYoODAsIDEwMCksIFFQb2ludEYoNTAsIDcwKSwgUVBvaW50RigyMCwg
NzApfTsKIAotICAgIHAucGFpbnRlci0+c2V0QnJ1c2gobWVkaWFFbGVtZW50LT5tdXRlZCgpID8g
UXQ6OmRhcmtSZWQgOiBnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOwotICAgIHAu
cGFpbnRlci0+ZHJhd1BvbHlnb24oc3BlYWtlclBvbHlnb24sIDYpOworICAgIHAtPnBhaW50ZXIt
PnNldEJydXNoKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IFF0OjpkYXJrUmVkIDogZ2V0TWVkaWFD
b250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBwLT5wYWludGVyLT5kcmF3UG9seWdvbihz
cGVha2VyUG9seWdvbiwgNik7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMzU5LDIyICs2
MzgsMjIgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJP
YmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnQKICAgICBpZiAoIW1lZGlhRWxlbWVudCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJ
bmZvKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFp
bnRlcj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOworICAgIGlmIChwLmlzTnVsbCgp
IHx8ICFwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcC5wYWludGVy
LT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworICAgIHAtPnBh
aW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CiAKLSAg
ICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworICAgIHBhaW50TWVkaWFCYWNr
Z3JvdW5kKHAtPnBhaW50ZXIsIHIpOwogCi0gICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1lciB0cmFu
c2Zvcm1lcihwLnBhaW50ZXIsIG8sIHIpOwotICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVk
aWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVy
IHRyYW5zZm9ybWVyKHAtPnBhaW50ZXIsIG8sIHIpOworICAgIHAtPnBhaW50ZXItPnNldEJydXNo
KGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7CiAgICAgaWYgKG1lZGlhRWxlbWVu
dC0+Y2FuUGxheSgpKSB7CiAgICAgICAgIGNvbnN0IFFQb2ludEYgcGxheVBvbHlnb25bM10gPSB7
IFFQb2ludEYoMCwgMCksIFFQb2ludEYoMTAwLCA1MCksIFFQb2ludEYoMCwgMTAwKX07Ci0gICAg
ICAgIHAucGFpbnRlci0+ZHJhd1BvbHlnb24ocGxheVBvbHlnb24sIDMpOworICAgICAgICBwLT5w
YWludGVyLT5kcmF3UG9seWdvbihwbGF5UG9seWdvbiwgMyk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgcC5wYWludGVyLT5kcmF3UmVjdCgwLCAwLCAzMCwgMTAwKTsKLSAgICAgICAgcC5wYWludGVy
LT5kcmF3UmVjdCg3MCwgMCwgMzAsIDEwMCk7CisgICAgICAgIHAtPnBhaW50ZXItPmRyYXdSZWN0
KDAsIDAsIDMwLCAxMDApOworICAgICAgICBwLT5wYWludGVyLT5kcmF3UmVjdCg3MCwgMCwgMzAs
IDEwMCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTM5NCwxMiArNjczLDEyIEBA
IGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsCiAKIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRp
YUN1cnJlbnRUaW1lKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHIpCiB7Ci0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZv
KTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRl
cj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOworICAgIGlmIChwLmlzTnVsbCgpIHx8
ICFwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcC5wYWludGVyLT5z
ZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwotICAgIHBhaW50TWVk
aWFCYWNrZ3JvdW5kKHAucGFpbnRlciwgcik7CisgICAgcC0+cGFpbnRlci0+c2V0UmVuZGVySGlu
dChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwYWludE1lZGlhQmFja2dyb3Vu
ZChwLT5wYWludGVyLCByKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE0MTYsMTMgKzY5
NSwxMyBAQCBTdHJpbmcgUmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmlu
Z1RpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0CiAKIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFp
bnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCAqbywgY29uc3QgUGFpbnRJbmZv
ICZwYWludEluZm8sIGNvbnN0IEludFJlY3QgJnIpCiB7Ci0gICAgU3R5bGVQYWludGVyIHAodGhp
cywgcGFpbnRJbmZvKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgIFFTaGFyZWRQb2ludGVy
PFN0eWxlUGFpbnRlcj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOworICAgIGlmIChw
LmlzTnVsbCgpIHx8ICFwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
cC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwor
ICAgIHAtPnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1
ZSk7CiAKLSAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworICAgIHBhaW50
TWVkaWFCYWNrZ3JvdW5kKHAtPnBhaW50ZXIsIHIpOwogCiAgICAgaWYgKCFvLT5pc1NsaWRlcigp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDQyLDggKzcyMSw4IEBAIGJvb2wgUmVuZGVy
VGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCAqbywgY29u
c3QgUGFpbnRJbmZvCiAgICAgY29uc3QgUUNvbG9yIHNjYWxlQ29sb3IoaGlnaGxpZ2h0VGV4dC5y
ZWQoKSwgaGlnaGxpZ2h0VGV4dC5ncmVlbigpLCBoaWdobGlnaHRUZXh0LmJsdWUoKSwgbWVkaWFD
b250cm9sc0Jhc2VsaW5lT3BhY2l0eSgpICogMjU1KTsKIAogICAgIC8vIERyYXcgdGhlIG91dGVy
IHJlY3RhbmdsZQotICAgIHAucGFpbnRlci0+c2V0QnJ1c2goc2NhbGVDb2xvcik7Ci0gICAgcC5w
YWludGVyLT5kcmF3UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworICAgIHAtPnBhaW50
ZXItPnNldEJydXNoKHNjYWxlQ29sb3IpOworICAgIHAtPnBhaW50ZXItPmRyYXdSZWN0KGxlZnQs
IHRvcCwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBpZiAoIW8tPm5vZGUoKSB8fCAhby0+bm9kZSgp
LT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ1NSwx
NyArNzM0LDE3IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCAqbywgY29uc3QgUGFpbnRJbmZvCiAgICAgdG9wICs9IGIuaGVpZ2h0
KCkgLSBoZWlnaHQ7CiAKICAgICAvLyBEcmF3IHRoZSBpbm5lciByZWN0YW5nbGUKLSAgICBwLnBh
aW50ZXItPnNldFBlbihRdDo6Tm9QZW4pOwotICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVk
aWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKLSAgICBwLnBhaW50ZXItPmRyYXdSZWN0KGxl
ZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7CisgICAgcC0+cGFpbnRlci0+c2V0UGVuKFF0OjpOb1Bl
bik7CisgICAgcC0+cGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENv
bG9yKG8pKTsKKyAgICBwLT5wYWludGVyLT5kcmF3UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWln
aHQpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50
TWVkaWFWb2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QgKm8sIGNvbnN0IFBhaW50SW5mbyAm
cGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0ICZyKQogewotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMs
IHBhaW50SW5mbyk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICBRU2hhcmVkUG9pbnRlcjxT
dHlsZVBhaW50ZXI+IHAgPSBnZXRTdHlsZVBhaW50ZXIocGFpbnRJbmZvKTsKKyAgICBpZiAocC5p
c051bGwoKSB8fCAhcC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8v
IE5vdGhpbmcgdG8gZHJhdyBoZXJlLCB0aGlzIGlzIGFsbCBkb25lIGluIHRoZSB0cmFjawpAQCAt
MTQ3OCwyOCArNzU3LDI4IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRy
YWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWluCiAgICAgaWYgKCFtZWRp
YUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0eWxlUGFpbnRlciBwKHRo
aXMsIHBhaW50SW5mbyk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICBRU2hhcmVkUG9pbnRl
cjxTdHlsZVBhaW50ZXI+IHAgPSBnZXRTdHlsZVBhaW50ZXIocGFpbnRJbmZvKTsKKyAgICBpZiAo
cC5pc051bGwoKSB8fCAhcC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IHAucGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsK
KyAgICBwLT5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRy
dWUpOwogCi0gICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKyAgICBwYWlu
dE1lZGlhQmFja2dyb3VuZChwLT5wYWludGVyLCByKTsKIAogICAgIGlmIChNZWRpYVBsYXllciog
cGxheWVyID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkgewogICAgICAgICAvLyBHZXQgdGhlIGJ1
ZmZlcmVkIHBhcnRzIG9mIHRoZSBtZWRpYQotICAgICAgICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+
IGJ1ZmZlcmVkID0gcGxheWVyLT5idWZmZXJlZCgpOworICAgICAgICBSZWZQdHI8VGltZVJhbmdl
cz4gYnVmZmVyZWQgPSBwbGF5ZXItPmJ1ZmZlcmVkKCk7CiAgICAgICAgIGlmIChidWZmZXJlZC0+
bGVuZ3RoKCkgPiAwICYmIHBsYXllci0+ZHVyYXRpb24oKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjppbmZpbml0eSgpKSB7CiAgICAgICAgICAgICAvLyBTZXQgdGhlIHRyYW5zZm9ybSBh
bmQgYnJ1c2gKLSAgICAgICAgICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIo
cC5wYWludGVyLCBvLCByKTsKLSAgICAgICAgICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVk
aWFDb250cm9sRm9yZWdyb3VuZENvbG9yKCkpOworICAgICAgICAgICAgV29ybGRNYXRyaXhUcmFu
c2Zvcm1lciB0cmFuc2Zvcm1lcihwLT5wYWludGVyLCBvLCByKTsKKyAgICAgICAgICAgIHAtPnBh
aW50ZXItPnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcigpKTsKIAogICAg
ICAgICAgICAgLy8gUGFpbnQgZWFjaCBidWZmZXJlZCBzZWN0aW9uCiAgICAgICAgICAgICBFeGNl
cHRpb25Db2RlIGV4OwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXJlZC0+
bGVuZ3RoKCk7IGkrKykgewogICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0WCA9IChidWZmZXJl
ZC0+c3RhcnQoaSwgZXgpIC8gcGxheWVyLT5kdXJhdGlvbigpKSAqIDEwMDsKICAgICAgICAgICAg
ICAgICBmbG9hdCB3aWR0aCA9ICgoYnVmZmVyZWQtPmVuZChpLCBleCkgLyBwbGF5ZXItPmR1cmF0
aW9uKCkpICogMTAwKSAtIHN0YXJ0WDsKLSAgICAgICAgICAgICAgICBwLnBhaW50ZXItPmRyYXdS
ZWN0KHN0YXJ0WCwgMzcsIHdpZHRoLCAyNik7CisgICAgICAgICAgICAgICAgcC0+cGFpbnRlci0+
ZHJhd1JlY3Qoc3RhcnRYLCAzNywgd2lkdGgsIDI2KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KQEAgLTE1MTYsMTUgKzc5NSwxNSBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50
TWVkaWFTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbgog
ICAgIGlmICghbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHls
ZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAg
UVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBwID0gZ2V0U3R5bGVQYWludGVyKHBhaW50SW5m
byk7CisgICAgaWYgKHAuaXNOdWxsKCkgfHwgIXAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlh
c2luZywgdHJ1ZSk7CisgICAgcC0+cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50
aWFsaWFzaW5nLCB0cnVlKTsKIAotICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7Ci0g
ICAgcC5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoaG9z
dE5vZGUtPnJlbmRlcmVyKCkpKTsKLSAgICBwLnBhaW50ZXItPmRyYXdSZWN0KHIueCgpLCByLnko
KSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKKyAgICBwLT5wYWludGVyLT5zZXRQZW4oUXQ6Ok5v
UGVuKTsKKyAgICBwLT5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5k
Q29sb3IoaG9zdE5vZGUtPnJlbmRlcmVyKCkpKTsKKyAgICBwLT5wYWludGVyLT5kcmF3UmVjdChy
LngoKSwgci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiAKICAgICByZXR1cm4gZmFsc2U7
CiB9CkBAIC0xNTQ2LDQyICs4MjUsMjIgQEAgdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlk
ZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIH0gZWxzZSBpZiAocGFy
dCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkgewogICAgICAgICBzdHlsZS0+c2V0SGVp
Z2h0KExlbmd0aCh2b2x1bWVUaHVtYkhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgc3R5bGUtPnNl
dFdpZHRoKExlbmd0aCh2b2x1bWVUaHVtYldpZHRoLCBGaXhlZCkpOwotICAgIH0gZWxzZSBpZiAo
cGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJW
ZXJ0aWNhbFBhcnQpIHsKLSAgICAgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKLSAgICAg
ICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgICAgICBvcHRp
b24ub3JpZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0KLSAgICAgICAgUVN0eWxlKiBxc3R5bGUg
PSBxU3R5bGUoKTsKLQotICAgICAgICBpbnQgbGVuZ3RoID0gcXN0eWxlLT5waXhlbE1ldHJpYyhR
U3R5bGU6OlBNX1NsaWRlckxlbmd0aCwgJm9wdGlvbik7Ci0gICAgICAgIGludCB0aGlja25lc3Mg
PSBxc3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2xpZGVyVGhpY2tuZXNzLCAmb3B0aW9u
KTsKLSAgICAgICAgaWYgKG9wdGlvbi5vcmllbnRhdGlvbiA9PSBRdDo6VmVydGljYWwpIHsKLSAg
ICAgICAgICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgodGhpY2tuZXNzLCBGaXhlZCkpOwotICAg
ICAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChsZW5ndGgsIEZp
eGVkKSk7Ci0gICAgICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCh0aGlja25lc3MsIEZp
eGVkKSk7Ci0gICAgICAgIH0KICAgICB9CiB9CiAKIGRvdWJsZSBSZW5kZXJUaGVtZVF0OjpjYXJl
dEJsaW5rSW50ZXJ2YWwoKSBjb25zdAogewotICAgIHJldHVybiAgUUFwcGxpY2F0aW9uOjpjdXJz
b3JGbGFzaFRpbWUoKSAvIDEwMDAuMCAvIDIuMDsKKyAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpj
dXJzb3JGbGFzaFRpbWUoKSAvIDEwMDAuMCAvIDIuMDsKIH0KIAotU3RyaW5nIFJlbmRlclRoZW1l
UXQ6OmZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMs
IGNvbnN0IEZvbnQmIGZvbnQsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkK
K1N0cmluZyBSZW5kZXJUaGVtZVF0OjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzLCBjb25zdCBGb250JiBmb250LCBpbnQgd2lkdGgpCiB7CiAgICAg
aWYgKHdpZHRoIDw9IDApCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIFN0cmluZyBz
dHJpbmc7Ci0gICAgaWYgKGZpbGVuYW1lcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG11bHRp
cGxlRmlsZXNBbGxvd2VkKQotICAgICAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmlsZXNT
ZWxlY3RlZExhYmVsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZyA9IGZpbGVC
dXR0b25Ob0ZpbGVTZWxlY3RlZExhYmVsKCk7Ci0gICAgfQorICAgIGlmIChmaWxlbmFtZXMuaXNF
bXB0eSgpKQorICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgp
OwogICAgIGVsc2UgaWYgKGZpbGVuYW1lcy5zaXplKCkgPT0gMSkgewogICAgICAgICBTdHJpbmcg
Zm5hbWUgPSBmaWxlbmFtZXNbMF07CiAgICAgICAgIFFGb250TWV0cmljcyBmbShmb250LmZvbnQo
KSk7CkBAIC0xNTk2LDYgKzg1NSw0MyBAQCBTdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZmlsZUxpc3RO
YW1lRm9yV2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29ucwogICAgIHJl
dHVybiBzdHJpbmc7CiB9CiAKK1N0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKFJlbmRlclRoZW1l
UXQqIHRoZW1lLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKKyAgICA6IHBhaW50ZXIoMCkK
K3sKKyAgICBRX1VOVVNFRCh0aGVtZSk7CisgICAgaW5pdChwYWludEluZm8uY29udGV4dCA/IHBh
aW50SW5mby5jb250ZXh0IDogMCk7Cit9CisKK1N0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKCkK
KyAgICA6IHBhaW50ZXIoMCkKK3sKK30KKwordm9pZCBTdHlsZVBhaW50ZXI6OmluaXQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxRUGFpbnRl
cio+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKworICAgIGlmIChwYWludGVyKSB7Cisg
ICAgICAgIC8vIHRoZSBzdHlsZXMgb2Z0ZW4gYXNzdW1lIGJlaW5nIGNhbGxlZCB3aXRoIGEgcHJp
c3RpbmUgcGFpbnRlciB3aGVyZSBubyBicnVzaCBpcyBzZXQsCisgICAgICAgIC8vIHNvIHJlc2V0
IGl0IG1hbnVhbGx5CisgICAgICAgIG9sZEJydXNoID0gcGFpbnRlci0+YnJ1c2goKTsKKyAgICAg
ICAgcGFpbnRlci0+c2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOworCisgICAgICAgIC8vIHBhaW50aW5n
IHRoZSB3aWRnZXQgd2l0aCBhbnRpLWFsaWFzaW5nIHdpbGwgbWFrZSBpdCBibHVycnkKKyAgICAg
ICAgLy8gZGlzYWJsZSBpdCBoZXJlIGFuZCByZXN0b3JlIGl0IGxhdGVyCisgICAgICAgIG9sZEFu
dGlhbGlhc2luZyA9IHBhaW50ZXItPnRlc3RSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNp
bmcpOworICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNp
bmcsIGZhbHNlKTsKKyAgICB9Cit9CisKK1N0eWxlUGFpbnRlcjo6flN0eWxlUGFpbnRlcigpCit7
CisgICAgaWYgKHBhaW50ZXIpIHsKKyAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2gob2xkQnJ1c2gp
OworICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5n
LCBvbGRBbnRpYWxpYXNpbmcpOworICAgIH0KK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBl
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCmluZGV4IDdjN2U2
NmY4MDIzOTU5MWM1YmMyM2ExOTk0ZGVkN2ZmZTViNWI1YmUuLmE5NzliYTY3MGU3ODAxMGIwZjAz
M2FlOGQ5ZGRjYmJmY2FmOTJmYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1JlbmRlclRoZW1lUXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5k
ZXJUaGVtZVF0LmgKQEAgLTI0LDEyICsyNCwxMiBAQAogCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUu
aCIKIAotI2luY2x1ZGUgPFFTdHlsZT4KKyNpbmNsdWRlIDxRQnJ1c2g+CisjaW5jbHVkZSA8UVNo
YXJlZFBvaW50ZXI+CisjaW5jbHVkZSA8UVN0cmluZz4KIAogUVRfQkVHSU5fTkFNRVNQQUNFCi1j
bGFzcyBRTGluZUVkaXQ7CiBjbGFzcyBRUGFpbnRlcjsKLWNsYXNzIFFXaWRnZXQ7CiBRVF9FTkRf
TkFNRVNQQUNFCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDIyICszOSwyMSBAQCBjbGFz
cyBSZW5kZXJQcm9ncmVzczsKICNlbmRpZgogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBIVE1M
TWVkaWFFbGVtZW50OwotY2xhc3MgU2Nyb2xsYmFyVGhlbWVRdDsKK2NsYXNzIFN0eWxlUGFpbnRl
cjsKIAogY2xhc3MgUmVuZGVyVGhlbWVRdCA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Ci1wcml2YXRl
OgotICAgIFJlbmRlclRoZW1lUXQoUGFnZSogcGFnZSk7Ci0gICAgdmlydHVhbCB+UmVuZGVyVGhl
bWVRdCgpOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNy
ZWF0ZShQYWdlKik7CisgICAgUmVuZGVyVGhlbWVRdChQYWdlKik7CisKKyAgICBzdGF0aWMgaW5s
aW5lIGJvb2wgdXNlTW9iaWxlVGhlbWUoKSB7IHJldHVybiAhcWdldGVudigiUVRfV0VCS0lUX1VT
RV9NT0JJTEVfVEhFTUUiKS5pc051bGwoKTsgfQogCiAgICAgU3RyaW5nIGV4dHJhRGVmYXVsdFN0
eWxlU2hlZXQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRl
clN0eWxlKikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0
IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9j
dXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGludCBiYXNl
bGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgYmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIC8v
IEEgbWV0aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhl
IHdpbmRvdyBoYXMgZm9jdXMgb3Igbm90LgogICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9y
dHNUaW50cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKQEAgLTYyLDcgKzYxLDcgQEAgcHVi
bGljOgogICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRp
bmcgaXMgc3VwcG9ydGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9s
VGludHMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25z
dCBSZW5kZXJPYmplY3QqIG8sIEludFJlY3QmIHIpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RS
ZXBhaW50UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7CiAKICAgICAvLyBUaGUg
cGxhdGZvcm0gc2VsZWN0aW9uIGNvbG9yLgogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKQEAgLTgxLDQ5ICs4MCwzOCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBCb3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91
bmRDb2xvcikgY29uc3Q7Ci0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkKLSAgICB2aXJ0dWFsIGlu
dCBwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OwotI2VuZGlm
CisgICAgdmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IEJvcmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYpIGNvbnN0Owog
CiAjaWYgRU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFDb250cm9s
c1N0eWxlU2hlZXQoKTsKICNlbmRpZgogCi0gICAgUVN0eWxlKiBxU3R5bGUoKSBjb25zdDsKLQog
cHJvdGVjdGVkOgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIGJv
b2wgcGFpbnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSop
IGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworICAgIHZpcnR1YWwgYm9vbCBw
YWludFJhZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJl
bmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAg
dmlydHVhbCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKIAotICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxl
KENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5m
byYsIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVM
aXN0U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0
OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0Kiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVs
ZW1lbnQqKSBjb25zdDsKIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCiAgICAgdmlydHVhbCB2
b2lkIGFkanVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxl
KiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAvLyBS
ZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dy
ZXNzIGJhci4KKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclBy
b2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1i
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owog
CiAgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwpAQCAtMTQwLDE0ICsxMjgsNiBAQCBwcm90ZWN0
ZWQ6CiAKICNpZm5kZWYgUVRfTk9fU1BJTkJPWAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5l
clNwaW5CdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSNlbmRpZgotCi0jaWYg
RU5BQkxFKFBST0dSRVNTX1RBRykKLSAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwg
b2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJs
ZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiBy
ZW5kZXJQcm9ncmVzcykgY29uc3Q7Ci0gICAgLy8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhl
IGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmlt
YXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVz
cykgY29uc3Q7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTE2NCw2OSArMTQ0LDUw
IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzQ3Vy
cmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKICAgICB2
aXJ0dWFsIFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShmbG9hdCBjdXJy
ZW50VGltZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25E
aXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoQ29udHJvbFBhcnQpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLXByaXZhdGU6CiAKLSAgICB2b2lkIHBhaW50TWVkaWFCYWNrZ3JvdW5kKFFQYWludGVyKiBw
YWludGVyLCBjb25zdCBJbnRSZWN0JiByKSBjb25zdDsKKyAgICB2b2lkIHBhaW50TWVkaWFCYWNr
Z3JvdW5kKFFQYWludGVyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIGRvdWJsZSBtZWRp
YUNvbnRyb2xzQmFzZWxpbmVPcGFjaXR5KCkgY29uc3Q7Ci0gICAgUUNvbG9yIGdldE1lZGlhQ29u
dHJvbEZvcmVncm91bmRDb2xvcihSZW5kZXJPYmplY3QqIG8gPSAwKSBjb25zdDsKKyAgICBRQ29s
b3IgZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKFJlbmRlck9iamVjdCogPSAwKSBjb25z
dDsKICNlbmRpZgotICAgIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUq
IHJlbmRlclN0eWxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9u
U3R5bGUoUmVuZGVyU3R5bGUqKSBjb25zdCA9IDA7CiAKLXByaXZhdGU6Ci0gICAgdmlydHVhbCBT
dHJpbmcgZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1l
cywgY29uc3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCk7Ci0K
LSAgICBib29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQpIGNvbnN0OworICAgIHZpcnR1YWwg
U3RyaW5nIGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFt
ZXMsIGNvbnN0IEZvbnQmLCBpbnQgd2lkdGgpOwogCi0gICAgQ29udHJvbFBhcnQgaW5pdGlhbGl6
ZUNvbW1vblFTdHlsZU9wdGlvbnMoUVN0eWxlT3B0aW9uJiwgUmVuZGVyT2JqZWN0KikgY29uc3Q7
Ci0KLSAgICB2b2lkIHNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2
b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgUVJl
Y3QgaW5mbGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3Q7CiAK
ICAgICB2b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJikgY29u
c3Q7CiAKLSAgICBpbnQgZmluZEZyYW1lTGluZVdpZHRoKFFTdHlsZSogc3R5bGUpIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdCA9IDA7
CiAKLSAgICBRU3R5bGUqIGZhbGxiYWNrU3R5bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFFTaGFy
ZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4gZ2V0U3R5bGVQYWludGVyKGNvbnN0IFBhaW50SW5mbyYp
ID0gMDsKKworICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCkgY29uc3Q7CiAKICAg
ICBJbnRSZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVy
ZXIsIGNvbnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBJbnRSZWN0IHBhcnRSZWN0LCBj
b25zdCBJbnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3Q7CiAKICAgICBQYWdlKiBtX3BhZ2U7CiAK
LSNpZmRlZiBRX1dTX01BQwotICAgIGludCBtX2J1dHRvbkZvbnRQaXhlbFNpemU7Ci0jZW5kaWYK
ICAgICBRU3RyaW5nIG1fYnV0dG9uRm9udEZhbWlseTsKIAotICAgIFFTdHlsZSogbV9mYWxsYmFj
a1N0eWxlOwotICAgIG11dGFibGUgUUxpbmVFZGl0KiBtX2xpbmVFZGl0OwogfTsKIAogY2xhc3Mg
U3R5bGVQYWludGVyIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXIoUmVuZGVy
VGhlbWVRdCosIGNvbnN0IFBhaW50SW5mbyYpOwotICAgIGV4cGxpY2l0IFN0eWxlUGFpbnRlcihT
Y3JvbGxiYXJUaGVtZVF0KiwgR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgflN0eWxlUGFpbnRlcigp
OworICAgIHZpcnR1YWwgflN0eWxlUGFpbnRlcigpOwogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gcGFpbnRlciAmJiBzdHlsZTsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIHBhaW50ZXI7IH0KIAogICAgIFFQYWludGVyKiBwYWludGVyOwotICAgIFFXaWRn
ZXQqIHdpZGdldDsKLSAgICBRU3R5bGUqIHN0eWxlOwogCi0gICAgdm9pZCBkcmF3UHJpbWl0aXZl
KFFTdHlsZTo6UHJpbWl0aXZlRWxlbWVudCBwZSwgY29uc3QgUVN0eWxlT3B0aW9uJiBvcHQpCi0g
ICAgeyBzdHlsZS0+ZHJhd1ByaW1pdGl2ZShwZSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQot
ICAgIHZvaWQgZHJhd0NvbnRyb2woUVN0eWxlOjpDb250cm9sRWxlbWVudCBjZSwgY29uc3QgUVN0
eWxlT3B0aW9uJiBvcHQpCi0gICAgeyBzdHlsZS0+ZHJhd0NvbnRyb2woY2UsICZvcHQsIHBhaW50
ZXIsIHdpZGdldCk7IH0KLSAgICB2b2lkIGRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNvbXBs
ZXhDb250cm9sIGNjLCBjb25zdCBRU3R5bGVPcHRpb25Db21wbGV4JiBvcHQpCi0gICAgeyBzdHls
ZS0+ZHJhd0NvbXBsZXhDb250cm9sKGNjLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOyB9Citwcm90
ZWN0ZWQ6CisgICAgU3R5bGVQYWludGVyKFJlbmRlclRoZW1lUXQqLCBjb25zdCBQYWludEluZm8m
KTsKKyAgICBTdHlsZVBhaW50ZXIoKTsKKyAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0Kik7
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVN0
eWxlKik7Ci0KICAgICBRQnJ1c2ggb2xkQnJ1c2g7CiAgICAgYm9vbCBvbGRBbnRpYWxpYXNpbmc7
CiAKLSAgICBRX0RJU0FCTEVfQ09QWShTdHlsZVBhaW50ZXIpCiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmIyODVkYjlkMjRjNjk5NWUwMTc0ODcxNTMyNTIzM2E0NDExOTQ2NWIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNw
cApAQCAtMCwwICsxLDY2NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJL
aXQgcHJvamVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVuZGVyVGhlbWVRdE1vYmlsZS5oIgorCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rv
ci5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkhUTUxJ
bnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU2Vs
ZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWludEluZm8u
aCIKKyNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIK
KyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorI2luY2x1
ZGUgIlJlbmRlclByb2dyZXNzLmgiCisjZW5kaWYKKyNpZiBIQVZFKFFTVFlMRSkKKyNpbmNsdWRl
ICJSZW5kZXJUaGVtZVFTdHlsZS5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxRQ29sb3I+CisjaW5j
bHVkZSA8UUZpbGU+CisjaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgorI2luY2x1ZGUgPFFQYWludGVy
PgorI2luY2x1ZGUgPFFQaXhtYXBDYWNoZT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisvLyBDb25zdGFudHMgZXh0cmFjdGVkIGZyb20gUUNv
bW1vblN0eWxlIGFuZCBRV2luZG93c1N0eWxlCitzdGF0aWMgY29uc3QgaW50IGFycm93Qm94V2lk
dGggPSAxNjsKK3N0YXRpYyBjb25zdCBpbnQgZnJhbWVXaWR0aCA9IDI7CitzdGF0aWMgY29uc3Qg
aW50IGNoZWNrQm94V2lkdGggPSAxMzsKK3N0YXRpYyBjb25zdCBpbnQgcmFkaW9XaWR0aCA9IDEy
Oworc3RhdGljIGNvbnN0IGludCBidXR0b25JY29uU2l6ZSA9IDE2Oworc3RhdGljIGNvbnN0IGlu
dCBzbGlkZXJXaWR0aCA9IDExOworc3RhdGljIGNvbnN0IGludCBzbGlkZXJIZWlnaHQgPSAwOwor
CisvLyBPdGhlciBjb25zdGFudHMgdXNlZCBieSB0aGUgbW9iaWxlIHRoZW1lCitzdGF0aWMgZmxv
YXQgYnV0dG9uUGFkZGluZ0xlZnQgPSAxODsKK3N0YXRpYyBmbG9hdCBidXR0b25QYWRkaW5nUmln
aHQgPSAxODsKK3N0YXRpYyBmbG9hdCBidXR0b25QYWRkaW5nVG9wID0gMjsKK3N0YXRpYyBmbG9h
dCBidXR0b25QYWRkaW5nQm90dG9tID0gMzsKK3N0YXRpYyBmbG9hdCBtZW51TGlzdFBhZGRpbmcg
PSA5Oworc3RhdGljIGZsb2F0IHRleHRGaWVsZFBhZGRpbmcgPSA1OworCisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChRUGFpbnRlciogcGFpbnRl
ciwgY29uc3QgUVBlbiYgcGVuLCBjb25zdCBRUmVjdCYgcmVjdCwgY29uc3QgUUJydXNoJiBicnVz
aCkKK3sKKyAgICBRUGVuIG9sZFBlbiA9IHBhaW50ZXItPnBlbigpOworICAgIFFCcnVzaCBvbGRC
cnVzaCA9IHBhaW50ZXItPmJydXNoKCk7CisgICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFp
bnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKKyAg
ICBwYWludGVyLT5zZXRCcnVzaChicnVzaCk7CisKKyAgICBpbnQgbGluZSA9IDE7CisgICAgcGFp
bnRlci0+ZHJhd1JvdW5kZWRSZWN0KHJlY3QuYWRqdXN0ZWQobGluZSwgbGluZSwgLWxpbmUsIC1s
aW5lKSwKKyAgICAgICAgICAgIC8qIHhSYWRpdXMgKi8gNS4wLCAvKiB5UmFkaW91cyAqLyA1LjAp
OworICAgIHBhaW50ZXItPnNldFBlbihvbGRQZW4pOworICAgIHBhaW50ZXItPnNldEJydXNoKG9s
ZEJydXNoKTsKK30KKworUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBSZW5kZXJUaGVtZVF0
TW9iaWxlOjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJiBwaSkKK3sKKyAgICByZXR1
cm4gUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPihuZXcgU3R5bGVQYWludGVyTW9iaWxlKHRo
aXMsIHBpKSk7Cit9CisKK1N0eWxlUGFpbnRlck1vYmlsZTo6U3R5bGVQYWludGVyTW9iaWxlKFJl
bmRlclRoZW1lUXRNb2JpbGUqIHRoZW1lLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKKyAg
ICA6IFN0eWxlUGFpbnRlcih0aGVtZSwgcGFpbnRJbmZvKQoreworfQorCit2b2lkIFN0eWxlUGFp
bnRlck1vYmlsZTo6ZHJhd0NoZWNrZXIoUVBhaW50ZXIqIHBhaW50ZXIsIGludCBzaXplLCBRQ29s
b3IgY29sb3IpIGNvbnN0Cit7CisgICAgaW50IGJvcmRlciA9IHFNaW4ocU1heCgxLCBpbnQoMC4y
ICogc2l6ZSkpLCA2KTsKKyAgICBpbnQgY2hlY2tlclNpemUgPSBxTWF4KHNpemUgLSAyICogYm9y
ZGVyLCAzKTsKKyAgICBpbnQgd2lkdGggPSBjaGVja2VyU2l6ZSAvIDM7CisgICAgaW50IG1pZGRs
ZSA9IHFNYXgoMyAqIGNoZWNrZXJTaXplIC8gNywgMyk7CisgICAgaW50IHggPSAoKHNpemUgLSBj
aGVja2VyU2l6ZSkgPj4gMSk7CisgICAgaW50IHkgPSAoKHNpemUgLSBjaGVja2VyU2l6ZSkgPj4g
MSkgKyAoY2hlY2tlclNpemUgLSB3aWR0aCAtIG1pZGRsZSk7CisgICAgUVZlY3RvcjxRTGluZUY+
IGxpbmVzKGNoZWNrZXJTaXplICsgMSk7CisgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1pZGRsZTsgKytpKSB7CisgICAgICAgIGxpbmVzW2ldID0g
UUxpbmVGKHgsIHksIHgsIHkgKyB3aWR0aCk7CisgICAgICAgICsreDsKKyAgICAgICAgKyt5Owor
ICAgIH0KKyAgICBmb3IgKGludCBpID0gbWlkZGxlOyBpIDw9IGNoZWNrZXJTaXplOyArK2kpIHsK
KyAgICAgICAgbGluZXNbaV0gPSBRTGluZUYoeCwgeSwgeCwgeSArIHdpZHRoKTsKKyAgICAgICAg
Kyt4OworICAgICAgICAtLXk7CisgICAgfQorICAgIHBhaW50ZXItPmRyYXdMaW5lcyhsaW5lcy5j
b25zdERhdGEoKSwgbGluZXMuc2l6ZSgpKTsKK30KKworUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2Jp
bGU6OmZpbmRDaGVja2VyKGNvbnN0IFFSZWN0JiByZWN0LCBib29sIGRpc2FibGVkKSBjb25zdAor
eworICAgIGludCBzaXplID0gcU1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAg
IFFQaXhtYXAgcmVzdWx0OworICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRp
bjFTdHJpbmcoIiRxdC1tYWVtbzUtbW9iaWxlLXRoZW1lLWNoZWNrZXItIik7CisgICAgUVN0cmlu
ZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZSkgKyBRTGF0aW4xU3RyaW5nKCIt
IikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIpIDogUUxhdGluMVN0cmlu
ZygiZW5hYmxlZCIpKTsKKyAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkp
IHsKKyAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplLCBzaXplKTsKKyAgICAgICAgcmVzdWx0
LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0
KTsKKyAgICAgICAgZHJhd0NoZWNrZXIoJnBhaW50ZXIsIHNpemUsIGRpc2FibGVkID8gUXQ6Omxp
Z2h0R3JheSA6IFF0OjpkYXJrR3JheSk7CisgICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtl
eSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTdHlsZVBh
aW50ZXJNb2JpbGU6OmRyYXdSYWRpbyhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNp
emUsIGJvb2wgY2hlY2tlZCwgUUNvbG9yIGNvbG9yKSBjb25zdAoreworICAgIHBhaW50ZXItPnNl
dFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICAvLyBnZXQg
bWlub3Igc2l6ZSB0byBkbyBub3QgcGFpbnQgYSB3aWRlIGVsaXBzZQorICAgIHFyZWFsIHNxdWFy
ZVNpemUgPSBxTWluKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgLy8gZGVmbGF0
ZSBvbmUgcGl4ZWwKKyAgICBRUmVjdCByZWN0ID0gUVJlY3QoUVBvaW50KDEsIDEpLCBRU2l6ZShz
cXVhcmVTaXplIC0gMiwgc3F1YXJlU2l6ZSAtIDIpKTsKKyAgICBjb25zdCBRUG9pbnQgY2VudGVy
R3JhZGllbnQocmVjdC5ib3R0b21SaWdodCgpICogMC43KTsKKworICAgIFFSYWRpYWxHcmFkaWVu
dCByYWRpYWxHcmFkaWVudChjZW50ZXJHcmFkaWVudCwgY2VudGVyR3JhZGllbnQueCgpIC0gMSk7
CisgICAgcmFkaWFsR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0Ojp3aGl0ZSk7CisgICAgcmFk
aWFsR3JhZGllbnQuc2V0Q29sb3JBdCgwLjYsIFF0Ojp3aGl0ZSk7CisgICAgcmFkaWFsR3JhZGll
bnQuc2V0Q29sb3JBdCgxLjAsIGNvbG9yKTsKKworICAgIHBhaW50ZXItPnNldFBlbihjb2xvcik7
CisgICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOworICAgIHBhaW50ZXItPmRyYXdFbGxpcHNl
KHJlY3QpOworICAgIHBhaW50ZXItPnNldEJydXNoKHJhZGlhbEdyYWRpZW50KTsKKyAgICBwYWlu
dGVyLT5kcmF3RWxsaXBzZShyZWN0KTsKKworICAgIGludCBib3JkZXIgPSAwLjEgKiAocmVjdC53
aWR0aCgpICsgcmVjdC5oZWlnaHQoKSk7CisgICAgYm9yZGVyID0gcU1pbihxTWF4KDIsIGJvcmRl
ciksIDEwKTsKKyAgICByZWN0LmFkanVzdChib3JkZXIsIGJvcmRlciwgLWJvcmRlciwgLWJvcmRl
cik7CisgICAgaWYgKGNoZWNrZWQpIHsKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKFF0OjpOb1Bl
bik7CisgICAgICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKKyAgICAgICAgcGFpbnRlci0+
ZHJhd0VsbGlwc2UocmVjdCk7CisgICAgfQorfQorCitRUGl4bWFwIFN0eWxlUGFpbnRlck1vYmls
ZTo6ZmluZFJhZGlvKGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIGJvb2wgZGlzYWJs
ZWQpIGNvbnN0Cit7CisgICAgUVBpeG1hcCByZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0IFFTdHJp
bmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS1tb2JpbGUtdGhlbWUtcmFkaW8t
Iik7CisgICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0
aCgpKSArIFFMYXRpbjFTdHJpbmcoIi0iKSArIFFTdHJpbmc6Om51bWJlcihzaXplLmhlaWdodCgp
KSArIFFMYXRpbjFTdHJpbmcoIi0iKQorICAgICAgICArIChkaXNhYmxlZCA/IFFMYXRpbjFTdHJp
bmcoImRpc2FibGVkIikgOiBRTGF0aW4xU3RyaW5nKCJlbmFibGVkIikpICsgKGNoZWNrZWQgPyBR
TGF0aW4xU3RyaW5nKCItY2hlY2tlZCIpIDogUUxhdGluMVN0cmluZygiIikpOworICAgIGlmICgh
UVBpeG1hcENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgICAgICByZXN1bHQgPSBRUGl4
bWFwKHNpemUpOworICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAg
ICBRUGFpbnRlciBwYWludGVyKCZyZXN1bHQpOworICAgICAgICBkcmF3UmFkaW8oJnBhaW50ZXIs
IHNpemUsIGNoZWNrZWQsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7
CisgICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKKyAgICB9CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBs
ZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9y
IGNvbG9yKSBjb25zdAoreworICAgIGludCByZWN0V2lkdGggPSBzaXplLndpZHRoKCkgLSAxOwor
ICAgIGludCB3aWR0aCA9IHFNYXgoMiwgcmVjdFdpZHRoID4+IDMpOworICAgIGludCBkaXN0YW5j
ZSA9IChyZWN0V2lkdGggLSAzICogd2lkdGgpID4+IDE7CisgICAgaW50IHRvcCA9IChzaXplLmhl
aWdodCgpIC0gd2lkdGgpID4+IDE7CisKKyAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOworICAg
IHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKKworICAgIHBhaW50ZXItPmRyYXdSZWN0KDAsIHRv
cCwgd2lkdGgsIHdpZHRoKTsKKyAgICBwYWludGVyLT5kcmF3UmVjdCh3aWR0aCArIGRpc3RhbmNl
LCB0b3AsIHdpZHRoLCB3aWR0aCk7CisgICAgcGFpbnRlci0+ZHJhd1JlY3QoMiAqICh3aWR0aCAr
IGRpc3RhbmNlKSwgdG9wLCB3aWR0aCwgd2lkdGgpOworfQorCit2b2lkIFN0eWxlUGFpbnRlck1v
YmlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6
ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAoreworICAgIGludCB3aWR0aCA9IHNpemUud2lk
dGgoKTsKKyAgICBpbnQgbWlkbGUgPSB3aWR0aCA+PiAxOworICAgIFFWZWN0b3I8UUxpbmU+IGxp
bmVzKHdpZHRoICsgMSk7CisKKyAgICBmb3IgKGludCB4ID0gMCwgeSA9IDA7ICB4IDwgbWlkbGU7
IHgrKywgeSsrKSB7CisgICAgICAgIGxpbmVzW3hdID0gUUxpbmUoeCwgeSwgeCwgeSArIDIpOwor
ICAgICAgICBsaW5lc1t4ICsgbWlkbGVdID0gUUxpbmUod2lkdGggLSB4IC0gMSwgeSwgd2lkdGgg
LSB4IC0gMSwgeSArIDIpOworICAgIH0KKyAgICAvLyBKdXN0IHRvIGVuc3VyZSB0aGUgbGluZXMn
IGludGVyc2VjdGlvbi4KKyAgICBsaW5lc1t3aWR0aF0gPSBRTGluZShtaWRsZSwgbWlkbGUsIG1p
ZGxlLCBtaWRsZSArIDIpOworCisgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKKyAgICBwYWlu
dGVyLT5zZXRCcnVzaChjb2xvcik7CisgICAgcGFpbnRlci0+ZHJhd0xpbmVzKGxpbmVzKTsKK30K
KworUVNpemUgU3R5bGVQYWludGVyTW9iaWxlOjpnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNp
emUmIGJ1dHRvblNpemUpIGNvbnN0Cit7CisgICAgY29uc3QgaW50IGJvcmRlciA9IHFNYXgoMywg
YnV0dG9uU2l6ZS53aWR0aCgpID4+IDMpIDw8IDE7CisKKyAgICBpbnQgd2lkdGggPSBidXR0b25T
aXplLndpZHRoKCkgLSBib3JkZXI7CisgICAgaW50IGhlaWdodCA9IGJ1dHRvblNpemUuaGVpZ2h0
KCkgLSBib3JkZXI7CisKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAg
IHJldHVybiBRU2l6ZSgpOworCisgICAgaWYgKGhlaWdodCA+PSAod2lkdGggPj4gMSkpCisgICAg
ICAgIHdpZHRoID0gd2lkdGggPj4gMSA8PCAxOworICAgIGVsc2UKKyAgICAgICAgd2lkdGggPSBo
ZWlnaHQgPDwgMTsKKworICAgIHJldHVybiBRU2l6ZSh3aWR0aCArIDEsIHdpZHRoKTsKK30KKwor
UVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYg
c2l6ZSwgYm9vbCBtdWx0aXBsZSwgYm9vbCBkaXNhYmxlZCkgY29uc3QKK3sKKyAgICBRUGl4bWFw
IHJlc3VsdDsKKyAgICBRU2l6ZSBpbWFnZVNpemUgPSBnZXRCdXR0b25JbWFnZVNpemUoc2l6ZSk7
CisKKyAgICBpZiAoaW1hZ2VTaXplLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gUVBpeG1hcCgp
OworICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1t
YWVtbzUtbW9iaWxlLXRoZW1lLWNvbWJvLSIpOworICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsg
KG11bHRpcGxlID8gUUxhdGluMVN0cmluZygibXVsdGlwbGUtIikgOiBRTGF0aW4xU3RyaW5nKCJz
aW1wbGUtIikpCisgICAgICAgICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS53aWR0aCgpKSAr
IFFMYXRpbjFTdHJpbmcoIi0iKSArIFFTdHJpbmc6Om51bWJlcihpbWFnZVNpemUuaGVpZ2h0KCkp
CisgICAgICAgICsgUUxhdGluMVN0cmluZygiLSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmlu
ZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFTdHJpbmcoImVuYWJsZWQiKSk7CisgICAgaWYgKCFRUGl4
bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7CisgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAo
aW1hZ2VTaXplKTsKKyAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAg
ICAgUVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0KTsKKyAgICAgICAgaWYgKG11bHRpcGxlKQorICAg
ICAgICAgICAgZHJhd011bHRpcGxlQ29tYm9CdXR0b24oJnBhaW50ZXIsIGltYWdlU2l6ZSwgZGlz
YWJsZWQgPyBRdDo6bGlnaHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKCZwYWludGVyLCBpbWFnZVNpemUsIGRpc2Fi
bGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7CisgICAgICAgIFFQaXhtYXBDYWNo
ZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdMaW5lRWRpdChjb25zdCBRUmVjdCYgcmVjdCwg
Ym9vbCBzdW5rZW4sIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXks
IDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKKyAgICBw
YWludGVyLT5zZXRQZW4ocGVuKTsKKworICAgIGlmIChzdW5rZW4pIHsKKyAgICAgICAgZHJhd1Jl
Y3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6
OmRhcmtHcmF5KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBRTGluZWFyR3JhZGll
bnQgbGluZWFyR3JhZGllbnQ7CisgICAgaWYgKCFlbmFibGVkKSB7CisgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldFN0YXJ0KHJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0RmluYWxTdG9wKHJlY3QuYm90dG9tTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0Q29sb3JBdCgwLjAsIFF0OjpsaWdodEdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRDb2xvckF0KDEuMCwgUXQ6OndoaXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaW5lYXJH
cmFkaWVudC5zZXRTdGFydChyZWN0LnRvcExlZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50
LnNldEZpbmFsU3RvcChRUG9pbnQocmVjdC50b3BMZWZ0KCkueCgpLAorICAgICAgICAgICAgICAg
ICAgICByZWN0LnRvcExlZnQoKS55KCkgKyAvKiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICov
IDIwKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFya0dy
YXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMzUsIFF0Ojp3aGl0ZSk7
CisgICAgfQorCisgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwg
cGVuLCByZWN0LCBsaW5lYXJHcmFkaWVudCk7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyTW9iaWxl
OjpkcmF3Q2hlY2tCb3goY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFi
bGVkKQoreworICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudChyZWN0LnRvcExlZnQo
KSwgcmVjdC5ib3R0b21MZWZ0KCkpOworICAgIGlmICghZW5hYmxlZCkgeworICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmxpZ2h0R3JheSk7CisgICAgICAgIGxpbmVh
ckdyYWRpZW50LnNldENvbG9yQXQoMC41LCBRdDo6d2hpdGUpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOworICAgICAg
ICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRlKTsKKyAgICB9CisKKyAg
ICBwYWludGVyLT5zZXRQZW4oUVBlbihlbmFibGVkID8gUXQ6OmRhcmtHcmF5IDogUXQ6OmxpZ2h0
R3JheSkpOworICAgIHBhaW50ZXItPnNldEJydXNoKGxpbmVhckdyYWRpZW50KTsKKyAgICBwYWlu
dGVyLT5kcmF3UmVjdChyZWN0KTsKKyAgICBjb25zdCBRUmVjdCByID0gcmVjdC5hZGp1c3RlZCgx
LCAxLCAtMSwgLTEpOworCisgICAgaWYgKCFjaGVja2VkKQorICAgICAgICByZXR1cm47CisKKyAg
ICBRUGl4bWFwIGNoZWNrZXIgPSBmaW5kQ2hlY2tlcihyLCAhZW5hYmxlZCk7CisgICAgaWYgKGNo
ZWNrZXIuaXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4ID0gKHIud2lkdGgo
KSAtIGNoZWNrZXIud2lkdGgoKSkgPj4gMTsKKyAgICBpbnQgeSA9IChyLmhlaWdodCgpIC0gY2hl
Y2tlci5oZWlnaHQoKSkgPj4gMTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHIueCgpICsgeCwg
ci55KCkgKyB5LCBjaGVja2VyKTsKK30KKwordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdS
YWRpb0J1dHRvbihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQp
Cit7CisgICAgUVBpeG1hcCByYWRpbyA9IGZpbmRSYWRpbyhyZWN0LnNpemUoKSwgY2hlY2tlZCwg
IWVuYWJsZWQpOworICAgIGlmIChyYWRpby5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHBhaW50ZXItPmRyYXdQaXhtYXAocmVjdC54KCksIHJlY3QueSgpLCByYWRpbyk7Cit9CisKK3Zv
aWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3UHVzaEJ1dHRvbihjb25zdCBRUmVjdCYgcmVjdCwg
Ym9vbCBzdW5rZW4sIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXks
IDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKKyAgICBw
YWludGVyLT5zZXRQZW4ocGVuKTsKKworICAgIGlmIChzdW5rZW4pIHsKKyAgICAgICAgZHJhd1Jl
Y3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6
OmRhcmtHcmF5KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBRTGluZWFyR3JhZGll
bnQgbGluZWFyR3JhZGllbnQ7CisgICAgaWYgKCFlbmFibGVkKSB7CisgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGll
bnQuc2V0RmluYWxTdG9wKHJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQu
c2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29s
b3JBdCgxLjAsIFF0Ojp3aGl0ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGluZWFyR3JhZGll
bnQuc2V0U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5z
ZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QuYm90dG9tTGVmdCgpLngoKSwKKyAgICAgICAgICAgICAg
ICAgICAgcmVjdC5ib3R0b21MZWZ0KCkueSgpIC0gLyogb2Zmc2V0IGxpbWl0IGZvciBncmFkaWVu
dCAqLyAyMCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6Omdy
YXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNCwgUXQ6OndoaXRlKTsK
KyAgICB9CisKKyAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBw
ZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsKK30KKwordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6
OmRyYXdDb21ib0JveChjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBtdWx0aXBsZSwgYm9vbCBlbmFi
bGVkKQoreworICAgIFFQZW4gcGVuKFF0OjpkYXJrR3JheSwgMS4wLCBRdDo6U29saWRMaW5lLCBR
dDo6Um91bmRDYXAsIFF0OjpSb3VuZEpvaW4pOworICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJH
cmFkaWVudDsKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0
U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5h
bFN0b3AocmVjdC50b3BMZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0
KDAuMCwgUXQ6OmdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwg
UXQ6OndoaXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFy
dChyZWN0LmJvdHRvbUxlZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3Rv
cChRUG9pbnQocmVjdC5ib3R0b21MZWZ0KCkueCgpLAorICAgICAgICAgICAgICAgICAgICByZWN0
LmJvdHRvbUxlZnQoKS55KCkgLSAvKiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7
CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7CisgICAg
ICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC40LCBRdDo6d2hpdGUpOworICAgIH0KKwor
ICAgIGRyYXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwg
bGluZWFyR3JhZGllbnQpOworCisgICAgY29uc3QgUVJlY3QgcihyZWN0LngoKSArIHJlY3Qud2lk
dGgoKSAtIGZyYW1lV2lkdGggLSBhcnJvd0JveFdpZHRoLCByZWN0LnkoKSArIGZyYW1lV2lkdGgK
KyAgICAgICAgICAgICAgICAgICAsIGFycm93Qm94V2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSAyICog
ZnJhbWVXaWR0aCk7CisgICAgUVBpeG1hcCBwaWMgPSBmaW5kQ29tYm9CdXR0b24oci5zaXplKCks
IG11bHRpcGxlLCAhZW5hYmxlZCk7CisKKyAgICBpZiAocGljLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnQgeCA9IChyLndpZHRoKCkgLSBwaWMud2lkdGgoKSkgPj4gMTsKKyAg
ICBpbnQgeSA9IChyLmhlaWdodCgpIC0gcGljLmhlaWdodCgpKSA+PiAxOworICAgIHBhaW50ZXIt
PmRyYXdQaXhtYXAoci54KCkgKyB4LCByLnkoKSArIHksIHBpYyk7CisKKyAgICBwYWludGVyLT5z
ZXRQZW4oZW5hYmxlZCA/IFF0OjpkYXJrR3JheSA6IFF0OjpncmF5KTsKKyAgICBwYWludGVyLT5k
cmF3TGluZShyLmxlZnQoKSAtIDIsIHIudG9wKCkgKyAyLCByLmxlZnQoKSAtIDIsIHIuYm90dG9t
KCkgLSAyKTsKK30KKworCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZVF0TW9i
aWxlOjpjcmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRl
clRoZW1lUXRNb2JpbGUocGFnZSkpOworfQorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5k
ZXJUaGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpIHsKKyNp
ZiBIQVZFKFFTVFlMRSkKKyAgICAgICAgaWYgKFJlbmRlclRoZW1lUXQ6OnVzZU1vYmlsZVRoZW1l
KCkpCisgICAgICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWVRU3R5bGU6OmNyZWF0ZShwYWdlKTsK
KyNlbHNlCisgICAgICAgIHFwdXRlbnYoIlFUX1dFQktJVF9VU0VfTU9CSUxFX1RIRU1FIiwgUUJ5
dGVBcnJheSgiMSIpKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gUmVuZGVyVGhlbWVRdE1vYmls
ZTo6Y3JlYXRlKHBhZ2UpOworICAgIH0KKworICAgIHN0YXRpYyBSZW5kZXJUaGVtZSogZmFsbGJh
Y2sgPSBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjcmVhdGUoMCkucmVsZWFzZVJlZigpOworICAgIHJl
dHVybiBmYWxsYmFjazsKK30KKworUmVuZGVyVGhlbWVRdE1vYmlsZTo6UmVuZGVyVGhlbWVRdE1v
YmlsZShQYWdlKiBwYWdlKQorICAgIDogUmVuZGVyVGhlbWVRdChwYWdlKQoreworfQorCitSZW5k
ZXJUaGVtZVF0TW9iaWxlOjp+UmVuZGVyVGhlbWVRdE1vYmlsZSgpCit7Cit9CisKK2Jvb2wgUmVu
ZGVyVGhlbWVRdE1vYmlsZTo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5ZXImIGZpbGwsIGNvbnN0
IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChzdHlsZS0+YXBw
ZWFyYW5jZSgpKSB7CisgICAgY2FzZSBDaGVja2JveFBhcnQ6CisgICAgY2FzZSBSYWRpb1BhcnQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUmVu
ZGVyVGhlbWVRdDo6aXNDb250cm9sU3R5bGVkKHN0eWxlLCBib3JkZXIsIGZpbGwsIGJhY2tncm91
bmRDb2xvcik7CisgICAgfQorfQorCitpbnQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cG9wdXBJbnRl
cm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAoreworICAgIHJldHVy
biAxOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OmNvbXB1dGVTaXplQmFzZWRPblN0
eWxlKFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSkgY29uc3QKK3sKKyAgICBRU2l6ZSBzaXplKDAs
IDApOworICAgIGNvbnN0IFFGb250TWV0cmljcyBmbShyZW5kZXJTdHlsZS0+Zm9udCgpLmZvbnQo
KSk7CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKKyAgICBjYXNl
IFRleHRBcmVhUGFydDoKKyAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKKyAgICBjYXNlIFRleHRG
aWVsZFBhcnQ6IHsKKyAgICAgICAgaW50IHBhZGRpbmcgPSBmcmFtZVdpZHRoOworICAgICAgICBy
ZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAg
ICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7
CisgICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChwYWRkaW5nLCBGaXhl
ZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5ndGgocGFkZGlu
ZywgRml4ZWQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhlaWdodCBhcmUgYm90aCBz
cGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgorICAgIGlmICghcmVuZGVyU3R5
bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVyU3R5bGUtPmhlaWdodCgp
LmlzQXV0bygpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5h
cHBlYXJhbmNlKCkpIHsKKyAgICBjYXNlIENoZWNrYm94UGFydDogeworICAgICAgICBjb25zdCBp
bnQgdyA9IGNoZWNrQm94V2lkdGggKiByZW5kZXJTdHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAg
ICAgICBzaXplID0gUVNpemUodywgdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IFJhZGlvUGFydDogeworICAgICAgICBjb25zdCBpbnQgdyA9IHJhZGlvV2lkdGggKiByZW5kZXJT
dHlsZS0+ZWZmZWN0aXZlWm9vbSgpOworICAgICAgICBzaXplID0gUVNpemUodywgdyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogQ2hlY2sgaXMgZmxhd2VkLCBzaW5jZSBpdCBkb2Vzbid0IHRha2UgbWlu
LXdpZHRoL21heC13aWR0aCBpbnRvIGFjY291bnQuCisgICAgaWYgKHJlbmRlclN0eWxlLT53aWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgc2l6ZS53aWR0aCgpID4gMCkKKyAgICAgICAgcmVu
ZGVyU3R5bGUtPnNldE1pbldpZHRoKExlbmd0aChzaXplLndpZHRoKCksIEZpeGVkKSk7CisgICAg
aWYgKHJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSAmJiBzaXplLmhlaWdodCgpID4gMCkK
KyAgICAgICAgcmVuZGVyU3R5bGUtPnNldE1pbkhlaWdodChMZW5ndGgoc2l6ZS5oZWlnaHQoKSwg
Rml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKK3sKKyAgICAvLyBEaXRjaCB0aGUgYm9yZGVyLgorICAgIHN0eWxlLT5yZXNldEJv
cmRlcigpOworCisgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5m
b250RGVzY3JpcHRpb24oKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUo
dHJ1ZSk7CisKKyAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzdHlsZS0+Zm9u
dFNpemUoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdHlsZS0+Zm9u
dFNpemUoKSk7CisKKyAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlh
bExpbmVIZWlnaHQoKSk7CisgICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7CisgICAgc2V0QnV0dG9u
UGFkZGluZyhzdHlsZSk7Cit9CisKKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRCdXR0
b25QYWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxlKQor
ICAgICAgICByZXR1cm47CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChidXR0b25Q
YWRkaW5nTGVmdCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChi
dXR0b25QYWRkaW5nUmlnaHQsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVu
Z3RoKGJ1dHRvblBhZGRpbmdUb3AsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0
b20oTGVuZ3RoKGJ1dHRvblBhZGRpbmdCb3R0b20sIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVy
VGhlbWVRdE1vYmlsZTo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludElu
Zm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVyTW9iaWxlIHAodGhp
cywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7CisgICAg
aWYgKGFwcGVhcmFuY2UgPT0gUHVzaEJ1dHRvblBhcnQgfHwgYXBwZWFyYW5jZSA9PSBCdXR0b25Q
YXJ0KSB7CisgICAgICAgIHAuZHJhd1B1c2hCdXR0b24ociwgaXNQcmVzc2VkKG8pKTsKKyAgICB9
IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gUmFkaW9QYXJ0KQorICAgICAgIHAuZHJhd1JhZGlvQnV0
dG9uKHIsIGlzQ2hlY2tlZChvKSk7CisgICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBDaGVja2Jv
eFBhcnQpCisgICAgICAgcC5kcmF3Q2hlY2tCb3gociwgaXNDaGVja2VkKG8pKTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0Rmll
bGRTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50Kikg
Y29uc3QKK3sKKyAgICAvLyBSZXNldHRpbmcgdGhlIHN0eWxlIGxpa2UgdGhpcyBsZWFkcyB0byBk
aWZmZXJlbmNlcyBsaWtlOgorICAgIC8vIC0gUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAo
MiwyKSBzaXplIDE2OHgyNSBbYmdjb2xvcj0jRkZGRkZGXSBib3JkZXI6ICgycHggaW5zZXQgIzAw
MDAwMCldCisgICAgLy8gKyBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0ICgyLDIpIHNpemUg
MTY2eDI2CisgICAgLy8gaW4gbGF5b3V0IHRlc3RzIHdoZW4gYSBDU1Mgc3R5bGUgaXMgYXBwbGll
ZCB0aGF0IGRvZXNuJ3QgYWZmZWN0IGJhY2tncm91bmQgY29sb3IsIGJvcmRlciBvcgorICAgIC8v
IHBhZGRpbmcuIEp1c3Qgd29ydGgga2VlcGluZyBpbiBtaW5kIQorICAgIHN0eWxlLT5zZXRCYWNr
Z3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIo
KTsKKyAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgY29tcHV0ZVNpemVCYXNlZE9uU3R5
bGUoc3R5bGUpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgodGV4dEZpZWxkUGFk
ZGluZywgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aCh0ZXh0Rmll
bGRQYWRkaW5nLCBGaXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50
VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRS
ZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlck1vYmlsZSBwKHRoaXMsIGkpOworICAgIGlmICgh
cC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgQ29udHJvbFBhcnQgYXBw
ZWFyYW5jZSA9IG8tPnN0eWxlKCktPmFwcGVhcmFuY2UoKTsKKyAgICBpZiAoYXBwZWFyYW5jZSAh
PSBUZXh0RmllbGRQYXJ0CisgICAgICAgICYmIGFwcGVhcmFuY2UgIT0gU2VhcmNoRmllbGRQYXJ0
CisgICAgICAgICYmIGFwcGVhcmFuY2UgIT0gVGV4dEFyZWFQYXJ0CisgICAgICAgICYmIGFwcGVh
cmFuY2UgIT0gTGlzdGJveFBhcnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gTm93
IHBhaW50IHRoZSB0ZXh0IGZpZWxkLgorICAgIHAuZHJhd0xpbmVFZGl0KHIsIC8qc3Vua2VuID0g
Ki9pc1ByZXNzZWQobykpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIHN0eWxlLT5yZXNldEJvcmRlcigp
OworCisgICAgLy8gSGVpZ2h0IGlzIGxvY2tlZCB0byBhdXRvLgorICAgIHN0eWxlLT5zZXRIZWln
aHQoTGVuZ3RoKEF1dG8pKTsKKworICAgIC8vIFdoaXRlLXNwYWNlIGlzIGxvY2tlZCB0byBwcmUK
KyAgICBzdHlsZS0+c2V0V2hpdGVTcGFjZShQUkUpOworCisgICAgY29tcHV0ZVNpemVCYXNlZE9u
U3R5bGUoc3R5bGUpOworCisgICAgLy8gQWRkIGluIHRoZSBwYWRkaW5nIHRoYXQgd2UnZCBsaWtl
IHRvIHVzZS4KKyAgICBzZXRQb3B1cFBhZGRpbmcoc3R5bGUpOworICAgIHN0eWxlLT5zZXRQYWRk
aW5nTGVmdChMZW5ndGgobWVudUxpc3RQYWRkaW5nLCBGaXhlZCkpOworfQorCit2b2lkIFJlbmRl
clRoZW1lUXRNb2JpbGU6OnNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0
Cit7CisgICAgY29uc3QgaW50IHBhZGRpbmdMZWZ0ID0gNDsKKyAgICBjb25zdCBpbnQgcGFkZGlu
Z1JpZ2h0ID0gc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgpIHx8IHN0eWxlLT53aWR0aCgpLmlzUGVy
Y2VudCgpID8gNSA6IDg7CisKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRp
bmdMZWZ0LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBhZGRp
bmdSaWdodCArIGJ1dHRvbkljb25TaXplLCBGaXhlZCkpOworCisgICAgc3R5bGUtPnNldFBhZGRp
bmdUb3AoTGVuZ3RoKDIsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVu
Z3RoKDIsIEZpeGVkKSk7Cit9CisKKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1l
bnVMaXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0
JiByKQoreworICAgIFN0eWxlUGFpbnRlck1vYmlsZSBwKHRoaXMsIGkpOworICAgIGlmICghcC5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgUVBvaW50IHRvcExl
ZnQgPSByLmxvY2F0aW9uKCk7CisgICAgcC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7Cisg
ICAgY29uc3QgUVJlY3QgcmVjdChRUG9pbnQoMCwgMCksIHIuc2l6ZSgpKTsKKworICAgIHAuZHJh
d0NvbWJvQm94KHJlY3QsIGNoZWNrTXVsdGlwbGUobykpOworICAgIHAucGFpbnRlci0+dHJhbnNs
YXRlKC10b3BMZWZ0KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVR
dE1vYmlsZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50
SW5mbyYgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJ
bnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlck1vYmlsZSBwKHRoaXMsIGkpOworICAgIGlm
ICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcC5kcmF3Q29tYm9C
b3gociwgY2hlY2tNdWx0aXBsZShvKSk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNpZiBF
TkFCTEUoUFJPR1JFU1NfVEFHKQorZG91YmxlIFJlbmRlclRoZW1lUXRNb2JpbGU6OmFuaW1hdGlv
bkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDAuOworfQorCitib29s
IFJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIHBpLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKworYm9vbCBSZW5kZXJUaGVtZVF0
TW9iaWxlOjpwYWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZv
JiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0
JiByKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICAvLyBXZSd2ZSBhbHJlYWR5IHBhaW50ZWQgaXQg
aW4gcGFpbnRTbGlkZXJUcmFjaygpLCBubyBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuCisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpjaGVja011bHRpcGxlKFJlbmRlck9iamVjdCogbykgY29uc3QKK3sKKyAgICBI
VE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gbyA/IHN0YXRpY19jYXN0PEhUTUxTZWxlY3RFbGVt
ZW50Kj4oby0+bm9kZSgpKSA6IDA7CisgICAgcmV0dXJuIHNlbGVjdCA/IHNlbGVjdC0+bXVsdGlw
bGUoKSA6IGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUXRNb2JpbGU6OnNldFBhbGV0dGVG
cm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJiBwYWxldHRlKSBjb25zdAoreworICAgIHN0
YXRpYyBRUGFsZXR0ZSBsaWdodEdyYXlQYWxldHRlKFF0OjpsaWdodEdyYXkpOworICAgIHBhbGV0
dGUgPSBsaWdodEdyYXlQYWxldHRlOworICAgIHJldHVybjsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25z
dAoreworICAgIGNvbnN0IENvbnRyb2xQYXJ0IHBhcnQgPSBzdHlsZS0+YXBwZWFyYW5jZSgpOwor
ICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlk
ZXJUaHVtYlZlcnRpY2FsUGFydCkgeworICAgICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHNs
aWRlcldpZHRoLCBGaXhlZCkpOworICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aChzbGlk
ZXJIZWlnaHQsIEZpeGVkKSk7CisgICAgfSBlbHNlCisgICAgICAgIFJlbmRlclRoZW1lUXQ6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSk7Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQg
ZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRN
b2JpbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iNmNiNDZlY2EyZDE0MGE2OTc1NDg0ZjNkYzc4OWQ5MDUxZmFlZDVhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dE1vYmlsZS5oCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3JtIGNvbnRyb2xzIGluIFdlYkNvcmUuCisg
KgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisjaWZuZGVmIFJlbmRlclRoZW1lUXRNb2JpbGVfaAorI2RlZmluZSBS
ZW5kZXJUaGVtZVF0TW9iaWxlX2gKKworI2luY2x1ZGUgIlJlbmRlclRoZW1lUXQuaCIKKworI2lu
Y2x1ZGUgPFFCcnVzaD4KKworUVRfQkVHSU5fTkFNRVNQQUNFCitjbGFzcyBRQ29sb3I7CitjbGFz
cyBRUGl4bWFwOworY2xhc3MgUVNpemU7CitRVF9FTkRfTkFNRVNQQUNFCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyVGhlbWVRdE1vYmlsZSA6IHB1YmxpYyBSZW5kZXJUaGVt
ZVF0IHsKK3ByaXZhdGU6CisgICAgUmVuZGVyVGhlbWVRdE1vYmlsZShQYWdlKik7CisgICAgdmly
dHVhbCB+UmVuZGVyVGhlbWVRdE1vYmlsZSgpOworCitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZShQYWdlKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRq
dXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJv
b2wgaXNDb250cm9sU3R5bGVkKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgQm9yZGVyRGF0YSYs
IGNvbnN0IEZpbGxMYXllciYsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0Owor
CisgICAgdmlydHVhbCBpbnQgcG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20oUmVuZGVyU3R5bGUq
KSBjb25zdDsKKworcHJvdGVjdGVkOgorCisgICAgdmlydHVhbCB2b2lkIGFkanVzdEJ1dHRvblN0
eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCBib29sIHBhaW50VGV4dEZpZWxkKFJl
bmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3Qo
UmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJT
dHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0
QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsK
KworI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCisgICAgLy8gUmV0dXJucyB0aGUgZHVyYXRpb24g
b2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KKyAgICB2aXJ0dWFsIGRvdWJs
ZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIGJvb2wg
cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgdmlydHVhbCBib29sIHBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0
KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisgICAgdmlydHVhbCB2b2lk
IGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVh
bCBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IGdldFN0eWxlUGFpbnRlcihjb25zdCBQYWlu
dEluZm8mKTsKKworcHJpdmF0ZToKKyAgICBib29sIGNoZWNrTXVsdGlwbGUoUmVuZGVyT2JqZWN0
KikgY29uc3Q7CisgICAgdm9pZCBzZXRCdXR0b25QYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7
CisgICAgdm9pZCBzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKKworICAgIHZv
aWQgc2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMoUVBhbGV0dGUmKSBjb25zdDsKK307
CisKK2NsYXNzIFN0eWxlUGFpbnRlck1vYmlsZSA6IHB1YmxpYyBTdHlsZVBhaW50ZXIgeworcHVi
bGljOgorICAgIGV4cGxpY2l0IFN0eWxlUGFpbnRlck1vYmlsZShSZW5kZXJUaGVtZVF0TW9iaWxl
KiwgY29uc3QgUGFpbnRJbmZvJik7CisKKyAgICB2b2lkIGRyYXdMaW5lRWRpdChjb25zdCBRUmVj
dCYsIGJvb2wgc3Vua2VuLCBib29sIGVuYWJsZWQgPSB0cnVlKTsKKyAgICB2b2lkIGRyYXdDaGVj
a0JveChjb25zdCBRUmVjdCYsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7Cisg
ICAgdm9pZCBkcmF3UmFkaW9CdXR0b24oY29uc3QgUVJlY3QmLCBib29sIGNoZWNrZWQsIGJvb2wg
ZW5hYmxlZCA9IHRydWUpOworICAgIHZvaWQgZHJhd1B1c2hCdXR0b24oY29uc3QgUVJlY3QmLCBi
b29sIHN1bmtlbiwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7CisgICAgdm9pZCBkcmF3Q29tYm9Cb3go
Y29uc3QgUVJlY3QmLCBib29sIG11bHRpcGxlLCBib29sIGVuYWJsZWQgPSB0cnVlKTsKKworcHJp
dmF0ZToKKyAgICB2b2lkIGRyYXdDaGVja2VyKFFQYWludGVyKiwgaW50IHNpemUsIFFDb2xvcikg
Y29uc3Q7CisgICAgUVBpeG1hcCBmaW5kQ2hlY2tlcihjb25zdCBRUmVjdCYsIGJvb2wgZGlzYWJs
ZWQpIGNvbnN0OworCisgICAgdm9pZCBkcmF3UmFkaW8oUVBhaW50ZXIqLCBjb25zdCBRU2l6ZSYs
IGJvb2wgY2hlY2tlZCwgUUNvbG9yKSBjb25zdDsKKyAgICBRUGl4bWFwIGZpbmRSYWRpbyhjb25z
dCBRU2l6ZSYsIGJvb2wgY2hlY2tlZCwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7CisKKyAgICBRU2l6
ZSBnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNpemUmKSBjb25zdDsKKyAgICB2b2lkIGRyYXdT
aW1wbGVDb21ib0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTaXplJiwgUUNvbG9yKSBjb25zdDsK
KyAgICB2b2lkIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiwgY29uc3QgUVNpemUm
LCBRQ29sb3IpIGNvbnN0OworICAgIFFQaXhtYXAgZmluZENvbWJvQnV0dG9uKGNvbnN0IFFTaXpl
JiwgYm9vbCBtdWx0aXBsZSwgYm9vbCBkaXNhYmxlZCkgY29uc3Q7CisKKyAgICBRX0RJU0FCTEVf
Q09QWShTdHlsZVBhaW50ZXJNb2JpbGUpOworfTsKK30KKworI2VuZGlmIC8vIFJlbmRlclRoZW1l
UXRNb2JpbGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xs
YmFyVGhlbWVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVt
ZVF0LmNwcAppbmRleCAzZGE1YTc0Zjg2ZDQ1MzcyODQ5ZGNjNzQzM2IwMWJkNGEwMTRmMDUxLi4w
ODlhZjY2OTE4YWUwNDk2ZDAxMWM2OTJmYzZhMWY0Y2RiZDBjYjIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcApAQCAtMjYsMzEgKzI2LDQ3
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgIUhBVkUoUVNUWUxFKQorI2lu
Y2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisKKyNlbHNlCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhl
bWVRdC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgorI2luY2x1ZGUgIlJl
bmRlclRoZW1lUVN0eWxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdE1vYmlsZS5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAogI2luY2x1ZGUg
PFFBcHBsaWNhdGlvbj4KLSNpZmRlZiBRX1dTX01BQworI2lmZGVmIFFfT1NfTUFDCiAjaW5jbHVk
ZSA8UU1hY1N0eWxlPgogI2VuZGlmCiAjaW5jbHVkZSA8UU1lbnU+CiAjaW5jbHVkZSA8UVBhaW50
ZXI+CiAjaW5jbHVkZSA8UVN0eWxlPgogI2luY2x1ZGUgPFFTdHlsZU9wdGlvblNsaWRlcj4KKyNl
bmRpZiAvLyBIQVZFKFFTVFlMRSkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTY3JvbGxiYXJU
aGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKIHsKLSAgICBzdGF0aWMgU2Nyb2xs
YmFyVGhlbWVRdCB0aGVtZTsKLSAgICByZXR1cm4gJnRoZW1lOworICAgIHN0YXRpYyBTY3JvbGxi
YXJUaGVtZSogdGhlbWUgPSAwOworICAgIGlmICh0aGVtZSkKKyAgICAgICAgcmV0dXJuIHRoZW1l
OworI2lmIEhBVkUoUVNUWUxFKQorICAgIGlmICghUmVuZGVyVGhlbWVRdDo6dXNlTW9iaWxlVGhl
bWUoKSkKKyAgICAgICAgdGhlbWUgPSBuZXcgU2Nyb2xsYmFyVGhlbWVRdCgpOworICAgIGVsc2UK
KyNlbmRpZgorICAgICAgICB0aGVtZSA9IG5ldyBTY3JvbGxiYXJUaGVtZSgpOworICAgIHJldHVy
biB0aGVtZTsKIH0KIAorI2lmIEhBVkUoUVNUWUxFKQogU2Nyb2xsYmFyVGhlbWVRdDo6flNjcm9s
bGJhclRoZW1lUXQoKQogewogfQpAQCAtMTQ2LDcgKzE2Miw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhl
bWVRdDo6cGFpbnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFN0eWxlUGFpbnRlciBw
KHRoaXMsIGdyYXBoaWNzQ29udGV4dCk7CisgICAgU3R5bGVQYWludGVyUVN0eWxlIHAodGhpcywg
Z3JhcGhpY3NDb250ZXh0KTsKICAgICBpZiAoIXAuaXNWYWxpZCgpKQogICAgICAgcmV0dXJuIHRy
dWU7CiAKQEAgLTE1NSw3ICsxNzEsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lUXQ6OnBhaW50KFNj
cm9sbGJhciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udAogCiAgICAg
cC5wYWludGVyLT5zZXRDbGlwUmVjdChvcHQtPnJlY3QuaW50ZXJzZWN0ZWQoZGFtYWdlUmVjdCks
IFF0OjpJbnRlcnNlY3RDbGlwKTsKIAotI2lmZGVmIFFfV1NfTUFDCisjaWZkZWYgUV9PU19NQUMK
ICAgICAvLyBGSVhNRTogV2UgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSB3aWRnZXQgc3R5bGUgYnV0
IHRvZGF5IFNjcm9sbGJhclRoZW1lIGlzIG5vdCBhd2FyZSBvZiB0aGUgcGFnZSBzbyB3ZQogICAg
IC8vIGNhbid0IGdldCB0aGUgd2lkZ2V0LgogICAgIGlmIChxb2JqZWN0X2Nhc3Q8UU1hY1N0eWxl
Kj4oc3R5bGUoKSkpCkBAIC0yMDAsOSArMjE2LDYgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZVF0Ojpp
bnZhbGlkYXRlUGFydChTY3JvbGxiYXIqIHNjcm9sbGJhciwgU2Nyb2xsYmFyUGFydCkKIAogaW50
IFNjcm9sbGJhclRoZW1lUXQ6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6
ZSBjb250cm9sU2l6ZSkKIHsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIHJldHVybiAw
OwotI2VuZGlmCiAgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG87CiAgICAgby5vcmllbnRhdGlvbiA9
IFF0OjpWZXJ0aWNhbDsKICAgICBvLnN0YXRlICY9IH5RU3R5bGU6OlN0YXRlX0hvcml6b250YWw7
CkBAIC0yNDMsNyArMjU2LDcgQEAgaW50IFNjcm9sbGJhclRoZW1lUXQ6OnRyYWNrTGVuZ3RoKFNj
cm9sbGJhciogc2Nyb2xsYmFyKQogCiB2b2lkIFNjcm9sbGJhclRoZW1lUXQ6OnBhaW50U2Nyb2xs
Q29ybmVyKFNjcm9sbFZpZXcqLCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7Ci0gICAgU3R5bGVQYWludGVyIHAodGhpcywgY29udGV4dCk7CisgICAgU3R5
bGVQYWludGVyUVN0eWxlIHAodGhpcywgY29udGV4dCk7CiAgICAgaWYgKCFwLmlzVmFsaWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTcsNSArMjcwLDYgQEAgUVN0eWxlKiBTY3JvbGxiYXJU
aGVtZVF0OjpzdHlsZSgpIGNvbnN0CiAgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsK
IH0KIAorI2VuZGlmIC8vIEhBVkUoUVNUWUxFKQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2VicGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5j
cHAKaW5kZXggOTg1NzdiNWNkY2QxZGU4ZTRkYTk5MDU2NzM5Zjc2OGZkYmM0Y2VkMS4uNDZlMDIx
OWVlNjcyY2QzNjNhYmU3NmY3NTk4YmQ1Nzg3NzM0MTI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJw
YWdlLmNwcApAQCAtMzI3MiwxMSArMzI3MiwxNSBAQCBib29sIFFXZWJQYWdlOjpzd2FsbG93Q29u
dGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCAqZXZlbnQpCiB7CiAgICAgZC0+cGFnZS0+
Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNsZWFyQ29udGV4dE1lbnUoKTsKIAotICAgIGlmIChR
V2ViRnJhbWUqIHdlYkZyYW1lID0gZnJhbWVBdChldmVudC0+cG9zKCkpKSB7Ci0gICAgICAgIEZy
YW1lKiBmcmFtZSA9IFFXZWJGcmFtZVByaXZhdGU6OmNvcmUod2ViRnJhbWUpOwotICAgICAgICBp
ZiAoU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBmcmFtZS0+dmlldygpLT5zY3JvbGxiYXJBdFBvaW50
KFBsYXRmb3JtTW91c2VFdmVudChldmVudCwgMSkucG9zKCkpKQotICAgICAgICAgICAgcmV0dXJu
IHNjcm9sbGJhci0+Y29udGV4dE1lbnUoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCAxKSk7Cisj
aWYgSEFWRShRU1RZTEUpCisgICAgaWYgKHFnZXRlbnYoIlFUX1dFQktJVF9VU0VfTU9CSUxFX1RI
RU1FIikuaXNOdWxsKCkpIHsKKyAgICAgICAgaWYgKFFXZWJGcmFtZSogd2ViRnJhbWUgPSBmcmFt
ZUF0KGV2ZW50LT5wb3MoKSkpIHsKKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IFFXZWJGcmFt
ZVByaXZhdGU6OmNvcmUod2ViRnJhbWUpOworICAgICAgICAgICAgaWYgKFNjcm9sbGJhciogc2Ny
b2xsYmFyID0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsYmFyQXRQb2ludChQbGF0Zm9ybU1vdXNlRXZl
bnQoZXZlbnQsIDEpLnBvcygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5j
b250ZXh0TWVudShQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIDEpKTsKKyAgICAgICAgfQogICAg
IH0KKyNlbmRpZgogCiAgICAgV2ViQ29yZTo6RnJhbWUqIGZvY3VzZWRGcmFtZSA9IGQtPnBhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBmb2N1c2VkRnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVudChQbGF0Zm9ybU1vdXNlRXZl
bnQoZXZlbnQsIDEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvdGVzdHMu
cHJpIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy90ZXN0cy5wcmkKaW5kZXggYjY5OTljYmJhODM2
NjBiODg2ZDlkODg0MzU0MzY4YWU0NmQ2OGIwMy4uMmEwODEzNmIxOWRmNmY5MDMyNzg0ZjhiNGRh
MzJhNzdmYzRjZjU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC90ZXN0cy90ZXN0cy5w
cmkKKysrIGIvU291cmNlL1dlYktpdC9xdC90ZXN0cy90ZXN0cy5wcmkKQEAgLTI3LDggKzI3LDUg
QEAgaGF2ZVF0KDUpIHsKICAgICBjb250YWlucyhRVF9DT05GSUcsIGRlY2xhcmF0aXZlKTogUVQg
Kz0gZGVjbGFyYXRpdmUKIH0KIAotIyBVc2UgdGhlIFF0IE1vYmlsZSB0aGVtZSBpZiBpdCBpcyBp
biB0aGUgQ09ORklHCi11c2VfcXRfbW9iaWxlX3RoZW1lOiBERUZJTkVTICs9IFdURl9VU0VfUVRf
TU9CSUxFX1RIRU1FPTEKLQogIyBUaGlzIGRlZmluZSBpcyB1c2VkIGJ5IHNvbWUgdGVzdHMgdG8g
bG9vayB1cCByZXNvdXJjZXMgaW4gdGhlIHNvdXJjZSB0cmVlCiBERUZJTkVTICs9IFRFU1RTX1NP
VVJDRV9ESVI9XFxcIiQkUFdEL1xcXCIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCAyYTlkMzY2OWFhOWE3MmRjNDYyMWMwNGZhYjgzNWZjNWQxNmQz
YTA2Li41NGVkZTMyY2RlMGE1NDA1ZWJjYTljNmE1NDJkMmM3ZDk5MjdlYmZjIDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMTEtMDkgIFBpZXJyZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CisKKyAg
ICAgICAgW1F0XSBSZW1vdmUgdGhlIFFTdHlsZSBkZXBlbmRlbmN5IGluIFF0J3MgbW9iaWxlIHRo
ZW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc3
MworCisgICAgICAgIFRoaXMgcmVmYWN0b3Jpbmcgc3BsaXRzIHVwIFJlbmRlclRoZW1lUXQgd2l0
aCB0d28KKyAgICAgICAgc3ViY2xhc3NlcywgYSBRU3R5bGUtYmFja2VkIG9uZSwgYW5kIGEgTW9i
aWxlIHZlcnNpb24KKyAgICAgICAgdGhhdCB1c2VzIHRoZSBvbGQgbW9iaWxlIHRoZW1lIGZvciBu
b3cuCisKKyAgICAgICAgUVN0eWxlIGF2YWlsYWJpbGl0eSBpcyBkZXRlY3RlZCBhdCBjb21waWxl
IHRpbWUsIGFuZAorICAgICAgICBpdHMgdXNlIGlzIGRldGVybWluZWQgYnkgdGhlIFFUX1dFQktJ
VF9VU0VfTU9CSUxFX1RIRU1FCisgICAgICAgIGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9BY3RpdmF0ZUZvbnRzUXQuY3BwOgorICAgICAgICAoV1RS
OjphY3RpdmF0ZUZvbnRzKToKKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1
cmVzLnByZjogSEFWRV9RU1RZTEUgZGV0ZWN0aW9uLAorICAgICAgICBiYXNlZCBvbiBhdmFpbGFi
aWxpdHkgb2YgUXRXaWRnZXRzLgorICAgICAgICAqIHFtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2Vi
Y29yZS5wcmY6IGNsZWFudXAuCisKIDIwMTEtMTEtMTAgIFNpbW9uIEhhdXNtYW5uICA8c2ltb24u
aGF1c21hbm5Abm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gRml4IGtleWJvYXJkIHJlbGF0ZWQg
bGF5b3V0IHRlc3RzIGFmdGVyIEFQSSByZWZhY3RvcmluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9BY3RpdmF0ZUZvbnRzUXQuY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9BY3RpdmF0ZUZvbnRzUXQuY3Bw
CmluZGV4IGI4YmUyNTEwNzJhMzQzOGM0YmQzNmM3OGZlZjE0YWEyODVlOWNiYzEuLmYyMWI4Yzlj
NGRkZTRlMTE2MTk3MzJjNTllYTI1MzRiY2MwMDdkNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvcXQvQWN0aXZhdGVGb250c1F0LmNwcAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL3F0L0FjdGl2YXRlRm9udHNRdC5j
cHAKQEAgLTg5LDcgKzg5LDkgQEAgdm9pZCBhY3RpdmF0ZUZvbnRzKCkKICNlbmRpZgogCiAgICAg
UUFwcGxpY2F0aW9uOjpzZXRHcmFwaGljc1N5c3RlbShRTGF0aW4xU3RyaW5nKCJyYXN0ZXIiKSk7
CisjaWYgSEFWRShRU1RZTEUpCiAgICAgUUFwcGxpY2F0aW9uOjpzZXRTdHlsZShuZXcgUVdpbmRv
d3NTdHlsZSk7CisjZW5kaWYKIAogI2lmIGRlZmluZWQoUV9XU19YMTEpCiAgICAgUVgxMUluZm86
OnNldEFwcERwaVgoMCwgOTYpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0
dXJlcy9mZWF0dXJlcy5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVz
LnByZgppbmRleCAzODJhZmZiYTNlMjAwMzI2NTU1MGRkNzYxMzZkMTFhODdiZDFmOTIwLi5kOTBh
ZTRjMGExMzE4MmZiZmUzZGNhNzM2YmYyZDQ0OTNhZTA3NjA4IDEwMDY0NAotLS0gYS9Ub29scy9x
bWFrZS9ta3NwZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgorKysgYi9Ub29scy9xbWFrZS9ta3Nw
ZWNzL2ZlYXR1cmVzL2ZlYXR1cmVzLnByZgpAQCAtNzIsNiArNzIsNyBAQCBpc0VtcHR5KEhBVkVf
UVJBV0ZPTlQpIHsKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU9fVFJBQ0s9Lik6IERF
RklORVMgKz0gRU5BQkxFX1ZJREVPX1RSQUNLPTAKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
VE9VQ0hfSUNPTl9MT0FESU5HPS4pOiBERUZJTkVTICs9IEVOQUJMRV9UT1VDSF9JQ09OX0xPQURJ
Tkc9MAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9BTklNQVRJT05fQVBJPS4pOiBERUZJTkVT
ICs9IEVOQUJMRV9BTklNQVRJT05fQVBJPTAKKyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfTk9f
TElTVEJPWF9SRU5ERVJJTkc9Lik6IERFRklORVMgKz0gRU5BQkxFX05PX0xJU1RCT1hfUkVOREVS
SU5HPTEKIAogIyBTVkcgc3VwcG9ydAogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MCkg
ewpAQCAtOTYsNiArOTcsOSBAQCBpc0VtcHR5KEhBVkVfUVJBV0ZPTlQpIHsKICAgICB9CiB9CiAK
KyMgUVN0eWxlIGRldGVjdGlvbgoraGF2ZVF0KDQpfCFpc0VtcHR5KFFULndpZGdldHMubmFtZSk6
IERFRklORVMgKz0gSEFWRV9RU1RZTEU9MQorCiAjIFdlYkdMIHN1cHBvcnQKIGNvbnRhaW5zKFFU
X0NPTkZJRywgb3BlbmdsKTohd2luMzItKiB7CiAgICAgIWNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9XRUJHTD0uKTogREVGSU5FUyArPSBFTkFCTEVfV0VCR0w9MQpkaWZmIC0tZ2l0IGEvVG9vbHMv
cW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93ZWJjb3JlLnByZiBiL1Rvb2xzL3FtYWtlL21rc3BlY3Mv
ZmVhdHVyZXMvd2ViY29yZS5wcmYKaW5kZXggYzBlNWI5ODQ1MGNmNjkwNGZjMTAzMWYxOTI1ODk4
MWEzNTRiZWJjMy4uODdhZGNjOThkMzRjNjUxMTE4NTRiYWNjODljNjM2MTMyZWU2OTgyYiAxMDA2
NDQKLS0tIGEvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93ZWJjb3JlLnByZgorKysgYi9U
b29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3dlYmNvcmUucHJmCkBAIC0yODUsOCArMjg1LDYg
QEAgdW5peHx3aW4zMi1nKysqIHsKIAogZW5hYmxlX2Zhc3RfbW9iaWxlX3Njcm9sbGluZzogREVG
SU5FUyArPSBFTkFCTEVfRkFTVF9NT0JJTEVfU0NST0xMSU5HPTEKIAotdXNlX3F0X21vYmlsZV90
aGVtZTogREVGSU5FUyArPSBXVEZfVVNFX1FUX01PQklMRV9USEVNRT0xCi0KIGNvbmZpZ19zdGVw
IHsKICAgICBwYXRoVG9XZWJDb3JlT3V0cHV0ID0gJCRidWlsZERpckZvclNvdXJjZShTb3VyY2Uv
V2ViQ29yZSkvJCRXRUJDT1JFX0RFU1RESVIKICAgICBsaW5rU3RhdGljTGlicmFyeSgkJHBhdGhU
b1dlYkNvcmVPdXRwdXQsICQkV0VCQ09SRV9UQVJHRVQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114691</attachid>
            <date>2011-11-11 06:20:38 -0800</date>
            <delta_ts>2011-11-12 05:57:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-67773-20111111152217.patch</filename>
            <type>text/plain</type>
            <size>152333</size>
            <attacher name="Pierre Rossi">pierre.rossi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTk4NjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYWFlMTJhZDJhZjg0YmMy
M2VmOWMzYTIzMzkwNjQ2YTcwNWY1NTJlLi45NjU2YTA3YmI2NzBmMTJjNmYzZDNmOGUyZWFlODFh
ODQwMzJmODVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ1IEBACisyMDExLTExLTA5ICBQaWVy
cmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAgIFtRdF0gUmVtb3Zl
IHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBpbiBRdCdzIG1vYmlsZSB0aGVtZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NzMKKworICAgICAgICBUaGlz
IHJlZmFjdG9yaW5nIHNwbGl0cyB1cCBSZW5kZXJUaGVtZVF0IHdpdGggdHdvCisgICAgICAgIHN1
YmNsYXNzZXMsIGEgUVN0eWxlLWJhY2tlZCBvbmUsIGFuZCBhIE1vYmlsZSB2ZXJzaW9uCisgICAg
ICAgIHRoYXQgdXNlcyB0aGUgb2xkIG1vYmlsZSB0aGVtZSBmb3Igbm93LgorCisgICAgICAgIFFT
dHlsZSBhdmFpbGFiaWxpdHkgaXMgZGV0ZWN0ZWQgYXQgY29tcGlsZSB0aW1lLCBhbmQKKyAgICAg
ICAgaXRzIHVzZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBRVF9XRUJLSVRfVVNFX01PQklMRV9USEVN
RQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IHRoZSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogcGxhdGZvcm0vcXQvUXRNb2JpbGVX
ZWJTdHlsZS5jcHA6IFJlbW92ZWQuIFRoZSByZWxldmFudCBsb2dpYworICAgICAgICBub3cgbGl2
ZXMgd2l0aGluIFJlbmRlclRoZW1lUXRNb2JpbGUuCisgICAgICAgICogcGxhdGZvcm0vcXQvUXRN
b2JpbGVXZWJTdHlsZS5oOiBSZW1vdmVkLiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9S
ZW5kZXJUaGVtZVFTdHlsZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6aW5pdFN0eWxl
T3B0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpnZXRTdHlsZVBh
aW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpTdHlsZVBhaW50
ZXJRU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjppbml0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OlJlbmRlclRoZW1lUVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjp+UmVuZGVyVGhlbWVRU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmZhbGxiYWNrU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnFTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZVFTdHlsZTo6ZmluZEZyYW1lTGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUVN0eWxlOjppbmZsYXRlQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZVFTdHlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdEJ1dHRvblN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpzZXRCdXR0b25QYWRkaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFRleHRBcmVhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpzZXRQb3B1cFBhZGRpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50TWVudUxpc3RCdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJv
Z3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50UHJv
Z3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2xp
ZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNs
aWRlclRyYWNrU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OnBh
aW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5bGU6OmFk
anVzdFNsaWRlclRodW1iU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OnBhaW50U2VhcmNoRmllbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRU3R5
bGU6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRU3R5bGU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNlYXJjaEZpZWxkRGVjb3JhdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2VhcmNoRmllbGRSZXN1
bHRzRGVjb3JhdGlvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUVN0eWxl
OjpwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lUVN0eWxlOjppbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXpl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlclFTdHlsZTo6aXNWYWxpZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVBhaW50ZXJRU3R5bGU6OmRyYXdQcmltaXRpdmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQYWludGVyUVN0eWxlOjpkcmF3Q29udHJvbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJRU3R5bGU6OmRyYXdDb21wbGV4Q29udHJvbCk6CisgICAgICAgICogcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0OjpSZW5kZXJUaGVtZVF0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6Omlz
Q29udHJvbFN0eWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjppbmZsYXRl
QnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RSZXBh
aW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjptaW5pbXVtTWVudUxp
c3RTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVs
ZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0
U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YWRqdXN0TWVudUxpc3RC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9n
cmVzc0JhclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6
YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdDo6c2V0UGFsZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVBsYXlCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1
bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRy
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFTbGlkZXJU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVt
YlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6Y2FyZXRCbGlua0ludGVy
dmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OmZpbGVMaXN0TmFtZUZvcldp
ZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVBhaW50ZXI6On5TdHlsZVBhaW50ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnVzZU1vYmlsZVRo
ZW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUGFpbnRlcjo6aXNWYWxpZCk6CisgICAgICAg
ICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6ZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Z2V0U3R5bGVQYWludGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6U3R5bGVQYWludGVyTW9iaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0NoZWNrZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVQYWludGVyTW9iaWxlOjpmaW5kQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVBhaW50ZXJNb2JpbGU6OmZpbmRSYWRpbyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBhaW50
ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZmluZENvbWJvQnV0dG9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0xpbmVFZGl0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd0NoZWNrQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1JhZGlvQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUGFpbnRlck1vYmlsZTo6ZHJhd1B1c2hCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVQYWludGVyTW9iaWxlOjpkcmF3Q29tYm9Cb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVRdE1vYmlsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
Ojp0aGVtZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6
UmVuZGVyVGhlbWVRdE1vYmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9i
aWxlOjp+UmVuZGVyVGhlbWVRdE1vYmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0TW9iaWxlOjppc0NvbnRyb2xTdHlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVRdE1vYmlsZTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0QnV0dG9uU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0QnV0dG9uUGFkZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludEJ1dHRvbik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RUZXh0RmllbGRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRGaWVsZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjphZGp1c3RNZW51TGlzdFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnNldFBvcHVwUGFk
ZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludE1lbnVM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OnBhaW50TWVudUxp
c3RCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdE1vYmlsZTo6YW5pbWF0
aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lUXRNb2JpbGU6OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVRdE1vYmlsZTo6cGFpbnRTbGlkZXJUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZVF0TW9iaWxlOjpjaGVja011bHRpcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lUXRNb2JpbGU6OnNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXRNb2JpbGU6OmFkanVzdFNsaWRlclRodW1iU2l6ZSk6
CisgICAgICAgICogcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJUaGVtZVF0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJUaGVtZVF0OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVF0
OjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVR
dDo6cGFpbnRTY3JvbGxDb3JuZXIpOgorCiAyMDExLTExLTEwICBTaGVyaWZmIEJvdCAgPHdlYmtp
dC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByOTk4NTEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDE5Mjk3NzczYzYzZWNkYzUzNjQwN2RkMTI5YzRk
MTBhM2Q0NDhjOTUuLmRmN2RlZjgyMjZhNGNlYzAzYjY1NjEyYTM1ZTc0OWE2ZDYxZjkxZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
cXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMTEtMDkgIFBpZXJyZSBSb3NzaSAg
PHBpZXJyZS5yb3NzaUBnbWFpbC5jb20+CisKKyAgICAgICAgW1F0XSBSZW1vdmUgdGhlIFFTdHls
ZSBkZXBlbmRlbmN5IGluIFF0J3MgbW9iaWxlIHRoZW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Nzc3MworCisgICAgICAgIFRoaXMgcmVmYWN0b3Jp
bmcgc3BsaXRzIHVwIFJlbmRlclRoZW1lUXQgd2l0aCB0d28KKyAgICAgICAgc3ViY2xhc3Nlcywg
YSBRU3R5bGUtYmFja2VkIG9uZSwgYW5kIGEgTW9iaWxlIHZlcnNpb24KKyAgICAgICAgdGhhdCB1
c2VzIHRoZSBvbGQgbW9iaWxlIHRoZW1lIGZvciBub3cuCisKKyAgICAgICAgUVN0eWxlIGF2YWls
YWJpbGl0eSBpcyBkZXRlY3RlZCBhdCBjb21waWxlIHRpbWUsIGFuZAorICAgICAgICBpdHMgdXNl
IGlzIGRldGVybWluZWQgYnkgdGhlIFFUX1dFQktJVF9VU0VfTU9CSUxFX1RIRU1FCisgICAgICAg
IGVudmlyb25tZW50IHZhcmlhYmxlLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogQXBpL3F3ZWJwYWdlLmNwcDoKKyAgICAgICAgKFFXZWJQYWdlOjpz
d2FsbG93Q29udGV4dE1lbnVFdmVudCk6CisgICAgICAgICogdGVzdHMvdGVzdHMucHJpOgorCiAy
MDExLTExLTEwICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eub3JnPgog
CiAgICAgICAgIFtRdF0gTWVyZ2UgUVRvdWNoV2ViVmlldyBhbmQgUURlc2t0b3BXZWJWaWV3IGlu
dG8gb25lIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCAxZjBmMTNkZDFjM2JjNTUxYzc5MTY5YTYwNDBh
NmIwNDJlZTNjOWE2Li5lM2ZlYjM1NjJjMDYxNGE3NWU0ZWIzMTY0ZTkxNDJlNjA2OWU4OWUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1RhcmdldC5wcmkKQEAgLTIwLDEwICsyMCw2IEBAIERFRklORVMgKz0gUVRfTUFLRURMTAogCiBj
b250YWlucyhRVF9DT05GSUcsIHJlZHVjZV9leHBvcnRzKTpDT05GSUcgKz0gaGlkZV9zeW1ib2xz
CiAKLWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRfTU9CSUxFX1RIRU1FPTEpIHsKLSAgICBE
RUZJTkVTICs9IEVOQUJMRV9OT19MSVNUQk9YX1JFTkRFUklORz0xCi19Ci0KIGhhdmVRdCg1KSB7
CiAgICAgIyBBZGQgYSBRdFNjcmlwdCBkZXBlbmRlbmN5IGZvciB0aGUgdGltZSBiZWluZywgaW4g
b3JkZXIgdG8gcHVsbCBpbiB0aGUgaW5jbHVkZQogICAgICMgcGF0aCBmb3IgUXRTY3JpcHQgd2hl
biBpdCdzIGJ1aWx0IGFzIGEgc3RhbmRhbG9uZSBtb2R1bGUKQEAgLTIyMDYsOSArMjIwMiw4IEBA
IEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmggXAogICAgIHBsYXRm
b3JtL3F0L0Nvb2tpZUphclF0LmggXAogICAgIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50Lmgg
XAotICAgIHBsYXRmb3JtL3F0L1F0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIFwKICAgICBwbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmggXAotICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclRoZW1l
UXQuaCBcCisgICAgcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5oIFwKICAgICBwbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oIFwK
ICAgICBwbGF0Zm9ybS9TY3JvbGxiYXIuaCBcCkBAIC0yNzc0LDcgKzI3NjksNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBwbGF0Zm9ybS9xdC9QbGF0Zm9ybVRvdWNoRXZlbnRRdC5jcHAgXAogICAgIHBs
YXRmb3JtL3F0L1BsYXRmb3JtVG91Y2hQb2ludFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvUmVu
ZGVyVGhlbWVRdC5jcHAgXAotICAgIHBsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcCBcCisgICAg
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdE1vYmlsZS5jcHAgXAogICAgIHBsYXRmb3JtL3F0L1Nj
cm9sbGJhclRoZW1lUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9TY3JvbGxWaWV3UXQuY3BwIFwK
ICAgICBwbGF0Zm9ybS9xdC9TaGFyZWRUaW1lclF0LmNwcCBcCkBAIC0yNzkzLDkgKzI3ODgsMTIg
QEAgU09VUkNFUyArPSBcCiAgICAgU09VUkNFUyArPSB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFy
c2VyUXQuY3BwCiB9CiAKLWNvbnRhaW5zKERFRklORVMsIFdURl9VU0VfUVRfTU9CSUxFX1RIRU1F
PTEpIHsKLSAgICBIRUFERVJTICs9IHBsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuaAotICAg
IFNPVVJDRVMgKz0gcGxhdGZvcm0vcXQvUXRNb2JpbGVXZWJTdHlsZS5jcHAKK2NvbnRhaW5zKERF
RklORVMsIEhBVkVfUVNUWUxFPTEpIHsKKyAgICBIRUFERVJTICs9IHBsYXRmb3JtL3F0L1F0U3R5
bGVPcHRpb25XZWJDb21ib0JveC5oIFwKKyAgICAgICAgICAgICAgIHBsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUVN0eWxlLmggXAorICAgICAgICAgICAgICAgcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhl
bWVRdC5oCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5jcHAg
XAorICAgICAgICAgICAgICAgcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCiB9CiAKIGNvbnRh
aW5zKERFRklORVMsIEVOQUJMRV9TTU9PVEhfU0NST0xMSU5HPTEpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAppbmRleCBjMzAwZmRjNDcwN2NmNjczYjQ5MzhkYmY0YmI1
MmRlZTZhMTEyYTJmLi5lNDJmMzM2ZThmZjM4YmYyMTliNWZhMzU4ZjUwNGI1ZTFkMmE0NmZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCkBAIC0yOSw2ICsyOSw5IEBA
CiAjaW5jbHVkZSAiQ29sbGVjdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaWYgUExBVEZPUk0oUVQpCisjaW5jbHVk
ZSAiUmVuZGVyVGhlbWVRdC5oIgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xOTksMTAgKzIwMiwxMiBAQCBwcml2YXRlOgogaW5saW5l
IGJvb2wgSFRNTFNlbGVjdEVsZW1lbnQ6OnVzZXNNZW51TGlzdCgpIGNvbnN0CiB7CiAjaWYgRU5B
QkxFKE5PX0xJU1RCT1hfUkVOREVSSU5HKQorI2lmIFBMQVRGT1JNKFFUKQorICAgIGlmIChSZW5k
ZXJUaGVtZVF0Ojp1c2VNb2JpbGVUaGVtZSgpKQorI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7Ci0j
ZWxzZQotICAgIHJldHVybiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMTsKICNlbmRpZgorICAg
IHJldHVybiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMTsKIH0KIAogSFRNTFNlbGVjdEVsZW1l
bnQqIHRvSFRNTFNlbGVjdEVsZW1lbnQoTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUXRNb2JpbGVXZWJTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9RdE1vYmlsZVdlYlN0eWxlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNmNhMTgxN2Q3MjJiOTVlZTkyMmY3Y2Y2NDhmY2RiNGU1MTkxY2E4NC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9xdC9RdE1vYmlsZVdlYlN0eWxlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqCi0gKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJRdE1vYmls
ZVdlYlN0eWxlLmgiCi0KLSNpbmNsdWRlICJRdFN0eWxlT3B0aW9uV2ViQ29tYm9Cb3guaCIKLQot
I2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFQaXhtYXBDYWNoZT4KLSNpbmNsdWRlIDxR
U3R5bGVPcHRpb24+Ci0KLVF0TW9iaWxlV2ViU3R5bGU6OlF0TW9iaWxlV2ViU3R5bGUoKQotewot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQo
UVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFQZW4mIHBlbiwgY29uc3QgUVJlY3QmIHJlY3QsIGNv
bnN0IFFCcnVzaCYgYnJ1c2gpCi17Ci0gICAgUVBlbiBvbGRQZW4gPSBwYWludGVyLT5wZW4oKTsK
LSAgICBRQnJ1c2ggb2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOwotICAgIHBhaW50ZXItPnNl
dFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7Ci0gICAgcGFpbnRlci0+
c2V0UGVuKHBlbik7Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2goYnJ1c2gpOwotCi0gICAgaW50IGxp
bmUgPSAxOwotICAgIHBhaW50ZXItPmRyYXdSb3VuZGVkUmVjdChyZWN0LmFkanVzdGVkKGxpbmUs
IGxpbmUsIC1saW5lLCAtbGluZSksCi0gICAgICAgICAgICAvKiB4UmFkaXVzICovIDUuMCwgLyog
eVJhZGlvdXMgKi8gNS4wKTsKLSAgICBwYWludGVyLT5zZXRQZW4ob2xkUGVuKTsKLSAgICBwYWlu
dGVyLT5zZXRCcnVzaChvbGRCcnVzaCk7Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6ZHJh
d0NoZWNrZXIoUVBhaW50ZXIqIHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29sb3IpIGNvbnN0
Ci17Ci0gICAgaW50IGJvcmRlciA9IHFNaW4ocU1heCgxLCBpbnQoMC4yICogc2l6ZSkpLCA2KTsK
LSAgICBpbnQgY2hlY2tlclNpemUgPSBxTWF4KHNpemUgLSAyICogYm9yZGVyLCAzKTsKLSAgICBp
bnQgd2lkdGggPSBjaGVja2VyU2l6ZSAvIDM7Ci0gICAgaW50IG1pZGRsZSA9IHFNYXgoMyAqIGNo
ZWNrZXJTaXplIC8gNywgMyk7Ci0gICAgaW50IHggPSAoKHNpemUgLSBjaGVja2VyU2l6ZSkgPj4g
MSk7Ci0gICAgaW50IHkgPSAoKHNpemUgLSBjaGVja2VyU2l6ZSkgPj4gMSkgKyAoY2hlY2tlclNp
emUgLSB3aWR0aCAtIG1pZGRsZSk7Ci0gICAgUVZlY3RvcjxRTGluZUY+IGxpbmVzKGNoZWNrZXJT
aXplICsgMSk7Ci0gICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1pZGRsZTsgKytpKSB7Ci0gICAgICAgIGxpbmVzW2ldID0gUUxpbmVGKHgsIHksIHgs
IHkgKyB3aWR0aCk7Ci0gICAgICAgICsreDsKLSAgICAgICAgKyt5OwotICAgIH0KLSAgICBmb3Ig
KGludCBpID0gbWlkZGxlOyBpIDw9IGNoZWNrZXJTaXplOyArK2kpIHsKLSAgICAgICAgbGluZXNb
aV0gPSBRTGluZUYoeCwgeSwgeCwgeSArIHdpZHRoKTsKLSAgICAgICAgKyt4OwotICAgICAgICAt
LXk7Ci0gICAgfQotICAgIHBhaW50ZXItPmRyYXdMaW5lcyhsaW5lcy5jb25zdERhdGEoKSwgbGlu
ZXMuc2l6ZSgpKTsKLX0KLQotUVBpeG1hcCBRdE1vYmlsZVdlYlN0eWxlOjpmaW5kQ2hlY2tlcihj
b25zdCBRUmVjdCYgcmVjdCwgYm9vbCBkaXNhYmxlZCkgY29uc3QKLXsKLSAgICBpbnQgc2l6ZSA9
IHFNaW4ocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBRUGl4bWFwIHJlc3VsdDsK
LSAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIkcXQtbWFl
bW81LSIpICsgUUxhdGluMVN0cmluZyhtZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSsgUUxhdGlu
MVN0cmluZygiLWNoZWNrZXItIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5n
OjpudW1iZXIoc2l6ZSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4x
U3RyaW5nKCJkaXNhYmxlZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKTsKLSAgICBpZiAo
IVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gUVBp
eG1hcChzaXplLCBzaXplKTsKLSAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsK
LSAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0KTsKLSAgICAgICAgZHJhd0NoZWNrZXIo
JnBhaW50ZXIsIHNpemUsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7
Ci0gICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBRdE1vYmlsZVdlYlN0eWxlOjpkcmF3UmFkaW8oUVBh
aW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIFFDb2xvciBj
b2xvcikgY29uc3QKLXsKLSAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRp
YWxpYXNpbmcsIHRydWUpOwotCi0gICAgLy8gZ2V0IG1pbm9yIHNpemUgdG8gZG8gbm90IHBhaW50
IGEgd2lkZSBlbGlwc2UKLSAgICBxcmVhbCBzcXVhcmVTaXplID0gcU1pbihzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwotICAgIC8vIGRlZmxhdGUgb25lIHBpeGVsCi0gICAgUVJlY3QgcmVj
dCA9IFFSZWN0KFFQb2ludCgxLCAxKSwgUVNpemUoc3F1YXJlU2l6ZSAtIDIsIHNxdWFyZVNpemUg
LSAyKSk7Ci0gICAgY29uc3QgUVBvaW50IGNlbnRlckdyYWRpZW50KHJlY3QuYm90dG9tUmlnaHQo
KSAqIDAuNyk7Ci0KLSAgICBRUmFkaWFsR3JhZGllbnQgcmFkaWFsR3JhZGllbnQoY2VudGVyR3Jh
ZGllbnQsIGNlbnRlckdyYWRpZW50LngoKSAtIDEpOwotICAgIHJhZGlhbEdyYWRpZW50LnNldENv
bG9yQXQoMC4wLCBRdDo6d2hpdGUpOwotICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMC42
LCBRdDo6d2hpdGUpOwotICAgIHJhZGlhbEdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBjb2xvcik7
Ci0KLSAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOwotICAgIHBhaW50ZXItPnNldEJydXNoKGNv
bG9yKTsKLSAgICBwYWludGVyLT5kcmF3RWxsaXBzZShyZWN0KTsKLSAgICBwYWludGVyLT5zZXRC
cnVzaChyYWRpYWxHcmFkaWVudCk7Ci0gICAgcGFpbnRlci0+ZHJhd0VsbGlwc2UocmVjdCk7Ci0K
LSAgICBpbnQgYm9yZGVyID0gMC4xICogKHJlY3Qud2lkdGgoKSArIHJlY3QuaGVpZ2h0KCkpOwot
ICAgIGJvcmRlciA9IHFNaW4ocU1heCgyLCBib3JkZXIpLCAxMCk7Ci0gICAgcmVjdC5hZGp1c3Qo
Ym9yZGVyLCBib3JkZXIsIC1ib3JkZXIsIC1ib3JkZXIpOwotICAgIGlmIChjaGVja2VkKSB7Ci0g
ICAgICAgIHBhaW50ZXItPnNldFBlbihRdDo6Tm9QZW4pOwotICAgICAgICBwYWludGVyLT5zZXRC
cnVzaChjb2xvcik7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3QpOwotICAgIH0K
LX0KLQotUVBpeG1hcCBRdE1vYmlsZVdlYlN0eWxlOjpmaW5kUmFkaW8oY29uc3QgUVNpemUmIHNp
emUsIGJvb2wgY2hlY2tlZCwgYm9vbCBkaXNhYmxlZCkgY29uc3QKLXsKLSAgICBRUGl4bWFwIHJl
c3VsdDsKLSAgICBzdGF0aWMgY29uc3QgUVN0cmluZyBwcmVmaXggPSBRTGF0aW4xU3RyaW5nKCIk
cXQtbWFlbW81LSIpICsgUUxhdGluMVN0cmluZyhtZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSAr
IFFMYXRpbjFTdHJpbmcoIi1yYWRpby0iKTsKLSAgICBRU3RyaW5nIGtleSA9IHByZWZpeCArIFFT
dHJpbmc6Om51bWJlcihzaXplLndpZHRoKCkpICsgUUxhdGluMVN0cmluZygiLSIpICsgUVN0cmlu
Zzo6bnVtYmVyKHNpemUuaGVpZ2h0KCkpICsgUUxhdGluMVN0cmluZygiLSIpCi0gICAgICAgICsg
KGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlzYWJsZWQiKSA6IFFMYXRpbjFTdHJpbmcoImVu
YWJsZWQiKSkgKyAoY2hlY2tlZCA/IFFMYXRpbjFTdHJpbmcoIi1jaGVja2VkIikgOiBRTGF0aW4x
U3RyaW5nKCIiKSk7Ci0gICAgaWYgKCFRUGl4bWFwQ2FjaGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7
Ci0gICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoc2l6ZSk7Ci0gICAgICAgIHJlc3VsdC5maWxsKFF0
Ojp0cmFuc3BhcmVudCk7Ci0gICAgICAgIFFQYWludGVyIHBhaW50ZXIoJnJlc3VsdCk7Ci0gICAg
ICAgIGRyYXdSYWRpbygmcGFpbnRlciwgc2l6ZSwgY2hlY2tlZCwgZGlzYWJsZWQgPyBRdDo6bGln
aHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgUVBpeG1hcENhY2hlOjppbnNlcnQoa2V5
LCByZXN1bHQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFF0TW9iaWxl
V2ViU3R5bGU6OmRyYXdDb250cm9sKENvbnRyb2xFbGVtZW50IGVsZW1lbnQsIGNvbnN0IFFTdHls
ZU9wdGlvbiogb3B0aW9uLCBRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVdpZGdldCogd2lkZ2V0
KSBjb25zdAotewotICAgIHN3aXRjaCAoZWxlbWVudCkgewotICAgIGNhc2UgQ0VfQ2hlY2tCb3g6
IHsKLSAgICAgICAgUVJlY3QgcmVjdCA9IG9wdGlvbi0+cmVjdDsKLSAgICAgICAgY29uc3QgYm9v
bCBkaXNhYmxlZCA9ICEob3B0aW9uLT5zdGF0ZSAmIFN0YXRlX0VuYWJsZWQpOwotCi0gICAgICAg
IFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudChyZWN0LnRvcExlZnQoKSwgcmVjdC5ib3R0
b21MZWZ0KCkpOwotICAgICAgICBpZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6bGlnaHRHcmF5KTsKLSAgICAgICAgICAgIGxpbmVh
ckdyYWRpZW50LnNldENvbG9yQXQoMC41LCBRdDo6d2hpdGUpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpkYXJrR3JheSk7
Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRlKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHBhaW50ZXItPnNldFBlbihRUGVuKGRpc2FibGVkID8gUXQ6
OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSkpOwotICAgICAgICBwYWludGVyLT5zZXRCcnVzaChs
aW5lYXJHcmFkaWVudCk7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdSZWN0KHJlY3QpOwotICAgICAg
ICByZWN0LmFkanVzdCgxLCAxLCAtMSwgLTEpOwotCi0gICAgICAgIGlmIChvcHRpb24tPnN0YXRl
ICYgU3RhdGVfT2ZmKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgUVBpeG1hcCBjaGVj
a2VyID0gZmluZENoZWNrZXIocmVjdCwgZGlzYWJsZWQpOwotICAgICAgICBpZiAoY2hlY2tlci5p
c051bGwoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGludCB4ID0gKHJlY3Qud2lk
dGgoKSAtIGNoZWNrZXIud2lkdGgoKSkgPj4gMTsKLSAgICAgICAgaW50IHkgPSAocmVjdC5oZWln
aHQoKSAtIGNoZWNrZXIuaGVpZ2h0KCkpID4+IDE7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdQaXht
YXAocmVjdC54KCkgKyB4LCByZWN0LnkoKSArIHksIGNoZWNrZXIpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBDRV9SYWRpb0J1dHRvbjogewotICAgICAgICBjb25zdCBib29sIGRp
c2FibGVkID0gIShvcHRpb24tPnN0YXRlICYgU3RhdGVfRW5hYmxlZCk7Ci0gICAgICAgIFFQaXht
YXAgcmFkaW8gPSBmaW5kUmFkaW8ob3B0aW9uLT5yZWN0LnNpemUoKSwgb3B0aW9uLT5zdGF0ZSAm
IFN0YXRlX09uLCBkaXNhYmxlZCk7Ci0gICAgICAgIGlmIChyYWRpby5pc051bGwoKSkKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBwYWludGVyLT5kcmF3UGl4bWFwKG9wdGlvbi0+cmVjdC54
KCksIG9wdGlvbi0+cmVjdC55KCksIHJhZGlvKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgQ0VfUHVzaEJ1dHRvbjogewotICAgICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShv
cHRpb24tPnN0YXRlICYgU3RhdGVfRW5hYmxlZCk7Ci0gICAgICAgIFFSZWN0IHJlY3QgPSBvcHRp
b24tPnJlY3Q7Ci0gICAgICAgIFFQZW4gcGVuKFF0OjpkYXJrR3JheSwgMS4wLCBRdDo6U29saWRM
aW5lLCBRdDo6Um91bmRDYXAsIFF0OjpSb3VuZEpvaW4pOwotICAgICAgICBwYWludGVyLT5zZXRQ
ZW4ocGVuKTsKLQotICAgICAgICBjb25zdCBib29sIHN1bmtlbiA9IChvcHRpb24tPnN0YXRlICYg
U3RhdGVfU3Vua2VuKTsKLSAgICAgICAgaWYgKHN1bmtlbikgewotICAgICAgICAgICAgZHJhd1Jl
Y3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6
OmRhcmtHcmF5KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFFM
aW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudDsKLSAgICAgICAgaWYgKGRpc2FibGVkKSB7Ci0g
ICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0g
ICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC50b3BMZWZ0KCkpOwot
ICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpncmF5KTsKLSAg
ICAgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMS4wLCBRdDo6d2hpdGUpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQocmVjdC5i
b3R0b21MZWZ0KCkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0RmluYWxTdG9wKFFQ
b2ludChyZWN0LmJvdHRvbUxlZnQoKS54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICByZWN0
LmJvdHRvbUxlZnQoKS55KCkgLSAvKiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7
Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOwot
ICAgICAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjQsIFF0Ojp3aGl0ZSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWlu
dGVyLCBwZW4sIHJlY3QsIGxpbmVhckdyYWRpZW50KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIFFXaW5kb3dzU3R5bGU6OmRyYXdDb250cm9sKGVsZW1lbnQs
IG9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKLSAgICB9Ci19Ci12b2lkIFF0TW9iaWxlV2ViU3R5
bGU6OmRyYXdQcmltaXRpdmUoUHJpbWl0aXZlRWxlbWVudCBlbGVtZW50LCBjb25zdCBRU3R5bGVP
cHRpb24qIG9wdGlvbiwgUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFXaWRnZXQqIHdpZGdldCkg
Y29uc3QKLXsKLSAgICBzd2l0Y2ggKGVsZW1lbnQpIHsKLSAgICBjYXNlIFFTdHlsZTo6UEVfUGFu
ZWxMaW5lRWRpdDogewotICAgICAgICBjb25zdCBib29sIGRpc2FibGVkID0gIShvcHRpb24tPnN0
YXRlICYgU3RhdGVfRW5hYmxlZCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgc3Vua2VuID0gKG9wdGlv
bi0+c3RhdGUgJiBTdGF0ZV9TdW5rZW4pOwotICAgICAgICBRUmVjdCByZWN0ID0gb3B0aW9uLT5y
ZWN0OwotICAgICAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwg
UXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKLSAgICAgICAgcGFpbnRlci0+c2V0UGVuKHBl
bik7Ci0KLSAgICAgICAgaWYgKHN1bmtlbikgewotICAgICAgICAgICAgZHJhd1JlY3Rhbmd1bGFy
Q29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtHcmF5
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIFFMaW5lYXJHcmFk
aWVudCBsaW5lYXJHcmFkaWVudDsKLSAgICAgICAgaWYgKGRpc2FibGVkKSB7Ci0gICAgICAgICAg
ICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAgICBs
aW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AocmVjdC5ib3R0b21MZWZ0KCkpOwotICAgICAgICAg
ICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0OjpsaWdodEdyYXkpOwotICAgICAg
ICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LnRvcExl
ZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJl
Y3QudG9wTGVmdCgpLngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QudG9wTGVmdCgp
LnkoKSArIC8qIG9mZnNldCBsaW1pdCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKLSAgICAgICAgICAg
IGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOwotICAgICAgICAg
ICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgwLjM1LCBRdDo6d2hpdGUpOwotICAgICAgICB9
Ci0KLSAgICAgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVu
LCByZWN0LCBsaW5lYXJHcmFkaWVudCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZh
dWx0OgotICAgICAgICBRV2luZG93c1N0eWxlOjpkcmF3UHJpbWl0aXZlKGVsZW1lbnQsIG9wdGlv
biwgcGFpbnRlciwgd2lkZ2V0KTsKLSAgICB9Ci19Ci0KLXZvaWQgUXRNb2JpbGVXZWJTdHlsZTo6
ZHJhd011bHRpcGxlQ29tYm9CdXR0b24oUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFTaXplJiBz
aXplLCBRQ29sb3IgY29sb3IpIGNvbnN0Ci17Ci0gICAgaW50IHJlY3RXaWR0aCA9IHNpemUud2lk
dGgoKSAtIDE7Ci0gICAgaW50IHdpZHRoID0gcU1heCgyLCByZWN0V2lkdGggPj4gMyk7Ci0gICAg
aW50IGRpc3RhbmNlID0gKHJlY3RXaWR0aCAtIDMgKiB3aWR0aCkgPj4gMTsKLSAgICBpbnQgdG9w
ID0gKHNpemUuaGVpZ2h0KCkgLSB3aWR0aCkgPj4gMTsKLQotICAgIHBhaW50ZXItPnNldFBlbihj
b2xvcik7Ci0gICAgcGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOwotCi0gICAgcGFpbnRlci0+ZHJh
d1JlY3QoMCwgdG9wLCB3aWR0aCwgd2lkdGgpOwotICAgIHBhaW50ZXItPmRyYXdSZWN0KHdpZHRo
ICsgZGlzdGFuY2UsIHRvcCwgd2lkdGgsIHdpZHRoKTsKLSAgICBwYWludGVyLT5kcmF3UmVjdCgy
ICogKHdpZHRoICsgZGlzdGFuY2UpLCB0b3AsIHdpZHRoLCB3aWR0aCk7Ci19Ci0KLXZvaWQgUXRN
b2JpbGVXZWJTdHlsZTo6ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBj
b25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAotewotICAgIGludCB3aWR0aCA9
IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbWlkbGUgPSB3aWR0aCA+PiAxOwotICAgIFFWZWN0b3I8
UUxpbmU+IGxpbmVzKHdpZHRoICsgMSk7Ci0KLSAgICBmb3IgKGludCB4ID0gMCwgeSA9IDA7ICB4
IDwgbWlkbGU7IHgrKywgeSsrKSB7Ci0gICAgICAgIGxpbmVzW3hdID0gUUxpbmUoeCwgeSwgeCwg
eSArIDIpOwotICAgICAgICBsaW5lc1t4ICsgbWlkbGVdID0gUUxpbmUod2lkdGggLSB4IC0gMSwg
eSwgd2lkdGggLSB4IC0gMSwgeSArIDIpOwotICAgIH0KLSAgICAvLyBKdXN0IHRvIGVuc3VyZSB0
aGUgbGluZXMnIGludGVyc2VjdGlvbi4KLSAgICBsaW5lc1t3aWR0aF0gPSBRTGluZShtaWRsZSwg
bWlkbGUsIG1pZGxlLCBtaWRsZSArIDIpOwotCi0gICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsK
LSAgICBwYWludGVyLT5zZXRCcnVzaChjb2xvcik7Ci0gICAgcGFpbnRlci0+ZHJhd0xpbmVzKGxp
bmVzKTsKLX0KLQotUVNpemUgUXRNb2JpbGVXZWJTdHlsZTo6Z2V0QnV0dG9uSW1hZ2VTaXplKGNv
bnN0IFFTaXplJiBidXR0b25TaXplKSBjb25zdAotewotICAgIGNvbnN0IGludCBib3JkZXIgPSBx
TWF4KDMsIGJ1dHRvblNpemUud2lkdGgoKSA+PiAzKSA8PCAxOwotCi0gICAgaW50IHdpZHRoID0g
YnV0dG9uU2l6ZS53aWR0aCgpIC0gYm9yZGVyOwotICAgIGludCBoZWlnaHQgPSBidXR0b25TaXpl
LmhlaWdodCgpIC0gYm9yZGVyOwotCi0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKQot
ICAgICAgICByZXR1cm4gUVNpemUoKTsKLQotICAgIGlmIChoZWlnaHQgPj0gKHdpZHRoID4+IDEp
KQotICAgICAgICB3aWR0aCA9IHdpZHRoID4+IDEgPDwgMTsKLSAgICBlbHNlCi0gICAgICAgIHdp
ZHRoID0gaGVpZ2h0IDw8IDE7Ci0KLSAgICByZXR1cm4gUVNpemUod2lkdGggKyAxLCB3aWR0aCk7
Ci19Ci0KLVFQaXhtYXAgUXRNb2JpbGVXZWJTdHlsZTo6ZmluZENvbWJvQnV0dG9uKGNvbnN0IFFT
aXplJiBzaXplLCBib29sIG11bHRpcGxlLCBib29sIGRpc2FibGVkKSBjb25zdAotewotICAgIFFQ
aXhtYXAgcmVzdWx0OwotICAgIFFTaXplIGltYWdlU2l6ZSA9IGdldEJ1dHRvbkltYWdlU2l6ZShz
aXplKTsKLQotICAgIGlmIChpbWFnZVNpemUuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBRUGl4
bWFwKCk7Ci0gICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJlZml4ID0gUUxhdGluMVN0cmluZygi
JHF0LW1hZW1vNS0iKSArIFFMYXRpbjFTdHJpbmcobWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkg
KyBRTGF0aW4xU3RyaW5nKCItY29tYm8tIik7Ci0gICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyAo
bXVsdGlwbGUgPyBRTGF0aW4xU3RyaW5nKCJtdWx0aXBsZS0iKSA6IFFMYXRpbjFTdHJpbmcoInNp
bXBsZS0iKSkKLSAgICAgICAgKyBRU3RyaW5nOjpudW1iZXIoaW1hZ2VTaXplLndpZHRoKCkpICsg
UUxhdGluMVN0cmluZygiLSIpICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgKyBRTGF0aW4xU3RyaW5nKCItIikgKyAoZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5n
KCJkaXNhYmxlZCIpIDogUUxhdGluMVN0cmluZygiZW5hYmxlZCIpKTsKLSAgICBpZiAoIVFQaXht
YXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKLSAgICAgICAgcmVzdWx0ID0gUVBpeG1hcChp
bWFnZVNpemUpOwotICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOwotICAgICAg
ICBRUGFpbnRlciBwYWludGVyKCZyZXN1bHQpOwotICAgICAgICBpZiAobXVsdGlwbGUpCi0gICAg
ICAgICAgICBkcmF3TXVsdGlwbGVDb21ib0J1dHRvbigmcGFpbnRlciwgaW1hZ2VTaXplLCBkaXNh
YmxlZCA/IFF0OjpsaWdodEdyYXkgOiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBkcmF3U2ltcGxlQ29tYm9CdXR0b24oJnBhaW50ZXIsIGltYWdlU2l6ZSwgZGlzYWJs
ZWQgPyBRdDo6bGlnaHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKLSAgICAgICAgUVBpeG1hcENhY2hl
OjppbnNlcnQoa2V5LCByZXN1bHQpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12
b2lkIFF0TW9iaWxlV2ViU3R5bGU6OmRyYXdDb21wbGV4Q29udHJvbChDb21wbGV4Q29udHJvbCBj
b250cm9sLCBjb25zdCBRU3R5bGVPcHRpb25Db21wbGV4KiBvcHRpb24sIFFQYWludGVyKiBwYWlu
dGVyLCBjb25zdCBRV2lkZ2V0KiB3aWRnZXQpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChjb250cm9s
KSB7Ci0gICAgY2FzZSBDQ19Db21ib0JveDogewotICAgICAgICBib29sIG11bHRpcGxlID0gZmFs
c2U7Ci0gICAgICAgIGNvbnN0IGJvb2wgZGlzYWJsZWQgPSAhKG9wdGlvbi0+c3RhdGUgJiBTdGF0
ZV9FbmFibGVkKTsKLQotICAgICAgICBjb25zdCBRU3R5bGVPcHRpb25Db21ib0JveCogY21iID0g
MDsKLSAgICAgICAgY29uc3QgV2ViQ29yZTo6UXRTdHlsZU9wdGlvbldlYkNvbWJvQm94KiB3ZWJD
b21ibyA9IHN0YXRpY19jYXN0PGNvbnN0IFdlYkNvcmU6OlF0U3R5bGVPcHRpb25XZWJDb21ib0Jv
eCo+KG9wdGlvbik7Ci0KLSAgICAgICAgaWYgKHdlYkNvbWJvKSB7Ci0gICAgICAgICAgICBtdWx0
aXBsZSA9IHdlYkNvbWJvLT5tdWx0aXBsZSgpOwotICAgICAgICAgICAgY21iID0gd2ViQ29tYm87
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY21iID0gcXN0eWxlb3B0aW9uX2Nhc3Q8Y29u
c3QgUVN0eWxlT3B0aW9uQ29tYm9Cb3gqPihvcHRpb24pOwotCi0gICAgICAgIGlmICghY21iKSB7
Ci0gICAgICAgICAgICBRV2luZG93c1N0eWxlOjpkcmF3Q29tcGxleENvbnRyb2woY29udHJvbCwg
b3B0aW9uLCBwYWludGVyLCB3aWRnZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIShjbWItPnN1YkNvbnRyb2xzICYgU0NfQ29tYm9Cb3hBcnJvdykpCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBRUmVjdCByZWN0ID0gb3B0aW9uLT5yZWN0Owot
ICAgICAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwgUXQ6OlNvbGlkTGluZSwgUXQ6OlJv
dW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKLSAgICAgICAgUUxpbmVhckdyYWRpZW50IGxpbmVhckdy
YWRpZW50OwotICAgICAgICBpZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKLSAgICAgICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldEZpbmFsU3RvcChyZWN0LnRvcExlZnQoKSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOwotICAgICAgICAgICAgbGluZWFyR3JhZGll
bnQuc2V0Q29sb3JBdCgxLjAsIFF0Ojp3aGl0ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0LmJvdHRvbUxlZnQoKSk7Ci0gICAgICAg
ICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3AoUVBvaW50KHJlY3QuYm90dG9tTGVmdCgp
LngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tTGVmdCgpLnkoKSAtIC8q
IG9mZnNldCBsaW1pdCBmb3IgZ3JhZGllbnQgKi8gMjApKTsKLSAgICAgICAgICAgIGxpbmVhckdy
YWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7Ci0gICAgICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRDb2xvckF0KDAuNCwgUXQ6OndoaXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRy
YXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgbGluZWFy
R3JhZGllbnQpOwotCi0gICAgICAgIHJlY3QgPSBzdWJDb250cm9sUmVjdChDQ19Db21ib0JveCwg
Y21iLCBTQ19Db21ib0JveEFycm93LCB3aWRnZXQpOwotICAgICAgICBRUGl4bWFwIHBpYyA9IGZp
bmRDb21ib0J1dHRvbihyZWN0LnNpemUoKSwgbXVsdGlwbGUsIGRpc2FibGVkKTsKLQotICAgICAg
ICBpZiAocGljLmlzTnVsbCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaW50IHgg
PSAocmVjdC53aWR0aCgpIC0gcGljLndpZHRoKCkpID4+IDE7Ci0gICAgICAgIGludCB5ID0gKHJl
Y3QuaGVpZ2h0KCkgLSBwaWMuaGVpZ2h0KCkpID4+IDE7Ci0gICAgICAgIHBhaW50ZXItPmRyYXdQ
aXhtYXAocmVjdC54KCkgKyB4LCByZWN0LnkoKSArIHksIHBpYyk7Ci0KLSAgICAgICAgcGFpbnRl
ci0+c2V0UGVuKGRpc2FibGVkID8gUXQ6OmdyYXkgOiBRdDo6ZGFya0dyYXkpOwotICAgICAgICBw
YWludGVyLT5kcmF3TGluZShyZWN0LmxlZnQoKSAtIDIsIHJlY3QudG9wKCkgKyAyLCByZWN0Lmxl
ZnQoKSAtIDIsIHJlY3QuYm90dG9tKCkgLSAyKTsKLQotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgUVdpbmRvd3NTdHlsZTo6ZHJhd0NvbXBsZXhDb250cm9sKGNv
bnRyb2wsIG9wdGlvbiwgcGFpbnRlciwgd2lkZ2V0KTsKLSAgICB9Ci19Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1F0TW9iaWxlV2ViU3R5bGUuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMWI5OWQyYjhiNWEzOWM5NGMwYjlhMTcyYTE4ZmU0YmFlYzA0MjY5MC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9RdE1vYmlsZVdlYlN0eWxlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBRdE1vYmlsZVdlYlN0eWxlX2gKLSNk
ZWZpbmUgUXRNb2JpbGVXZWJTdHlsZV9oCi0KLSNpbmNsdWRlIDxRV2luZG93c1N0eWxlPgotCi1j
bGFzcyBRdE1vYmlsZVdlYlN0eWxlIDogcHVibGljIFFXaW5kb3dzU3R5bGUgewotcHVibGljOgot
ICAgIFF0TW9iaWxlV2ViU3R5bGUoKTsKLQotICAgIHZvaWQgZHJhd0NvbnRyb2woQ29udHJvbEVs
ZW1lbnQsIGNvbnN0IFFTdHlsZU9wdGlvbiosIFFQYWludGVyKiwgY29uc3QgUVdpZGdldCopIGNv
bnN0OwotICAgIHZvaWQgZHJhd0NvbXBsZXhDb250cm9sKENvbXBsZXhDb250cm9sLCBjb25zdCBR
U3R5bGVPcHRpb25Db21wbGV4KiwgUVBhaW50ZXIqLCBjb25zdCBRV2lkZ2V0KikgY29uc3Q7Ci0g
ICAgdm9pZCBkcmF3UHJpbWl0aXZlKFByaW1pdGl2ZUVsZW1lbnQsIGNvbnN0IFFTdHlsZU9wdGlv
biosIFFQYWludGVyKiwgY29uc3QgUVdpZGdldCopIGNvbnN0OwotCi1wcml2YXRlOgotICAgIHZv
aWQgZHJhd0NoZWNrZXIoUVBhaW50ZXIqIHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29sb3Ip
IGNvbnN0OwotICAgIFFQaXhtYXAgZmluZENoZWNrZXIoY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wg
ZGlzYWJsZWQpIGNvbnN0OwotCi0gICAgdm9pZCBkcmF3UmFkaW8oUVBhaW50ZXIqIHBhaW50ZXIs
IGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIFFDb2xvciBjb2xvcikgY29uc3Q7Ci0g
ICAgUVBpeG1hcCBmaW5kUmFkaW8oY29uc3QgUVNpemUmIHNpemUsIGJvb2wgY2hlY2tlZCwgYm9v
bCBkaXNhYmxlZCkgY29uc3Q7Ci0KLSAgICBRU2l6ZSBnZXRCdXR0b25JbWFnZVNpemUoY29uc3Qg
UVNpemUmIGJ1dHRvblNpemUpIGNvbnN0OwotICAgIHZvaWQgZHJhd1NpbXBsZUNvbWJvQnV0dG9u
KFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25z
dDsKLSAgICB2b2lkIGRyYXdNdWx0aXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBj
b25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9yKSBjb25zdDsKLSAgICBRUGl4bWFwIGZpbmRD
b21ib0J1dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwgYm9vbCBtdWx0aXBsZSwgYm9vbCBkaXNhYmxl
ZCkgY29uc3Q7Ci0KLX07Ci0KLSNlbmRpZiAvLyBRdE1vYmlsZVdlYlN0eWxlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1F0U3R5bGVPcHRpb25XZWJDb21ib0JveC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94LmgK
aW5kZXggMjljODIyMGFjYTkxOGRmYTY0Mzc2YmU1YTFmMGVkNjdlZjk1NGNlNi4uZGFlMTY5NjVh
ZWVjZjQyZGVmYzJjM2U5MTIxMDU0NzFkNTQ5NGMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94LmgKQEAgLTIzLDYgKzIz
LDcgQEAKIAogI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGhlbWVRdC5oIgogCiAjaW5jbHVkZSA8UVN0eWxl
T3B0aW9uPgogCkBAIC0zNCwxMSArMzUsNyBAQCBjbGFzcyBRdFN0eWxlT3B0aW9uV2ViQ29tYm9C
b3ggOiBwdWJsaWMgUVN0eWxlT3B0aW9uQ29tYm9Cb3ggewogcHVibGljOgogICAgIFF0U3R5bGVP
cHRpb25XZWJDb21ib0JveChSZW5kZXJPYmplY3QqIG8pCiAgICAgICAgIDogUVN0eWxlT3B0aW9u
Q29tYm9Cb3goKQotICAgICNpZiBFTkFCTEUoTk9fTElTVEJPWF9SRU5ERVJJTkcpCiAgICAgICAg
ICwgbV9tdWx0aXBsZShjaGVja011bHRpcGxlKG8pKQotICAgICNlbHNlCi0gICAgICAgICwgbV9t
dWx0aXBsZShmYWxzZSkKLSAgICAjZW5kaWYKICAgICB7CiAgICAgfQogCkBAIC00OSw2ICs0Niw4
IEBAIHByaXZhdGU6CiAKICAgICBib29sIGNoZWNrTXVsdGlwbGUoUmVuZGVyT2JqZWN0KiBvKQog
ICAgIHsKKyAgICAgICAgaWYgKFJlbmRlclRoZW1lUXQ6OnVzZU1vYmlsZVRoZW1lKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3Qg
PSBvID8gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQqPihvLT5ub2RlKCkpIDogMDsKICAg
ICAgICAgcmV0dXJuIHNlbGVjdCA/IHNlbGVjdC0+bXVsdGlwbGUoKSA6IGZhbHNlOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40NmQwNTA0NWMxNWQ3YzY2NGI3NmI4YjMzNWJkNmE5NmRlOTBiOWRkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRU3R5
bGUuY3BwCkBAIC0wLDAgKzEsODI0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IFdlYktpdCBwcm9qZWN0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA2IERpcmsg
TXVlbGxlciA8bXVlbGxlckBrZGUub3JnPgorICogICAgICAgICAgICAgICAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVFTdHlsZS5oIgorCisj
aW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5o
IgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNp
bmNsdWRlICJDaHJvbWVDbGllbnRRdC5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3Mu
aCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJQYWludEluZm8uaCIKKyNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgorI2luY2x1ZGUg
IlF0U3R5bGVPcHRpb25XZWJDb21ib0JveC5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2lm
IEVOQUJMRShQUk9HUkVTU19UQUcpCisjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKKyNlbmRp
ZgorI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUXQu
aCIKKyNpbmNsdWRlICJTbGlkZXJUaHVtYkVsZW1lbnQuaCIKKyNpbmNsdWRlICJVc2VyQWdlbnRT
dHlsZVNoZWV0cy5oIgorCisjaW5jbHVkZSA8UUFwcGxpY2F0aW9uPgorI2luY2x1ZGUgPFFDb2xv
cj4KKyNpbmNsdWRlIDxRRmlsZT4KKyNpbmNsdWRlIDxRRm9udE1ldHJpY3M+CisjaW5jbHVkZSA8
UUxpbmVFZGl0PgorI2luY2x1ZGUgPFFNYWNTdHlsZT4KKyNpbmNsdWRlIDxRUGFpbnRlcj4KKyNp
bmNsdWRlIDxRUGxhc3RpcXVlU3R5bGU+CisjaW5jbHVkZSA8UVB1c2hCdXR0b24+CisjaW5jbHVk
ZSA8UVN0eWxlRmFjdG9yeT4KKyNpbmNsdWRlIDxRU3R5bGVPcHRpb25CdXR0b24+CisjaW5jbHVk
ZSA8UVN0eWxlT3B0aW9uRnJhbWVWMj4KKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorI2luY2x1
ZGUgPFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjI+CisjZW5kaWYKKyNpbmNsdWRlIDxRU3R5bGVP
cHRpb25TbGlkZXI+CisjaW5jbHVkZSA8UVdpZGdldD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitpbmxpbmUgc3RhdGljIHZvaWQgaW5pdFN0
eWxlT3B0aW9uKFFXaWRnZXQgKndpZGdldCwgUVN0eWxlT3B0aW9uJiBvcHRpb24pCit7CisgICAg
aWYgKHdpZGdldCkKKyAgICAgICAgb3B0aW9uLmluaXRGcm9tKHdpZGdldCk7CisgICAgZWxzZSB7
CisgICAgICAgIC8qCisgICAgICAgICAgSWYgYSB3aWRnZXQgaXMgbm90IGRpcmVjdGx5IGF2YWls
YWJsZSBmb3IgcmVuZGVyaW5nLCB3ZSBmYWxsYmFjayB0byBkZWZhdWx0CisgICAgICAgICAgdmFs
dWUgZm9yIGFuIGFjdGl2ZSB3aWRnZXQuCisgICAgICAgICAqLworICAgICAgICBvcHRpb24uc3Rh
dGUgPSBRU3R5bGU6OlN0YXRlX0FjdGl2ZSB8IFFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKKyAgICB9
Cit9CisKKworUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBSZW5kZXJUaGVtZVFTdHlsZTo6
Z2V0U3R5bGVQYWludGVyKGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQoreworICAgIHJldHVy
biBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+KG5ldyBTdHlsZVBhaW50ZXJRU3R5bGUodGhp
cywgcGFpbnRJbmZvKSk7Cit9CisKK1N0eWxlUGFpbnRlclFTdHlsZTo6U3R5bGVQYWludGVyUVN0
eWxlKFJlbmRlclRoZW1lUVN0eWxlKiB0aGVtZSwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8p
CisgICAgOiBTdHlsZVBhaW50ZXIodGhlbWUsIHBhaW50SW5mbykKK3sKKyAgICBpbml0KHBhaW50
SW5mby5jb250ZXh0ID8gcGFpbnRJbmZvLmNvbnRleHQgOiAwLCB0aGVtZS0+cVN0eWxlKCkpOwor
fQorCitTdHlsZVBhaW50ZXJRU3R5bGU6OlN0eWxlUGFpbnRlclFTdHlsZShTY3JvbGxiYXJUaGVt
ZVF0KiB0aGVtZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorICAgIDogU3R5bGVQYWludGVy
KCkKK3sKKyAgICBpbml0KGNvbnRleHQsIHRoZW1lLT5zdHlsZSgpKTsKK30KKwordm9pZCBTdHls
ZVBhaW50ZXJRU3R5bGU6OmluaXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBRU3R5bGUqIHRo
ZW1lU3R5bGUpCit7CisgICAgcGFpbnRlciA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCkpOworICAgIHdpZGdldCA9IDA7CisgICAgUVBhaW50RGV2aWNl
KiBkZXYgPSAwOworICAgIGlmIChwYWludGVyKQorICAgICAgICBkZXYgPSBwYWludGVyLT5kZXZp
Y2UoKTsKKyAgICBpZiAoZGV2ICYmIGRldi0+ZGV2VHlwZSgpID09IFFJbnRlcm5hbDo6V2lkZ2V0
KQorICAgICAgICB3aWRnZXQgPSBzdGF0aWNfY2FzdDxRV2lkZ2V0Kj4oZGV2KTsKKyAgICBzdHls
ZSA9IHRoZW1lU3R5bGU7CisKKyAgICBTdHlsZVBhaW50ZXI6OmluaXQoY29udGV4dCk7Cit9CisK
K1Bhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUoUGFnZSog
cGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1lUVN0eWxlKHBhZ2Up
KTsKK30KKworUmVuZGVyVGhlbWVRU3R5bGU6OlJlbmRlclRoZW1lUVN0eWxlKFBhZ2UqIHBhZ2Up
CisgICAgOiBSZW5kZXJUaGVtZVF0KHBhZ2UpCisjaWZuZGVmIFFUX05PX0xJTkVFRElUCisgICAg
LCBtX2xpbmVFZGl0KDApCisjZW5kaWYKK3sKKyAgICBRUHVzaEJ1dHRvbiBidXR0b247CisgICAg
UUZvbnQgZGVmYXVsdEJ1dHRvbkZvbnQgPSBRQXBwbGljYXRpb246OmZvbnQoJmJ1dHRvbik7Cisg
ICAgbV9idXR0b25Gb250RmFtaWx5ID0gZGVmYXVsdEJ1dHRvbkZvbnQuZmFtaWx5KCk7CisjaWZk
ZWYgUV9PU19NQUMKKyAgICBidXR0b24uc2V0QXR0cmlidXRlKFF0OjpXQV9NYWNTbWFsbFNpemUp
OworICAgIFFGb250SW5mbyBmb250SW5mbyhkZWZhdWx0QnV0dG9uRm9udCk7CisgICAgbV9idXR0
b25Gb250UGl4ZWxTaXplID0gZm9udEluZm8ucGl4ZWxTaXplKCk7CisjZW5kaWYKKworICAgIG1f
ZmFsbGJhY2tTdHlsZSA9IFFTdHlsZUZhY3Rvcnk6OmNyZWF0ZShRTGF0aW4xU3RyaW5nKCJ3aW5k
b3dzIikpOworfQorCitSZW5kZXJUaGVtZVFTdHlsZTo6flJlbmRlclRoZW1lUVN0eWxlKCkKK3sK
KyAgICBkZWxldGUgbV9mYWxsYmFja1N0eWxlOworI2lmbmRlZiBRVF9OT19MSU5FRURJVAorICAg
IGRlbGV0ZSBtX2xpbmVFZGl0OworI2VuZGlmCit9CisKKworLy8gZm9yIHNvbWUgd2lkZ2V0IHBh
aW50aW5nLCB3ZSBuZWVkIHRvIGZhbGxiYWNrIHRvIFdpbmRvd3Mgc3R5bGUKK1FTdHlsZSogUmVu
ZGVyVGhlbWVRU3R5bGU6OmZhbGxiYWNrU3R5bGUoKSBjb25zdAoreworICAgIHJldHVybiAobV9m
YWxsYmFja1N0eWxlKSA/IG1fZmFsbGJhY2tTdHlsZSA6IFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsK
K30KKworUVN0eWxlKiBSZW5kZXJUaGVtZVFTdHlsZTo6cVN0eWxlKCkgY29uc3QKK3sKKyAgICBp
ZiAobV9wYWdlKSB7CisgICAgICAgIFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gbV9wYWdl
LT5jaHJvbWUoKS0+Y2xpZW50KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOworCisgICAgICAgIGlm
IChwYWdlQ2xpZW50KQorICAgICAgICAgICAgcmV0dXJuIHBhZ2VDbGllbnQtPnN0eWxlKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKK30KKworaW50IFJlbmRl
clRoZW1lUVN0eWxlOjpmaW5kRnJhbWVMaW5lV2lkdGgoUVN0eWxlKiBzdHlsZSkgY29uc3QKK3sK
KyNpZm5kZWYgUVRfTk9fTElORUVESVQKKyAgICBpZiAoIW1fbGluZUVkaXQpCisgICAgICAgIG1f
bGluZUVkaXQgPSBuZXcgUUxpbmVFZGl0KCk7CisjZW5kaWYKKworICAgIFFTdHlsZU9wdGlvbkZy
YW1lVjIgb3B0OworICAgIFFXaWRnZXQqIHdpZGdldCA9IDA7CisjaWZuZGVmIFFUX05PX0xJTkVF
RElUCisgICAgd2lkZ2V0ID0gbV9saW5lRWRpdDsKKyNlbmRpZgorICAgIHJldHVybiBzdHlsZS0+
cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9EZWZhdWx0RnJhbWVXaWR0aCwgJm9wdCwgd2lkZ2V0KTsK
K30KKworUVJlY3QgUmVuZGVyVGhlbWVRU3R5bGU6OmluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFS
ZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0Cit7CisgICAgUVN0eWxlT3B0aW9uQnV0dG9uIG9wdGlv
bjsKKyAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKKyAgICBvcHRpb24u
cmVjdCA9IG9yaWdpbmFsUmVjdDsKKworICAgIFFSZWN0IGxheW91dFJlY3QgPSBxU3R5bGUoKS0+
c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uTGF5b3V0SXRlbSwgJm9wdGlvbiwg
MCk7CisgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVsbCgpKSB7CisgICAgICAgIGludCBwYWRkaW5n
TGVmdCA9IGxheW91dFJlY3QubGVmdCgpIC0gb3JpZ2luYWxSZWN0LmxlZnQoKTsKKyAgICAgICAg
aW50IHBhZGRpbmdSaWdodCA9IG9yaWdpbmFsUmVjdC5yaWdodCgpIC0gbGF5b3V0UmVjdC5yaWdo
dCgpOworICAgICAgICBpbnQgcGFkZGluZ1RvcCA9IGxheW91dFJlY3QudG9wKCkgLSBvcmlnaW5h
bFJlY3QudG9wKCk7CisgICAgICAgIGludCBwYWRkaW5nQm90dG9tID0gb3JpZ2luYWxSZWN0LmJv
dHRvbSgpIC0gbGF5b3V0UmVjdC5ib3R0b20oKTsKKworICAgICAgICByZXR1cm4gb3JpZ2luYWxS
ZWN0LmFkanVzdGVkKC1wYWRkaW5nTGVmdCwgLXBhZGRpbmdUb3AsIHBhZGRpbmdSaWdodCwgcGFk
ZGluZ0JvdHRvbSk7CisgICAgfQorICAgIHJldHVybiBvcmlnaW5hbFJlY3Q7Cit9CisKK3ZvaWQg
UmVuZGVyVGhlbWVRU3R5bGU6OmNvbXB1dGVTaXplQmFzZWRPblN0eWxlKFJlbmRlclN0eWxlKiBy
ZW5kZXJTdHlsZSkgY29uc3QKK3sKKyAgICBRU2l6ZSBzaXplKDAsIDApOworICAgIGNvbnN0IFFG
b250TWV0cmljcyBmbShyZW5kZXJTdHlsZS0+Zm9udCgpLmZvbnQoKSk7CisgICAgUVN0eWxlKiBz
dHlsZSA9IHFTdHlsZSgpOworCisgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgp
KSB7CisgICAgY2FzZSBUZXh0QXJlYVBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6Cisg
ICAgY2FzZSBUZXh0RmllbGRQYXJ0OiB7CisgICAgICAgIGludCBwYWRkaW5nID0gZmluZEZyYW1l
TGluZVdpZHRoKHN0eWxlKTsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdMZWZ0KExl
bmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ1Jp
Z2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFk
ZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKKyAgICAgICAgcmVuZGVyU3R5bGUtPnNl
dFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZpeGVkKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gSWYgdGhl
IHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCB0aGVuIHdlIGhhdmUgbm90aGlu
ZyB0byBkby4KKyAgICBpZiAoIXJlbmRlclN0eWxlLT53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRv
KCkgJiYgIXJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1dG8oKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBDaGVj
a2JveFBhcnQ6IHsKKyAgICAgICAgUVN0eWxlT3B0aW9uIHN0eWxlT3B0aW9uOworICAgICAgICBz
dHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1NtYWxsOworICAgICAgICBpbnQgY2hl
Y2tCb3hXaWR0aCA9IHN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX0luZGljYXRvcldpZHRo
LCAmc3R5bGVPcHRpb24pOworICAgICAgICBjaGVja0JveFdpZHRoICo9IHJlbmRlclN0eWxlLT5l
ZmZlY3RpdmVab29tKCk7CisgICAgICAgIHNpemUgPSBRU2l6ZShjaGVja0JveFdpZHRoLCBjaGVj
a0JveFdpZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgUmFkaW9QYXJ0OiB7
CisgICAgICAgIFFTdHlsZU9wdGlvbiBzdHlsZU9wdGlvbjsKKyAgICAgICAgc3R5bGVPcHRpb24u
c3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKKyAgICAgICAgaW50IHJhZGlvV2lkdGggPSBz
dHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9FeGNsdXNpdmVJbmRpY2F0b3JXaWR0aCwgJnN0
eWxlT3B0aW9uKTsKKyAgICAgICAgcmFkaW9XaWR0aCAqPSByZW5kZXJTdHlsZS0+ZWZmZWN0aXZl
Wm9vbSgpOworICAgICAgICBzaXplID0gUVNpemUocmFkaW9XaWR0aCwgcmFkaW9XaWR0aCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB1c2hCdXR0b25QYXJ0OgorICAgIGNhc2Ug
QnV0dG9uUGFydDogeworICAgICAgICBRU3R5bGVPcHRpb25CdXR0b24gc3R5bGVPcHRpb247Cisg
ICAgICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7CisgICAgICAg
IFFTaXplIGNvbnRlbnRTaXplID0gZm0uc2l6ZShRdDo6VGV4dFNob3dNbmVtb25pYywgUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiWCIpKTsKKyAgICAgICAgUVNpemUgcHVzaEJ1dHRvblNpemUgPSBzdHls
ZS0+c2l6ZUZyb21Db250ZW50cyhRU3R5bGU6OkNUX1B1c2hCdXR0b24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCBj
b250ZW50U2l6ZSwgMCk7CisgICAgICAgIHN0eWxlT3B0aW9uLnJlY3QgPSBRUmVjdCgwLCAwLCBw
dXNoQnV0dG9uU2l6ZS53aWR0aCgpLCBwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7CisgICAgICAg
IFFSZWN0IGxheW91dFJlY3QgPSBzdHlsZS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNo
QnV0dG9uTGF5b3V0SXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmc3R5bGVPcHRpb24sIDApOworCisgICAgICAgIC8vIElmIHRoZSBzdHlsZSBz
dXBwb3J0cyBsYXlvdXQgcmVjdHMgd2UgdXNlIHRoYXQsIGFuZCAgY29tcGVuc2F0ZSBhY2NvcmRp
bmdseQorICAgICAgICAvLyBpbiBwYWludEJ1dHRvbigpIGJlbG93LgorICAgICAgICBpZiAoIWxh
eW91dFJlY3QuaXNOdWxsKCkpCisgICAgICAgICAgICBzaXplLnNldEhlaWdodChsYXlvdXRSZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2l6ZS5zZXRIZWlnaHQocHVz
aEJ1dHRvblNpemUuaGVpZ2h0KCkpOworCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IE1lbnVsaXN0UGFydDogeworICAgICAgICBRU3R5bGVPcHRpb25Db21ib0JveCBzdHlsZU9wdGlv
bjsKKyAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKKyAg
ICAgICAgaW50IGNvbnRlbnRIZWlnaHQgPSBxTWF4KGZtLmxpbmVTcGFjaW5nKCksIDE0KSArIDI7
CisgICAgICAgIFFTaXplIG1lbnVMaXN0U2l6ZSA9IHN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFT
dHlsZTo6Q1RfQ29tYm9Cb3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgUVNpemUoMCwgY29udGVudEhlaWdodCksIDAp
OworICAgICAgICBzaXplLnNldEhlaWdodChtZW51TGlzdFNpemUuaGVpZ2h0KCkpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13
aWR0aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgorICAgIGlmIChyZW5kZXJTdHlsZS0+d2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpICYmIHNpemUud2lkdGgoKSA+IDApCisgICAgICAgIHJlbmRl
clN0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGlm
IChyZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCisg
ICAgICAgIHJlbmRlclN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZp
eGVkKSk7Cit9CisKKworCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RCdXR0b25TdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KikgY29uc3QKK3sKKyAgICAvLyBEaXRjaCB0aGUgYm9yZGVyLgorICAgIHN0eWxlLT5yZXNldEJv
cmRlcigpOworCisjaWZkZWYgUV9PU19NQUMKKyAgICBpZiAoc3R5bGUtPmFwcGVhcmFuY2UoKSA9
PSBQdXNoQnV0dG9uUGFydCkgeworICAgICAgICAvLyBUaGUgTWFjIHBvcnRzIGlnbm9yZSB0aGUg
c3BlY2lmaWVkIGhlaWdodCBmb3IgPGlucHV0IHR5cGU9ImJ1dHRvbiI+IGVsZW1lbnRzCisgICAg
ICAgIC8vIHVubGVzcyBhIGJvcmRlciBhbmQvb3IgYmFja2dyb3VuZCBDU1MgcHJvcGVydHkgaXMg
YWxzbyBzcGVjaWZpZWQuCisgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQoTGVuZ3RoKEF1dG8pKTsK
KyAgICB9CisjZW5kaWYKKworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBz
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1
dGVTaXplKHRydWUpOworCisjaWZkZWYgUV9PU19NQUMgLy8gVXNlIGZpeGVkIGZvbnQgc2l6ZSBh
bmQgZmFtaWx5IG9uIE1hYyAobGlrZSBTYWZhcmkgZG9lcykKKyAgICBmb250RGVzY3JpcHRpb24u
c2V0U3BlY2lmaWVkU2l6ZShtX2J1dHRvbkZvbnRQaXhlbFNpemUpOworICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRDb21wdXRlZFNpemUobV9idXR0b25Gb250UGl4ZWxTaXplKTsKKyNlbHNlCisgICAg
Zm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOworICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoc3R5bGUtPmZvbnRTaXplKCkpOworI2Vu
ZGlmCisKKyAgICBGb250RmFtaWx5IGZvbnRGYW1pbHk7CisgICAgZm9udEZhbWlseS5zZXRGYW1p
bHkobV9idXR0b25Gb250RmFtaWx5KTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KGZv
bnRGYW1pbHkpOworICAgIHN0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9u
KTsKKyAgICBzdHlsZS0+Zm9udCgpLnVwZGF0ZShzZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCkpOwor
ICAgIHN0eWxlLT5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgp
KTsKKyAgICBzZXRCdXR0b25TaXplKHN0eWxlKTsKKyAgICBzZXRCdXR0b25QYWRkaW5nKHN0eWxl
KTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJT
dHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgUVN0eWxlT3B0aW9uQnV0dG9uIHN0eWxlT3B0aW9u
OworICAgIHN0eWxlT3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7CisKKyAgICAv
LyBGYWtlIGEgYnV0dG9uIHJlY3QgaGVyZSwgc2luY2Ugd2UncmUganVzdCBjb21wdXRpbmcgZGVs
dGFzCisgICAgUVJlY3Qgb3JpZ2luYWxSZWN0ID0gUVJlY3QoMCwgMCwgMTAwLCAzMCk7CisgICAg
c3R5bGVPcHRpb24ucmVjdCA9IG9yaWdpbmFsUmVjdDsKKworICAgIC8vIERlZmF1bHQgcGFkZGlu
ZyBpcyBiYXNlZCBvbiB0aGUgYnV0dG9uIG1hcmdpbiBwaXhlbCBtZXRyaWMKKyAgICBpbnQgYnV0
dG9uTWFyZ2luID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fQnV0dG9uTWFyZ2lu
LCAmc3R5bGVPcHRpb24sIDApOworICAgIGludCBwYWRkaW5nTGVmdCA9IGJ1dHRvbk1hcmdpbjsK
KyAgICBpbnQgcGFkZGluZ1JpZ2h0ID0gYnV0dG9uTWFyZ2luOworICAgIGludCBwYWRkaW5nVG9w
ID0gYnV0dG9uTWFyZ2luOworICAgIGludCBwYWRkaW5nQm90dG9tID0gYnV0dG9uTWFyZ2luOwor
CisgICAgLy8gVGhlbiBjaGVjayBpZiB0aGUgc3R5bGUgdXNlcyBsYXlvdXQgbWFyZ2lucworICAg
IFFSZWN0IGxheW91dFJlY3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9Q
dXNoQnV0dG9uTGF5b3V0SXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7CisgICAgaWYgKCFsYXlvdXRSZWN0LmlzTnVs
bCgpKSB7CisgICAgICAgIFFSZWN0IGNvbnRlbnRzUmVjdCA9IHFTdHlsZSgpLT5zdWJFbGVtZW50
UmVjdChRU3R5bGU6OlNFX1B1c2hCdXR0b25Db250ZW50cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7CisgICAg
ICAgIHBhZGRpbmdMZWZ0ID0gY29udGVudHNSZWN0LmxlZnQoKSAtIGxheW91dFJlY3QubGVmdCgp
OworICAgICAgICBwYWRkaW5nUmlnaHQgPSBsYXlvdXRSZWN0LnJpZ2h0KCkgLSBjb250ZW50c1Jl
Y3QucmlnaHQoKTsKKyAgICAgICAgcGFkZGluZ1RvcCA9IGNvbnRlbnRzUmVjdC50b3AoKSAtIGxh
eW91dFJlY3QudG9wKCk7CisKKyAgICAgICAgLy8gQ2FuJ3QgdXNlIHRoaXMgcmlnaHQgbm93IGJl
Y2F1c2Ugd2UgZG9uJ3QgaGF2ZSB0aGUgYmFzZWxpbmUgdG8gY29tcGVuc2F0ZQorICAgICAgICAv
LyBwYWRkaW5nQm90dG9tID0gbGF5b3V0UmVjdC5ib3R0b20oKSAtIGNvbnRlbnRzUmVjdC5ib3R0
b20oKTsKKyAgICB9CisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVm
dCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmln
aHQsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKHBhZGRpbmdUb3As
IEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmdCb3R0
b20sIEZpeGVkKSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50QnV0dG9uKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkpOworICAgIGlmICghcC5pc1ZhbGlkKCkp
CisgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBRU3R5bGVPcHRpb25CdXR0b24gb3B0aW9uOwor
ICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKKyAgICBvcHRpb24ucmVjdCA9
IHI7CisgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7CisKKyAgICBDb250
cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9u
LCBvKTsKKyAgICBpZiAoYXBwZWFyYW5jZSA9PSBQdXNoQnV0dG9uUGFydCB8fCBhcHBlYXJhbmNl
ID09IEJ1dHRvblBhcnQpIHsKKyAgICAgICAgb3B0aW9uLnJlY3QgPSBpbmZsYXRlQnV0dG9uUmVj
dChvcHRpb24ucmVjdCk7CisgICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9QdXNoQnV0
dG9uLCBvcHRpb24pOworICAgIH0gZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBSYWRpb1BhcnQpCisg
ICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1JhZGlvQnV0dG9uLCBvcHRpb24pOworICAg
IGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hlY2tib3hQYXJ0KQorICAgICAgIHAuZHJhd0NvbnRy
b2woUVN0eWxlOjpDRV9DaGVja0JveCwgb3B0aW9uKTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0VGV4dEZpZWxkU3R5bGUoQ1NTU3R5bGVT
ZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0Cit7CisgICAgLy8g
UmVzZXR0aW5nIHRoZSBzdHlsZSBsaWtlIHRoaXMgbGVhZHMgdG8gZGlmZmVyZW5jZXMgbGlrZToK
KyAgICAvLyAtIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikgc2l6ZSAxNjh4MjUg
W2JnY29sb3I9I0ZGRkZGRl0gYm9yZGVyOiAoMnB4IGluc2V0ICMwMDAwMDApXQorICAgIC8vICsg
UmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2NngyNgorICAgIC8vIGlu
IGxheW91dCB0ZXN0cyB3aGVuIGEgQ1NTIHN0eWxlIGlzIGFwcGxpZWQgdGhhdCBkb2Vzbid0IGFm
ZmVjdCBiYWNrZ3JvdW5kIGNvbG9yLCBib3JkZXIgb3IKKyAgICAvLyBwYWRkaW5nLiBKdXN0IHdv
cnRoIGtlZXBpbmcgaW4gbWluZCEKKyAgICBzdHlsZS0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9y
Ojp0cmFuc3BhcmVudCk7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7CisgICAgc3R5bGUtPnJl
c2V0UGFkZGluZygpOworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0eWxlKTsKK30KKwor
Ym9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgU3R5bGVQYWludGVy
UVN0eWxlIHAodGhpcywgaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBRU3R5bGVPcHRpb25GcmFtZVYyIHBhbmVsOworICAgIGluaXRTdHlsZU9w
dGlvbihwLndpZGdldCwgcGFuZWwpOworICAgIHBhbmVsLnJlY3QgPSByOworICAgIHBhbmVsLmxp
bmVXaWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aChxU3R5bGUoKSk7CisgICAgcGFuZWwuc3RhdGUg
fD0gUVN0eWxlOjpTdGF0ZV9TdW5rZW47CisgICAgcGFuZWwuZmVhdHVyZXMgPSBRU3R5bGVPcHRp
b25GcmFtZVYyOjpOb25lOworCisgICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9y
IGEgdGV4dCBmaWVsZAorICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29t
bW9uUVN0eWxlT3B0aW9ucyhwYW5lbCwgbyk7CisgICAgaWYgKGFwcGVhcmFuY2UgIT0gVGV4dEZp
ZWxkUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAorICAgICAg
ICAmJiBhcHBlYXJhbmNlICE9IFRleHRBcmVhUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNlICE9
IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBwYWludCB0
aGUgdGV4dCBmaWVsZC4KKyAgICBwLmRyYXdQcmltaXRpdmUoUVN0eWxlOjpQRV9QYW5lbExpbmVF
ZGl0LCBwYW5lbCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0
eWxlOjphZGp1c3RUZXh0QXJlYVN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgYWRqdXN0VGV4
dEZpZWxkU3R5bGUoc2VsZWN0b3IsIHN0eWxlLCBlbGVtZW50KTsKK30KKworYm9vbCBSZW5kZXJU
aGVtZVFTdHlsZTo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5m
byYgaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywg
aSwgcik7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OnNldFBvcHVwUGFkZGluZyhSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29uc3QgaW50IHBhZGRpbmdMZWZ0ID0gNDsK
KyAgICBjb25zdCBpbnQgcGFkZGluZ1JpZ2h0ID0gc3R5bGUtPndpZHRoKCkuaXNGaXhlZCgpIHx8
IHN0eWxlLT53aWR0aCgpLmlzUGVyY2VudCgpID8gNSA6IDg7CisKKyAgICBzdHlsZS0+c2V0UGFk
ZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmdMZWZ0LCBGaXhlZCkpOworCisgICAgUVN0eWxlT3B0aW9u
Q29tYm9Cb3ggb3B0OworICAgIGludCB3ID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6
UE1fQnV0dG9uSWNvblNpemUsICZvcHQsIDApOworICAgIHN0eWxlLT5zZXRQYWRkaW5nUmlnaHQo
TGVuZ3RoKHBhZGRpbmdSaWdodCArIHcsIEZpeGVkKSk7CisKKyAgICBzdHlsZS0+c2V0UGFkZGlu
Z1RvcChMZW5ndGgoMiwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0JvdHRvbShMZW5n
dGgoMiwgRml4ZWQpKTsKK30KKworCitib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludE1lbnVM
aXN0KFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiBy
KQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkpOworICAgIGlmICghcC5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgUXRTdHlsZU9wdGlvbldlYkNvbWJv
Qm94IG9wdChvKTsKKyAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdCk7CisgICAgaW5p
dGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0LCBvKTsKKworICAgIEludFJlY3QgcmVjdCA9
IHI7CisKKyNpZiBkZWZpbmVkKFFfT1NfTUFDKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9NQUMp
CisgICAgLy8gUU1hY1N0eWxlIG1ha2VzIHRoZSBjb21ibyBib3hlcyBhIGxpdHRsZSBiaXQgc21h
bGxlciB0byBsZWF2ZSBzcGFjZSBmb3IgdGhlIGZvY3VzIHJlY3QuCisgICAgLy8gQmVjYXVzZSBv
ZiBpdCwgdGhlIGNvbWJvIGJ1dHRvbiBpcyBkcmF3biBhdCBhIHBvaW50IHRvIHRoZSBsZWZ0IG9m
IHdoZXJlIGl0IHdhcyBleHBlY3QgdG8gYmUgYW5kIG1heSBlbmQgdXAKKyAgICAvLyBvdmVybGFw
cGVkIHdpdGggdGhlIHRleHQuIFRoaXMgd2lsbCBmb3JjZSBRTWFjU3R5bGUgdG8gZHJhdyB0aGUg
Y29tYm8gYm94IHdpdGggdGhlIGV4cGVjdGVkIHdpZHRoLgorICAgIGlmIChxb2JqZWN0X2Nhc3Q8
UU1hY1N0eWxlKj4ocC5zdHlsZSkpCisgICAgICAgIHJlY3QuaW5mbGF0ZVgoMyk7CisjZW5kaWYK
KworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0gcmVjdC5sb2NhdGlvbigpOworICAgIHAucGFp
bnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworICAgIG9wdC5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwg
MCkpOworICAgIG9wdC5yZWN0LnNldFNpemUocmVjdC5zaXplKCkpOworCisgICAgcC5kcmF3Q29t
cGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21ib0JveCwgb3B0KTsKKyAgICBwLnBhaW50ZXItPnRy
YW5zbGF0ZSgtdG9wTGVmdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFJlbmRlclRo
ZW1lUVN0eWxlOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIFdPUktBUk9VTkQg
YmVjYXVzZSBodG1sLmNzcyBzcGVjaWZpZXMgLXdlYmtpdC1ib3JkZXItcmFkaXVzIGZvciA8c2Vs
ZWN0PiBzbyB3ZSBvdmVycmlkZSBpdCBoZXJlCisgICAgLy8gc2VlIGFsc28gaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzOTkKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXJS
YWRpdXMoKTsKKworICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0by4KKyAgICBzdHlsZS0+
c2V0SGVpZ2h0KExlbmd0aChBdXRvKSk7CisKKyAgICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQg
dG8gcHJlCisgICAgc3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKworICAgIGNvbXB1dGVTaXpl
QmFzZWRPblN0eWxlKHN0eWxlKTsKKworICAgIC8vIEFkZCBpbiB0aGUgcGFkZGluZyB0aGF0IHdl
J2QgbGlrZSB0byB1c2UuCisgICAgc2V0UG9wdXBQYWRkaW5nKHN0eWxlKTsKK30KKworYm9vbCBS
ZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNv
bnN0IFBhaW50SW5mbyYgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGkp
OworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgUXRT
dHlsZU9wdGlvbldlYkNvbWJvQm94IG9wdGlvbihvKTsKKyAgICBpbml0U3R5bGVPcHRpb24ocC53
aWRnZXQsIG9wdGlvbik7CisgICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlvbnMob3B0aW9u
LCBvKTsKKyAgICBvcHRpb24ucmVjdCA9IHI7CisKKyAgICAvLyBmb3IgZHJhd2luZyB0aGUgY29t
Ym8gYm94IGFycm93LCByZWx5IG9ubHkgb24gdGhlIGZhbGxiYWNrIHN0eWxlCisgICAgcC5zdHls
ZSA9IGZhbGxiYWNrU3R5bGUoKTsKKyAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlND
X0NvbWJvQm94QXJyb3c7CisgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxlOjpDQ19Db21i
b0JveCwgb3B0aW9uKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworI2lmIEVOQUJMRShQUk9H
UkVTU19UQUcpCitkb3VibGUgUmVuZGVyVGhlbWVRU3R5bGU6OmFuaW1hdGlvbkR1cmF0aW9uRm9y
UHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdAoreworICAg
IGlmIChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSA+PSAwKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOworICAgIG9wdGlvbi5yZWN0
LnNldFNpemUocmVuZGVyUHJvZ3Jlc3MtPnNpemUoKSk7CisgICAgLy8gRklYTUU6IFVudGlsIGh0
dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwK
KyAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dy
ZXNzIGJhci4KKyAgICByZXR1cm4gKG9wdGlvbi5yZWN0LndpZHRoKCkgLyBxU3R5bGUoKS0+cGl4
ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24pKSAqIGFu
aW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MpOworfQor
Citib29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCog
bywgY29uc3QgUGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBpZiAoIW8t
PmlzUHJvZ3Jlc3MoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHlsZVBhaW50ZXJR
U3R5bGUgcCh0aGlzLCBwaSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIFFTdHlsZU9wdGlvblByb2dyZXNzQmFyVjIgb3B0aW9uOworICAgIGluaXRT
dHlsZU9wdGlvbihwLndpZGdldCwgb3B0aW9uKTsKKyAgICBpbml0aWFsaXplQ29tbW9uUVN0eWxl
T3B0aW9ucyhvcHRpb24sIG8pOworCisgICAgUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlclByb2dyZXNz
ID0gdG9SZW5kZXJQcm9ncmVzcyhvKTsKKyAgICBvcHRpb24ucmVjdCA9IHI7CisgICAgb3B0aW9u
Lm1heGltdW0gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgIG9wdGlvbi5t
aW5pbXVtID0gMDsKKyAgICBvcHRpb24ucHJvZ3Jlc3MgPSAocmVuZGVyUHJvZ3Jlc3MtPnBvc2l0
aW9uKCkgKiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKKworICAgIGNvbnN0IFFQ
b2ludCB0b3BMZWZ0ID0gci5sb2NhdGlvbigpOworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRv
cExlZnQpOworICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOworICAgIG9wdGlv
bi5yZWN0LnNldFNpemUoci5zaXplKCkpOworCisgICAgaWYgKG9wdGlvbi5wcm9ncmVzcyA8IDAp
IHsKKyAgICAgICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNv
bS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKKyAgICAgICAgLy8gd2Ugc2ltdWxhdGUgb25l
IHNxdWFyZSBhbmltYXRpbmcgYWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgICAgIHAuZHJh
d0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhckdyb292ZSwgb3B0aW9uKTsKKyAgICAgICAg
aW50IGNodW5rV2lkdGggPSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVz
c0JhckNodW5rV2lkdGgsICZvcHRpb24pOworICAgICAgICBRQ29sb3IgY29sb3IgPSAob3B0aW9u
LnBhbGV0dGUuaGlnaGxpZ2h0KCkgPT0gb3B0aW9uLnBhbGV0dGUuYmFja2dyb3VuZCgpKSA/IG9w
dGlvbi5wYWxldHRlLmNvbG9yKFFQYWxldHRlOjpBY3RpdmUsIFFQYWxldHRlOjpIaWdobGlnaHQp
IDogb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkhpZ2hsaWdodCk7CisgICAgICAgIGlm
IChyZW5kZXJQcm9ncmVzcy0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKQorICAgICAgICAg
ICAgcC5wYWludGVyLT5maWxsUmVjdChvcHRpb24ucmVjdC5yaWdodCgpIC0gY2h1bmtXaWR0aCAg
LSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5yZWN0LndpZHRo
KCksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3QocmVuZGVyUHJvZ3Jlc3MtPmFu
aW1hdGlvblByb2dyZXNzKCkgKiBvcHRpb24ucmVjdC53aWR0aCgpLCAwLCBjaHVua1dpZHRoLCBv
cHRpb24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOworICAgIH0gZWxzZQorICAgICAgICBwLmRyYXdD
b250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXIsIG9wdGlvbik7CisKKyAgICBwLnBhaW50ZXIt
PnRyYW5zbGF0ZSgtdG9wTGVmdCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKwor
Ym9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBw
aSk7CisgICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBR
U3R5bGVPcHRpb25TbGlkZXIgb3B0aW9uOworICAgIGluaXRTdHlsZU9wdGlvbihwLndpZGdldCwg
b3B0aW9uKTsKKyAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckdyb292
ZTsKKyAgICBDb250cm9sUGFydCBhcHBlYXJhbmNlID0gaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9w
dGlvbnMob3B0aW9uLCBvKTsKKyAgICBvcHRpb24ucmVjdCA9IHI7CisgICAgaWYgKGFwcGVhcmFu
Y2UgPT0gU2xpZGVyVmVydGljYWxQYXJ0KQorICAgICAgICBvcHRpb24ub3JpZW50YXRpb24gPSBR
dDo6VmVydGljYWw7CisgICAgaWYgKGlzUHJlc3NlZChvKSkKKyAgICAgICAgb3B0aW9uLnN0YXRl
IHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOworCisgICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0
eWxlOjpDQ19TbGlkZXIsIG9wdGlvbik7CisKKyAgICBpZiAob3B0aW9uLnN0YXRlICYgUVN0eWxl
OjpTdGF0ZV9IYXNGb2N1cykgeworICAgICAgICBRU3R5bGVPcHRpb25Gb2N1c1JlY3QgZm9jdXNP
cHRpb247CisgICAgICAgIGZvY3VzT3B0aW9uLnJlY3QgPSByOworICAgICAgICBwLmRyYXdQcmlt
aXRpdmUoUVN0eWxlOjpQRV9GcmFtZUZvY3VzUmVjdCwgZm9jdXNPcHRpb24pOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xp
ZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVt
ZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworfQorCiti
b29sIFJlbmRlclRoZW1lUVN0eWxlOjpwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIHBp
KTsKKyAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFFT
dHlsZU9wdGlvblNsaWRlciBvcHRpb247CisgICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBv
cHRpb24pOworICAgIG9wdGlvbi5zdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU2xpZGVySGFuZGxl
OworICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0
aW9ucyhvcHRpb24sIG8pOworICAgIG9wdGlvbi5yZWN0ID0gcjsKKyAgICBpZiAoYXBwZWFyYW5j
ZSA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKKyAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9u
ID0gUXQ6OlZlcnRpY2FsOworICAgIGlmIChpc1ByZXNzZWQobykpIHsKKyAgICAgICAgb3B0aW9u
LmFjdGl2ZVN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7CisgICAgICAgIG9w
dGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKKyAgICB9CisKKyAgICBwLmRyYXdD
b21wbGV4Q29udHJvbChRU3R5bGU6OkNDX1NsaWRlciwgb3B0aW9uKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVFTdHlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50
KiBlbGVtZW50KSBjb25zdAoreworICAgIFJlbmRlclRoZW1lOjphZGp1c3RTbGlkZXJUaHVtYlN0
eWxlKHNlbGVjdG9yLCBzdHlsZSwgZWxlbWVudCk7CisgICAgc3R5bGUtPnNldEJveFNoYWRvdyhu
dWxscHRyKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRTZWFyY2hGaWVsZChS
ZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICByZXR1cm4gcGFpbnRU
ZXh0RmllbGQobywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RT
ZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yLCBSZW5kZXJTdHlsZSog
c3R5bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVu
dCogZSkgY29uc3QKK3sKKyAgICAvLyBSZXNldHRpbmcgdGhlIHN0eWxlIGxpa2UgdGhpcyBsZWFk
cyB0byBkaWZmZXJlbmNlcyBsaWtlOgorICAgIC8vIC0gUmVuZGVyVGV4dENvbnRyb2wge0lOUFVU
fSBhdCAoMiwyKSBzaXplIDE2OHgyNSBbYmdjb2xvcj0jRkZGRkZGXSBib3JkZXI6ICgycHggaW5z
ZXQgIzAwMDAwMCldCisgICAgLy8gKyBSZW5kZXJUZXh0Q29udHJvbCB7SU5QVVR9IGF0ICgyLDIp
IHNpemUgMTY2eDI2CisgICAgLy8gaW4gbGF5b3V0IHRlc3RzIHdoZW4gYSBDU1Mgc3R5bGUgaXMg
YXBwbGllZCB0aGF0IGRvZXNuJ3QgYWZmZWN0IGJhY2tncm91bmQgY29sb3IsIGJvcmRlciBvcgor
ICAgIC8vIHBhZGRpbmcuIEp1c3Qgd29ydGgga2VlcGluZyBpbiBtaW5kIQorICAgIHN0eWxlLT5z
ZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OnRyYW5zcGFyZW50KTsKKyAgICBzdHlsZS0+cmVzZXRC
b3JkZXIoKTsKKyAgICBzdHlsZS0+cmVzZXRQYWRkaW5nKCk7CisgICAgY29tcHV0ZVNpemVCYXNl
ZE9uU3R5bGUoc3R5bGUpOworfQorCit2b2lkIFJlbmRlclRoZW1lUVN0eWxlOjphZGp1c3RTZWFy
Y2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVy
U3R5bGUqIHN0eWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFbGVtZW50KiBlKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgUmVuZGVyVGhlbWU6OmFkanVzdFNlYXJjaEZpZWxkRGVjb3JhdGlvblN0eWxlKHNlbGVjdG9y
LCBzdHlsZSwgZSk7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmll
bGREZWNvcmF0aW9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwaSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6cGFp
bnRTZWFyY2hGaWVsZERlY29yYXRpb24obywgcGksIHIpOworfQorCit2b2lkIFJlbmRlclRoZW1l
UVN0eWxlOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uU3R5bGUoQ1NTU3R5bGVT
ZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQqIGUpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblN0eWxlKHNlbGVjdG9yLCBzdHlsZSwgZSk7Cit9CisK
K2Jvb2wgUmVuZGVyVGhlbWVRU3R5bGU6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlv
bihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpwYWludFNl
YXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24obywgcGksIHIpOworfQorCisjaWZuZGVmIFFUX05P
X1NQSU5CT1gKKworYm9vbCBSZW5kZXJUaGVtZVFTdHlsZTo6cGFpbnRJbm5lclNwaW5CdXR0b24o
UmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcmVjdCkKK3sKKyAgICBTdHlsZVBhaW50ZXJRU3R5bGUgcCh0aGlzLCBwYWludEluZm8pOwor
ICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBRU3R5bGVP
cHRpb25TcGluQm94IG9wdGlvbjsKKyAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlv
bik7CisgICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAgfCBRU3R5
bGU6OlNDX1NwaW5Cb3hEb3duOworICAgIGlmICghaXNSZWFkT25seUNvbnRyb2wobykpIHsKKyAg
ICAgICAgaWYgKGlzRW5hYmxlZChvKSkKKyAgICAgICAgICAgIG9wdGlvbi5zdGVwRW5hYmxlZCA9
IFFBYnN0cmFjdFNwaW5Cb3g6OlN0ZXBVcEVuYWJsZWQgfCBRQWJzdHJhY3RTcGluQm94OjpTdGVw
RG93bkVuYWJsZWQ7CisgICAgICAgIGlmIChpc1ByZXNzZWQobykpIHsKKyAgICAgICAgICAgIG9w
dGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKKyAgICAgICAgICAgIGlmIChpc1Nw
aW5VcEJ1dHRvblBhcnRQcmVzc2VkKG8pKQorICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVT
dWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveFVwOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJv
eERvd247CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gUmVuZGVyIHRoZSBzcGluIGJ1dHRvbnMg
Zm9yIExUUiBvciBSVEwgYWNjb3JkaW5nbHkuCisgICAgb3B0aW9uLmRpcmVjdGlvbiA9IG8tPnN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFF0OjpMZWZ0VG9SaWdodCA6IFF0OjpS
aWdodFRvTGVmdDsKKworICAgIEludFJlY3QgYnV0dG9uUmVjdCA9IHJlY3Q7CisgICAgLy8gRGVm
YXVsdCB0byBtb3ZpbmcgdGhlIGJ1dHRvbnMgYSBsaXR0bGUgYml0IHdpdGhpbiB0aGUgZWRpdG9y
IGZyYW1lLgorICAgIGludCBpbmZsYXRlWCA9IC0yOworICAgIGludCBpbmZsYXRlWSA9IC0yOwor
I2lmIGRlZmluZWQoUV9PU19NQUMpICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX01BQykKKyAgICAv
LyBRTWFjU3R5bGUgd2lsbCBwb3NpdGlvbiB0aGUgYXF1YSBidXR0b25zIGZsdXNoIHRvIHRoZSBy
aWdodC4KKyAgICAvLyBUaGlzIHdpbGwgbW92ZSB0aGVtIG1vcmUgd2l0aGluIHRoZSBjb250cm9s
IGZvciBiZXR0ZXIgc3R5bGUsIGEgbGEKKyAgICAvLyBDaHJvbWl1bSBsb29rICYgZmVlbC4KKyAg
ICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHAuc3R5bGUpKSB7CisgICAgICAgIGluZmxh
dGVYID0gLTQ7CisgICAgICAgIC8vIFJlbmRlciBtaW5pIGFxdWEgc3BpbiBidXR0b25zIGZvciBR
TWFjU3R5bGUgdG8gZml0IG5pY2VseSBpbnRvCisgICAgICAgIC8vIHRoZSBlZGl0b3IgYXJlYSwg
bGlrZSBDaHJvbWl1bS4KKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTWlu
aTsKKyAgICB9CisjZW5kaWYKKyNpZiAhZGVmaW5lZChRVF9OT19TVFlMRV9QTEFTVElRVUUpCisg
ICAgLy8gUVBsYXN0aXF1ZVN0eWxlIGxvb2tzIGJlc3Qgd2hlbiB0aGUgc3BpbiBidXR0b25zIGFy
ZSBmbHVzaCB3aXRoIHRoZSBmcmFtZSdzIGVkZ2UuCisgICAgaWYgKHFvYmplY3RfY2FzdDxRUGxh
c3RpcXVlU3R5bGUqPihwLnN0eWxlKSkgeworICAgICAgICBpbmZsYXRlWCA9IDA7CisgICAgICAg
IGluZmxhdGVZID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVgo
aW5mbGF0ZVgpOworICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVkoaW5mbGF0ZVkpOworICAgIG9wdGlv
bi5yZWN0ID0gYnV0dG9uUmVjdDsKKworICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6
Q0NfU3BpbkJveCwgb3B0aW9uKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYKKworQ29u
dHJvbFBhcnQgUmVuZGVyVGhlbWVRU3R5bGU6OmluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25z
KFFTdHlsZU9wdGlvbiYgb3B0aW9uLCBSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgLy8g
RGVmYXVsdCBiaXRzOiBubyBmb2N1cywgbm8gbW91c2Ugb3ZlcgorICAgIG9wdGlvbi5zdGF0ZSAm
PSB+KFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMgfCBRU3R5bGU6OlN0YXRlX01vdXNlT3Zlcik7CisK
KyAgICBpZiAoaXNSZWFkT25seUNvbnRyb2wobykpCisgICAgICAgIC8vIFJlYWRvbmx5IGlzIHN1
cHBvcnRlZCBvbiB0ZXh0ZmllbGRzLgorICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpT
dGF0ZV9SZWFkT25seTsKKworICAgIG9wdGlvbi5kaXJlY3Rpb24gPSBRdDo6TGVmdFRvUmlnaHQ7
CisKKyAgICBpZiAoaXNIb3ZlcmVkKG8pKQorICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxl
OjpTdGF0ZV9Nb3VzZU92ZXI7CisKKyAgICBzZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0
cyhvcHRpb24ucGFsZXR0ZSk7CisKKyAgICBpZiAoIWlzRW5hYmxlZChvKSkgeworICAgICAgICBv
cHRpb24ucGFsZXR0ZS5zZXRDdXJyZW50Q29sb3JHcm91cChRUGFsZXR0ZTo6RGlzYWJsZWQpOwor
ICAgICAgICBvcHRpb24uc3RhdGUgJj0gflFTdHlsZTo6U3RhdGVfRW5hYmxlZDsKKyAgICB9CisK
KyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBvLT5zdHlsZSgpOworICAgIGlmICghc3R5bGUpCisg
ICAgICAgIHJldHVybiBOb0NvbnRyb2xQYXJ0OworCisgICAgQ29udHJvbFBhcnQgcmVzdWx0ID0g
c3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBpZiAoc3VwcG9ydHNGb2N1cyhyZXN1bHQpICYmIGlz
Rm9jdXNlZChvKSkgeworICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9IYXNG
b2N1czsKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfS2V5Ym9hcmRGb2N1
c0NoYW5nZTsKKyAgICB9CisKKyAgICBpZiAoc3R5bGUtPmRpcmVjdGlvbigpID09IFdlYkNvcmU6
OlJUTCkKKyAgICAgICAgb3B0aW9uLmRpcmVjdGlvbiA9IFF0OjpSaWdodFRvTGVmdDsKKworICAg
IHN3aXRjaCAocmVzdWx0KSB7CisgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKKyAgICBjYXNlIFNx
dWFyZUJ1dHRvblBhcnQ6CisgICAgY2FzZSBCdXR0b25QYXJ0OgorICAgIGNhc2UgQnV0dG9uQmV2
ZWxQYXJ0OgorICAgIGNhc2UgTGlzdEl0ZW1QYXJ0OgorICAgIGNhc2UgTWVudWxpc3RCdXR0b25Q
YXJ0OgorICAgIGNhc2UgU2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uUGFydDoKKyAgICBjYXNlIFNl
YXJjaEZpZWxkQ2FuY2VsQnV0dG9uUGFydDogeworICAgICAgICBpZiAoaXNQcmVzc2VkKG8pKQor
ICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOworICAgICAg
ICBlbHNlIGlmIChyZXN1bHQgPT0gUHVzaEJ1dHRvblBhcnQgfHwgcmVzdWx0ID09IEJ1dHRvblBh
cnQpCisgICAgICAgICAgICBvcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9SYWlzZWQ7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFJhZGlvUGFydDoKKyAgICBjYXNlIENoZWNr
Ym94UGFydDoKKyAgICAgICAgb3B0aW9uLnN0YXRlIHw9IChpc0NoZWNrZWQobykgPyBRU3R5bGU6
OlN0YXRlX09uIDogUVN0eWxlOjpTdGF0ZV9PZmYpOworICAgIH0KKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRU3R5bGU6OmFkanVzdFNsaWRlclRodW1iU2l6ZShS
ZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgY29uc3QgQ29udHJvbFBhcnQgcGFydCA9
IHN0eWxlLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9u
dGFsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KSB7CisgICAgICAgIFFT
dHlsZU9wdGlvblNsaWRlciBvcHRpb247CisgICAgICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1i
VmVydGljYWxQYXJ0KQorICAgICAgICAgICAgb3B0aW9uLm9yaWVudGF0aW9uID0gUXQ6OlZlcnRp
Y2FsOworCisgICAgICAgIFFTdHlsZSogcXN0eWxlID0gcVN0eWxlKCk7CisKKyAgICAgICAgaW50
IGxlbmd0aCA9IHFzdHlsZS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9TbGlkZXJMZW5ndGgsICZv
cHRpb24pOworICAgICAgICBpbnQgdGhpY2tuZXNzID0gcXN0eWxlLT5waXhlbE1ldHJpYyhRU3R5
bGU6OlBNX1NsaWRlclRoaWNrbmVzcywgJm9wdGlvbik7CisgICAgICAgIGlmIChvcHRpb24ub3Jp
ZW50YXRpb24gPT0gUXQ6OlZlcnRpY2FsKSB7CisgICAgICAgICAgICBzdHlsZS0+c2V0V2lkdGgo
TGVuZ3RoKHRoaWNrbmVzcywgRml4ZWQpKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRIZWlnaHQo
TGVuZ3RoKGxlbmd0aCwgRml4ZWQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0
eWxlLT5zZXRXaWR0aChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOworICAgICAgICAgICAgc3R5bGUt
PnNldEhlaWdodChMZW5ndGgodGhpY2tuZXNzLCBGaXhlZCkpOworICAgICAgICB9CisgICAgfSBl
bHNlCisgICAgICAgIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU2l6ZShzdHlsZSk7
Cit9CisKK30KKworLy8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3NDdmZTQ3ZWRkZDQyY2M5
NGI2OWY4ZjM5YWRiZGI1Y2QxNDQzOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oCkBAIC0wLDAgKzEsMTQ4IEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIHRoZW1lIGltcGxlbWVudGF0aW9uIGZvciBmb3Jt
IGNvbnRyb2xzIGluIFdlYkNvcmUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFJlbmRlclRo
ZW1lUVN0eWxlX2gKKyNkZWZpbmUgUmVuZGVyVGhlbWVRU3R5bGVfaAorCisjaW5jbHVkZSAiUmVu
ZGVyVGhlbWVRdC5oIgorCisjaW5jbHVkZSA8UVN0eWxlPgorCitRVF9CRUdJTl9OQU1FU1BBQ0UK
KyNpZm5kZWYgUVRfTk9fTElORUVESVQKK2NsYXNzIFFMaW5lRWRpdDsKKyNlbmRpZgorY2xhc3Mg
UVBhaW50ZXI7CitjbGFzcyBRV2lkZ2V0OworUVRfRU5EX05BTUVTUEFDRQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFNjcm9sbGJhclRoZW1lUXQ7CisKK2NsYXNzIFJlbmRlclRoZW1l
UVN0eWxlIDogcHVibGljIFJlbmRlclRoZW1lUXQgeworcHJpdmF0ZToKKyAgICBSZW5kZXJUaGVt
ZVFTdHlsZShQYWdlKik7CisgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVRU3R5bGUoKTsKKworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBjcmVhdGUoUGFnZSopOwor
CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSopIGNv
bnN0OworCisgICAgUVN0eWxlKiBxU3R5bGUoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZp
cnR1YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8m
LCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3Rvcios
IFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisjaWYgRU5BQkxFKFBST0dSRVNTX1RB
RykKKyAgICAvLyBSZXR1cm5zIHRoZSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGZvciB0aGUg
cHJvZ3Jlc3MgYmFyLgorICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkR1cmF0aW9uRm9yUHJv
Z3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRQ
cm9ncmVzc0JhcihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CisjZW5kaWYKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRyYWNrKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihS
ZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRl
clN0eWxlKiwgRWxlbWVudCopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNo
RmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3Iq
LCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1
c3RTZWFyY2hGaWVsZERlY29yYXRpb25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5
bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGRE
ZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
U3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworCisjaWZuZGVmIFFU
X05PX1NQSU5CT1gKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOworI2VuZGlmCisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVy
U3R5bGUqKSBjb25zdDsKKworICAgIHZpcnR1YWwgUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVy
PiBnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJik7CisKKyAgICB2aXJ0dWFsIFFSZWN0
IGluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3QpIGNvbnN0OworCisg
ICAgdmlydHVhbCB2b2lkIHNldFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworCitw
cml2YXRlOgorICAgIENvbnRyb2xQYXJ0IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKFFT
dHlsZU9wdGlvbiYsIFJlbmRlck9iamVjdCopIGNvbnN0OworCisgICAgdm9pZCBzZXRCdXR0b25Q
YWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICBpbnQgZmluZEZyYW1lTGluZVdpZHRo
KFFTdHlsZSopIGNvbnN0OworCisgICAgUVN0eWxlKiBmYWxsYmFja1N0eWxlKCkgY29uc3Q7CisK
KyAgICBQYWdlKiBtX3BhZ2U7CisKKyNpZmRlZiBRX09TX01BQworICAgIGludCBtX2J1dHRvbkZv
bnRQaXhlbFNpemU7CisjZW5kaWYKKworICAgIFFTdHlsZSogbV9mYWxsYmFja1N0eWxlOworI2lm
bmRlZiBRVF9OT19MSU5FRURJVAorICAgIG11dGFibGUgUUxpbmVFZGl0KiBtX2xpbmVFZGl0Owor
I2VuZGlmCit9OworCitjbGFzcyBTdHlsZVBhaW50ZXJRU3R5bGUgOiBwdWJsaWMgU3R5bGVQYWlu
dGVyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXJRU3R5bGUoUmVuZGVyVGhl
bWVRU3R5bGUqLCBjb25zdCBQYWludEluZm8mKTsKKyAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXJR
U3R5bGUoU2Nyb2xsYmFyVGhlbWVRdCosIEdyYXBoaWNzQ29udGV4dCopOworCisgICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gc3R5bGUgJiYgU3R5bGVQYWludGVyOjppc1ZhbGlkKCk7
IH0KKworICAgIFFXaWRnZXQqIHdpZGdldDsKKyAgICBRU3R5bGUqIHN0eWxlOworCisgICAgdm9p
ZCBkcmF3UHJpbWl0aXZlKFFTdHlsZTo6UHJpbWl0aXZlRWxlbWVudCBwZSwgY29uc3QgUVN0eWxl
T3B0aW9uJiBvcHQpCisgICAgeyBzdHlsZS0+ZHJhd1ByaW1pdGl2ZShwZSwgJm9wdCwgcGFpbnRl
ciwgd2lkZ2V0KTsgfQorICAgIHZvaWQgZHJhd0NvbnRyb2woUVN0eWxlOjpDb250cm9sRWxlbWVu
dCBjZSwgY29uc3QgUVN0eWxlT3B0aW9uJiBvcHQpCisgICAgeyBzdHlsZS0+ZHJhd0NvbnRyb2wo
Y2UsICZvcHQsIHBhaW50ZXIsIHdpZGdldCk7IH0KKyAgICB2b2lkIGRyYXdDb21wbGV4Q29udHJv
bChRU3R5bGU6OkNvbXBsZXhDb250cm9sIGNjLCBjb25zdCBRU3R5bGVPcHRpb25Db21wbGV4JiBv
cHQpCisgICAgeyBzdHlsZS0+ZHJhd0NvbXBsZXhDb250cm9sKGNjLCAmb3B0LCBwYWludGVyLCB3
aWRnZXQpOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dCosIFFT
dHlsZSopOworCisgICAgUV9ESVNBQkxFX0NPUFkoU3R5bGVQYWludGVyUVN0eWxlKQorfTsKKwor
fQorCisjZW5kaWYgLy8gUmVuZGVyVGhlbWVRU3R5bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAppbmRleCBjMGU4YWM3ZmI1MzNlMjk1ZDRiODUxNDRl
ODY2NDhiOTRlMzA5MDg3Li4yYWNkYTM3ZTJiYzU5MTUyZTAwYjJmODcxZjE2ZDU2ZDg1NzYxOTYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcApAQCAt
MzAsNzkgKzMwLDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhl
bWVRdC5oIgogCi0jaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5
bGVTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKICNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50UXQuaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MTWVkaWFFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaWYgVVNFKFFUX01P
QklMRV9USEVNRSkKLSNpbmNsdWRlICJRdE1vYmlsZVdlYlN0eWxlLmgiCi0jZW5kaWYKICNpbmNs
dWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCiAjaWYgRU5BQkxFKFZJREVPKQogI2luY2x1ZGUgIk1l
ZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjZW5kaWYKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQ
YWludEluZm8uaCIKICNpbmNsdWRlICJRV2ViUGFnZUNsaWVudC5oIgotI2luY2x1ZGUgIlF0U3R5
bGVPcHRpb25XZWJDb21ib0JveC5oIgotI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5oIgogI2luY2x1
ZGUgIlJlbmRlckJveC5oIgogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCiAjaW5jbHVkZSAiUmVu
ZGVyUHJvZ3Jlc3MuaCIKICNlbmRpZgotI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgogI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVRdC5oIgotI2luY2x1
ZGUgIlNsaWRlclRodW1iRWxlbWVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAj
aW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgi
CiAKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUNvbG9yPgotI2luY2x1ZGUg
PFFDb3JlQXBwbGljYXRpb24+CiAjaW5jbHVkZSA8UUZpbGU+CiAjaW5jbHVkZSA8UUZvbnRNZXRy
aWNzPgotI2luY2x1ZGUgPFFMaW5lRWRpdD4KLSNpbmNsdWRlIDxRTWFjU3R5bGU+Ci0jaW5jbHVk
ZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVBsYXN0aXF1ZVN0eWxlPgotI2luY2x1ZGUgPFFQdXNo
QnV0dG9uPgotI2luY2x1ZGUgPFFTdHlsZUZhY3Rvcnk+Ci0jaW5jbHVkZSA8UVN0eWxlT3B0aW9u
QnV0dG9uPgotI2luY2x1ZGUgPFFTdHlsZU9wdGlvbkZyYW1lVjI+Ci0jaWYgRU5BQkxFKFBST0dS
RVNTX1RBRykKLSNpbmNsdWRlIDxRU3R5bGVPcHRpb25Qcm9ncmVzc0JhclYyPgotI2VuZGlmCi0j
aW5jbHVkZSA8UVN0eWxlT3B0aW9uU2xpZGVyPgotI2luY2x1ZGUgPFFXaWRnZXQ+CisKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1pbmxpbmUg
c3RhdGljIHZvaWQgaW5pdFN0eWxlT3B0aW9uKFFXaWRnZXQgKndpZGdldCwgUVN0eWxlT3B0aW9u
JiBvcHRpb24pCi17Ci0gICAgaWYgKHdpZGdldCkKLSAgICAgICAgb3B0aW9uLmluaXRGcm9tKHdp
ZGdldCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAgSWYgYSB3aWRnZXQgaXMg
bm90IGRpcmVjdGx5IGF2YWlsYWJsZSBmb3IgcmVuZGVyaW5nLCB3ZSBmYWxsYmFjayB0byBkZWZh
dWx0Ci0gICAgICAgICAgdmFsdWUgZm9yIGFuIGFjdGl2ZSB3aWRnZXQuCi0gICAgICAgICAqLwot
ICAgICAgICBvcHRpb24uc3RhdGUgPSBRU3R5bGU6OlN0YXRlX0FjdGl2ZSB8IFFTdHlsZTo6U3Rh
dGVfRW5hYmxlZDsKLSAgICB9Ci19CiAvLyBUaGVzZSB2YWx1ZXMgYWxsIG1hdGNoIFNhZmFyaS9X
aW4vQ2hyb21pdW0KIHN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Q29udHJvbEZvbnRQaXhlbFNp
emUgPSAxMzsKIHN0YXRpYyBjb25zdCBmbG9hdCBkZWZhdWx0Q2FuY2VsQnV0dG9uU2l6ZSA9IDk7
CkBAIC0xMTMsMTI5ICs3OCwxMyBAQCBzdGF0aWMgY29uc3QgZmxvYXQgbWluU2VhcmNoRmllbGRS
ZXN1bHRzRGVjb3JhdGlvblNpemUgPSA5Owogc3RhdGljIGNvbnN0IGZsb2F0IG1heFNlYXJjaEZp
ZWxkUmVzdWx0c0RlY29yYXRpb25TaXplID0gMzA7CiBzdGF0aWMgY29uc3QgZmxvYXQgZGVmYXVs
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbldpZHRoID0gMTg7CiAKLSNpZiBVU0UoUVRfTU9CSUxF
X1RIRU1FKQotbmFtZXNwYWNlIHsKLSAgICBmbG9hdCBidXR0b25QYWRkaW5nTGVmdCA9IDE4Owot
ICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdSaWdodCA9IDE4OwotICAgIGZsb2F0IGJ1dHRvblBhZGRp
bmdUb3AgPSAyOwotICAgIGZsb2F0IGJ1dHRvblBhZGRpbmdCb3R0b20gPSAzOwotICAgIGZsb2F0
IG1lbnVMaXN0UGFkZGluZyA9IDk7Ci0gICAgZmxvYXQgdGV4dEZpZWxkUGFkZGluZyA9IDU7Ci19
Ci0jZW5kaWYKLQotU3R5bGVQYWludGVyOjpTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVRdCogdGhl
bWUsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvKQotewotICAgIGluaXQocGFpbnRJbmZvLmNv
bnRleHQgPyBwYWludEluZm8uY29udGV4dCA6IDAsIHRoZW1lLT5xU3R5bGUoKSk7Ci19Ci0KLVN0
eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKFNjcm9sbGJhclRoZW1lUXQqIHRoZW1lLCBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgaW5pdChjb250ZXh0LCB0aGVtZS0+c3R5bGUoKSk7
Ci19Ci0KLXZvaWQgU3R5bGVQYWludGVyOjppbml0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
UVN0eWxlKiB0aGVtZVN0eWxlKQotewotICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxRUGFpbnRl
cio+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB3aWRnZXQgPSAwOwotICAgIFFQ
YWludERldmljZSogZGV2ID0gMDsKLSAgICBpZiAocGFpbnRlcikKLSAgICAgICAgZGV2ID0gcGFp
bnRlci0+ZGV2aWNlKCk7Ci0gICAgaWYgKGRldiAmJiBkZXYtPmRldlR5cGUoKSA9PSBRSW50ZXJu
YWw6OldpZGdldCkKLSAgICAgICAgd2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UVdpZGdldCo+KGRldik7
Ci0gICAgc3R5bGUgPSB0aGVtZVN0eWxlOwotCi0gICAgaWYgKHBhaW50ZXIpIHsKLSAgICAgICAg
Ly8gdGhlIHN0eWxlcyBvZnRlbiBhc3N1bWUgYmVpbmcgY2FsbGVkIHdpdGggYSBwcmlzdGluZSBw
YWludGVyIHdoZXJlIG5vIGJydXNoIGlzIHNldCwKLSAgICAgICAgLy8gc28gcmVzZXQgaXQgbWFu
dWFsbHkKLSAgICAgICAgb2xkQnJ1c2ggPSBwYWludGVyLT5icnVzaCgpOwotICAgICAgICBwYWlu
dGVyLT5zZXRCcnVzaChRdDo6Tm9CcnVzaCk7Ci0KLSAgICAgICAgLy8gcGFpbnRpbmcgdGhlIHdp
ZGdldCB3aXRoIGFudGktYWxpYXNpbmcgd2lsbCBtYWtlIGl0IGJsdXJyeQotICAgICAgICAvLyBk
aXNhYmxlIGl0IGhlcmUgYW5kIHJlc3RvcmUgaXQgbGF0ZXIKLSAgICAgICAgb2xkQW50aWFsaWFz
aW5nID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZyk7Ci0g
ICAgICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgZmFs
c2UpOwotICAgIH0KLX0KLQotU3R5bGVQYWludGVyOjp+U3R5bGVQYWludGVyKCkKLXsKLSAgICBp
ZiAocGFpbnRlcikgewotICAgICAgICBwYWludGVyLT5zZXRCcnVzaChvbGRCcnVzaCk7Ci0gICAg
ICAgIHBhaW50ZXItPnNldFJlbmRlckhpbnRzKFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIG9sZEFu
dGlhbGlhc2luZyk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJU
aGVtZVF0OjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJl
bmRlclRoZW1lUXQocGFnZSkpOwotfQotCi1QYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJU
aGVtZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAgaWYgKHBhZ2UpCi0gICAgICAg
IHJldHVybiBSZW5kZXJUaGVtZVF0OjpjcmVhdGUocGFnZSk7Ci0KLSAgICBzdGF0aWMgUmVuZGVy
VGhlbWUqIGZhbGxiYWNrID0gUmVuZGVyVGhlbWVRdDo6Y3JlYXRlKDApLmxlYWtSZWYoKTsKLSAg
ICByZXR1cm4gZmFsbGJhY2s7Ci19Ci0KIFJlbmRlclRoZW1lUXQ6OlJlbmRlclRoZW1lUXQoUGFn
ZSogcGFnZSkKICAgICA6IFJlbmRlclRoZW1lKCkKICAgICAsIG1fcGFnZShwYWdlKQotICAgICwg
bV9saW5lRWRpdCgwKQotewotICAgIFFQdXNoQnV0dG9uIGJ1dHRvbjsKLSAgICBidXR0b24uc2V0
QXR0cmlidXRlKFF0OjpXQV9NYWNTbWFsbFNpemUpOwotICAgIFFGb250IGRlZmF1bHRCdXR0b25G
b250ID0gUUFwcGxpY2F0aW9uOjpmb250KCZidXR0b24pOwotICAgIFFGb250SW5mbyBmb250SW5m
byhkZWZhdWx0QnV0dG9uRm9udCk7Ci0gICAgbV9idXR0b25Gb250RmFtaWx5ID0gZGVmYXVsdEJ1
dHRvbkZvbnQuZmFtaWx5KCk7Ci0jaWZkZWYgUV9XU19NQUMKLSAgICBtX2J1dHRvbkZvbnRQaXhl
bFNpemUgPSBmb250SW5mby5waXhlbFNpemUoKTsKLSNlbmRpZgotCi0jaWYgVVNFKFFUX01PQklM
RV9USEVNRSkKLSAgICBtX2ZhbGxiYWNrU3R5bGUgPSBuZXcgUXRNb2JpbGVXZWJTdHlsZTsKLSNl
bHNlCi0gICAgbV9mYWxsYmFja1N0eWxlID0gUVN0eWxlRmFjdG9yeTo6Y3JlYXRlKFFMYXRpbjFT
dHJpbmcoIndpbmRvd3MiKSk7Ci0jZW5kaWYKLX0KLQotUmVuZGVyVGhlbWVRdDo6flJlbmRlclRo
ZW1lUXQoKQotewotICAgIGRlbGV0ZSBtX2ZhbGxiYWNrU3R5bGU7Ci0jaWZuZGVmIFFUX05PX0xJ
TkVFRElUCi0gICAgZGVsZXRlIG1fbGluZUVkaXQ7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShRVF9N
T0JJTEVfVEhFTUUpCi1ib29sIFJlbmRlclRoZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExh
eWVyJiBmaWxsLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAogewotICAgIHN3
aXRjaCAoc3R5bGUtPmFwcGVhcmFuY2UoKSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0g
ICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgTWVudWxpc3RQYXJ0OgotICAgIGNhc2UgU2Vh
cmNoRmllbGRQYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVh
UGFydDoKLSAgICAgICAgLy8gVGVzdCB0aGUgc3R5bGUgdG8gc2VlIGlmIHRoZSBVQSBib3JkZXIg
YW5kIGJhY2tncm91bmQgbWF0Y2guCi0gICAgICAgIHJldHVybiAoc3R5bGUtPmJvcmRlcigpICE9
IGJvcmRlcgotICAgICAgICAgICAgICAgIHx8ICpzdHlsZS0+YmFja2dyb3VuZExheWVycygpICE9
IGZpbGwKLSAgICAgICAgICAgICAgICB8fCBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSAhPSBiYWNrZ3JvdW5kQ29sb3IpOwotICAgIGNhc2Ug
Q2hlY2tib3hQYXJ0OgotICAgIGNhc2UgUmFkaW9QYXJ0OgotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lOjppc0NvbnRyb2xTdHls
ZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dyb3VuZENvbG9yKTsKLSAgICB9CisgICAgbV9i
dXR0b25Gb250RmFtaWx5ID0gUUFwcGxpY2F0aW9uOjpmb250KCkuZmFtaWx5KCk7CiB9CiAKLWlu
dCBSZW5kZXJUaGVtZVF0Ojpwb3B1cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSog
c3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDE7Ci19Ci0jZWxzZQogLy8gUmVtb3ZlIHRoaXMg
d2hlbiBTZWFyY2hGaWVsZFBhcnQgaXMgc3R5bGUtYWJsZSBpbiBSZW5kZXJUaGVtZTo6aXNDb250
cm9sU3R5bGVkKCkKIGJvb2wgUmVuZGVyVGhlbWVRdDo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYgYm9yZGVyLCBjb25zdCBGaWxsTGF5
ZXImIGZpbGwsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0CiB7CkBAIC0yNDks
MzYgKzk4LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6aXNDb250cm9sU3R5bGVkKGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSwgY29uc3QgQm9yZGVyRGF0YSYKICAgICAgICAgcmV0dXJuIFJlbmRl
clRoZW1lOjppc0NvbnRyb2xTdHlsZWQoc3R5bGUsIGJvcmRlciwgZmlsbCwgYmFja2dyb3VuZENv
bG9yKTsKICAgICB9CiB9Ci0jZW5kaWYKLQotLy8gZm9yIHNvbWUgd2lkZ2V0IHBhaW50aW5nLCB3
ZSBuZWVkIHRvIGZhbGxiYWNrIHRvIFdpbmRvd3Mgc3R5bGUKLVFTdHlsZSogUmVuZGVyVGhlbWVR
dDo6ZmFsbGJhY2tTdHlsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIChtX2ZhbGxiYWNrU3R5bGUp
ID8gbV9mYWxsYmFja1N0eWxlIDogUUFwcGxpY2F0aW9uOjpzdHlsZSgpOwotfQotCi1RU3R5bGUq
IFJlbmRlclRoZW1lUXQ6OnFTdHlsZSgpIGNvbnN0Ci17Ci0jaWYgVVNFKFFUX01PQklMRV9USEVN
RSkKLSAgICByZXR1cm4gZmFsbGJhY2tTdHlsZSgpOwotI2VuZGlmCi0KLSAgICBpZiAobV9wYWdl
KSB7Ci0gICAgICAgIFFXZWJQYWdlQ2xpZW50KiBwYWdlQ2xpZW50ID0gbV9wYWdlLT5jaHJvbWUo
KS0+Y2xpZW50KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpOwotCi0gICAgICAgIGlmIChwYWdlQ2xp
ZW50KQotICAgICAgICAgICAgcmV0dXJuIHBhZ2VDbGllbnQtPnN0eWxlKCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFFBcHBsaWNhdGlvbjo6c3R5bGUoKTsKLX0KIAogU3RyaW5nIFJlbmRlclRoZW1l
UXQ6OmV4dHJhRGVmYXVsdFN0eWxlU2hlZXQoKQogewogICAgIFN0cmluZyByZXN1bHQgPSBSZW5k
ZXJUaGVtZTo6ZXh0cmFEZWZhdWx0U3R5bGVTaGVldCgpOwotI2lmIEVOQUJMRShOT19MSVNUQk9Y
X1JFTkRFUklORykKLSAgICByZXN1bHQgKz0gU3RyaW5nKHRoZW1lUXROb0xpc3Rib3hlc1VzZXJB
Z2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVF0Tm9MaXN0Ym94ZXNVc2VyQWdlbnRTdHlsZVNo
ZWV0KSk7Ci0jZW5kaWYKKyAgICBpZiAodXNlTW9iaWxlVGhlbWUoKSkKKyAgICAgICAgcmVzdWx0
ICs9IFN0cmluZyh0aGVtZVF0Tm9MaXN0Ym94ZXNVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yo
dGhlbWVRdE5vTGlzdGJveGVzVXNlckFnZW50U3R5bGVTaGVldCkpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKQEAgLTM0MywzNiArMTY4LDggQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpzdXBwb3J0
c0NvbnRyb2xUaW50cygpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWludCBSZW5kZXJU
aGVtZVF0OjpmaW5kRnJhbWVMaW5lV2lkdGgoUVN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSNpZm5k
ZWYgUVRfTk9fTElORUVESVQKLSAgICBpZiAoIW1fbGluZUVkaXQpCi0gICAgICAgIG1fbGluZUVk
aXQgPSBuZXcgUUxpbmVFZGl0KCk7Ci0jZW5kaWYKLQotICAgIFFTdHlsZU9wdGlvbkZyYW1lVjIg
b3B0OwotICAgIFFXaWRnZXQqIHdpZGdldCA9IDA7Ci0jaWZuZGVmIFFUX05PX0xJTkVFRElUCi0g
ICAgd2lkZ2V0ID0gbV9saW5lRWRpdDsKLSNlbmRpZgotICAgIHJldHVybiBzdHlsZS0+cGl4ZWxN
ZXRyaWMoUVN0eWxlOjpQTV9EZWZhdWx0RnJhbWVXaWR0aCwgJm9wdCwgd2lkZ2V0KTsKLX0KLQot
c3RhdGljIFFSZWN0IGluZmxhdGVCdXR0b25SZWN0KGNvbnN0IFFSZWN0JiBvcmlnaW5hbFJlY3Qs
IFFTdHlsZSogc3R5bGUpCitRUmVjdCBSZW5kZXJUaGVtZVF0OjppbmZsYXRlQnV0dG9uUmVjdChj
b25zdCBRUmVjdCYgb3JpZ2luYWxSZWN0KSBjb25zdAogewotICAgIFFTdHlsZU9wdGlvbkJ1dHRv
biBvcHRpb247Ci0gICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAg
b3B0aW9uLnJlY3QgPSBvcmlnaW5hbFJlY3Q7Ci0KLSAgICBRUmVjdCBsYXlvdXRSZWN0ID0gc3R5
bGUtPnN1YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sICZvcHRp
b24sIDApOwotICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkgewotICAgICAgICBpbnQgcGFk
ZGluZ0xlZnQgPSBsYXlvdXRSZWN0LmxlZnQoKSAtIG9yaWdpbmFsUmVjdC5sZWZ0KCk7Ci0gICAg
ICAgIGludCBwYWRkaW5nUmlnaHQgPSBvcmlnaW5hbFJlY3QucmlnaHQoKSAtIGxheW91dFJlY3Qu
cmlnaHQoKTsKLSAgICAgICAgaW50IHBhZGRpbmdUb3AgPSBsYXlvdXRSZWN0LnRvcCgpIC0gb3Jp
Z2luYWxSZWN0LnRvcCgpOwotICAgICAgICBpbnQgcGFkZGluZ0JvdHRvbSA9IG9yaWdpbmFsUmVj
dC5ib3R0b20oKSAtIGxheW91dFJlY3QuYm90dG9tKCk7Ci0KLSAgICAgICAgcmV0dXJuIG9yaWdp
bmFsUmVjdC5hZGp1c3RlZCgtcGFkZGluZ0xlZnQsIC1wYWRkaW5nVG9wLCBwYWRkaW5nUmlnaHQs
IHBhZGRpbmdCb3R0b20pOwotICAgIH0KICAgICByZXR1cm4gb3JpZ2luYWxSZWN0OwogfQogCkBA
IC0zODUsNyArMTgyLDcgQEAgdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RSZXBhaW50UmVjdChj
b25zdCBSZW5kZXJPYmplY3QqIG8sIEludFJlY3QmIHJlY3QpCiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgUHVzaEJ1dHRvblBhcnQ6CiAgICAgY2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAgICAgIFFS
ZWN0IGluZmxhdGVkUmVjdCA9IGluZmxhdGVCdXR0b25SZWN0KHJlY3QsIHFTdHlsZSgpKTsKKyAg
ICAgICAgUVJlY3QgaW5mbGF0ZWRSZWN0ID0gaW5mbGF0ZUJ1dHRvblJlY3QocmVjdCk7CiAgICAg
ICAgIHJlY3QgPSBJbnRSZWN0KGluZmxhdGVkUmVjdC54KCksIGluZmxhdGVkUmVjdC55KCksIGlu
ZmxhdGVkUmVjdC53aWR0aCgpLCBpbmZsYXRlZFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICBicmVh
azsKICAgICB9CkBAIC00NTIsOTMgKzI0OSwxMSBAQCBDb2xvciBSZW5kZXJUaGVtZVF0OjpzeXN0
ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3QKIAogaW50IFJlbmRlclRoZW1lUXQ6Om1pbmlt
dW1NZW51TGlzdFNpemUoUmVuZGVyU3R5bGUqKSBjb25zdAogeworICAgIC8vIEZJWE1FOiBMYXRl
ciB3ZSBuZWVkIGEgd2F5IHRvIHF1ZXJ5IHRoZSBVSSBwcm9jZXNzIGZvciB0aGUgZHBpCiAgICAg
Y29uc3QgUUZvbnRNZXRyaWNzICZmbSA9IFFBcHBsaWNhdGlvbjo6Zm9udE1ldHJpY3MoKTsKICAg
ICByZXR1cm4gZm0ud2lkdGgoUUxhdGluMUNoYXIoJ3gnKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGhl
bWVRdDo6Y29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRlclN0eWxlKSBj
b25zdAotewotICAgIFFTaXplIHNpemUoMCwgMCk7Ci0gICAgY29uc3QgUUZvbnRNZXRyaWNzIGZt
KHJlbmRlclN0eWxlLT5mb250KCkuZm9udCgpKTsKLSAgICBRU3R5bGUqIHN0eWxlID0gcVN0eWxl
KCk7Ci0KLSAgICBzd2l0Y2ggKHJlbmRlclN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNl
IFRleHRBcmVhUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRG
aWVsZFBhcnQ6IHsKLSAgICAgICAgaW50IHBhZGRpbmcgPSBmaW5kRnJhbWVMaW5lV2lkdGgoc3R5
bGUpOwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHBhZGRpbmcs
IEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nUmlnaHQoTGVuZ3RoKHBh
ZGRpbmcsIEZpeGVkKSk7Ci0gICAgICAgIHJlbmRlclN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0
aChwYWRkaW5nLCBGaXhlZCkpOwotICAgICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ0JvdHRv
bShMZW5ndGgocGFkZGluZywgRml4ZWQpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBJZiB0aGUgd2lkdGggYW5kIGhl
aWdodCBhcmUgYm90aCBzcGVjaWZpZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLgotICAg
IGlmICghcmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiAhcmVuZGVy
U3R5bGUtPmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2gg
KHJlbmRlclN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKLSAgICBjYXNlIENoZWNrYm94UGFydDogewot
ICAgICAgICBRU3R5bGVPcHRpb24gc3R5bGVPcHRpb247Ci0gICAgICAgIHN0eWxlT3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfU21hbGw7Ci0gICAgICAgIGludCBjaGVja0JveFdpZHRoID0g
c3R5bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fSW5kaWNhdG9yV2lkdGgsICZzdHlsZU9wdGlv
bik7Ci0gICAgICAgIGNoZWNrQm94V2lkdGggKj0gcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20o
KTsKLSAgICAgICAgc2l6ZSA9IFFTaXplKGNoZWNrQm94V2lkdGgsIGNoZWNrQm94V2lkdGgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBSYWRpb1BhcnQ6IHsKLSAgICAgICAgUVN0
eWxlT3B0aW9uIHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX1NtYWxsOwotICAgICAgICBpbnQgcmFkaW9XaWR0aCA9IHN0eWxlLT5waXhlbE1l
dHJpYyhRU3R5bGU6OlBNX0V4Y2x1c2l2ZUluZGljYXRvcldpZHRoLCAmc3R5bGVPcHRpb24pOwot
ICAgICAgICByYWRpb1dpZHRoICo9IHJlbmRlclN0eWxlLT5lZmZlY3RpdmVab29tKCk7Ci0gICAg
ICAgIHNpemUgPSBRU2l6ZShyYWRpb1dpZHRoLCByYWRpb1dpZHRoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotI2lmICFVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIGNhc2UgUHVzaEJ1dHRvblBh
cnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBz
dHlsZU9wdGlvbjsKLSAgICAgICAgc3R5bGVPcHRpb24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9T
bWFsbDsKLSAgICAgICAgUVNpemUgY29udGVudFNpemUgPSBmbS5zaXplKFF0OjpUZXh0U2hvd01u
ZW1vbmljLCBRU3RyaW5nOjpmcm9tTGF0aW4xKCJYIikpOwotICAgICAgICBRU2l6ZSBwdXNoQnV0
dG9uU2l6ZSA9IHN0eWxlLT5zaXplRnJvbUNvbnRlbnRzKFFTdHlsZTo6Q1RfUHVzaEJ1dHRvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
c3R5bGVPcHRpb24sIGNvbnRlbnRTaXplLCAwKTsKLSAgICAgICAgc3R5bGVPcHRpb24ucmVjdCA9
IFFSZWN0KDAsIDAsIHB1c2hCdXR0b25TaXplLndpZHRoKCksIHB1c2hCdXR0b25TaXplLmhlaWdo
dCgpKTsKLSAgICAgICAgUVJlY3QgbGF5b3V0UmVjdCA9IHN0eWxlLT5zdWJFbGVtZW50UmVjdChR
U3R5bGU6OlNFX1B1c2hCdXR0b25MYXlvdXRJdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZzdHlsZU9wdGlvbiwgMCk7Ci0KLSAgICAgICAgLy8g
SWYgdGhlIHN0eWxlIHN1cHBvcnRzIGxheW91dCByZWN0cyB3ZSB1c2UgdGhhdCwgYW5kICBjb21w
ZW5zYXRlIGFjY29yZGluZ2x5Ci0gICAgICAgIC8vIGluIHBhaW50QnV0dG9uKCkgYmVsb3cuCi0g
ICAgICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkKLSAgICAgICAgICAgIHNpemUuc2V0SGVp
Z2h0KGxheW91dFJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzaXpl
LnNldEhlaWdodChwdXNoQnV0dG9uU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgTWVudWxpc3RQYXJ0OiB7Ci0gICAgICAgIFFTdHlsZU9wdGlvbkNvbWJv
Qm94IHN0eWxlT3B0aW9uOwotICAgICAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0
YXRlX1NtYWxsOwotICAgICAgICBpbnQgY29udGVudEhlaWdodCA9IHFNYXgoZm0ubGluZVNwYWNp
bmcoKSwgMTQpICsgMjsKLSAgICAgICAgUVNpemUgbWVudUxpc3RTaXplID0gc3R5bGUtPnNpemVG
cm9tQ29udGVudHMoUVN0eWxlOjpDVF9Db21ib0JveCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0eWxlT3B0aW9uLCBRU2l6ZSgwLCBjb250
ZW50SGVpZ2h0KSwgMCk7Ci0gICAgICAgIHNpemUuc2V0SGVpZ2h0KG1lbnVMaXN0U2l6ZS5oZWln
aHQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBDaGVjayBpcyBmbGF3ZWQsIHNpbmNl
IGl0IGRvZXNuJ3QgdGFrZSBtaW4td2lkdGgvbWF4LXdpZHRoIGludG8gYWNjb3VudC4KLSAgICBp
ZiAocmVuZGVyU3R5bGUtPndpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSAmJiBzaXplLndpZHRo
KCkgPiAwKQotICAgICAgICByZW5kZXJTdHlsZS0+c2V0TWluV2lkdGgoTGVuZ3RoKHNpemUud2lk
dGgoKSwgRml4ZWQpKTsKLSAgICBpZiAocmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzQXV0bygpICYm
IHNpemUuaGVpZ2h0KCkgPiAwKQotICAgICAgICByZW5kZXJTdHlsZS0+c2V0TWluSGVpZ2h0KExl
bmd0aChzaXplLmhlaWdodCgpLCBGaXhlZCkpOwotfQotCiB2b2lkIFJlbmRlclRoZW1lUXQ6OnNl
dENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgY29tcHV0ZVNp
emVCYXNlZE9uU3R5bGUoc3R5bGUpOwpAQCAtNTU5LDExNyArMjc0LDExIEBAIGJvb2wgUmVuZGVy
VGhlbWVRdDo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwg
Y29uc3QgSW50UmVjCiAgICAgcmV0dXJuIHBhaW50QnV0dG9uKG8sIGksIHIpOwogfQogCi12b2lk
IFJlbmRlclRoZW1lUXQ6OmFkanVzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqIHNlbGVj
dG9yLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIERpdGNo
IHRoZSBib3JkZXIuCi0gICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Ci0KLSNpZmRlZiBRX1dTX01B
QwotICAgIGlmIChzdHlsZS0+YXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0KSB7Ci0gICAg
ICAgIC8vIFRoZSBNYWMgcG9ydHMgaWdub3JlIHRoZSBzcGVjaWZpZWQgaGVpZ2h0IGZvciA8aW5w
dXQgdHlwZT0iYnV0dG9uIj4gZWxlbWVudHMKLSAgICAgICAgLy8gdW5sZXNzIGEgYm9yZGVyIGFu
ZC9vciBiYWNrZ3JvdW5kIENTUyBwcm9wZXJ0eSBpcyBhbHNvIHNwZWNpZmllZC4KLSAgICAgICAg
c3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOwotICAgIH0KLSNlbmRpZgotCi0gICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsK
LSAgICBmb250RGVzY3JpcHRpb24uc2V0SXNBYnNvbHV0ZVNpemUodHJ1ZSk7Ci0KLSNpZmRlZiBR
X1dTX01BQyAvLyBVc2UgZml4ZWQgZm9udCBzaXplIGFuZCBmYW1pbHkgb24gTWFjIChsaWtlIFNh
ZmFyaSBkb2VzKQotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTcGVjaWZpZWRTaXplKG1fYnV0dG9u
Rm9udFBpeGVsU2l6ZSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShtX2J1
dHRvbkZvbnRQaXhlbFNpemUpOwotI2Vsc2UKLSAgICBmb250RGVzY3JpcHRpb24uc2V0U3BlY2lm
aWVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldENvbXB1
dGVkU2l6ZShzdHlsZS0+Zm9udFNpemUoKSk7Ci0jZW5kaWYKLQotI2lmICFVU0UoUVRfTU9CSUxF
X1RIRU1FKQotICAgIEZvbnRGYW1pbHkgZm9udEZhbWlseTsKLSAgICBmb250RmFtaWx5LnNldEZh
bWlseShtX2J1dHRvbkZvbnRGYW1pbHkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHko
Zm9udEZhbWlseSk7Ci0gICAgc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihmb250RGVzY3JpcHRp
b24pOwotICAgIHN0eWxlLT5mb250KCkudXBkYXRlKHNlbGVjdG9yLT5mb250U2VsZWN0b3IoKSk7
Ci0jZW5kaWYKLSAgICBzdHlsZS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7Ci0gICAgc2V0QnV0dG9uU2l6ZShzdHlsZSk7Ci0gICAgc2V0QnV0dG9uUGFk
ZGluZyhzdHlsZSk7Ci19Ci0KIHZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0QnV0dG9uU2l6ZShSZW5k
ZXJTdHlsZSogc3R5bGUpIGNvbnN0CiB7CiAgICAgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoc3R5
bGUpOwogfQogCi0jaWYgIVVTRShRVF9NT0JJTEVfVEhFTUUpCi12b2lkIFJlbmRlclRoZW1lUXQ6
OnNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAotewotICAgIFFTdHls
ZU9wdGlvbkJ1dHRvbiBzdHlsZU9wdGlvbjsKLSAgICBzdHlsZU9wdGlvbi5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX1NtYWxsOwotCi0gICAgLy8gRmFrZSBhIGJ1dHRvbiByZWN0IGhlcmUsIHNpbmNl
IHdlJ3JlIGp1c3QgY29tcHV0aW5nIGRlbHRhcwotICAgIFFSZWN0IG9yaWdpbmFsUmVjdCA9IFFS
ZWN0KDAsIDAsIDEwMCwgMzApOwotICAgIHN0eWxlT3B0aW9uLnJlY3QgPSBvcmlnaW5hbFJlY3Q7
Ci0KLSAgICAvLyBEZWZhdWx0IHBhZGRpbmcgaXMgYmFzZWQgb24gdGhlIGJ1dHRvbiBtYXJnaW4g
cGl4ZWwgbWV0cmljCi0gICAgaW50IGJ1dHRvbk1hcmdpbiA9IHFTdHlsZSgpLT5waXhlbE1ldHJp
YyhRU3R5bGU6OlBNX0J1dHRvbk1hcmdpbiwgJnN0eWxlT3B0aW9uLCAwKTsKLSAgICBpbnQgcGFk
ZGluZ0xlZnQgPSBidXR0b25NYXJnaW47Ci0gICAgaW50IHBhZGRpbmdSaWdodCA9IGJ1dHRvbk1h
cmdpbjsKLSAgICBpbnQgcGFkZGluZ1RvcCA9IGJ1dHRvbk1hcmdpbjsKLSAgICBpbnQgcGFkZGlu
Z0JvdHRvbSA9IGJ1dHRvbk1hcmdpbjsKLQotICAgIC8vIFRoZW4gY2hlY2sgaWYgdGhlIHN0eWxl
IHVzZXMgbGF5b3V0IG1hcmdpbnMKLSAgICBRUmVjdCBsYXlvdXRSZWN0ID0gcVN0eWxlKCktPnN1
YkVsZW1lbnRSZWN0KFFTdHlsZTo6U0VfUHVzaEJ1dHRvbkxheW91dEl0ZW0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3R5bGVPcHRpb24sIDApOwot
ICAgIGlmICghbGF5b3V0UmVjdC5pc051bGwoKSkgewotICAgICAgICBRUmVjdCBjb250ZW50c1Jl
Y3QgPSBxU3R5bGUoKS0+c3ViRWxlbWVudFJlY3QoUVN0eWxlOjpTRV9QdXNoQnV0dG9uQ29udGVu
dHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmc3R5bGVPcHRpb24sIDApOwotICAgICAgICBwYWRkaW5nTGVmdCA9IGNvbnRlbnRzUmVjdC5s
ZWZ0KCkgLSBsYXlvdXRSZWN0LmxlZnQoKTsKLSAgICAgICAgcGFkZGluZ1JpZ2h0ID0gbGF5b3V0
UmVjdC5yaWdodCgpIC0gY29udGVudHNSZWN0LnJpZ2h0KCk7Ci0gICAgICAgIHBhZGRpbmdUb3Ag
PSBjb250ZW50c1JlY3QudG9wKCkgLSBsYXlvdXRSZWN0LnRvcCgpOwotCi0gICAgICAgIC8vIENh
bid0IHVzZSB0aGlzIHJpZ2h0IG5vdyBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdGhlIGJhc2VsaW5l
IHRvIGNvbXBlbnNhdGUKLSAgICAgICAgLy8gcGFkZGluZ0JvdHRvbSA9IGxheW91dFJlY3QuYm90
dG9tKCkgLSBjb250ZW50c1JlY3QuYm90dG9tKCk7Ci0gICAgfQotICAgIHN0eWxlLT5zZXRQYWRk
aW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBhZGRp
bmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0LCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRk
aW5nVG9wKExlbmd0aChwYWRkaW5nVG9wLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5n
Qm90dG9tKExlbmd0aChwYWRkaW5nQm90dG9tLCBGaXhlZCkpOwotfQotI2Vsc2UKLXZvaWQgUmVu
ZGVyVGhlbWVRdDo6c2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Ci17
Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN0eWxlLT5zZXRQYWRkaW5n
TGVmdChMZW5ndGgoYnV0dG9uUGFkZGluZ0xlZnQsIEZpeGVkKSk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdSaWdodChMZW5ndGgoYnV0dG9uUGFkZGluZ1JpZ2h0LCBGaXhlZCkpOwotICAgIHN0eWxl
LT5zZXRQYWRkaW5nVG9wKExlbmd0aChidXR0b25QYWRkaW5nVG9wLCBGaXhlZCkpOwotICAgIHN0
eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aChidXR0b25QYWRkaW5nQm90dG9tLCBGaXhlZCkp
OwotfQotI2VuZGlmCi0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRCdXR0b24oUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5
bGVQYWludGVyIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIFFTdHlsZU9wdGlvbkJ1dHRvbiBvcHRpb247Ci0gICAgaW5pdFN0eWxl
T3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOwotICAgIG9wdGlvbi5yZWN0ID0gcjsKLSAgICBvcHRp
b24uc3RhdGUgfD0gUVN0eWxlOjpTdGF0ZV9TbWFsbDsKLQotICAgIENvbnRyb2xQYXJ0IGFwcGVh
cmFuY2UgPSBpbml0aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhvcHRpb24sIG8pOwotICAgIGlm
IChhcHBlYXJhbmNlID09IFB1c2hCdXR0b25QYXJ0IHx8IGFwcGVhcmFuY2UgPT0gQnV0dG9uUGFy
dCkgewotICAgICAgICBvcHRpb24ucmVjdCA9IGluZmxhdGVCdXR0b25SZWN0KG9wdGlvbi5yZWN0
LCBxU3R5bGUoKSk7Ci0gICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9QdXNoQnV0dG9u
LCBvcHRpb24pOwotICAgIH0gZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSBSYWRpb1BhcnQpCi0gICAg
ICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1JhZGlvQnV0dG9uLCBvcHRpb24pOwotICAgIGVs
c2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hlY2tib3hQYXJ0KQotICAgICAgIHAuZHJhd0NvbnRyb2wo
UVN0eWxlOjpDRV9DaGVja0JveCwgb3B0aW9uKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQog
dm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RUZXh0RmllbGRTdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICAvLyBSZXNldHRp
bmcgdGhlIHN0eWxlIGxpa2UgdGhpcyBsZWFkcyB0byBkaWZmZXJlbmNlcyBsaWtlOgpAQCAtNjgx
LDQxICsyOTAsNiBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFRleHRGaWVsZFN0eWxlKENT
U1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsCiAgICAgc3R5bGUtPnJlc2V0Qm9y
ZGVyKCk7CiAgICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOwogICAgIGNvbXB1dGVTaXplQmFzZWRP
blN0eWxlKHN0eWxlKTsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIHN0eWxlLT5zZXRQ
YWRkaW5nTGVmdChMZW5ndGgodGV4dEZpZWxkUGFkZGluZywgRml4ZWQpKTsKLSAgICBzdHlsZS0+
c2V0UGFkZGluZ1JpZ2h0KExlbmd0aCh0ZXh0RmllbGRQYWRkaW5nLCBGaXhlZCkpOwotI2VuZGlm
Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRUZXh0RmllbGQoUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWlu
dGVyIHAodGhpcywgaSk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBRU3R5bGVPcHRpb25GcmFtZVYyIHBhbmVsOwotICAgIGluaXRTdHlsZU9wdGlv
bihwLndpZGdldCwgcGFuZWwpOwotICAgIHBhbmVsLnJlY3QgPSByOwotICAgIHBhbmVsLmxpbmVX
aWR0aCA9IGZpbmRGcmFtZUxpbmVXaWR0aChxU3R5bGUoKSk7Ci0jaWYgVVNFKFFUX01PQklMRV9U
SEVNRSkKLSAgICBpZiAoaXNQcmVzc2VkKG8pKQotICAgICAgICBwYW5lbC5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX1N1bmtlbjsKLSNlbHNlCi0gICAgcGFuZWwuc3RhdGUgfD0gUVN0eWxlOjpTdGF0
ZV9TdW5rZW47Ci0jZW5kaWYKLSAgICBwYW5lbC5mZWF0dXJlcyA9IFFTdHlsZU9wdGlvbkZyYW1l
VjI6Ok5vbmU7Ci0KLSAgICAvLyBHZXQgdGhlIGNvcnJlY3QgdGhlbWUgZGF0YSBmb3IgYSB0ZXh0
IGZpZWxkCi0gICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5
bGVPcHRpb25zKHBhbmVsLCBvKTsKLSAgICBpZiAoYXBwZWFyYW5jZSAhPSBUZXh0RmllbGRQYXJ0
Ci0gICAgICAgICYmIGFwcGVhcmFuY2UgIT0gU2VhcmNoRmllbGRQYXJ0Ci0gICAgICAgICYmIGFw
cGVhcmFuY2UgIT0gVGV4dEFyZWFQYXJ0Ci0gICAgICAgICYmIGFwcGVhcmFuY2UgIT0gTGlzdGJv
eFBhcnQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gTm93IHBhaW50IHRoZSB0ZXh0
IGZpZWxkLgotICAgIHAuZHJhd1ByaW1pdGl2ZShRU3R5bGU6OlBFX1BhbmVsTGluZUVkaXQsIHBh
bmVsKTsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0
VGV4dEFyZWFTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KiBlbGVtZW50KSBjb25zdApAQCAtNzQyLDY2ICszMTYsMTMgQEAgdm9pZCBS
ZW5kZXJUaGVtZVF0OjphZGp1c3RNZW51TGlzdFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEUKIAogICAgIC8vIEFkZCBpbiB0aGUgcGFkZGluZyB0aGF0IHdlJ2Qg
bGlrZSB0byB1c2UuCiAgICAgc2V0UG9wdXBQYWRkaW5nKHN0eWxlKTsKLSNpZiBVU0UoUVRfTU9C
SUxFX1RIRU1FKQotICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgobWVudUxpc3RQYWRk
aW5nLCBGaXhlZCkpOwotI2VuZGlmCi19Ci0KLXZvaWQgUmVuZGVyVGhlbWVRdDo6c2V0UG9wdXBQ
YWRkaW5nKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKLXsKLSAgICBjb25zdCBpbnQgcGFkZGlu
Z0xlZnQgPSA0OwotICAgIGNvbnN0IGludCBwYWRkaW5nUmlnaHQgPSBzdHlsZS0+d2lkdGgoKS5p
c0ZpeGVkKCkgfHwgc3R5bGUtPndpZHRoKCkuaXNQZXJjZW50KCkgPyA1IDogODsKLQotICAgIHN0
eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgocGFkZGluZ0xlZnQsIEZpeGVkKSk7Ci0KLSAgICBR
U3R5bGVPcHRpb25Db21ib0JveCBvcHQ7Ci0gICAgaW50IHcgPSBxU3R5bGUoKS0+cGl4ZWxNZXRy
aWMoUVN0eWxlOjpQTV9CdXR0b25JY29uU2l6ZSwgJm9wdCwgMCk7Ci0gICAgc3R5bGUtPnNldFBh
ZGRpbmdSaWdodChMZW5ndGgocGFkZGluZ1JpZ2h0ICsgdywgRml4ZWQpKTsKLQotICAgIHN0eWxl
LT5zZXRQYWRkaW5nVG9wKExlbmd0aCgyLCBGaXhlZCkpOwotICAgIHN0eWxlLT5zZXRQYWRkaW5n
Qm90dG9tKExlbmd0aCgyLCBGaXhlZCkpOwotfQotCi0KLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFp
bnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcikKLXsKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBpKTsKLSAgICBpZiAoIXAuaXNW
YWxpZCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIFF0U3R5bGVPcHRpb25XZWJDb21i
b0JveCBvcHQobyk7Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHQpOwotICAgIGlu
aXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdCwgbyk7Ci0KLSAgICBJbnRSZWN0IHJlY3Qg
PSByOwotCi0jaWYgZGVmaW5lZChRX1dTX01BQykgJiYgIWRlZmluZWQoUVRfTk9fU1RZTEVfTUFD
KQotICAgIC8vIFFNYWNTdHlsZSBtYWtlcyB0aGUgY29tYm8gYm94ZXMgYSBsaXR0bGUgYml0IHNt
YWxsZXIgdG8gbGVhdmUgc3BhY2UgZm9yIHRoZSBmb2N1cyByZWN0LgotICAgIC8vIEJlY2F1c2Ug
b2YgaXQsIHRoZSBjb21ibyBidXR0b24gaXMgZHJhd24gYXQgYSBwb2ludCB0byB0aGUgbGVmdCBv
ZiB3aGVyZSBpdCB3YXMgZXhwZWN0IHRvIGJlIGFuZCBtYXkgZW5kIHVwCi0gICAgLy8gb3Zlcmxh
cHBlZCB3aXRoIHRoZSB0ZXh0LiBUaGlzIHdpbGwgZm9yY2UgUU1hY1N0eWxlIHRvIGRyYXcgdGhl
IGNvbWJvIGJveCB3aXRoIHRoZSBleHBlY3RlZCB3aWR0aC4KLSAgICBpZiAocW9iamVjdF9jYXN0
PFFNYWNTdHlsZSo+KHAuc3R5bGUpKQotICAgICAgICByZWN0LmluZmxhdGVYKDMpOwotI2VuZGlm
Ci0KLSAgICBjb25zdCBRUG9pbnQgdG9wTGVmdCA9IHJlY3QubG9jYXRpb24oKTsKLSAgICBwLnBh
aW50ZXItPnRyYW5zbGF0ZSh0b3BMZWZ0KTsKLSAgICBvcHQucmVjdC5tb3ZlVG8oUVBvaW50KDAs
IDApKTsKLSAgICBvcHQucmVjdC5zZXRTaXplKHJlY3Quc2l6ZSgpKTsKLQotICAgIHAuZHJhd0Nv
bXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfQ29tYm9Cb3gsIG9wdCk7Ci0gICAgcC5wYWludGVyLT50
cmFuc2xhdGUoLXRvcExlZnQpOwotICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBSZW5kZXJU
aGVtZVF0OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5k
ZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewotI2lmIFVTRShRVF9NT0JJTEVfVEhF
TUUpCi0gICAgLy8gTW9iaWxlIHRoZW1lIHVzZXMgYm9yZGVyIHJhZGl1cy4KLSNlbHNlCiAgICAg
Ly8gV09SS0FST1VORCBiZWNhdXNlIGh0bWwuY3NzIHNwZWNpZmllcyAtd2Via2l0LWJvcmRlci1y
YWRpdXMgZm9yIDxzZWxlY3Q+IHNvIHdlIG92ZXJyaWRlIGl0IGhlcmUKICAgICAvLyBzZWUgYWxz
byBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODM5OQogICAgIHN0eWxl
LT5yZXNldEJvcmRlclJhZGl1cygpOwotI2VuZGlmCiAKICAgICAvLyBIZWlnaHQgaXMgbG9ja2Vk
IHRvIGF1dG8uCiAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoQXV0bykpOwpAQCAtODE1LDI2
ICszMzYsNiBAQCB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdE1lbnVMaXN0QnV0dG9uU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdAogICAgIHNldFBvcHVwUGFkZGluZyhz
dHlsZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZW51TGlzdEJ1dHRvbihSZW5k
ZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiByKQotewotICAgIFN0eWxlUGFpbnRlciBw
KHRoaXMsIGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94IG9wdGlvbihvKTsKLSAgICBpbml0U3R5bGVP
cHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgaW5pdGlhbGl6ZUNvbW1vblFTdHlsZU9wdGlv
bnMob3B0aW9uLCBvKTsKLSAgICBvcHRpb24ucmVjdCA9IHI7Ci0KLSAgICAvLyBmb3IgZHJhd2lu
ZyB0aGUgY29tYm8gYm94IGFycm93LCByZWx5IG9ubHkgb24gdGhlIGZhbGxiYWNrIHN0eWxlCi0g
ICAgcC5zdHlsZSA9IGZhbGxiYWNrU3R5bGUoKTsKLSAgICBvcHRpb24uc3ViQ29udHJvbHMgPSBR
U3R5bGU6OlNDX0NvbWJvQm94QXJyb3c7Ci0gICAgcC5kcmF3Q29tcGxleENvbnRyb2woUVN0eWxl
OjpDQ19Db21ib0JveCwgb3B0aW9uKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogI2lmIEVO
QUJMRShQUk9HUkVTU19UQUcpCiBkb3VibGUgUmVuZGVyVGhlbWVRdDo6YW5pbWF0aW9uUmVwZWF0
SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNv
bnN0CiB7CkBAIC04NDYsMTIzICszNDcsMTcgQEAgZG91YmxlIFJlbmRlclRoZW1lUXQ6OmFuaW1h
dGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqIHJlbmQKICAg
ICByZXR1cm4gMC4xOwogfQogCi1kb3VibGUgUmVuZGVyVGhlbWVRdDo6YW5pbWF0aW9uRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0Ci17
Ci0gICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49IDApCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgUVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMiBvcHRpb247Ci0gICAgb3B0aW9u
LnJlY3Quc2V0U2l6ZShyZW5kZXJQcm9ncmVzcy0+c2l6ZSgpKTsKLSAgICAvLyBGSVhNRTogVW50
aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZp
eGVkLAotICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5pbWF0aW5nIGFjcm9zcyB0aGUg
cHJvZ3Jlc3MgYmFyLgotICAgIHJldHVybiAob3B0aW9uLnJlY3Qud2lkdGgoKSAvIHFTdHlsZSgp
LT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbikp
ICogYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihyZW5kZXJQcm9ncmVzcyk7
Ci19Ci0KIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBz
dHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQotCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBh
aW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLCBjb25z
dCBJbnRSZWN0JiByKQotewotICAgIGlmICghby0+aXNQcm9ncmVzcygpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBpKTsKLSAgICBpZiAoIXAuaXNW
YWxpZCgpKQotICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uUHJvZ3Jlc3NC
YXJWMiBvcHRpb247Ci0gICAgaW5pdFN0eWxlT3B0aW9uKHAud2lkZ2V0LCBvcHRpb24pOwotICAg
IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7Ci0KLSAgICBSZW5kZXJQ
cm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MgPSB0b1JlbmRlclByb2dyZXNzKG8pOwotICAgIG9wdGlv
bi5yZWN0ID0gcjsKLSAgICBvcHRpb24ubWF4aW11bSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCk7Ci0gICAgb3B0aW9uLm1pbmltdW0gPSAwOwotICAgIG9wdGlvbi5wcm9ncmVzcyA9
IChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSAqIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkpOwotCi0gICAgY29uc3QgUVBvaW50IHRvcExlZnQgPSByLmxvY2F0aW9uKCk7Ci0gICAg
cC5wYWludGVyLT50cmFuc2xhdGUodG9wTGVmdCk7Ci0gICAgb3B0aW9uLnJlY3QubW92ZVRvKFFQ
b2ludCgwLCAwKSk7Ci0gICAgb3B0aW9uLnJlY3Quc2V0U2l6ZShyLnNpemUoKSk7Ci0KLSAgICBp
ZiAob3B0aW9uLnByb2dyZXNzIDwgMCkgewotICAgICAgICAvLyBGSVhNRTogVW50aWwgaHR0cDov
L2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAotICAg
ICAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dy
ZXNzIGJhci4KLSAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFyR3Jv
b3ZlLCBvcHRpb24pOwotICAgICAgICBpbnQgY2h1bmtXaWR0aCA9IHFTdHlsZSgpLT5waXhlbE1l
dHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbik7Ci0gICAgICAg
IFFDb2xvciBjb2xvciA9IChvcHRpb24ucGFsZXR0ZS5oaWdobGlnaHQoKSA9PSBvcHRpb24ucGFs
ZXR0ZS5iYWNrZ3JvdW5kKCkpID8gb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkFjdGl2
ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodCkgOiBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6
SGlnaGxpZ2h0KTsKLSAgICAgICAgaWYgKHJlbmRlclByb2dyZXNzLT5zdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBSVEwpCi0gICAgICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0KG9wdGlvbi5yZWN0
LnJpZ2h0KCkgLSBjaHVua1dpZHRoICAtIHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVz
cygpICogb3B0aW9uLnJlY3Qud2lkdGgoKSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVp
Z2h0KCksIGNvbG9yKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcC5wYWludGVyLT5maWxs
UmVjdChyZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5yZWN0Lndp
ZHRoKCksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7Ci0gICAg
fSBlbHNlCi0gICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhciwgb3B0
aW9uKTsKLQotICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKLQotICAgIHJldHVy
biBmYWxzZTsKLX0KICNlbmRpZgogCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50U2xpZGVyVHJh
Y2soUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWlu
dGVyIHAodGhpcywgcGkpOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRp
b24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpT
Q19TbGlkZXJHcm9vdmU7Ci0gICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVD
b21tb25RU3R5bGVPcHRpb25zKG9wdGlvbiwgbyk7Ci0gICAgb3B0aW9uLnJlY3QgPSByOwotICAg
IGlmIChhcHBlYXJhbmNlID09IFNsaWRlclZlcnRpY2FsUGFydCkKLSAgICAgICAgb3B0aW9uLm9y
aWVudGF0aW9uID0gUXQ6OlZlcnRpY2FsOwotICAgIGlmIChpc1ByZXNzZWQobykpCi0gICAgICAg
IG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6OlN0YXRlX1N1bmtlbjsKLQotICAgIHAuZHJhd0NvbXBs
ZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRpb24pOwotCi0gICAgaWYgKG9wdGlvbi5z
dGF0ZSAmIFFTdHlsZTo6U3RhdGVfSGFzRm9jdXMpIHsKLSAgICAgICAgUVN0eWxlT3B0aW9uRm9j
dXNSZWN0IGZvY3VzT3B0aW9uOwotICAgICAgICBmb2N1c09wdGlvbi5yZWN0ID0gcjsKLSAgICAg
ICAgcC5kcmF3UHJpbWl0aXZlKFFTdHlsZTo6UEVfRnJhbWVGb2N1c1JlY3QsIGZvY3VzT3B0aW9u
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KIHZvaWQgUmVuZGVyVGhlbWVRdDo6
YWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0
eWxlLCBFbGVtZW50KikgY29uc3QKIHsKICAgICBzdHlsZS0+c2V0Qm94U2hhZG93KG51bGxwdHIp
OwogfQogCi1ib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBQYWludEluZm8mIHBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGkp
OwotICAgIGlmICghcC5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgUVN0
eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKLSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9w
dGlvbik7Ci0gICAgb3B0aW9uLnN1YkNvbnRyb2xzID0gUVN0eWxlOjpTQ19TbGlkZXJIYW5kbGU7
Ci0gICAgQ29udHJvbFBhcnQgYXBwZWFyYW5jZSA9IGluaXRpYWxpemVDb21tb25RU3R5bGVPcHRp
b25zKG9wdGlvbiwgbyk7Ci0gICAgb3B0aW9uLnJlY3QgPSByOwotICAgIGlmIChhcHBlYXJhbmNl
ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KQotICAgICAgICBvcHRpb24ub3JpZW50YXRpb24g
PSBRdDo6VmVydGljYWw7Ci0gICAgaWYgKGlzUHJlc3NlZChvKSkgewotICAgICAgICBvcHRpb24u
YWN0aXZlU3ViQ29udHJvbHMgPSBRU3R5bGU6OlNDX1NsaWRlckhhbmRsZTsKLSAgICAgICAgb3B0
aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfU3Vua2VuOwotICAgIH0KLQotICAgIHAuZHJhd0Nv
bXBsZXhDb250cm9sKFFTdHlsZTo6Q0NfU2xpZGVyLCBvcHRpb24pOwotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCiB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFNsaWRlclRodW1iU3R5bGUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCogZWxl
bWVudCkgY29uc3QKIHsKICAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShz
ZWxlY3Rvciwgc3R5bGUsIGVsZW1lbnQpOwpAQCAtMTAyOCw4ICs0MjMsOCBAQCBib29sIFJlbmRl
clRoZW1lUXQ6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBj
b25zdCBQYWludEluZgogICAgIC8vIE1ha2Ugc3VyZSB0aGUgc2NhbGVkIGJ1dHRvbiBzdGF5cyBz
cXVhcmUgYW5kIHdpbGwgZml0IGluIGl0cyBwYXJlbnQncyBib3guCiAgICAgaW50IGNhbmNlbEJ1
dHRvblNpemUgPSBxTWluKGlucHV0Q29udGVudEJveC53aWR0aCgpLCBxTWluKGlucHV0Q29udGVu
dEJveC5oZWlnaHQoKSwgci5oZWlnaHQoKSkpOwogICAgIC8vIENhbGN1bGF0ZSBjYW5jZWwgYnV0
dG9uJ3MgY29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGlucHV0IGVsZW1lbnQuCi0gICAgLy8g
Q2VudGVyIHRoZSBidXR0b24gdmVydGljYWxseS4gIFJvdW5kIHVwIHRob3VnaCwgc28gaWYgaXQg
aGFzIHRvIGJlIG9uZSBwaXhlbCBvZmYtY2VudGVyLCBpdCB3aWxsCi0gICAgLy8gYmUgb25lIHBp
eGVsIGNsb3NlciB0byB0aGUgYm90dG9tIG9mIHRoZSBmaWVsZC4gIFRoaXMgdGVuZHMgdG8gbG9v
ayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KKyAgICAvLyBDZW50ZXIgdGhlIGJ1dHRvbiB2ZXJ0aWNh
bGx5LiBSb3VuZCB1cCB0aG91Z2gsIHNvIGlmIGl0IGhhcyB0byBiZSBvbmUgcGl4ZWwgb2ZmLWNl
bnRlciwgaXQgd2lsbAorICAgIC8vIGJlIG9uZSBwaXhlbCBjbG9zZXIgdG8gdGhlIGJvdHRvbSBv
ZiB0aGUgZmllbGQuIFRoaXMgdGVuZHMgdG8gbG9vayBiZXR0ZXIgd2l0aCB0aGUgdGV4dC4KICAg
ICBJbnRSZWN0IGNhbmNlbEJ1dHRvblJlY3Qoby0+b2Zmc2V0RnJvbUFuY2VzdG9yQ29udGFpbmVy
KGlucHV0UmVuZGVyQm94KS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnB1dENvbnRlbnRCb3gueSgpICsgKGlucHV0Q29udGVudEJveC5oZWlnaHQoKSAtIGNhbmNlbEJ1
dHRvblNpemUgKyAxKSAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1
dHRvblNpemUsIGNhbmNlbEJ1dHRvblNpemUpOwpAQCAtMTA3OCw2MCArNDczLDYgQEAgdm9pZCBS
ZW5kZXJUaGVtZVF0OjphZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9y
KiBzZWxlY3RvciwgUmVuZGUKICAgICBzdHlsZS0+c2V0V2lkdGgoTGVuZ3RoKHdpZHRoLCBGaXhl
ZCkpOwogICAgIHN0eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgod2lkdGgsIEZpeGVkKSk7CiB9Ci0K
LWJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICBTdHlsZVBhaW50ZXIgcCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkp
Ci0gICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBRU3R5bGVPcHRpb25TcGluQm94IG9wdGlvbjsK
LSAgICBpbml0U3R5bGVPcHRpb24ocC53aWRnZXQsIG9wdGlvbik7Ci0gICAgb3B0aW9uLnN1YkNv
bnRyb2xzID0gUVN0eWxlOjpTQ19TcGluQm94VXAgfCBRU3R5bGU6OlNDX1NwaW5Cb3hEb3duOwot
ICAgIGlmICghaXNSZWFkT25seUNvbnRyb2wobykpIHsKLSAgICAgICAgaWYgKGlzRW5hYmxlZChv
KSkKLSAgICAgICAgICAgIG9wdGlvbi5zdGVwRW5hYmxlZCA9IFFBYnN0cmFjdFNwaW5Cb3g6OlN0
ZXBVcEVuYWJsZWQgfCBRQWJzdHJhY3RTcGluQm94OjpTdGVwRG93bkVuYWJsZWQ7Ci0gICAgICAg
IGlmIChpc1ByZXNzZWQobykpIHsKLSAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5bGU6
OlN0YXRlX1N1bmtlbjsKLSAgICAgICAgICAgIGlmIChpc1NwaW5VcEJ1dHRvblBhcnRQcmVzc2Vk
KG8pKQotICAgICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6
U0NfU3BpbkJveFVwOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG9wdGlvbi5h
Y3RpdmVTdWJDb250cm9scyA9IFFTdHlsZTo6U0NfU3BpbkJveERvd247Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgLy8gUmVuZGVyIHRoZSBzcGluIGJ1dHRvbnMgZm9yIExUUiBvciBSVEwgYWNjb3Jk
aW5nbHkuCi0gICAgb3B0aW9uLmRpcmVjdGlvbiA9IG8tPnN0eWxlKCktPmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSA/IFF0OjpMZWZ0VG9SaWdodCA6IFF0OjpSaWdodFRvTGVmdDsKLQotICAgIElu
dFJlY3QgYnV0dG9uUmVjdCA9IHJlY3Q7Ci0gICAgLy8gRGVmYXVsdCB0byBtb3ZpbmcgdGhlIGJ1
dHRvbnMgYSBsaXR0bGUgYml0IHdpdGhpbiB0aGUgZWRpdG9yIGZyYW1lLgotICAgIGludCBpbmZs
YXRlWCA9IC0yOwotICAgIGludCBpbmZsYXRlWSA9IC0yOwotI2lmIGRlZmluZWQoUV9XU19NQUMp
ICYmICFkZWZpbmVkKFFUX05PX1NUWUxFX01BQykKLSAgICAvLyBRTWFjU3R5bGUgd2lsbCBwb3Np
dGlvbiB0aGUgYXF1YSBidXR0b25zIGZsdXNoIHRvIHRoZSByaWdodC4KLSAgICAvLyBUaGlzIHdp
bGwgbW92ZSB0aGVtIG1vcmUgd2l0aGluIHRoZSBjb250cm9sIGZvciBiZXR0ZXIgc3R5bGUsIGEg
bGEKLSAgICAvLyBDaHJvbWl1bSBsb29rICYgZmVlbC4KLSAgICBpZiAocW9iamVjdF9jYXN0PFFN
YWNTdHlsZSo+KHAuc3R5bGUpKSB7Ci0gICAgICAgIGluZmxhdGVYID0gLTQ7Ci0gICAgICAgIC8v
IFJlbmRlciBtaW5pIGFxdWEgc3BpbiBidXR0b25zIGZvciBRTWFjU3R5bGUgdG8gZml0IG5pY2Vs
eSBpbnRvCi0gICAgICAgIC8vIHRoZSBlZGl0b3IgYXJlYSwgbGlrZSBDaHJvbWl1bS4KLSAgICAg
ICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTWluaTsKLSAgICB9Ci0jZW5kaWYKLSNp
ZiBkZWZpbmVkKFFfV1NfWDExKSAmJiAhZGVmaW5lZChRVF9OT19TVFlMRV9QTEFTVElRVUUpCi0g
ICAgLy8gUVBsYXN0aXF1ZVN0eWxlIGxvb2tzIGJlc3Qgd2hlbiB0aGUgc3BpbiBidXR0b25zIGFy
ZSBmbHVzaCB3aXRoIHRoZSBmcmFtZSdzIGVkZ2UuCi0gICAgaWYgKHFvYmplY3RfY2FzdDxRUGxh
c3RpcXVlU3R5bGUqPihwLnN0eWxlKSkgewotICAgICAgICBpbmZsYXRlWCA9IDA7Ci0gICAgICAg
IGluZmxhdGVZID0gMDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVgo
aW5mbGF0ZVgpOwotICAgIGJ1dHRvblJlY3QuaW5mbGF0ZVkoaW5mbGF0ZVkpOwotICAgIG9wdGlv
bi5yZWN0ID0gYnV0dG9uUmVjdDsKLQotICAgIHAuZHJhd0NvbXBsZXhDb250cm9sKFFTdHlsZTo6
Q0NfU3BpbkJveCwgb3B0aW9uKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19CiAjZW5kaWYKIAogYm9v
bCBSZW5kZXJUaGVtZVF0OjpzdXBwb3J0c0ZvY3VzKENvbnRyb2xQYXJ0IGFwcGVhcmFuY2UpIGNv
bnN0CkBAIC0xMTU1LDExICs0OTYsNiBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnN1cHBvcnRzRm9j
dXMoQ29udHJvbFBhcnQgYXBwZWFyYW5jZSkgY29uc3QKIAogdm9pZCBSZW5kZXJUaGVtZVF0Ojpz
ZXRQYWxldHRlRnJvbVBhZ2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYgcGFsZXR0ZSkgY29uc3QK
IHsKLSNpZiBVU0UoUVRfTU9CSUxFX1RIRU1FKQotICAgIHN0YXRpYyBRUGFsZXR0ZSBsaWdodEdy
YXlQYWxldHRlKFF0OjpsaWdodEdyYXkpOwotICAgIHBhbGV0dGUgPSBsaWdodEdyYXlQYWxldHRl
OwotICAgIHJldHVybjsKLSNlbmRpZgogICAgIC8vIElmIHRoZSB3ZWJ2aWV3IGhhcyBhIGN1c3Rv
bSBwYWxldHRlLCB1c2UgaXQKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3NSw2MyArNTExLDYgQEAgdm9pZCBSZW5kZXJUaGVtZVF0OjpzZXRQYWxldHRlRnJvbVBhZ2VD
bGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYgcGFsZXR0ZSkgY29uc3QKICAgICBwYWxldHRlID0gcGFn
ZUNsaWVudC0+cGFsZXR0ZSgpOwogfQogCi1Db250cm9sUGFydCBSZW5kZXJUaGVtZVF0Ojppbml0
aWFsaXplQ29tbW9uUVN0eWxlT3B0aW9ucyhRU3R5bGVPcHRpb24mIG9wdGlvbiwgUmVuZGVyT2Jq
ZWN0KiBvKSBjb25zdAotewotICAgIC8vIERlZmF1bHQgYml0czogbm8gZm9jdXMsIG5vIG1vdXNl
IG92ZXIKLSAgICBvcHRpb24uc3RhdGUgJj0gfihRU3R5bGU6OlN0YXRlX0hhc0ZvY3VzIHwgUVN0
eWxlOjpTdGF0ZV9Nb3VzZU92ZXIpOwotCi0gICAgaWYgKGlzUmVhZE9ubHlDb250cm9sKG8pKQot
ICAgICAgICAvLyBSZWFkb25seSBpcyBzdXBwb3J0ZWQgb24gdGV4dGZpZWxkcy4KLSAgICAgICAg
b3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfUmVhZE9ubHk7Ci0KLSAgICBvcHRpb24uZGly
ZWN0aW9uID0gUXQ6OkxlZnRUb1JpZ2h0OwotCi0gICAgaWYgKGlzSG92ZXJlZChvKSkKLSAgICAg
ICAgb3B0aW9uLnN0YXRlIHw9IFFTdHlsZTo6U3RhdGVfTW91c2VPdmVyOwotCi0gICAgc2V0UGFs
ZXR0ZUZyb21QYWdlQ2xpZW50SWZFeGlzdHMob3B0aW9uLnBhbGV0dGUpOwotCi0gICAgaWYgKCFp
c0VuYWJsZWQobykpIHsKLSAgICAgICAgb3B0aW9uLnBhbGV0dGUuc2V0Q3VycmVudENvbG9yR3Jv
dXAoUVBhbGV0dGU6OkRpc2FibGVkKTsKLSAgICAgICAgb3B0aW9uLnN0YXRlICY9IH5RU3R5bGU6
OlN0YXRlX0VuYWJsZWQ7Ci0gICAgfQotCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gby0+c3R5
bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gTm9Db250cm9sUGFydDsKLQot
ICAgIENvbnRyb2xQYXJ0IHJlc3VsdCA9IHN0eWxlLT5hcHBlYXJhbmNlKCk7Ci0gICAgaWYgKHN1
cHBvcnRzRm9jdXMocmVzdWx0KSAmJiBpc0ZvY3VzZWQobykpIHsKLSAgICAgICAgb3B0aW9uLnN0
YXRlIHw9IFFTdHlsZTo6U3RhdGVfSGFzRm9jdXM7Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBR
U3R5bGU6OlN0YXRlX0tleWJvYXJkRm9jdXNDaGFuZ2U7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxl
LT5kaXJlY3Rpb24oKSA9PSBXZWJDb3JlOjpSVEwpCi0gICAgICAgIG9wdGlvbi5kaXJlY3Rpb24g
PSBRdDo6UmlnaHRUb0xlZnQ7Ci0KLSAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgIGNhc2UgUHVz
aEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBTcXVhcmVCdXR0b25QYXJ0OgotICAgIGNhc2UgQnV0dG9u
UGFydDoKLSAgICBjYXNlIEJ1dHRvbkJldmVsUGFydDoKLSAgICBjYXNlIExpc3RJdGVtUGFydDoK
LSAgICBjYXNlIE1lbnVsaXN0QnV0dG9uUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUmVzdWx0
c0J1dHRvblBhcnQ6Ci0gICAgY2FzZSBTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblBhcnQ6IHsKLSAg
ICAgICAgaWYgKGlzUHJlc3NlZChvKSkKLSAgICAgICAgICAgIG9wdGlvbi5zdGF0ZSB8PSBRU3R5
bGU6OlN0YXRlX1N1bmtlbjsKLSAgICAgICAgZWxzZSBpZiAocmVzdWx0ID09IFB1c2hCdXR0b25Q
YXJ0IHx8IHJlc3VsdCA9PSBCdXR0b25QYXJ0KQotICAgICAgICAgICAgb3B0aW9uLnN0YXRlIHw9
IFFTdHlsZTo6U3RhdGVfUmFpc2VkOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBS
YWRpb1BhcnQ6Ci0gICAgY2FzZSBDaGVja2JveFBhcnQ6Ci0gICAgICAgIG9wdGlvbi5zdGF0ZSB8
PSAoaXNDaGVja2VkKG8pID8gUVN0eWxlOjpTdGF0ZV9PbiA6IFFTdHlsZTo6U3RhdGVfT2ZmKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiAjaWYgRU5BQkxFKFZJREVPKQogCiBT
dHJpbmcgUmVuZGVyVGhlbWVRdDo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCkBAIC0x
MzExLDIwICs1OTAsMjAgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhRnVsbHNjcmVl
bkJ1dHRvbihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYKICAgICBpZiAoIW1lZGlh
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3R5bGVQYWludGVyIHAodGhp
cywgcGFpbnRJbmZvKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgIFFTaGFyZWRQb2ludGVy
PFN0eWxlUGFpbnRlcj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOworICAgIGlmIChw
LmlzTnVsbCgpIHx8ICFwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
cC5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwor
ICAgIHAtPnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1
ZSk7CiAKLSAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworICAgIHBhaW50
TWVkaWFCYWNrZ3JvdW5kKHAtPnBhaW50ZXIsIHIpOwogCi0gICAgV29ybGRNYXRyaXhUcmFuc2Zv
cm1lciB0cmFuc2Zvcm1lcihwLnBhaW50ZXIsIG8sIHIpOworICAgIFdvcmxkTWF0cml4VHJhbnNm
b3JtZXIgdHJhbnNmb3JtZXIocC0+cGFpbnRlciwgbywgcik7CiAgICAgY29uc3QgUVBvaW50RiBh
cnJvd1BvbHlnb25bOV0gPSB7IFFQb2ludEYoMjAsIDApLCBRUG9pbnRGKDEwMCwgMCksIFFQb2lu
dEYoMTAwLCA4MCksCiAgICAgICAgICAgICBRUG9pbnRGKDgwLCA4MCksIFFQb2ludEYoODAsIDMw
KSwgUVBvaW50RigxMCwgMTAwKSwgUVBvaW50RigwLCA5MCksIFFQb2ludEYoNzAsIDIwKSwgUVBv
aW50RigyMCwgMjApfTsKIAotICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9s
Rm9yZWdyb3VuZENvbG9yKG8pKTsKLSAgICBwLnBhaW50ZXItPmRyYXdQb2x5Z29uKGFycm93UG9s
eWdvbiwgOSk7CisgICAgcC0+cGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdy
b3VuZENvbG9yKG8pKTsKKyAgICBwLT5wYWludGVyLT5kcmF3UG9seWdvbihhcnJvd1BvbHlnb24s
IDkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMTMzNSwyMCArNjE0LDIwIEBAIGJvb2wg
UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYU11dGVCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIHBhaW50CiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50SW5mbyk7Ci0gICAgaWYg
KCFwLmlzVmFsaWQoKSkKKyAgICBRU2hhcmVkUG9pbnRlcjxTdHlsZVBhaW50ZXI+IHAgPSBnZXRT
dHlsZVBhaW50ZXIocGFpbnRJbmZvKTsKKyAgICBpZiAocC5pc051bGwoKSB8fCAhcC0+aXNWYWxp
ZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHAucGFpbnRlci0+c2V0UmVuZGVySGlu
dChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwLT5wYWludGVyLT5zZXRSZW5k
ZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwogCi0gICAgcGFpbnRNZWRpYUJh
Y2tncm91bmQocC5wYWludGVyLCByKTsKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLT5wYWlu
dGVyLCByKTsKIAotICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIocC5wYWlu
dGVyLCBvLCByKTsKKyAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyKHAtPnBh
aW50ZXIsIG8sIHIpOwogICAgIGNvbnN0IFFQb2ludEYgc3BlYWtlclBvbHlnb25bNl0gPSB7IFFQ
b2ludEYoMjAsIDMwKSwgUVBvaW50Rig1MCwgMzApLCBRUG9pbnRGKDgwLCAwKSwKICAgICAgICAg
ICAgIFFQb2ludEYoODAsIDEwMCksIFFQb2ludEYoNTAsIDcwKSwgUVBvaW50RigyMCwgNzApfTsK
IAotICAgIHAucGFpbnRlci0+c2V0QnJ1c2gobWVkaWFFbGVtZW50LT5tdXRlZCgpID8gUXQ6OmRh
cmtSZWQgOiBnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IobykpOwotICAgIHAucGFpbnRl
ci0+ZHJhd1BvbHlnb24oc3BlYWtlclBvbHlnb24sIDYpOworICAgIHAtPnBhaW50ZXItPnNldEJy
dXNoKG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IFF0OjpkYXJrUmVkIDogZ2V0TWVkaWFDb250cm9s
Rm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBwLT5wYWludGVyLT5kcmF3UG9seWdvbihzcGVha2Vy
UG9seWdvbiwgNik7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMzU5LDIyICs2MzgsMjIg
QEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludE1lZGlhUGxheUJ1dHRvbihSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbnQKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsK
LSAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4g
cCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOworICAgIGlmIChwLmlzTnVsbCgpIHx8ICFw
LT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcC5wYWludGVyLT5zZXRS
ZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworICAgIHAtPnBhaW50ZXIt
PnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CiAKLSAgICBwYWlu
dE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworICAgIHBhaW50TWVkaWFCYWNrZ3JvdW5k
KHAtPnBhaW50ZXIsIHIpOwogCi0gICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1lciB0cmFuc2Zvcm1l
cihwLnBhaW50ZXIsIG8sIHIpOwotICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250
cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKKyAgICBXb3JsZE1hdHJpeFRyYW5zZm9ybWVyIHRyYW5z
Zm9ybWVyKHAtPnBhaW50ZXIsIG8sIHIpOworICAgIHAtPnBhaW50ZXItPnNldEJydXNoKGdldE1l
ZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcihvKSk7CiAgICAgaWYgKG1lZGlhRWxlbWVudC0+Y2Fu
UGxheSgpKSB7CiAgICAgICAgIGNvbnN0IFFQb2ludEYgcGxheVBvbHlnb25bM10gPSB7IFFQb2lu
dEYoMCwgMCksIFFQb2ludEYoMTAwLCA1MCksIFFQb2ludEYoMCwgMTAwKX07Ci0gICAgICAgIHAu
cGFpbnRlci0+ZHJhd1BvbHlnb24ocGxheVBvbHlnb24sIDMpOworICAgICAgICBwLT5wYWludGVy
LT5kcmF3UG9seWdvbihwbGF5UG9seWdvbiwgMyk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcC5w
YWludGVyLT5kcmF3UmVjdCgwLCAwLCAzMCwgMTAwKTsKLSAgICAgICAgcC5wYWludGVyLT5kcmF3
UmVjdCg3MCwgMCwgMzAsIDEwMCk7CisgICAgICAgIHAtPnBhaW50ZXItPmRyYXdSZWN0KDAsIDAs
IDMwLCAxMDApOworICAgICAgICBwLT5wYWludGVyLT5kcmF3UmVjdCg3MCwgMCwgMzAsIDEwMCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTM5NCwxMiArNjczLDEyIEBAIGJvb2wg
UmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsCiAKIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYUN1cnJl
bnRUaW1lKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0
IEludFJlY3QmIHIpCiB7Ci0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFpbnRJbmZvKTsKLSAg
ICBpZiAoIXAuaXNWYWxpZCgpKQorICAgIFFTaGFyZWRQb2ludGVyPFN0eWxlUGFpbnRlcj4gcCA9
IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOworICAgIGlmIChwLmlzTnVsbCgpIHx8ICFwLT5p
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcC5wYWludGVyLT5zZXRSZW5k
ZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwotICAgIHBhaW50TWVkaWFCYWNr
Z3JvdW5kKHAucGFpbnRlciwgcik7CisgICAgcC0+cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFp
bnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLT5w
YWludGVyLCByKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTE0MTYsMTMgKzY5NSwxMyBA
QCBTdHJpbmcgUmVuZGVyVGhlbWVRdDo6Zm9ybWF0TWVkaWFDb250cm9sc1JlbWFpbmluZ1RpbWUo
ZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0CiAKIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRp
YVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCAqbywgY29uc3QgUGFpbnRJbmZvICZwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QgJnIpCiB7Ci0gICAgU3R5bGVQYWludGVyIHAodGhpcywgcGFp
bnRJbmZvKTsKLSAgICBpZiAoIXAuaXNWYWxpZCgpKQorICAgIFFTaGFyZWRQb2ludGVyPFN0eWxl
UGFpbnRlcj4gcCA9IGdldFN0eWxlUGFpbnRlcihwYWludEluZm8pOworICAgIGlmIChwLmlzTnVs
bCgpIHx8ICFwLT5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcC5wYWlu
dGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworICAgIHAt
PnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CiAK
LSAgICBwYWludE1lZGlhQmFja2dyb3VuZChwLnBhaW50ZXIsIHIpOworICAgIHBhaW50TWVkaWFC
YWNrZ3JvdW5kKHAtPnBhaW50ZXIsIHIpOwogCiAgICAgaWYgKCFvLT5pc1NsaWRlcigpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNDQyLDggKzcyMSw4IEBAIGJvb2wgUmVuZGVyVGhlbWVR
dDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJlbmRlck9iamVjdCAqbywgY29uc3QgUGFp
bnRJbmZvCiAgICAgY29uc3QgUUNvbG9yIHNjYWxlQ29sb3IoaGlnaGxpZ2h0VGV4dC5yZWQoKSwg
aGlnaGxpZ2h0VGV4dC5ncmVlbigpLCBoaWdobGlnaHRUZXh0LmJsdWUoKSwgbWVkaWFDb250cm9s
c0Jhc2VsaW5lT3BhY2l0eSgpICogMjU1KTsKIAogICAgIC8vIERyYXcgdGhlIG91dGVyIHJlY3Rh
bmdsZQotICAgIHAucGFpbnRlci0+c2V0QnJ1c2goc2NhbGVDb2xvcik7Ci0gICAgcC5wYWludGVy
LT5kcmF3UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOworICAgIHAtPnBhaW50ZXItPnNl
dEJydXNoKHNjYWxlQ29sb3IpOworICAgIHAtPnBhaW50ZXItPmRyYXdSZWN0KGxlZnQsIHRvcCwg
d2lkdGgsIGhlaWdodCk7CiAKICAgICBpZiAoIW8tPm5vZGUoKSB8fCAhby0+bm9kZSgpLT5oYXNU
YWdOYW1lKGlucHV0VGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTQ1NSwxNyArNzM0
LDE3IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCAqbywgY29uc3QgUGFpbnRJbmZvCiAgICAgdG9wICs9IGIuaGVpZ2h0KCkgLSBo
ZWlnaHQ7CiAKICAgICAvLyBEcmF3IHRoZSBpbm5lciByZWN0YW5nbGUKLSAgICBwLnBhaW50ZXIt
PnNldFBlbihRdDo6Tm9QZW4pOwotICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250
cm9sRm9yZWdyb3VuZENvbG9yKG8pKTsKLSAgICBwLnBhaW50ZXItPmRyYXdSZWN0KGxlZnQsIHRv
cCwgd2lkdGgsIGhlaWdodCk7CisgICAgcC0+cGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7Cisg
ICAgcC0+cGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKG8p
KTsKKyAgICBwLT5wYWludGVyLT5kcmF3UmVjdChsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwog
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFW
b2x1bWVTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QgKm8sIGNvbnN0IFBhaW50SW5mbyAmcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0ICZyKQogewotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBhaW50
SW5mbyk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICBRU2hhcmVkUG9pbnRlcjxTdHlsZVBh
aW50ZXI+IHAgPSBnZXRTdHlsZVBhaW50ZXIocGFpbnRJbmZvKTsKKyAgICBpZiAocC5pc051bGwo
KSB8fCAhcC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIE5vdGhp
bmcgdG8gZHJhdyBoZXJlLCB0aGlzIGlzIGFsbCBkb25lIGluIHRoZSB0cmFjawpAQCAtMTQ3OCwy
OCArNzU3LDI4IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRNZWRpYVNsaWRlclRyYWNrKFJl
bmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBwYWluCiAgICAgaWYgKCFtZWRpYUVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIHBh
aW50SW5mbyk7Ci0gICAgaWYgKCFwLmlzVmFsaWQoKSkKKyAgICBRU2hhcmVkUG9pbnRlcjxTdHls
ZVBhaW50ZXI+IHAgPSBnZXRTdHlsZVBhaW50ZXIocGFpbnRJbmZvKTsKKyAgICBpZiAocC5pc051
bGwoKSB8fCAhcC0+aXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHAucGFp
bnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBw
LT5wYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOwog
Ci0gICAgcGFpbnRNZWRpYUJhY2tncm91bmQocC5wYWludGVyLCByKTsKKyAgICBwYWludE1lZGlh
QmFja2dyb3VuZChwLT5wYWludGVyLCByKTsKIAogICAgIGlmIChNZWRpYVBsYXllciogcGxheWVy
ID0gbWVkaWFFbGVtZW50LT5wbGF5ZXIoKSkgewogICAgICAgICAvLyBHZXQgdGhlIGJ1ZmZlcmVk
IHBhcnRzIG9mIHRoZSBtZWRpYQotICAgICAgICBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IGJ1ZmZl
cmVkID0gcGxheWVyLT5idWZmZXJlZCgpOworICAgICAgICBSZWZQdHI8VGltZVJhbmdlcz4gYnVm
ZmVyZWQgPSBwbGF5ZXItPmJ1ZmZlcmVkKCk7CiAgICAgICAgIGlmIChidWZmZXJlZC0+bGVuZ3Ro
KCkgPiAwICYmIHBsYXllci0+ZHVyYXRpb24oKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjppbmZpbml0eSgpKSB7CiAgICAgICAgICAgICAvLyBTZXQgdGhlIHRyYW5zZm9ybSBhbmQgYnJ1
c2gKLSAgICAgICAgICAgIFdvcmxkTWF0cml4VHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIocC5wYWlu
dGVyLCBvLCByKTsKLSAgICAgICAgICAgIHAucGFpbnRlci0+c2V0QnJ1c2goZ2V0TWVkaWFDb250
cm9sRm9yZWdyb3VuZENvbG9yKCkpOworICAgICAgICAgICAgV29ybGRNYXRyaXhUcmFuc2Zvcm1l
ciB0cmFuc2Zvcm1lcihwLT5wYWludGVyLCBvLCByKTsKKyAgICAgICAgICAgIHAtPnBhaW50ZXIt
PnNldEJydXNoKGdldE1lZGlhQ29udHJvbEZvcmVncm91bmRDb2xvcigpKTsKIAogICAgICAgICAg
ICAgLy8gUGFpbnQgZWFjaCBidWZmZXJlZCBzZWN0aW9uCiAgICAgICAgICAgICBFeGNlcHRpb25D
b2RlIGV4OwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXJlZC0+bGVuZ3Ro
KCk7IGkrKykgewogICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0WCA9IChidWZmZXJlZC0+c3Rh
cnQoaSwgZXgpIC8gcGxheWVyLT5kdXJhdGlvbigpKSAqIDEwMDsKICAgICAgICAgICAgICAgICBm
bG9hdCB3aWR0aCA9ICgoYnVmZmVyZWQtPmVuZChpLCBleCkgLyBwbGF5ZXItPmR1cmF0aW9uKCkp
ICogMTAwKSAtIHN0YXJ0WDsKLSAgICAgICAgICAgICAgICBwLnBhaW50ZXItPmRyYXdSZWN0KHN0
YXJ0WCwgMzcsIHdpZHRoLCAyNik7CisgICAgICAgICAgICAgICAgcC0+cGFpbnRlci0+ZHJhd1Jl
Y3Qoc3RhcnRYLCAzNywgd2lkdGgsIDI2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KQEAgLTE1MTYsMTUgKzc5NSwxNSBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50TWVkaWFT
bGlkZXJUaHVtYihSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGFpbgogICAgIGlm
ICghbWVkaWFFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBTdHlsZVBhaW50
ZXIgcCh0aGlzLCBwYWludEluZm8pOwotICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgUVNoYXJl
ZFBvaW50ZXI8U3R5bGVQYWludGVyPiBwID0gZ2V0U3R5bGVQYWludGVyKHBhaW50SW5mbyk7Cisg
ICAgaWYgKHAuaXNOdWxsKCkgfHwgIXAtPmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBwLnBhaW50ZXItPnNldFJlbmRlckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywg
dHJ1ZSk7CisgICAgcC0+cGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6QW50aWFsaWFz
aW5nLCB0cnVlKTsKIAotICAgIHAucGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7Ci0gICAgcC5w
YWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3IoaG9zdE5vZGUt
PnJlbmRlcmVyKCkpKTsKLSAgICBwLnBhaW50ZXItPmRyYXdSZWN0KHIueCgpLCByLnkoKSwgci53
aWR0aCgpLCByLmhlaWdodCgpKTsKKyAgICBwLT5wYWludGVyLT5zZXRQZW4oUXQ6Ok5vUGVuKTsK
KyAgICBwLT5wYWludGVyLT5zZXRCcnVzaChnZXRNZWRpYUNvbnRyb2xGb3JlZ3JvdW5kQ29sb3Io
aG9zdE5vZGUtPnJlbmRlcmVyKCkpKTsKKyAgICBwLT5wYWludGVyLT5kcmF3UmVjdChyLngoKSwg
ci55KCksIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBA
IC0xNTQ2LDQyICs4MjUsMjIgQEAgdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RTbGlkZXJUaHVt
YlNpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIH0gZWxzZSBpZiAocGFydCA9PSBN
ZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCkgewogICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aCh2b2x1bWVUaHVtYkhlaWdodCwgRml4ZWQpKTsKICAgICAgICAgc3R5bGUtPnNldFdpZHRo
KExlbmd0aCh2b2x1bWVUaHVtYldpZHRoLCBGaXhlZCkpOwotICAgIH0gZWxzZSBpZiAocGFydCA9
PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNh
bFBhcnQpIHsKLSAgICAgICAgUVN0eWxlT3B0aW9uU2xpZGVyIG9wdGlvbjsKLSAgICAgICAgaWYg
KHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCi0gICAgICAgICAgICBvcHRpb24ub3Jp
ZW50YXRpb24gPSBRdDo6VmVydGljYWw7Ci0KLSAgICAgICAgUVN0eWxlKiBxc3R5bGUgPSBxU3R5
bGUoKTsKLQotICAgICAgICBpbnQgbGVuZ3RoID0gcXN0eWxlLT5waXhlbE1ldHJpYyhRU3R5bGU6
OlBNX1NsaWRlckxlbmd0aCwgJm9wdGlvbik7Ci0gICAgICAgIGludCB0aGlja25lc3MgPSBxc3R5
bGUtPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1fU2xpZGVyVGhpY2tuZXNzLCAmb3B0aW9uKTsKLSAg
ICAgICAgaWYgKG9wdGlvbi5vcmllbnRhdGlvbiA9PSBRdDo6VmVydGljYWwpIHsKLSAgICAgICAg
ICAgIHN0eWxlLT5zZXRXaWR0aChMZW5ndGgodGhpY2tuZXNzLCBGaXhlZCkpOwotICAgICAgICAg
ICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgobGVuZ3RoLCBGaXhlZCkpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChsZW5ndGgsIEZpeGVkKSk7
Ci0gICAgICAgICAgICBzdHlsZS0+c2V0SGVpZ2h0KExlbmd0aCh0aGlja25lc3MsIEZpeGVkKSk7
Ci0gICAgICAgIH0KICAgICB9CiB9CiAKIGRvdWJsZSBSZW5kZXJUaGVtZVF0OjpjYXJldEJsaW5r
SW50ZXJ2YWwoKSBjb25zdAogewotICAgIHJldHVybiAgUUFwcGxpY2F0aW9uOjpjdXJzb3JGbGFz
aFRpbWUoKSAvIDEwMDAuMCAvIDIuMDsKKyAgICByZXR1cm4gUUFwcGxpY2F0aW9uOjpjdXJzb3JG
bGFzaFRpbWUoKSAvIDEwMDAuMCAvIDIuMDsKIH0KIAotU3RyaW5nIFJlbmRlclRoZW1lUXQ6OmZp
bGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNvbnN0
IEZvbnQmIGZvbnQsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCkKK1N0cmlu
ZyBSZW5kZXJUaGVtZVF0OjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZmlsZW5hbWVzLCBjb25zdCBGb250JiBmb250LCBpbnQgd2lkdGgpCiB7CiAgICAgaWYgKHdp
ZHRoIDw9IDApCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIFN0cmluZyBzdHJpbmc7
Ci0gICAgaWYgKGZpbGVuYW1lcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKG11bHRpcGxlRmls
ZXNBbGxvd2VkKQotICAgICAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmlsZXNTZWxlY3Rl
ZExhYmVsKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZyA9IGZpbGVCdXR0b25O
b0ZpbGVTZWxlY3RlZExhYmVsKCk7Ci0gICAgfQorICAgIGlmIChmaWxlbmFtZXMuaXNFbXB0eSgp
KQorICAgICAgICBzdHJpbmcgPSBmaWxlQnV0dG9uTm9GaWxlU2VsZWN0ZWRMYWJlbCgpOwogICAg
IGVsc2UgaWYgKGZpbGVuYW1lcy5zaXplKCkgPT0gMSkgewogICAgICAgICBTdHJpbmcgZm5hbWUg
PSBmaWxlbmFtZXNbMF07CiAgICAgICAgIFFGb250TWV0cmljcyBmbShmb250LmZvbnQoKSk7CkBA
IC0xNTk2LDYgKzg1NSw0MyBAQCBTdHJpbmcgUmVuZGVyVGhlbWVRdDo6ZmlsZUxpc3ROYW1lRm9y
V2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29ucwogICAgIHJldHVybiBz
dHJpbmc7CiB9CiAKK1N0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKFJlbmRlclRoZW1lUXQqIHRo
ZW1lLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKKyAgICA6IHBhaW50ZXIoMCkKK3sKKyAg
ICBRX1VOVVNFRCh0aGVtZSk7CisgICAgaW5pdChwYWludEluZm8uY29udGV4dCA/IHBhaW50SW5m
by5jb250ZXh0IDogMCk7Cit9CisKK1N0eWxlUGFpbnRlcjo6U3R5bGVQYWludGVyKCkKKyAgICA6
IHBhaW50ZXIoMCkKK3sKK30KKwordm9pZCBTdHlsZVBhaW50ZXI6OmluaXQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0KQoreworICAgIHBhaW50ZXIgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpKTsKKworICAgIGlmIChwYWludGVyKSB7CisgICAgICAg
IC8vIHRoZSBzdHlsZXMgb2Z0ZW4gYXNzdW1lIGJlaW5nIGNhbGxlZCB3aXRoIGEgcHJpc3RpbmUg
cGFpbnRlciB3aGVyZSBubyBicnVzaCBpcyBzZXQsCisgICAgICAgIC8vIHNvIHJlc2V0IGl0IG1h
bnVhbGx5CisgICAgICAgIG9sZEJydXNoID0gcGFpbnRlci0+YnJ1c2goKTsKKyAgICAgICAgcGFp
bnRlci0+c2V0QnJ1c2goUXQ6Ok5vQnJ1c2gpOworCisgICAgICAgIC8vIHBhaW50aW5nIHRoZSB3
aWRnZXQgd2l0aCBhbnRpLWFsaWFzaW5nIHdpbGwgbWFrZSBpdCBibHVycnkKKyAgICAgICAgLy8g
ZGlzYWJsZSBpdCBoZXJlIGFuZCByZXN0b3JlIGl0IGxhdGVyCisgICAgICAgIG9sZEFudGlhbGlh
c2luZyA9IHBhaW50ZXItPnRlc3RSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcpOwor
ICAgICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIGZh
bHNlKTsKKyAgICB9Cit9CisKK1N0eWxlUGFpbnRlcjo6flN0eWxlUGFpbnRlcigpCit7CisgICAg
aWYgKHBhaW50ZXIpIHsKKyAgICAgICAgcGFpbnRlci0+c2V0QnJ1c2gob2xkQnJ1c2gpOworICAg
ICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50cyhRUGFpbnRlcjo6QW50aWFsaWFzaW5nLCBvbGRB
bnRpYWxpYXNpbmcpOworICAgIH0KK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCmluZGV4IDdjN2U2NmY4MDIz
OTU5MWM1YmMyM2ExOTk0ZGVkN2ZmZTViNWI1YmUuLmE5NzliYTY3MGU3ODAxMGIwZjAzM2FlOGQ5
ZGRjYmJmY2FmOTJmYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Jl
bmRlclRoZW1lUXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0LmgKQEAgLTI0LDEyICsyNCwxMiBAQAogCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKIAot
I2luY2x1ZGUgPFFTdHlsZT4KKyNpbmNsdWRlIDxRQnJ1c2g+CisjaW5jbHVkZSA8UVNoYXJlZFBv
aW50ZXI+CisjaW5jbHVkZSA8UVN0cmluZz4KIAogUVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBR
TGluZUVkaXQ7CiBjbGFzcyBRUGFpbnRlcjsKLWNsYXNzIFFXaWRnZXQ7CiBRVF9FTkRfTkFNRVNQ
QUNFCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDIyICszOSwyMSBAQCBjbGFzcyBSZW5k
ZXJQcm9ncmVzczsKICNlbmRpZgogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBIVE1MTWVkaWFF
bGVtZW50OwotY2xhc3MgU2Nyb2xsYmFyVGhlbWVRdDsKK2NsYXNzIFN0eWxlUGFpbnRlcjsKIAog
Y2xhc3MgUmVuZGVyVGhlbWVRdCA6IHB1YmxpYyBSZW5kZXJUaGVtZSB7Ci1wcml2YXRlOgotICAg
IFJlbmRlclRoZW1lUXQoUGFnZSogcGFnZSk7Ci0gICAgdmlydHVhbCB+UmVuZGVyVGhlbWVRdCgp
OwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IGNyZWF0ZShQ
YWdlKik7CisgICAgUmVuZGVyVGhlbWVRdChQYWdlKik7CisKKyAgICBzdGF0aWMgaW5saW5lIGJv
b2wgdXNlTW9iaWxlVGhlbWUoKSB7IHJldHVybiAhcWdldGVudigiUVRfV0VCS0lUX1VTRV9NT0JJ
TEVfVEhFTUUiKS5pc051bGwoKTsgfQogCiAgICAgU3RyaW5nIGV4dHJhRGVmYXVsdFN0eWxlU2hl
ZXQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0hvdmVyKGNvbnN0IFJlbmRlclN0eWxl
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRl
clN0eWxlKiBzdHlsZSkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHN1cHBvcnRzRm9jdXNSaW5n
KGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGludCBiYXNlbGluZVBv
c2l0aW9uKGNvbnN0IFJlbmRlck9iamVjdCogbykgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKIAogICAgIC8vIEEgbWV0
aG9kIGFza2luZyBpZiB0aGUgY29udHJvbCBjaGFuZ2VzIGl0cyB0aW50IHdoZW4gdGhlIHdpbmRv
dyBoYXMgZm9jdXMgb3Igbm90LgogICAgIHZpcnR1YWwgYm9vbCBjb250cm9sU3VwcG9ydHNUaW50
cyhjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKQEAgLTYyLDcgKzYxLDcgQEAgcHVibGljOgog
ICAgIC8vIEEgZ2VuZXJhbCBtZXRob2QgYXNraW5nIGlmIGFueSBjb250cm9sIHRpbnRpbmcgaXMg
c3VwcG9ydGVkIGF0IGFsbC4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMo
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50UmVjdChjb25zdCBSZW5k
ZXJPYmplY3QqIG8sIEludFJlY3QmIHIpOworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RSZXBhaW50
UmVjdChjb25zdCBSZW5kZXJPYmplY3QqLCBJbnRSZWN0Jik7CiAKICAgICAvLyBUaGUgcGxhdGZv
cm0gc2VsZWN0aW9uIGNvbG9yLgogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdDsKQEAgLTgxLDQ5ICs4MCwzOCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIGRvdWJsZSBjYXJldEJsaW5rSW50ZXJ2YWwoKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRyb2xTdHlsZWQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBC
b3JkZXJEYXRhJiwgY29uc3QgRmlsbExheWVyJiwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xv
cikgY29uc3Q7Ci0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkKLSAgICB2aXJ0dWFsIGludCBwb3B1
cEludGVybmFsUGFkZGluZ0JvdHRvbShSZW5kZXJTdHlsZSopIGNvbnN0OwotI2VuZGlmCisgICAg
dmlydHVhbCBib29sIGlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJv
cmRlckRhdGEmLCBjb25zdCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYpIGNvbnN0OwogCiAjaWYg
RU5BQkxFKFZJREVPKQogICAgIHZpcnR1YWwgU3RyaW5nIGV4dHJhTWVkaWFDb250cm9sc1N0eWxl
U2hlZXQoKTsKICNlbmRpZgogCi0gICAgUVN0eWxlKiBxU3R5bGUoKSBjb25zdDsKLQogcHJvdGVj
dGVkOgotICAgIHZpcnR1YWwgYm9vbCBwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29u
c3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByKTsKKyAgICB2aXJ0dWFsIGJvb2wgcGFp
bnRDaGVja2JveChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jik7CiAgICAgdmlydHVhbCB2b2lkIHNldENoZWNrYm94U2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0
OwogCi0gICAgdmlydHVhbCBib29sIHBhaW50UmFkaW8oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQ
YWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHIpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFJh
ZGlvKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKikgY29uc3Q7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRqdXN0QnV0dG9uU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0
eWxlKiwgRWxlbWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludEJ1dHRvbihSZW5k
ZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVh
bCB2b2lkIHNldEJ1dHRvblNpemUoUmVuZGVyU3R5bGUqKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0
eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQqKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgYm9vbCBwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0VGV4dEFyZWFTdHlsZShDU1NT
dHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgcGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYg
aSwgY29uc3QgSW50UmVjdCYgcik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdE1lbnVMaXN0U3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCi0g
ICAgdmlydHVhbCBib29sIHBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RNZW51
TGlzdEJ1dHRvblN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSosIEVsZW1lbnQq
KSBjb25zdDsKIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxl
bWVudCopIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9i
amVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAvLyBSZXR1cm5z
IHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJh
ci4KKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNz
QmFyKFJlbmRlclByb2dyZXNzKikgY29uc3Q7CiAjZW5kaWYKIAotICAgIHZpcnR1YWwgYm9vbCBw
YWludFNsaWRlclRyYWNrKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShDU1NTdHls
ZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IGJvb2wgcGFpbnRTbGlkZXJUaHVtYihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdFNsaWRlclRodW1iU3R5bGUo
Q1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCopIGNvbnN0OwogCiAgICAg
dmlydHVhbCBib29sIHBhaW50U2VhcmNoRmllbGQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpOwpAQCAtMTQwLDE0ICsxMjgsNiBAQCBwcm90ZWN0ZWQ6CiAK
ICNpZm5kZWYgUVRfTk9fU1BJTkJPWAogICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RJbm5lclNwaW5C
dXR0b25TdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29u
c3Q7Ci0gICAgdmlydHVhbCBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKFJlbmRlck9iamVjdCos
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKLSNlbmRpZgotCi0jaWYgRU5BQkxF
KFBST0dSRVNTX1RBRykKLSAgICAvLyBSZXR1cm5zIHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhl
IGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmlt
YXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQ
cm9ncmVzcykgY29uc3Q7Ci0gICAgLy8gUmV0dXJucyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1h
dGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KLSAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25E
dXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29u
c3Q7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTE2NCw2OSArMTQ0LDUwIEBAIHBy
b3RlY3RlZDoKICAgICB2aXJ0dWFsIFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRp
bWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdDsKICAgICB2aXJ0dWFs
IFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzUmVtYWluaW5nVGltZShmbG9hdCBjdXJyZW50VGlt
ZSwgZmxvYXQgZHVyYXRpb24pIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNPd25EaXNhYmxl
ZFN0YXRlSGFuZGxpbmdGb3IoQ29udHJvbFBhcnQpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLXBy
aXZhdGU6CiAKLSAgICB2b2lkIHBhaW50TWVkaWFCYWNrZ3JvdW5kKFFQYWludGVyKiBwYWludGVy
LCBjb25zdCBJbnRSZWN0JiByKSBjb25zdDsKKyAgICB2b2lkIHBhaW50TWVkaWFCYWNrZ3JvdW5k
KFFQYWludGVyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIGRvdWJsZSBtZWRpYUNvbnRy
b2xzQmFzZWxpbmVPcGFjaXR5KCkgY29uc3Q7Ci0gICAgUUNvbG9yIGdldE1lZGlhQ29udHJvbEZv
cmVncm91bmRDb2xvcihSZW5kZXJPYmplY3QqIG8gPSAwKSBjb25zdDsKKyAgICBRQ29sb3IgZ2V0
TWVkaWFDb250cm9sRm9yZWdyb3VuZENvbG9yKFJlbmRlck9iamVjdCogPSAwKSBjb25zdDsKICNl
bmRpZgotICAgIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUoUmVuZGVyU3R5bGUqIHJlbmRl
clN0eWxlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZVNpemVCYXNlZE9uU3R5bGUo
UmVuZGVyU3R5bGUqKSBjb25zdCA9IDA7CiAKLXByaXZhdGU6Ci0gICAgdmlydHVhbCBTdHJpbmcg
ZmlsZUxpc3ROYW1lRm9yV2lkdGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgY29u
c3QgRm9udCYsIGludCB3aWR0aCwgYm9vbCBtdWx0aXBsZUZpbGVzQWxsb3dlZCk7Ci0KLSAgICBi
b29sIHN1cHBvcnRzRm9jdXMoQ29udHJvbFBhcnQpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5n
IGZpbGVMaXN0TmFtZUZvcldpZHRoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIGNv
bnN0IEZvbnQmLCBpbnQgd2lkdGgpOwogCi0gICAgQ29udHJvbFBhcnQgaW5pdGlhbGl6ZUNvbW1v
blFTdHlsZU9wdGlvbnMoUVN0eWxlT3B0aW9uJiwgUmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0KLSAg
ICB2b2lkIHNldEJ1dHRvblBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdDsKLSAgICB2b2lkIHNl
dFBvcHVwUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgUVJlY3QgaW5m
bGF0ZUJ1dHRvblJlY3QoY29uc3QgUVJlY3QmIG9yaWdpbmFsUmVjdCkgY29uc3Q7CiAKICAgICB2
b2lkIHNldFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJikgY29uc3Q7CiAK
LSAgICBpbnQgZmluZEZyYW1lTGluZVdpZHRoKFFTdHlsZSogc3R5bGUpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqKSBjb25zdCA9IDA7CiAKLSAg
ICBRU3R5bGUqIGZhbGxiYWNrU3R5bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFFTaGFyZWRQb2lu
dGVyPFN0eWxlUGFpbnRlcj4gZ2V0U3R5bGVQYWludGVyKGNvbnN0IFBhaW50SW5mbyYpID0gMDsK
KworICAgIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCkgY29uc3Q7CiAKICAgICBJbnRS
ZWN0IGNvbnZlcnRUb1BhaW50aW5nUmVjdChSZW5kZXJPYmplY3QqIGlucHV0UmVuZGVyZXIsIGNv
bnN0IFJlbmRlck9iamVjdCogcGFydFJlbmRlcmVyLCBJbnRSZWN0IHBhcnRSZWN0LCBjb25zdCBJ
bnRSZWN0JiBsb2NhbE9mZnNldCkgY29uc3Q7CiAKICAgICBQYWdlKiBtX3BhZ2U7CiAKLSNpZmRl
ZiBRX1dTX01BQwotICAgIGludCBtX2J1dHRvbkZvbnRQaXhlbFNpemU7Ci0jZW5kaWYKICAgICBR
U3RyaW5nIG1fYnV0dG9uRm9udEZhbWlseTsKIAotICAgIFFTdHlsZSogbV9mYWxsYmFja1N0eWxl
OwotICAgIG11dGFibGUgUUxpbmVFZGl0KiBtX2xpbmVFZGl0OwogfTsKIAogY2xhc3MgU3R5bGVQ
YWludGVyIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXIoUmVuZGVyVGhlbWVR
dCosIGNvbnN0IFBhaW50SW5mbyYpOwotICAgIGV4cGxpY2l0IFN0eWxlUGFpbnRlcihTY3JvbGxi
YXJUaGVtZVF0KiwgR3JhcGhpY3NDb250ZXh0Kik7Ci0gICAgflN0eWxlUGFpbnRlcigpOworICAg
IHZpcnR1YWwgflN0eWxlUGFpbnRlcigpOwogCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gcGFpbnRlciAmJiBzdHlsZTsgfQorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIHBhaW50ZXI7IH0KIAogICAgIFFQYWludGVyKiBwYWludGVyOwotICAgIFFXaWRnZXQqIHdp
ZGdldDsKLSAgICBRU3R5bGUqIHN0eWxlOwogCi0gICAgdm9pZCBkcmF3UHJpbWl0aXZlKFFTdHls
ZTo6UHJpbWl0aXZlRWxlbWVudCBwZSwgY29uc3QgUVN0eWxlT3B0aW9uJiBvcHQpCi0gICAgeyBz
dHlsZS0+ZHJhd1ByaW1pdGl2ZShwZSwgJm9wdCwgcGFpbnRlciwgd2lkZ2V0KTsgfQotICAgIHZv
aWQgZHJhd0NvbnRyb2woUVN0eWxlOjpDb250cm9sRWxlbWVudCBjZSwgY29uc3QgUVN0eWxlT3B0
aW9uJiBvcHQpCi0gICAgeyBzdHlsZS0+ZHJhd0NvbnRyb2woY2UsICZvcHQsIHBhaW50ZXIsIHdp
ZGdldCk7IH0KLSAgICB2b2lkIGRyYXdDb21wbGV4Q29udHJvbChRU3R5bGU6OkNvbXBsZXhDb250
cm9sIGNjLCBjb25zdCBRU3R5bGVPcHRpb25Db21wbGV4JiBvcHQpCi0gICAgeyBzdHlsZS0+ZHJh
d0NvbXBsZXhDb250cm9sKGNjLCAmb3B0LCBwYWludGVyLCB3aWRnZXQpOyB9Citwcm90ZWN0ZWQ6
CisgICAgU3R5bGVQYWludGVyKFJlbmRlclRoZW1lUXQqLCBjb25zdCBQYWludEluZm8mKTsKKyAg
ICBTdHlsZVBhaW50ZXIoKTsKKyAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0Kik7CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUVN0eWxlKik7
Ci0KICAgICBRQnJ1c2ggb2xkQnJ1c2g7CiAgICAgYm9vbCBvbGRBbnRpYWxpYXNpbmc7CiAKLSAg
ICBRX0RJU0FCTEVfQ09QWShTdHlsZVBhaW50ZXIpCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2JpbGUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE0
ZmI3MTEzOGVjNjRjNDQ0NDUwN2RmNTVkNWI3ZDMxYWUxYTMxZGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmNwcApAQCAt
MCwwICsxLDY2NiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJv
amVjdC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UmVuZGVyVGhlbWVRdE1vYmlsZS5oIgorCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgor
I2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU2VsZWN0RWxl
bWVudC5oIgorI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQYWludEluZm8uaCIKKyNp
bmNsdWRlICJQYXNzUmVmUHRyLmgiCisjaW5jbHVkZSAiUVdlYlBhZ2VDbGllbnQuaCIKKyNpbmNs
dWRlICJSZW5kZXJCb3guaCIKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorI2luY2x1ZGUgIlJl
bmRlclByb2dyZXNzLmgiCisjZW5kaWYKKyNpZiBIQVZFKFFTVFlMRSkKKyNpbmNsdWRlICJSZW5k
ZXJUaGVtZVFTdHlsZS5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxRQ29sb3I+CisjaW5jbHVkZSA8
UUZpbGU+CisjaW5jbHVkZSA8UUZvbnRNZXRyaWNzPgorI2luY2x1ZGUgPFFQYWludGVyPgorI2lu
Y2x1ZGUgPFFQaXhtYXBDYWNoZT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOworCisvLyBDb25zdGFudHMgZXh0cmFjdGVkIGZyb20gUUNvbW1vblN0
eWxlIGFuZCBRV2luZG93c1N0eWxlCitzdGF0aWMgY29uc3QgaW50IGFycm93Qm94V2lkdGggPSAx
NjsKK3N0YXRpYyBjb25zdCBpbnQgZnJhbWVXaWR0aCA9IDI7CitzdGF0aWMgY29uc3QgaW50IGNo
ZWNrQm94V2lkdGggPSAxMzsKK3N0YXRpYyBjb25zdCBpbnQgcmFkaW9XaWR0aCA9IDEyOworc3Rh
dGljIGNvbnN0IGludCBidXR0b25JY29uU2l6ZSA9IDE2Oworc3RhdGljIGNvbnN0IGludCBzbGlk
ZXJXaWR0aCA9IDExOworc3RhdGljIGNvbnN0IGludCBzbGlkZXJIZWlnaHQgPSAwOworCisvLyBP
dGhlciBjb25zdGFudHMgdXNlZCBieSB0aGUgbW9iaWxlIHRoZW1lCitzdGF0aWMgZmxvYXQgYnV0
dG9uUGFkZGluZ0xlZnQgPSAxODsKK3N0YXRpYyBmbG9hdCBidXR0b25QYWRkaW5nUmlnaHQgPSAx
ODsKK3N0YXRpYyBmbG9hdCBidXR0b25QYWRkaW5nVG9wID0gMjsKK3N0YXRpYyBmbG9hdCBidXR0
b25QYWRkaW5nQm90dG9tID0gMzsKK3N0YXRpYyBmbG9hdCBtZW51TGlzdFBhZGRpbmcgPSA5Owor
c3RhdGljIGZsb2F0IHRleHRGaWVsZFBhZGRpbmcgPSA1OworCisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChRUGFpbnRlciogcGFpbnRlciwgY29u
c3QgUVBlbiYgcGVuLCBjb25zdCBRUmVjdCYgcmVjdCwgY29uc3QgUUJydXNoJiBicnVzaCkKK3sK
KyAgICBRUGVuIG9sZFBlbiA9IHBhaW50ZXItPnBlbigpOworICAgIFFCcnVzaCBvbGRCcnVzaCA9
IHBhaW50ZXItPmJydXNoKCk7CisgICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6
QW50aWFsaWFzaW5nLCB0cnVlKTsKKyAgICBwYWludGVyLT5zZXRQZW4ocGVuKTsKKyAgICBwYWlu
dGVyLT5zZXRCcnVzaChicnVzaCk7CisKKyAgICBpbnQgbGluZSA9IDE7CisgICAgcGFpbnRlci0+
ZHJhd1JvdW5kZWRSZWN0KHJlY3QuYWRqdXN0ZWQobGluZSwgbGluZSwgLWxpbmUsIC1saW5lKSwK
KyAgICAgICAgICAgIC8qIHhSYWRpdXMgKi8gNS4wLCAvKiB5UmFkaW91cyAqLyA1LjApOworICAg
IHBhaW50ZXItPnNldFBlbihvbGRQZW4pOworICAgIHBhaW50ZXItPnNldEJydXNoKG9sZEJydXNo
KTsKK30KKworUVNoYXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBSZW5kZXJUaGVtZVF0TW9iaWxl
OjpnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZvJiBwaSkKK3sKKyAgICByZXR1cm4gUVNo
YXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPihuZXcgU3R5bGVQYWludGVyTW9iaWxlKHRoaXMsIHBp
KSk7Cit9CisKK1N0eWxlUGFpbnRlck1vYmlsZTo6U3R5bGVQYWludGVyTW9iaWxlKFJlbmRlclRo
ZW1lUXRNb2JpbGUqIHRoZW1lLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbykKKyAgICA6IFN0
eWxlUGFpbnRlcih0aGVtZSwgcGFpbnRJbmZvKQoreworfQorCit2b2lkIFN0eWxlUGFpbnRlck1v
YmlsZTo6ZHJhd0NoZWNrZXIoUVBhaW50ZXIqIHBhaW50ZXIsIGludCBzaXplLCBRQ29sb3IgY29s
b3IpIGNvbnN0Cit7CisgICAgaW50IGJvcmRlciA9IHFNaW4ocU1heCgxLCBpbnQoMC4yICogc2l6
ZSkpLCA2KTsKKyAgICBpbnQgY2hlY2tlclNpemUgPSBxTWF4KHNpemUgLSAyICogYm9yZGVyLCAz
KTsKKyAgICBpbnQgd2lkdGggPSBjaGVja2VyU2l6ZSAvIDM7CisgICAgaW50IG1pZGRsZSA9IHFN
YXgoMyAqIGNoZWNrZXJTaXplIC8gNywgMyk7CisgICAgaW50IHggPSAoKHNpemUgLSBjaGVja2Vy
U2l6ZSkgPj4gMSk7CisgICAgaW50IHkgPSAoKHNpemUgLSBjaGVja2VyU2l6ZSkgPj4gMSkgKyAo
Y2hlY2tlclNpemUgLSB3aWR0aCAtIG1pZGRsZSk7CisgICAgUVZlY3RvcjxRTGluZUY+IGxpbmVz
KGNoZWNrZXJTaXplICsgMSk7CisgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1pZGRsZTsgKytpKSB7CisgICAgICAgIGxpbmVzW2ldID0gUUxpbmVG
KHgsIHksIHgsIHkgKyB3aWR0aCk7CisgICAgICAgICsreDsKKyAgICAgICAgKyt5OworICAgIH0K
KyAgICBmb3IgKGludCBpID0gbWlkZGxlOyBpIDw9IGNoZWNrZXJTaXplOyArK2kpIHsKKyAgICAg
ICAgbGluZXNbaV0gPSBRTGluZUYoeCwgeSwgeCwgeSArIHdpZHRoKTsKKyAgICAgICAgKyt4Owor
ICAgICAgICAtLXk7CisgICAgfQorICAgIHBhaW50ZXItPmRyYXdMaW5lcyhsaW5lcy5jb25zdERh
dGEoKSwgbGluZXMuc2l6ZSgpKTsKK30KKworUVBpeG1hcCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZp
bmRDaGVja2VyKGNvbnN0IFFSZWN0JiByZWN0LCBib29sIGRpc2FibGVkKSBjb25zdAoreworICAg
IGludCBzaXplID0gcU1pbihyZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIFFQaXht
YXAgcmVzdWx0OworICAgIHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJp
bmcoIiRxdC1tYWVtbzUtbW9iaWxlLXRoZW1lLWNoZWNrZXItIik7CisgICAgUVN0cmluZyBrZXkg
PSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZSkgKyBRTGF0aW4xU3RyaW5nKCItIikgKyAo
ZGlzYWJsZWQgPyBRTGF0aW4xU3RyaW5nKCJkaXNhYmxlZCIpIDogUUxhdGluMVN0cmluZygiZW5h
YmxlZCIpKTsKKyAgICBpZiAoIVFQaXhtYXBDYWNoZTo6ZmluZChrZXksIHJlc3VsdCkpIHsKKyAg
ICAgICAgcmVzdWx0ID0gUVBpeG1hcChzaXplLCBzaXplKTsKKyAgICAgICAgcmVzdWx0LmZpbGwo
UXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgUVBhaW50ZXIgcGFpbnRlcigmcmVzdWx0KTsKKyAg
ICAgICAgZHJhd0NoZWNrZXIoJnBhaW50ZXIsIHNpemUsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3Jh
eSA6IFF0OjpkYXJrR3JheSk7CisgICAgICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVz
dWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTdHlsZVBhaW50ZXJN
b2JpbGU6OmRyYXdSYWRpbyhRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVNpemUmIHNpemUsIGJv
b2wgY2hlY2tlZCwgUUNvbG9yIGNvbG9yKSBjb25zdAoreworICAgIHBhaW50ZXItPnNldFJlbmRl
ckhpbnQoUVBhaW50ZXI6OkFudGlhbGlhc2luZywgdHJ1ZSk7CisKKyAgICAvLyBnZXQgbWlub3Ig
c2l6ZSB0byBkbyBub3QgcGFpbnQgYSB3aWRlIGVsaXBzZQorICAgIHFyZWFsIHNxdWFyZVNpemUg
PSBxTWluKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgLy8gZGVmbGF0ZSBvbmUg
cGl4ZWwKKyAgICBRUmVjdCByZWN0ID0gUVJlY3QoUVBvaW50KDEsIDEpLCBRU2l6ZShzcXVhcmVT
aXplIC0gMiwgc3F1YXJlU2l6ZSAtIDIpKTsKKyAgICBjb25zdCBRUG9pbnQgY2VudGVyR3JhZGll
bnQocmVjdC5ib3R0b21SaWdodCgpICogMC43KTsKKworICAgIFFSYWRpYWxHcmFkaWVudCByYWRp
YWxHcmFkaWVudChjZW50ZXJHcmFkaWVudCwgY2VudGVyR3JhZGllbnQueCgpIC0gMSk7CisgICAg
cmFkaWFsR3JhZGllbnQuc2V0Q29sb3JBdCgwLjAsIFF0Ojp3aGl0ZSk7CisgICAgcmFkaWFsR3Jh
ZGllbnQuc2V0Q29sb3JBdCgwLjYsIFF0Ojp3aGl0ZSk7CisgICAgcmFkaWFsR3JhZGllbnQuc2V0
Q29sb3JBdCgxLjAsIGNvbG9yKTsKKworICAgIHBhaW50ZXItPnNldFBlbihjb2xvcik7CisgICAg
cGFpbnRlci0+c2V0QnJ1c2goY29sb3IpOworICAgIHBhaW50ZXItPmRyYXdFbGxpcHNlKHJlY3Qp
OworICAgIHBhaW50ZXItPnNldEJydXNoKHJhZGlhbEdyYWRpZW50KTsKKyAgICBwYWludGVyLT5k
cmF3RWxsaXBzZShyZWN0KTsKKworICAgIGludCBib3JkZXIgPSAwLjEgKiAocmVjdC53aWR0aCgp
ICsgcmVjdC5oZWlnaHQoKSk7CisgICAgYm9yZGVyID0gcU1pbihxTWF4KDIsIGJvcmRlciksIDEw
KTsKKyAgICByZWN0LmFkanVzdChib3JkZXIsIGJvcmRlciwgLWJvcmRlciwgLWJvcmRlcik7Cisg
ICAgaWYgKGNoZWNrZWQpIHsKKyAgICAgICAgcGFpbnRlci0+c2V0UGVuKFF0OjpOb1Blbik7Cisg
ICAgICAgIHBhaW50ZXItPnNldEJydXNoKGNvbG9yKTsKKyAgICAgICAgcGFpbnRlci0+ZHJhd0Vs
bGlwc2UocmVjdCk7CisgICAgfQorfQorCitRUGl4bWFwIFN0eWxlUGFpbnRlck1vYmlsZTo6Zmlu
ZFJhZGlvKGNvbnN0IFFTaXplJiBzaXplLCBib29sIGNoZWNrZWQsIGJvb2wgZGlzYWJsZWQpIGNv
bnN0Cit7CisgICAgUVBpeG1hcCByZXN1bHQ7CisgICAgc3RhdGljIGNvbnN0IFFTdHJpbmcgcHJl
Zml4ID0gUUxhdGluMVN0cmluZygiJHF0LW1hZW1vNS1tb2JpbGUtdGhlbWUtcmFkaW8tIik7Cisg
ICAgUVN0cmluZyBrZXkgPSBwcmVmaXggKyBRU3RyaW5nOjpudW1iZXIoc2l6ZS53aWR0aCgpKSAr
IFFMYXRpbjFTdHJpbmcoIi0iKSArIFFTdHJpbmc6Om51bWJlcihzaXplLmhlaWdodCgpKSArIFFM
YXRpbjFTdHJpbmcoIi0iKQorICAgICAgICArIChkaXNhYmxlZCA/IFFMYXRpbjFTdHJpbmcoImRp
c2FibGVkIikgOiBRTGF0aW4xU3RyaW5nKCJlbmFibGVkIikpICsgKGNoZWNrZWQgPyBRTGF0aW4x
U3RyaW5nKCItY2hlY2tlZCIpIDogUUxhdGluMVN0cmluZygiIikpOworICAgIGlmICghUVBpeG1h
cENhY2hlOjpmaW5kKGtleSwgcmVzdWx0KSkgeworICAgICAgICByZXN1bHQgPSBRUGl4bWFwKHNp
emUpOworICAgICAgICByZXN1bHQuZmlsbChRdDo6dHJhbnNwYXJlbnQpOworICAgICAgICBRUGFp
bnRlciBwYWludGVyKCZyZXN1bHQpOworICAgICAgICBkcmF3UmFkaW8oJnBhaW50ZXIsIHNpemUs
IGNoZWNrZWQsIGRpc2FibGVkID8gUXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7CisgICAg
ICAgIFFQaXhtYXBDYWNoZTo6aW5zZXJ0KGtleSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdNdWx0aXBsZUNvbWJv
QnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6ZSwgUUNvbG9yIGNvbG9y
KSBjb25zdAoreworICAgIGludCByZWN0V2lkdGggPSBzaXplLndpZHRoKCkgLSAxOworICAgIGlu
dCB3aWR0aCA9IHFNYXgoMiwgcmVjdFdpZHRoID4+IDMpOworICAgIGludCBkaXN0YW5jZSA9IChy
ZWN0V2lkdGggLSAzICogd2lkdGgpID4+IDE7CisgICAgaW50IHRvcCA9IChzaXplLmhlaWdodCgp
IC0gd2lkdGgpID4+IDE7CisKKyAgICBwYWludGVyLT5zZXRQZW4oY29sb3IpOworICAgIHBhaW50
ZXItPnNldEJydXNoKGNvbG9yKTsKKworICAgIHBhaW50ZXItPmRyYXdSZWN0KDAsIHRvcCwgd2lk
dGgsIHdpZHRoKTsKKyAgICBwYWludGVyLT5kcmF3UmVjdCh3aWR0aCArIGRpc3RhbmNlLCB0b3As
IHdpZHRoLCB3aWR0aCk7CisgICAgcGFpbnRlci0+ZHJhd1JlY3QoMiAqICh3aWR0aCArIGRpc3Rh
bmNlKSwgdG9wLCB3aWR0aCwgd2lkdGgpOworfQorCit2b2lkIFN0eWxlUGFpbnRlck1vYmlsZTo6
ZHJhd1NpbXBsZUNvbWJvQnV0dG9uKFFQYWludGVyKiBwYWludGVyLCBjb25zdCBRU2l6ZSYgc2l6
ZSwgUUNvbG9yIGNvbG9yKSBjb25zdAoreworICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsK
KyAgICBpbnQgbWlkbGUgPSB3aWR0aCA+PiAxOworICAgIFFWZWN0b3I8UUxpbmU+IGxpbmVzKHdp
ZHRoICsgMSk7CisKKyAgICBmb3IgKGludCB4ID0gMCwgeSA9IDA7ICB4IDwgbWlkbGU7IHgrKywg
eSsrKSB7CisgICAgICAgIGxpbmVzW3hdID0gUUxpbmUoeCwgeSwgeCwgeSArIDIpOworICAgICAg
ICBsaW5lc1t4ICsgbWlkbGVdID0gUUxpbmUod2lkdGggLSB4IC0gMSwgeSwgd2lkdGggLSB4IC0g
MSwgeSArIDIpOworICAgIH0KKyAgICAvLyBKdXN0IHRvIGVuc3VyZSB0aGUgbGluZXMnIGludGVy
c2VjdGlvbi4KKyAgICBsaW5lc1t3aWR0aF0gPSBRTGluZShtaWRsZSwgbWlkbGUsIG1pZGxlLCBt
aWRsZSArIDIpOworCisgICAgcGFpbnRlci0+c2V0UGVuKGNvbG9yKTsKKyAgICBwYWludGVyLT5z
ZXRCcnVzaChjb2xvcik7CisgICAgcGFpbnRlci0+ZHJhd0xpbmVzKGxpbmVzKTsKK30KKworUVNp
emUgU3R5bGVQYWludGVyTW9iaWxlOjpnZXRCdXR0b25JbWFnZVNpemUoY29uc3QgUVNpemUmIGJ1
dHRvblNpemUpIGNvbnN0Cit7CisgICAgY29uc3QgaW50IGJvcmRlciA9IHFNYXgoMywgYnV0dG9u
U2l6ZS53aWR0aCgpID4+IDMpIDw8IDE7CisKKyAgICBpbnQgd2lkdGggPSBidXR0b25TaXplLndp
ZHRoKCkgLSBib3JkZXI7CisgICAgaW50IGhlaWdodCA9IGJ1dHRvblNpemUuaGVpZ2h0KCkgLSBi
b3JkZXI7CisKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIHJldHVy
biBRU2l6ZSgpOworCisgICAgaWYgKGhlaWdodCA+PSAod2lkdGggPj4gMSkpCisgICAgICAgIHdp
ZHRoID0gd2lkdGggPj4gMSA8PCAxOworICAgIGVsc2UKKyAgICAgICAgd2lkdGggPSBoZWlnaHQg
PDwgMTsKKworICAgIHJldHVybiBRU2l6ZSh3aWR0aCArIDEsIHdpZHRoKTsKK30KKworUVBpeG1h
cCBTdHlsZVBhaW50ZXJNb2JpbGU6OmZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYgc2l6ZSwg
Ym9vbCBtdWx0aXBsZSwgYm9vbCBkaXNhYmxlZCkgY29uc3QKK3sKKyAgICBRUGl4bWFwIHJlc3Vs
dDsKKyAgICBRU2l6ZSBpbWFnZVNpemUgPSBnZXRCdXR0b25JbWFnZVNpemUoc2l6ZSk7CisKKyAg
ICBpZiAoaW1hZ2VTaXplLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gUVBpeG1hcCgpOworICAg
IHN0YXRpYyBjb25zdCBRU3RyaW5nIHByZWZpeCA9IFFMYXRpbjFTdHJpbmcoIiRxdC1tYWVtbzUt
bW9iaWxlLXRoZW1lLWNvbWJvLSIpOworICAgIFFTdHJpbmcga2V5ID0gcHJlZml4ICsgKG11bHRp
cGxlID8gUUxhdGluMVN0cmluZygibXVsdGlwbGUtIikgOiBRTGF0aW4xU3RyaW5nKCJzaW1wbGUt
IikpCisgICAgICAgICsgUVN0cmluZzo6bnVtYmVyKGltYWdlU2l6ZS53aWR0aCgpKSArIFFMYXRp
bjFTdHJpbmcoIi0iKSArIFFTdHJpbmc6Om51bWJlcihpbWFnZVNpemUuaGVpZ2h0KCkpCisgICAg
ICAgICsgUUxhdGluMVN0cmluZygiLSIpICsgKGRpc2FibGVkID8gUUxhdGluMVN0cmluZygiZGlz
YWJsZWQiKSA6IFFMYXRpbjFTdHJpbmcoImVuYWJsZWQiKSk7CisgICAgaWYgKCFRUGl4bWFwQ2Fj
aGU6OmZpbmQoa2V5LCByZXN1bHQpKSB7CisgICAgICAgIHJlc3VsdCA9IFFQaXhtYXAoaW1hZ2VT
aXplKTsKKyAgICAgICAgcmVzdWx0LmZpbGwoUXQ6OnRyYW5zcGFyZW50KTsKKyAgICAgICAgUVBh
aW50ZXIgcGFpbnRlcigmcmVzdWx0KTsKKyAgICAgICAgaWYgKG11bHRpcGxlKQorICAgICAgICAg
ICAgZHJhd011bHRpcGxlQ29tYm9CdXR0b24oJnBhaW50ZXIsIGltYWdlU2l6ZSwgZGlzYWJsZWQg
PyBRdDo6bGlnaHRHcmF5IDogUXQ6OmRhcmtHcmF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZHJhd1NpbXBsZUNvbWJvQnV0dG9uKCZwYWludGVyLCBpbWFnZVNpemUsIGRpc2FibGVkID8g
UXQ6OmxpZ2h0R3JheSA6IFF0OjpkYXJrR3JheSk7CisgICAgICAgIFFQaXhtYXBDYWNoZTo6aW5z
ZXJ0KGtleSwgcmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBT
dHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdMaW5lRWRpdChjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBz
dW5rZW4sIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwg
UXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKKyAgICBwYWludGVy
LT5zZXRQZW4ocGVuKTsKKworICAgIGlmIChzdW5rZW4pIHsKKyAgICAgICAgZHJhd1JlY3Rhbmd1
bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtH
cmF5KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBRTGluZWFyR3JhZGllbnQgbGlu
ZWFyR3JhZGllbnQ7CisgICAgaWYgKCFlbmFibGVkKSB7CisgICAgICAgIGxpbmVhckdyYWRpZW50
LnNldFN0YXJ0KHJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Rmlu
YWxTdG9wKHJlY3QuYm90dG9tTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29s
b3JBdCgwLjAsIFF0OjpsaWdodEdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xv
ckF0KDEuMCwgUXQ6OndoaXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaW5lYXJHcmFkaWVu
dC5zZXRTdGFydChyZWN0LnRvcExlZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZp
bmFsU3RvcChRUG9pbnQocmVjdC50b3BMZWZ0KCkueCgpLAorICAgICAgICAgICAgICAgICAgICBy
ZWN0LnRvcExlZnQoKS55KCkgKyAvKiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7
CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOwor
ICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMzUsIFF0Ojp3aGl0ZSk7CisgICAg
fQorCisgICAgZHJhd1JlY3Rhbmd1bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCBy
ZWN0LCBsaW5lYXJHcmFkaWVudCk7Cit9CisKK3ZvaWQgU3R5bGVQYWludGVyTW9iaWxlOjpkcmF3
Q2hlY2tCb3goY29uc3QgUVJlY3QmIHJlY3QsIGJvb2wgY2hlY2tlZCwgYm9vbCBlbmFibGVkKQor
eworICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVudChyZWN0LnRvcExlZnQoKSwgcmVj
dC5ib3R0b21MZWZ0KCkpOworICAgIGlmICghZW5hYmxlZCkgeworICAgICAgICBsaW5lYXJHcmFk
aWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmxpZ2h0R3JheSk7CisgICAgICAgIGxpbmVhckdyYWRp
ZW50LnNldENvbG9yQXQoMC41LCBRdDo6d2hpdGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxp
bmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6ZGFya0dyYXkpOworICAgICAgICBsaW5l
YXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNSwgUXQ6OndoaXRlKTsKKyAgICB9CisKKyAgICBwYWlu
dGVyLT5zZXRQZW4oUVBlbihlbmFibGVkID8gUXQ6OmRhcmtHcmF5IDogUXQ6OmxpZ2h0R3JheSkp
OworICAgIHBhaW50ZXItPnNldEJydXNoKGxpbmVhckdyYWRpZW50KTsKKyAgICBwYWludGVyLT5k
cmF3UmVjdChyZWN0KTsKKyAgICBjb25zdCBRUmVjdCByID0gcmVjdC5hZGp1c3RlZCgxLCAxLCAt
MSwgLTEpOworCisgICAgaWYgKCFjaGVja2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGl4
bWFwIGNoZWNrZXIgPSBmaW5kQ2hlY2tlcihyLCAhZW5hYmxlZCk7CisgICAgaWYgKGNoZWNrZXIu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCB4ID0gKHIud2lkdGgoKSAtIGNo
ZWNrZXIud2lkdGgoKSkgPj4gMTsKKyAgICBpbnQgeSA9IChyLmhlaWdodCgpIC0gY2hlY2tlci5o
ZWlnaHQoKSkgPj4gMTsKKyAgICBwYWludGVyLT5kcmF3UGl4bWFwKHIueCgpICsgeCwgci55KCkg
KyB5LCBjaGVja2VyKTsKK30KKwordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdSYWRpb0J1
dHRvbihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJsZWQpCit7Cisg
ICAgUVBpeG1hcCByYWRpbyA9IGZpbmRSYWRpbyhyZWN0LnNpemUoKSwgY2hlY2tlZCwgIWVuYWJs
ZWQpOworICAgIGlmIChyYWRpby5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhaW50
ZXItPmRyYXdQaXhtYXAocmVjdC54KCksIHJlY3QueSgpLCByYWRpbyk7Cit9CisKK3ZvaWQgU3R5
bGVQYWludGVyTW9iaWxlOjpkcmF3UHVzaEJ1dHRvbihjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBz
dW5rZW4sIGJvb2wgZW5hYmxlZCkKK3sKKyAgICBRUGVuIHBlbihRdDo6ZGFya0dyYXksIDEuMCwg
UXQ6OlNvbGlkTGluZSwgUXQ6OlJvdW5kQ2FwLCBRdDo6Um91bmRKb2luKTsKKyAgICBwYWludGVy
LT5zZXRQZW4ocGVuKTsKKworICAgIGlmIChzdW5rZW4pIHsKKyAgICAgICAgZHJhd1JlY3Rhbmd1
bGFyQ29udHJvbEJhY2tncm91bmQocGFpbnRlciwgcGVuLCByZWN0LCBRQnJ1c2goUXQ6OmRhcmtH
cmF5KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBRTGluZWFyR3JhZGllbnQgbGlu
ZWFyR3JhZGllbnQ7CisgICAgaWYgKCFlbmFibGVkKSB7CisgICAgICAgIGxpbmVhckdyYWRpZW50
LnNldFN0YXJ0KHJlY3QuYm90dG9tTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0
RmluYWxTdG9wKHJlY3QudG9wTGVmdCgpKTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29s
b3JBdCgwLjAsIFF0OjpncmF5KTsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0Q29sb3JBdCgx
LjAsIFF0Ojp3aGl0ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0
U3RhcnQocmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5h
bFN0b3AoUVBvaW50KHJlY3QuYm90dG9tTGVmdCgpLngoKSwKKyAgICAgICAgICAgICAgICAgICAg
cmVjdC5ib3R0b21MZWZ0KCkueSgpIC0gLyogb2Zmc2V0IGxpbWl0IGZvciBncmFkaWVudCAqLyAy
MCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwgUXQ6OmdyYXkpOwor
ICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuNCwgUXQ6OndoaXRlKTsKKyAgICB9
CisKKyAgICBkcmF3UmVjdGFuZ3VsYXJDb250cm9sQmFja2dyb3VuZChwYWludGVyLCBwZW4sIHJl
Y3QsIGxpbmVhckdyYWRpZW50KTsKK30KKwordm9pZCBTdHlsZVBhaW50ZXJNb2JpbGU6OmRyYXdD
b21ib0JveChjb25zdCBRUmVjdCYgcmVjdCwgYm9vbCBtdWx0aXBsZSwgYm9vbCBlbmFibGVkKQor
eworICAgIFFQZW4gcGVuKFF0OjpkYXJrR3JheSwgMS4wLCBRdDo6U29saWRMaW5lLCBRdDo6Um91
bmRDYXAsIFF0OjpSb3VuZEpvaW4pOworICAgIFFMaW5lYXJHcmFkaWVudCBsaW5lYXJHcmFkaWVu
dDsKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAgICAgICAgbGluZWFyR3JhZGllbnQuc2V0U3RhcnQo
cmVjdC5ib3R0b21MZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRGaW5hbFN0b3Ao
cmVjdC50b3BMZWZ0KCkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDAuMCwg
UXQ6OmdyYXkpOworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRDb2xvckF0KDEuMCwgUXQ6Ondo
aXRlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBsaW5lYXJHcmFkaWVudC5zZXRTdGFydChyZWN0
LmJvdHRvbUxlZnQoKSk7CisgICAgICAgIGxpbmVhckdyYWRpZW50LnNldEZpbmFsU3RvcChRUG9p
bnQocmVjdC5ib3R0b21MZWZ0KCkueCgpLAorICAgICAgICAgICAgICAgICAgICByZWN0LmJvdHRv
bUxlZnQoKS55KCkgLSAvKiBvZmZzZXQgbGltaXQgZm9yIGdyYWRpZW50ICovIDIwKSk7CisgICAg
ICAgIGxpbmVhckdyYWRpZW50LnNldENvbG9yQXQoMC4wLCBRdDo6Z3JheSk7CisgICAgICAgIGxp
bmVhckdyYWRpZW50LnNldENvbG9yQXQoMC40LCBRdDo6d2hpdGUpOworICAgIH0KKworICAgIGRy
YXdSZWN0YW5ndWxhckNvbnRyb2xCYWNrZ3JvdW5kKHBhaW50ZXIsIHBlbiwgcmVjdCwgbGluZWFy
R3JhZGllbnQpOworCisgICAgY29uc3QgUVJlY3QgcihyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAt
IGZyYW1lV2lkdGggLSBhcnJvd0JveFdpZHRoLCByZWN0LnkoKSArIGZyYW1lV2lkdGgKKyAgICAg
ICAgICAgICAgICAgICAsIGFycm93Qm94V2lkdGgsIHJlY3QuaGVpZ2h0KCkgLSAyICogZnJhbWVX
aWR0aCk7CisgICAgUVBpeG1hcCBwaWMgPSBmaW5kQ29tYm9CdXR0b24oci5zaXplKCksIG11bHRp
cGxlLCAhZW5hYmxlZCk7CisKKyAgICBpZiAocGljLmlzTnVsbCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpbnQgeCA9IChyLndpZHRoKCkgLSBwaWMud2lkdGgoKSkgPj4gMTsKKyAgICBpbnQg
eSA9IChyLmhlaWdodCgpIC0gcGljLmhlaWdodCgpKSA+PiAxOworICAgIHBhaW50ZXItPmRyYXdQ
aXhtYXAoci54KCkgKyB4LCByLnkoKSArIHksIHBpYyk7CisKKyAgICBwYWludGVyLT5zZXRQZW4o
ZW5hYmxlZCA/IFF0OjpkYXJrR3JheSA6IFF0OjpncmF5KTsKKyAgICBwYWludGVyLT5kcmF3TGlu
ZShyLmxlZnQoKSAtIDIsIHIudG9wKCkgKyAyLCByLmxlZnQoKSAtIDIsIHIuYm90dG9tKCkgLSAy
KTsKK30KKworCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVtZVF0TW9iaWxlOjpj
cmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclRoZW1l
UXRNb2JpbGUocGFnZSkpOworfQorCitQYXNzUmVmUHRyPFJlbmRlclRoZW1lPiBSZW5kZXJUaGVt
ZTo6dGhlbWVGb3JQYWdlKFBhZ2UqIHBhZ2UpCit7CisgICAgaWYgKHBhZ2UpIHsKKyNpZiBIQVZF
KFFTVFlMRSkKKyAgICAgICAgaWYgKCFSZW5kZXJUaGVtZVF0Ojp1c2VNb2JpbGVUaGVtZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lUVN0eWxlOjpjcmVhdGUocGFnZSk7CisjZWxz
ZQorICAgICAgICBxcHV0ZW52KCJRVF9XRUJLSVRfVVNFX01PQklMRV9USEVNRSIsIFFCeXRlQXJy
YXkoIjEiKSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFJlbmRlclRoZW1lUXRNb2JpbGU6OmNy
ZWF0ZShwYWdlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUmVuZGVyVGhlbWUqIGZhbGxiYWNrID0g
UmVuZGVyVGhlbWVRdE1vYmlsZTo6Y3JlYXRlKDApLnJlbGVhc2VSZWYoKTsKKyAgICByZXR1cm4g
ZmFsbGJhY2s7Cit9CisKK1JlbmRlclRoZW1lUXRNb2JpbGU6OlJlbmRlclRoZW1lUXRNb2JpbGUo
UGFnZSogcGFnZSkKKyAgICA6IFJlbmRlclRoZW1lUXQocGFnZSkKK3sKK30KKworUmVuZGVyVGhl
bWVRdE1vYmlsZTo6flJlbmRlclRoZW1lUXRNb2JpbGUoKQoreworfQorCitib29sIFJlbmRlclRo
ZW1lUXRNb2JpbGU6OmlzQ29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGNv
bnN0IEJvcmRlckRhdGEmIGJvcmRlciwgY29uc3QgRmlsbExheWVyJiBmaWxsLCBjb25zdCBDb2xv
ciYgYmFja2dyb3VuZENvbG9yKSBjb25zdAoreworICAgIHN3aXRjaCAoc3R5bGUtPmFwcGVhcmFu
Y2UoKSkgeworICAgIGNhc2UgQ2hlY2tib3hQYXJ0OgorICAgIGNhc2UgUmFkaW9QYXJ0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIFJlbmRlclRo
ZW1lUXQ6OmlzQ29udHJvbFN0eWxlZChzdHlsZSwgYm9yZGVyLCBmaWxsLCBiYWNrZ3JvdW5kQ29s
b3IpOworICAgIH0KK30KKworaW50IFJlbmRlclRoZW1lUXRNb2JpbGU6OnBvcHVwSW50ZXJuYWxQ
YWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMTsK
K30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpjb21wdXRlU2l6ZUJhc2VkT25TdHlsZShS
ZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUpIGNvbnN0Cit7CisgICAgUVNpemUgc2l6ZSgwLCAwKTsK
KyAgICBjb25zdCBRRm9udE1ldHJpY3MgZm0ocmVuZGVyU3R5bGUtPmZvbnQoKS5mb250KCkpOwor
CisgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CisgICAgY2FzZSBUZXh0
QXJlYVBhcnQ6CisgICAgY2FzZSBTZWFyY2hGaWVsZFBhcnQ6CisgICAgY2FzZSBUZXh0RmllbGRQ
YXJ0OiB7CisgICAgICAgIGludCBwYWRkaW5nID0gZnJhbWVXaWR0aDsKKyAgICAgICAgcmVuZGVy
U3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAgICAgICBy
ZW5kZXJTdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nLCBGaXhlZCkpOworICAg
ICAgICByZW5kZXJTdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgocGFkZGluZywgRml4ZWQpKTsK
KyAgICAgICAgcmVuZGVyU3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHBhZGRpbmcsIEZp
eGVkKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgLy8gSWYgdGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lm
aWVkLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4KKyAgICBpZiAoIXJlbmRlclN0eWxlLT53
aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXJlbmRlclN0eWxlLT5oZWlnaHQoKS5pc0F1
dG8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChyZW5kZXJTdHlsZS0+YXBwZWFy
YW5jZSgpKSB7CisgICAgY2FzZSBDaGVja2JveFBhcnQ6IHsKKyAgICAgICAgY29uc3QgaW50IHcg
PSBjaGVja0JveFdpZHRoICogcmVuZGVyU3R5bGUtPmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAg
c2l6ZSA9IFFTaXplKHcsIHcpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBSYWRp
b1BhcnQ6IHsKKyAgICAgICAgY29uc3QgaW50IHcgPSByYWRpb1dpZHRoICogcmVuZGVyU3R5bGUt
PmVmZmVjdGl2ZVpvb20oKTsKKyAgICAgICAgc2l6ZSA9IFFTaXplKHcsIHcpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Ly8gRklYTUU6IENoZWNrIGlzIGZsYXdlZCwgc2luY2UgaXQgZG9lc24ndCB0YWtlIG1pbi13aWR0
aC9tYXgtd2lkdGggaW50byBhY2NvdW50LgorICAgIGlmIChyZW5kZXJTdHlsZS0+d2lkdGgoKS5p
c0ludHJpbnNpY09yQXV0bygpICYmIHNpemUud2lkdGgoKSA+IDApCisgICAgICAgIHJlbmRlclN0
eWxlLT5zZXRNaW5XaWR0aChMZW5ndGgoc2l6ZS53aWR0aCgpLCBGaXhlZCkpOworICAgIGlmIChy
ZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNBdXRvKCkgJiYgc2l6ZS5oZWlnaHQoKSA+IDApCisgICAg
ICAgIHJlbmRlclN0eWxlLT5zZXRNaW5IZWlnaHQoTGVuZ3RoKHNpemUuaGVpZ2h0KCksIEZpeGVk
KSk7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0QnV0dG9uU3R5bGUoQ1NT
U3R5bGVTZWxlY3Rvciogc2VsZWN0b3IsIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNv
bnN0Cit7CisgICAgLy8gRGl0Y2ggdGhlIGJvcmRlci4KKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIo
KTsKKworICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUp
OworCisgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc3R5bGUtPmZvbnRTaXpl
KCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRDb21wdXRlZFNpemUoc3R5bGUtPmZvbnRTaXpl
KCkpOworCisgICAgc3R5bGUtPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5l
SGVpZ2h0KCkpOworICAgIHNldEJ1dHRvblNpemUoc3R5bGUpOworICAgIHNldEJ1dHRvblBhZGRp
bmcoc3R5bGUpOworfQorCisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6c2V0QnV0dG9uUGFk
ZGluZyhSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0Cit7CisgICAgaWYgKCFzdHlsZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHN0eWxlLT5zZXRQYWRkaW5nTGVmdChMZW5ndGgoYnV0dG9uUGFkZGlu
Z0xlZnQsIEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoYnV0dG9u
UGFkZGluZ1JpZ2h0LCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9wKExlbmd0aChi
dXR0b25QYWRkaW5nVG9wLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExl
bmd0aChidXR0b25QYWRkaW5nQm90dG9tLCBGaXhlZCkpOworfQorCitib29sIFJlbmRlclRoZW1l
UXRNb2JpbGU6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIFN0eWxlUGFpbnRlck1vYmlsZSBwKHRoaXMsIGkp
OworICAgIGlmICghcC5pc1ZhbGlkKCkpCisgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBDb250
cm9sUGFydCBhcHBlYXJhbmNlID0gby0+c3R5bGUoKS0+YXBwZWFyYW5jZSgpOworICAgIGlmIChh
cHBlYXJhbmNlID09IFB1c2hCdXR0b25QYXJ0IHx8IGFwcGVhcmFuY2UgPT0gQnV0dG9uUGFydCkg
eworICAgICAgICBwLmRyYXdQdXNoQnV0dG9uKHIsIGlzUHJlc3NlZChvKSk7CisgICAgfSBlbHNl
IGlmIChhcHBlYXJhbmNlID09IFJhZGlvUGFydCkKKyAgICAgICBwLmRyYXdSYWRpb0J1dHRvbihy
LCBpc0NoZWNrZWQobykpOworICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gQ2hlY2tib3hQYXJ0
KQorICAgICAgIHAuZHJhd0NoZWNrQm94KHIsIGlzQ2hlY2tlZChvKSk7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1vYmlsZTo6YWRqdXN0VGV4dEZpZWxkU3R5
bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0
Cit7CisgICAgLy8gUmVzZXR0aW5nIHRoZSBzdHlsZSBsaWtlIHRoaXMgbGVhZHMgdG8gZGlmZmVy
ZW5jZXMgbGlrZToKKyAgICAvLyAtIFJlbmRlclRleHRDb250cm9sIHtJTlBVVH0gYXQgKDIsMikg
c2l6ZSAxNjh4MjUgW2JnY29sb3I9I0ZGRkZGRl0gYm9yZGVyOiAoMnB4IGluc2V0ICMwMDAwMDAp
XQorICAgIC8vICsgUmVuZGVyVGV4dENvbnRyb2wge0lOUFVUfSBhdCAoMiwyKSBzaXplIDE2Nngy
NgorICAgIC8vIGluIGxheW91dCB0ZXN0cyB3aGVuIGEgQ1NTIHN0eWxlIGlzIGFwcGxpZWQgdGhh
dCBkb2Vzbid0IGFmZmVjdCBiYWNrZ3JvdW5kIGNvbG9yLCBib3JkZXIgb3IKKyAgICAvLyBwYWRk
aW5nLiBKdXN0IHdvcnRoIGtlZXBpbmcgaW4gbWluZCEKKyAgICBzdHlsZS0+c2V0QmFja2dyb3Vu
ZENvbG9yKENvbG9yOjp0cmFuc3BhcmVudCk7CisgICAgc3R5bGUtPnJlc2V0Qm9yZGVyKCk7Cisg
ICAgc3R5bGUtPnJlc2V0UGFkZGluZygpOworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxlKHN0
eWxlKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKHRleHRGaWVsZFBhZGRpbmcs
IEZpeGVkKSk7CisgICAgc3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgodGV4dEZpZWxkUGFk
ZGluZywgRml4ZWQpKTsKK30KKworYm9vbCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpwYWludFRleHRG
aWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYg
cikKK3sKKyAgICBTdHlsZVBhaW50ZXJNb2JpbGUgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIENvbnRyb2xQYXJ0IGFwcGVhcmFu
Y2UgPSBvLT5zdHlsZSgpLT5hcHBlYXJhbmNlKCk7CisgICAgaWYgKGFwcGVhcmFuY2UgIT0gVGV4
dEZpZWxkUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNlICE9IFNlYXJjaEZpZWxkUGFydAorICAg
ICAgICAmJiBhcHBlYXJhbmNlICE9IFRleHRBcmVhUGFydAorICAgICAgICAmJiBhcHBlYXJhbmNl
ICE9IExpc3Rib3hQYXJ0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIE5vdyBwYWlu
dCB0aGUgdGV4dCBmaWVsZC4KKyAgICBwLmRyYXdMaW5lRWRpdChyLCAvKnN1bmtlbiA9ICovaXNQ
cmVzc2VkKG8pKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1v
YmlsZTo6YWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKK3sKKyAgICBzdHlsZS0+cmVzZXRCb3JkZXIoKTsKKwor
ICAgIC8vIEhlaWdodCBpcyBsb2NrZWQgdG8gYXV0by4KKyAgICBzdHlsZS0+c2V0SGVpZ2h0KExl
bmd0aChBdXRvKSk7CisKKyAgICAvLyBXaGl0ZS1zcGFjZSBpcyBsb2NrZWQgdG8gcHJlCisgICAg
c3R5bGUtPnNldFdoaXRlU3BhY2UoUFJFKTsKKworICAgIGNvbXB1dGVTaXplQmFzZWRPblN0eWxl
KHN0eWxlKTsKKworICAgIC8vIEFkZCBpbiB0aGUgcGFkZGluZyB0aGF0IHdlJ2QgbGlrZSB0byB1
c2UuCisgICAgc2V0UG9wdXBQYWRkaW5nKHN0eWxlKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ0xl
ZnQoTGVuZ3RoKG1lbnVMaXN0UGFkZGluZywgRml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJUaGVt
ZVF0TW9iaWxlOjpzZXRQb3B1cFBhZGRpbmcoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAorewor
ICAgIGNvbnN0IGludCBwYWRkaW5nTGVmdCA9IDQ7CisgICAgY29uc3QgaW50IHBhZGRpbmdSaWdo
dCA9IHN0eWxlLT53aWR0aCgpLmlzRml4ZWQoKSB8fCBzdHlsZS0+d2lkdGgoKS5pc1BlcmNlbnQo
KSA/IDUgOiA4OworCisgICAgc3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aChwYWRkaW5nTGVm
dCwgRml4ZWQpKTsKKyAgICBzdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KExlbmd0aChwYWRkaW5nUmln
aHQgKyBidXR0b25JY29uU2l6ZSwgRml4ZWQpKTsKKworICAgIHN0eWxlLT5zZXRQYWRkaW5nVG9w
KExlbmd0aCgyLCBGaXhlZCkpOworICAgIHN0eWxlLT5zZXRQYWRkaW5nQm90dG9tKExlbmd0aCgy
LCBGaXhlZCkpOworfQorCisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmlsZTo6cGFpbnRNZW51TGlz
dChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcikK
K3sKKyAgICBTdHlsZVBhaW50ZXJNb2JpbGUgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAuaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IFFQb2ludCB0b3BMZWZ0ID0g
ci5sb2NhdGlvbigpOworICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKHRvcExlZnQpOworICAgIGNv
bnN0IFFSZWN0IHJlY3QoUVBvaW50KDAsIDApLCByLnNpemUoKSk7CisKKyAgICBwLmRyYXdDb21i
b0JveChyZWN0LCBjaGVja011bHRpcGxlKG8pKTsKKyAgICBwLnBhaW50ZXItPnRyYW5zbGF0ZSgt
dG9wTGVmdCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFJlbmRlclRoZW1lUXRNb2Jp
bGU6OnBhaW50TWVudUxpc3RCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8m
IGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVj
dCYgcikKK3sKKyAgICBTdHlsZVBhaW50ZXJNb2JpbGUgcCh0aGlzLCBpKTsKKyAgICBpZiAoIXAu
aXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHAuZHJhd0NvbWJvQm94KHIs
IGNoZWNrTXVsdGlwbGUobykpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCisjaWYgRU5BQkxF
KFBST0dSRVNTX1RBRykKK2RvdWJsZSBSZW5kZXJUaGVtZVF0TW9iaWxlOjphbmltYXRpb25EdXJh
dGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwLjsKK30KKworYm9vbCBSZW5k
ZXJUaGVtZVF0TW9iaWxlOjpwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCogbywgY29uc3Qg
UGFpbnRJbmZvJiBwaSwgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiB0cnVlOworfQorI2VuZGlmCisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1vYmls
ZTo6cGFpbnRTbGlkZXJUcmFjayhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgcGks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFJl
bmRlclRoZW1lUXRNb2JpbGU6OnBhaW50U2xpZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25z
dCBQYWludEluZm8mIHBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEludFJlY3QmIHIpCit7CisgICAgLy8gV2UndmUgYWxyZWFkeSBwYWludGVkIGl0IGluIHBh
aW50U2xpZGVyVHJhY2soKSwgbm8gbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLgorICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUmVuZGVyVGhlbWVRdE1v
YmlsZTo6Y2hlY2tNdWx0aXBsZShSZW5kZXJPYmplY3QqIG8pIGNvbnN0Cit7CisgICAgSFRNTFNl
bGVjdEVsZW1lbnQqIHNlbGVjdCA9IG8gPyBzdGF0aWNfY2FzdDxIVE1MU2VsZWN0RWxlbWVudCo+
KG8tPm5vZGUoKSkgOiAwOworICAgIHJldHVybiBzZWxlY3QgPyBzZWxlY3QtPm11bHRpcGxlKCkg
OiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJUaGVtZVF0TW9iaWxlOjpzZXRQYWxldHRlRnJvbVBh
Z2VDbGllbnRJZkV4aXN0cyhRUGFsZXR0ZSYgcGFsZXR0ZSkgY29uc3QKK3sKKyAgICBzdGF0aWMg
UVBhbGV0dGUgbGlnaHRHcmF5UGFsZXR0ZShRdDo6bGlnaHRHcmF5KTsKKyAgICBwYWxldHRlID0g
bGlnaHRHcmF5UGFsZXR0ZTsKKyAgICByZXR1cm47Cit9CisKK3ZvaWQgUmVuZGVyVGhlbWVRdE1v
YmlsZTo6YWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKK3sK
KyAgICBjb25zdCBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUtPmFwcGVhcmFuY2UoKTsKKyAgICBp
ZiAocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1
bWJWZXJ0aWNhbFBhcnQpIHsKKyAgICAgICAgc3R5bGUtPnNldFdpZHRoKExlbmd0aChzbGlkZXJX
aWR0aCwgRml4ZWQpKTsKKyAgICAgICAgc3R5bGUtPnNldEhlaWdodChMZW5ndGgoc2xpZGVySGVp
Z2h0LCBGaXhlZCkpOworICAgIH0gZWxzZQorICAgICAgICBSZW5kZXJUaGVtZVF0OjphZGp1c3RT
bGlkZXJUaHVtYlNpemUoc3R5bGUpOworfQorCit9CisKKy8vIHZpbTogdHM9NCBzdz00IGV0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0TW9iaWxlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjZjYjQ2ZWNhMmQxNDBhNjk3NTQ4NGYzZGM3ODlkOTA1MWZhZWQ1YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXRNb2Jp
bGUuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSB0
aGVtZSBpbXBsZW1lbnRhdGlvbiBmb3IgZm9ybSBjb250cm9scyBpbiBXZWJDb3JlLgorICoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlh
cnkoLWllcykuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworI2lmbmRlZiBSZW5kZXJUaGVtZVF0TW9iaWxlX2gKKyNkZWZpbmUgUmVuZGVy
VGhlbWVRdE1vYmlsZV9oCisKKyNpbmNsdWRlICJSZW5kZXJUaGVtZVF0LmgiCisKKyNpbmNsdWRl
IDxRQnJ1c2g+CisKK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUUNvbG9yOworY2xhc3MgUVBp
eG1hcDsKK2NsYXNzIFFTaXplOworUVRfRU5EX05BTUVTUEFDRQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFJlbmRlclRoZW1lUXRNb2JpbGUgOiBwdWJsaWMgUmVuZGVyVGhlbWVRdCB7
Citwcml2YXRlOgorICAgIFJlbmRlclRoZW1lUXRNb2JpbGUoUGFnZSopOworICAgIHZpcnR1YWwg
flJlbmRlclRoZW1lUXRNb2JpbGUoKTsKKworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFJlbmRlclRoZW1lPiBjcmVhdGUoUGFnZSopOworCisgICAgdmlydHVhbCB2b2lkIGFkanVzdFNs
aWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSopIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGlz
Q29udHJvbFN0eWxlZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IEJvcmRlckRhdGEmLCBjb25z
dCBGaWxsTGF5ZXImLCBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKSBjb25zdDsKKworICAg
IHZpcnR1YWwgaW50IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm90dG9tKFJlbmRlclN0eWxlKikgY29u
c3Q7CisKK3Byb3RlY3RlZDoKKworICAgIHZpcnR1YWwgdm9pZCBhZGp1c3RCdXR0b25TdHlsZShD
U1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVtZW50KikgY29uc3Q7CisgICAgdmly
dHVhbCBib29sIHBhaW50QnV0dG9uKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludFRleHRGaWVsZChSZW5kZXJP
YmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCB2
b2lkIGFkanVzdFRleHRGaWVsZFN0eWxlKENTU1N0eWxlU2VsZWN0b3IqLCBSZW5kZXJTdHlsZSos
IEVsZW1lbnQqKSBjb25zdDsKKworICAgIHZpcnR1YWwgYm9vbCBwYWludE1lbnVMaXN0KFJlbmRl
ck9iamVjdCosIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRqdXN0TWVudUxpc3RTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUq
LCBFbGVtZW50KikgY29uc3Q7CisKKyAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRv
bihSZW5kZXJPYmplY3QqLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CisKKyNp
ZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQorICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRo
ZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5p
bWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCBwYWludFByb2dyZXNzQmFyKFJlbmRlck9iamVjdCosIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKyNlbmRpZgorCisgICAgdmlydHVhbCBib29sIHBhaW50
U2xpZGVyVHJhY2soUmVuZGVyT2JqZWN0KiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpOworICAgIHZpcnR1YWwgYm9vbCBwYWludFNsaWRlclRodW1iKFJlbmRlck9iamVjdCosIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb21w
dXRlU2l6ZUJhc2VkT25TdHlsZShSZW5kZXJTdHlsZSopIGNvbnN0OworICAgIHZpcnR1YWwgUVNo
YXJlZFBvaW50ZXI8U3R5bGVQYWludGVyPiBnZXRTdHlsZVBhaW50ZXIoY29uc3QgUGFpbnRJbmZv
Jik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBjaGVja011bHRpcGxlKFJlbmRlck9iamVjdCopIGNv
bnN0OworICAgIHZvaWQgc2V0QnV0dG9uUGFkZGluZyhSZW5kZXJTdHlsZSopIGNvbnN0OworICAg
IHZvaWQgc2V0UG9wdXBQYWRkaW5nKFJlbmRlclN0eWxlKikgY29uc3Q7CisKKyAgICB2b2lkIHNl
dFBhbGV0dGVGcm9tUGFnZUNsaWVudElmRXhpc3RzKFFQYWxldHRlJikgY29uc3Q7Cit9OworCitj
bGFzcyBTdHlsZVBhaW50ZXJNb2JpbGUgOiBwdWJsaWMgU3R5bGVQYWludGVyIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBTdHlsZVBhaW50ZXJNb2JpbGUoUmVuZGVyVGhlbWVRdE1vYmlsZSosIGNv
bnN0IFBhaW50SW5mbyYpOworCisgICAgdm9pZCBkcmF3TGluZUVkaXQoY29uc3QgUVJlY3QmLCBi
b29sIHN1bmtlbiwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7CisgICAgdm9pZCBkcmF3Q2hlY2tCb3go
Y29uc3QgUVJlY3QmLCBib29sIGNoZWNrZWQsIGJvb2wgZW5hYmxlZCA9IHRydWUpOworICAgIHZv
aWQgZHJhd1JhZGlvQnV0dG9uKGNvbnN0IFFSZWN0JiwgYm9vbCBjaGVja2VkLCBib29sIGVuYWJs
ZWQgPSB0cnVlKTsKKyAgICB2b2lkIGRyYXdQdXNoQnV0dG9uKGNvbnN0IFFSZWN0JiwgYm9vbCBz
dW5rZW4sIGJvb2wgZW5hYmxlZCA9IHRydWUpOworICAgIHZvaWQgZHJhd0NvbWJvQm94KGNvbnN0
IFFSZWN0JiwgYm9vbCBtdWx0aXBsZSwgYm9vbCBlbmFibGVkID0gdHJ1ZSk7CisKK3ByaXZhdGU6
CisgICAgdm9pZCBkcmF3Q2hlY2tlcihRUGFpbnRlciosIGludCBzaXplLCBRQ29sb3IpIGNvbnN0
OworICAgIFFQaXhtYXAgZmluZENoZWNrZXIoY29uc3QgUVJlY3QmLCBib29sIGRpc2FibGVkKSBj
b25zdDsKKworICAgIHZvaWQgZHJhd1JhZGlvKFFQYWludGVyKiwgY29uc3QgUVNpemUmLCBib29s
IGNoZWNrZWQsIFFDb2xvcikgY29uc3Q7CisgICAgUVBpeG1hcCBmaW5kUmFkaW8oY29uc3QgUVNp
emUmLCBib29sIGNoZWNrZWQsIGJvb2wgZGlzYWJsZWQpIGNvbnN0OworCisgICAgUVNpemUgZ2V0
QnV0dG9uSW1hZ2VTaXplKGNvbnN0IFFTaXplJikgY29uc3Q7CisgICAgdm9pZCBkcmF3U2ltcGxl
Q29tYm9CdXR0b24oUVBhaW50ZXIqLCBjb25zdCBRU2l6ZSYsIFFDb2xvcikgY29uc3Q7CisgICAg
dm9pZCBkcmF3TXVsdGlwbGVDb21ib0J1dHRvbihRUGFpbnRlciosIGNvbnN0IFFTaXplJiwgUUNv
bG9yKSBjb25zdDsKKyAgICBRUGl4bWFwIGZpbmRDb21ib0J1dHRvbihjb25zdCBRU2l6ZSYsIGJv
b2wgbXVsdGlwbGUsIGJvb2wgZGlzYWJsZWQpIGNvbnN0OworCisgICAgUV9ESVNBQkxFX0NPUFko
U3R5bGVQYWludGVyTW9iaWxlKTsKK307Cit9CisKKyNlbmRpZiAvLyBSZW5kZXJUaGVtZVF0TW9i
aWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclRo
ZW1lUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5j
cHAKaW5kZXggM2RhNWE3NGY4NmQ0NTM3Mjg0OWRjYzc0MzNiMDFiZDRhMDE0ZjA1MS4uMDg5YWY2
NjkxOGFlMDQ5NmQwMTFjNjkyZmM2YTFmNGNkYmQwY2IyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVRdC5jcHAKQEAgLTI2LDMxICsyNiw0NyBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKworI2lmICFIQVZFKFFTVFlMRSkKKyNpbmNsdWRl
ICJTY3JvbGxiYXJUaGVtZS5oIgorCisjZWxzZQogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lUXQu
aCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lUXQuaCIKKyNpbmNsdWRlICJSZW5kZXJU
aGVtZVFTdHlsZS5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lUXRNb2JpbGUuaCIKICNpbmNsdWRl
ICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAKICNpbmNsdWRlIDxRQXBw
bGljYXRpb24+Ci0jaWZkZWYgUV9XU19NQUMKKyNpZmRlZiBRX09TX01BQwogI2luY2x1ZGUgPFFN
YWNTdHlsZT4KICNlbmRpZgogI2luY2x1ZGUgPFFNZW51PgogI2luY2x1ZGUgPFFQYWludGVyPgog
I2luY2x1ZGUgPFFTdHlsZT4KICNpbmNsdWRlIDxRU3R5bGVPcHRpb25TbGlkZXI+CisjZW5kaWYg
Ly8gSEFWRShRU1RZTEUpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU2Nyb2xsYmFyVGhlbWUq
IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpCiB7Ci0gICAgc3RhdGljIFNjcm9sbGJhclRo
ZW1lUXQgdGhlbWU7Ci0gICAgcmV0dXJuICZ0aGVtZTsKKyAgICBzdGF0aWMgU2Nyb2xsYmFyVGhl
bWUqIHRoZW1lID0gMDsKKyAgICBpZiAodGhlbWUpCisgICAgICAgIHJldHVybiB0aGVtZTsKKyNp
ZiBIQVZFKFFTVFlMRSkKKyAgICBpZiAoIVJlbmRlclRoZW1lUXQ6OnVzZU1vYmlsZVRoZW1lKCkp
CisgICAgICAgIHRoZW1lID0gbmV3IFNjcm9sbGJhclRoZW1lUXQoKTsKKyAgICBlbHNlCisjZW5k
aWYKKyAgICAgICAgdGhlbWUgPSBuZXcgU2Nyb2xsYmFyVGhlbWUoKTsKKyAgICByZXR1cm4gdGhl
bWU7CiB9CiAKKyNpZiBIQVZFKFFTVFlMRSkKIFNjcm9sbGJhclRoZW1lUXQ6On5TY3JvbGxiYXJU
aGVtZVF0KCkKIHsKIH0KQEAgLTE0Niw3ICsxNjIsNyBAQCBib29sIFNjcm9sbGJhclRoZW1lUXQ6
OnBhaW50KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dAogICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBTdHlsZVBhaW50ZXIgcCh0aGlz
LCBncmFwaGljc0NvbnRleHQpOworICAgIFN0eWxlUGFpbnRlclFTdHlsZSBwKHRoaXMsIGdyYXBo
aWNzQ29udGV4dCk7CiAgICAgaWYgKCFwLmlzVmFsaWQoKSkKICAgICAgIHJldHVybiB0cnVlOwog
CkBAIC0xNTUsNyArMTcxLDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZVF0OjpwYWludChTY3JvbGxi
YXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnQKIAogICAgIHAucGFp
bnRlci0+c2V0Q2xpcFJlY3Qob3B0LT5yZWN0LmludGVyc2VjdGVkKGRhbWFnZVJlY3QpLCBRdDo6
SW50ZXJzZWN0Q2xpcCk7CiAKLSNpZmRlZiBRX1dTX01BQworI2lmZGVmIFFfT1NfTUFDCiAgICAg
Ly8gRklYTUU6IFdlIGFsc28gbmVlZCB0byBjaGVjayB0aGUgd2lkZ2V0IHN0eWxlIGJ1dCB0b2Rh
eSBTY3JvbGxiYXJUaGVtZSBpcyBub3QgYXdhcmUgb2YgdGhlIHBhZ2Ugc28gd2UKICAgICAvLyBj
YW4ndCBnZXQgdGhlIHdpZGdldC4KICAgICBpZiAocW9iamVjdF9jYXN0PFFNYWNTdHlsZSo+KHN0
eWxlKCkpKQpAQCAtMjAwLDkgKzIxNiw2IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVRdDo6aW52YWxp
ZGF0ZVBhcnQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQpCiAKIGludCBTY3Jv
bGxiYXJUaGVtZVF0OjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUgY29u
dHJvbFNpemUpCiB7Ci0jaWYgVVNFKFFUX01PQklMRV9USEVNRSkKLSAgICByZXR1cm4gMDsKLSNl
bmRpZgogICAgIFFTdHlsZU9wdGlvblNsaWRlciBvOwogICAgIG8ub3JpZW50YXRpb24gPSBRdDo6
VmVydGljYWw7CiAgICAgby5zdGF0ZSAmPSB+UVN0eWxlOjpTdGF0ZV9Ib3Jpem9udGFsOwpAQCAt
MjQzLDcgKzI1Niw3IEBAIGludCBTY3JvbGxiYXJUaGVtZVF0Ojp0cmFja0xlbmd0aChTY3JvbGxi
YXIqIHNjcm9sbGJhcikKIAogdm9pZCBTY3JvbGxiYXJUaGVtZVF0OjpwYWludFNjcm9sbENvcm5l
cihTY3JvbGxWaWV3KiwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIFN0eWxlUGFpbnRlciBwKHRoaXMsIGNvbnRleHQpOworICAgIFN0eWxlUGFp
bnRlclFTdHlsZSBwKHRoaXMsIGNvbnRleHQpOwogICAgIGlmICghcC5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMjU3LDUgKzI3MCw2IEBAIFFTdHlsZSogU2Nyb2xsYmFyVGhlbWVR
dDo6c3R5bGUoKSBjb25zdAogICAgIHJldHVybiBRQXBwbGljYXRpb246OnN0eWxlKCk7CiB9CiAK
KyNlbmRpZiAvLyBIQVZFKFFTVFlMRSkKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9x
dC9BcGkvcXdlYnBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYnBhZ2UuY3BwCmlu
ZGV4IDk4NTc3YjVjZGNkMWRlOGU0ZGE5OTA1NjczOWY3NjhmZGJjNGNlZDEuLjQ2ZTAyMTllZTY3
MmNkMzYzYWJlNzZmNzU5OGJkNTc4NzczNDEyN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
cXQvQXBpL3F3ZWJwYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2VicGFnZS5j
cHAKQEAgLTMyNzIsMTEgKzMyNzIsMTUgQEAgYm9vbCBRV2ViUGFnZTo6c3dhbGxvd0NvbnRleHRN
ZW51RXZlbnQoUUNvbnRleHRNZW51RXZlbnQgKmV2ZW50KQogewogICAgIGQtPnBhZ2UtPmNvbnRl
eHRNZW51Q29udHJvbGxlcigpLT5jbGVhckNvbnRleHRNZW51KCk7CiAKLSAgICBpZiAoUVdlYkZy
YW1lKiB3ZWJGcmFtZSA9IGZyYW1lQXQoZXZlbnQtPnBvcygpKSkgewotICAgICAgICBGcmFtZSog
ZnJhbWUgPSBRV2ViRnJhbWVQcml2YXRlOjpjb3JlKHdlYkZyYW1lKTsKLSAgICAgICAgaWYgKFNj
cm9sbGJhciogc2Nyb2xsYmFyID0gZnJhbWUtPnZpZXcoKS0+c2Nyb2xsYmFyQXRQb2ludChQbGF0
Zm9ybU1vdXNlRXZlbnQoZXZlbnQsIDEpLnBvcygpKSkKLSAgICAgICAgICAgIHJldHVybiBzY3Jv
bGxiYXItPmNvbnRleHRNZW51KFBsYXRmb3JtTW91c2VFdmVudChldmVudCwgMSkpOworI2lmIEhB
VkUoUVNUWUxFKQorICAgIGlmIChxZ2V0ZW52KCJRVF9XRUJLSVRfVVNFX01PQklMRV9USEVNRSIp
LmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChRV2ViRnJhbWUqIHdlYkZyYW1lID0gZnJhbWVBdChl
dmVudC0+cG9zKCkpKSB7CisgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBRV2ViRnJhbWVQcml2
YXRlOjpjb3JlKHdlYkZyYW1lKTsKKyAgICAgICAgICAgIGlmIChTY3JvbGxiYXIqIHNjcm9sbGJh
ciA9IGZyYW1lLT52aWV3KCktPnNjcm9sbGJhckF0UG9pbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2
ZW50LCAxKS5wb3MoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+Y29udGV4
dE1lbnUoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50LCAxKSk7CisgICAgICAgIH0KICAgICB9Cisj
ZW5kaWYKIAogICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2VkRnJhbWUgPSBkLT5wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgZm9jdXNlZEZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+c2VuZENvbnRleHRNZW51RXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2
ZW50LCAxKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnByaSBi
L1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJpCmluZGV4IGI2OTk5Y2JiYTgzNjYwYjg4
NmQ5ZDg4NDM1NDM2OGFlNDZkNjhiMDMuLjJhMDgxMzZiMTlkZjZmOTAzMjc4NGY4YjRkYTMyYTc3
ZmM0Y2Y1NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJpCisr
KyBiL1NvdXJjZS9XZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJpCkBAIC0yNyw4ICsyNyw1IEBAIGhh
dmVRdCg1KSB7CiAgICAgY29udGFpbnMoUVRfQ09ORklHLCBkZWNsYXJhdGl2ZSk6IFFUICs9IGRl
Y2xhcmF0aXZlCiB9CiAKLSMgVXNlIHRoZSBRdCBNb2JpbGUgdGhlbWUgaWYgaXQgaXMgaW4gdGhl
IENPTkZJRwotdXNlX3F0X21vYmlsZV90aGVtZTogREVGSU5FUyArPSBXVEZfVVNFX1FUX01PQklM
RV9USEVNRT0xCi0KICMgVGhpcyBkZWZpbmUgaXMgdXNlZCBieSBzb21lIHRlc3RzIHRvIGxvb2sg
dXAgcmVzb3VyY2VzIGluIHRoZSBzb3VyY2UgdHJlZQogREVGSU5FUyArPSBURVNUU19TT1VSQ0Vf
RElSPVxcXCIkJFBXRC9cXFwiCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggMmE5ZDM2NjlhYTlhNzJkYzQ2MjFjMDRmYWI4MzVmYzVkMTZkM2EwNi4u
NTRlZGUzMmNkZTBhNTQwNWViY2E5YzZhNTQyZDJjN2Q5OTI3ZWJmYyAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEx
LTExLTA5ICBQaWVycmUgUm9zc2kgIDxwaWVycmUucm9zc2lAZ21haWwuY29tPgorCisgICAgICAg
IFtRdF0gUmVtb3ZlIHRoZSBRU3R5bGUgZGVwZW5kZW5jeSBpbiBRdCdzIG1vYmlsZSB0aGVtZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njc3NzMKKwor
ICAgICAgICBUaGlzIHJlZmFjdG9yaW5nIHNwbGl0cyB1cCBSZW5kZXJUaGVtZVF0IHdpdGggdHdv
CisgICAgICAgIHN1YmNsYXNzZXMsIGEgUVN0eWxlLWJhY2tlZCBvbmUsIGFuZCBhIE1vYmlsZSB2
ZXJzaW9uCisgICAgICAgIHRoYXQgdXNlcyB0aGUgb2xkIG1vYmlsZSB0aGVtZSBmb3Igbm93Lgor
CisgICAgICAgIFFTdHlsZSBhdmFpbGFiaWxpdHkgaXMgZGV0ZWN0ZWQgYXQgY29tcGlsZSB0aW1l
LCBhbmQKKyAgICAgICAgaXRzIHVzZSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBRVF9XRUJLSVRfVVNF
X01PQklMRV9USEVNRQorICAgICAgICBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvcXQvQWN0aXZhdGVGb250c1F0LmNwcDoKKyAgICAgICAgKFdUUjo6YWN0
aXZhdGVGb250cyk6CisgICAgICAgICogcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5w
cmY6IEhBVkVfUVNUWUxFIGRldGVjdGlvbiwKKyAgICAgICAgYmFzZWQgb24gYXZhaWxhYmlsaXR5
IG9mIFF0V2lkZ2V0cy4KKyAgICAgICAgKiBxbWFrZS9ta3NwZWNzL2ZlYXR1cmVzL3dlYmNvcmUu
cHJmOiBjbGVhbnVwLgorCiAyMDExLTExLTEwICBTaW1vbiBIYXVzbWFubiAgPHNpbW9uLmhhdXNt
YW5uQG5va2lhLmNvbT4KIAogICAgICAgICBbUXRdIEZpeCBrZXlib2FyZCByZWxhdGVkIGxheW91
dCB0ZXN0cyBhZnRlciBBUEkgcmVmYWN0b3JpbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvcXQvQWN0aXZhdGVGb250c1F0LmNwcCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvcXQvQWN0aXZhdGVGb250c1F0LmNwcAppbmRl
eCBiOGJlMjUxMDcyYTM0MzhjNGJkMzZjNzhmZWYxNGFhMjg1ZTljYmMxLi5mMjFiOGM5YzRkZGU0
ZTExNjE5NzMyYzU5ZWEyNTM0YmNjMDA3ZDU1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL3F0L0FjdGl2YXRlRm9udHNRdC5jcHAKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9xdC9BY3RpdmF0ZUZvbnRzUXQuY3BwCkBA
IC04OSw3ICs4OSw5IEBAIHZvaWQgYWN0aXZhdGVGb250cygpCiAjZW5kaWYKIAogICAgIFFBcHBs
aWNhdGlvbjo6c2V0R3JhcGhpY3NTeXN0ZW0oUUxhdGluMVN0cmluZygicmFzdGVyIikpOworI2lm
IEhBVkUoUVNUWUxFKQogICAgIFFBcHBsaWNhdGlvbjo6c2V0U3R5bGUobmV3IFFXaW5kb3dzU3R5
bGUpOworI2VuZGlmCiAKICNpZiBkZWZpbmVkKFFfV1NfWDExKQogICAgIFFYMTFJbmZvOjpzZXRB
cHBEcGlYKDAsIDk2KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMv
ZmVhdHVyZXMucHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYK
aW5kZXggMzgyYWZmYmEzZTIwMDMyNjU1NTBkZDc2MTM2ZDExYTg3YmQxZjkyMC4uZDkwYWU0YzBh
MTMxODJmYmZlM2RjYTczNmJmMmQ0NDkzYWUwNzYwOCAxMDA2NDQKLS0tIGEvVG9vbHMvcW1ha2Uv
bWtzcGVjcy9mZWF0dXJlcy9mZWF0dXJlcy5wcmYKKysrIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9m
ZWF0dXJlcy9mZWF0dXJlcy5wcmYKQEAgLTcyLDYgKzcyLDcgQEAgaXNFbXB0eShIQVZFX1FSQVdG
T05UKSB7CiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPX1RSQUNLPS4pOiBERUZJTkVT
ICs9IEVOQUJMRV9WSURFT19UUkFDSz0wCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1RPVUNI
X0lDT05fTE9BRElORz0uKTogREVGSU5FUyArPSBFTkFCTEVfVE9VQ0hfSUNPTl9MT0FESU5HPTAK
ICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfQU5JTUFUSU9OX0FQST0uKTogREVGSU5FUyArPSBF
TkFCTEVfQU5JTUFUSU9OX0FQST0wCishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX05PX0xJU1RC
T1hfUkVOREVSSU5HPS4pOiBERUZJTkVTICs9IEVOQUJMRV9OT19MSVNUQk9YX1JFTkRFUklORz0x
CiAKICMgU1ZHIHN1cHBvcnQKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTApIHsKQEAg
LTk2LDYgKzk3LDkgQEAgaXNFbXB0eShIQVZFX1FSQVdGT05UKSB7CiAgICAgfQogfQogCisjIFFT
dHlsZSBkZXRlY3Rpb24KK2hhdmVRdCg0KXwhaXNFbXB0eShRVC53aWRnZXRzLm5hbWUpOiBERUZJ
TkVTICs9IEhBVkVfUVNUWUxFPTEKKwogIyBXZWJHTCBzdXBwb3J0CiBjb250YWlucyhRVF9DT05G
SUcsIG9wZW5nbCk6IXdpbjMyLSogewogICAgICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV0VC
R0w9Lik6IERFRklORVMgKz0gRU5BQkxFX1dFQkdMPTEKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtl
L21rc3BlY3MvZmVhdHVyZXMvd2ViY29yZS5wcmYgYi9Ub29scy9xbWFrZS9ta3NwZWNzL2ZlYXR1
cmVzL3dlYmNvcmUucHJmCmluZGV4IGMwZTViOTg0NTBjZjY5MDRmYzEwMzFmMTkyNTg5ODFhMzU0
YmViYzMuLjg3YWRjYzk4ZDM0YzY1MTExODU0YmFjYzg5YzYzNjEzMmVlNjk4MmIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvZmVhdHVyZXMvd2ViY29yZS5wcmYKKysrIGIvVG9vbHMv
cW1ha2UvbWtzcGVjcy9mZWF0dXJlcy93ZWJjb3JlLnByZgpAQCAtMjg1LDggKzI4NSw2IEBAIHVu
aXh8d2luMzItZysrKiB7CiAKIGVuYWJsZV9mYXN0X21vYmlsZV9zY3JvbGxpbmc6IERFRklORVMg
Kz0gRU5BQkxFX0ZBU1RfTU9CSUxFX1NDUk9MTElORz0xCiAKLXVzZV9xdF9tb2JpbGVfdGhlbWU6
IERFRklORVMgKz0gV1RGX1VTRV9RVF9NT0JJTEVfVEhFTUU9MQotCiBjb25maWdfc3RlcCB7CiAg
ICAgcGF0aFRvV2ViQ29yZU91dHB1dCA9ICQkYnVpbGREaXJGb3JTb3VyY2UoU291cmNlL1dlYkNv
cmUpLyQkV0VCQ09SRV9ERVNURElSCiAgICAgbGlua1N0YXRpY0xpYnJhcnkoJCRwYXRoVG9XZWJD
b3JlT3V0cHV0LCAkJFdFQkNPUkVfVEFSR0VUKQo=
</data>
<flag name="review"
          id="113403"
          type_id="1"
          status="+"
          setter="hausmann"
    />
          </attachment>
      

    </bug>

</bugzilla>