<?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>208129</bug_id>
          
          <creation_ts>2020-02-24 04:29:23 -0800</creation_ts>
          <short_desc>[GTK] Stop using gtk foreign drawing API to style form controls</short_desc>
          <delta_ts>2020-03-31 06:38:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=175067</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=185855</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=209805</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>208132</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>benjamin</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>macpherson</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>menard</cc>
    
    <cc>otte</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1622110</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-24 04:29:23 -0800</bug_when>
    <thetext>It causes layout issues in some websites, it doesn&apos;t really work with all GTK themes and it won&apos;t be possible with GTK4 because foreign drawing APIs have been removed. Instead we can use the new custom style used by WPE port, which is based on adwaita, but simplified to avoid the huge minimum control sizes, the usage of gradients and transparencies, etc. We can still use the GTK API to get the selection colors, to keep some consistency with the actual GTK theme, but that won&apos;t be possible with GTK4 either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622111</commentid>
    <comment_count>1</comment_count>
      <attachid>391524</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-24 04:38:08 -0800</bug_when>
    <thetext>Created attachment 391524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622112</commentid>
    <comment_count>2</comment_count>
      <attachid>391525</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-24 04:45:04 -0800</bug_when>
    <thetext>Created attachment 391525
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622120</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-24 05:49:38 -0800</bug_when>
    <thetext>This will require a major rebaseline that I&apos;ll do once the patch lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622128</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-02-24 06:24:21 -0800</bug_when>
    <thetext>Resolves: bug #175067 and bug #185855</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622162</commentid>
    <comment_count>5</comment_count>
      <attachid>391525</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-02-24 07:58:31 -0800</bug_when>
    <thetext>Comment on attachment 391525
Patch

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

&gt; Source/WebCore/platform/adwaita/ThemeAdwaita.hSource/WebCore/platform/wpe/ThemeWPE.h:-46
&gt; -

This looks like a bogus line removal.

&gt; Source/WebCore/platform/gtk/RenderThemeGadget.h:-39
&gt; -class RenderThemeGadget {

It makes me *so* happy to see this hairy code go away!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622545</commentid>
    <comment_count>6</comment_count>
      <attachid>391525</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-25 01:53:58 -0800</bug_when>
    <thetext>Comment on attachment 391525
Patch

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

&gt;&gt; Source/WebCore/platform/adwaita/ThemeAdwaita.hSource/WebCore/platform/wpe/ThemeWPE.h:-46
&gt;&gt; -
&gt; 
&gt; This looks like a bogus line removal.

Not really, I decided to group virtual methods together. I agree it&apos;s out of scope of this bug, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622547</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-02-25 01:56:00 -0800</bug_when>
    <thetext>Committed r257299: &lt;https://trac.webkit.org/changeset/257299&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630554</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-16 16:57:44 -0700</bug_when>
    <thetext>Can we talk about naming here? I just saw RenderThemeAdwaita.h and had no idea what it was.

If you&apos;re introducing a new theme, I think it should be announced on webkit-dev, and undergo some naming bikeshedding. &quot;Adwaita&quot; is about as confusing as &quot;Nicosia&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630598</commentid>
    <comment_count>9</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-03-16 18:20:21 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #8)
&gt; Can we talk about naming here? I just saw RenderThemeAdwaita.h and had no
&gt; idea what it was.
&gt; 
&gt; If you&apos;re introducing a new theme, I think it should be announced on
&gt; webkit-dev, and undergo some naming bikeshedding. &quot;Adwaita&quot; is about as
&gt; confusing as &quot;Nicosia&quot;.

Adwaita is the name of the default GTK theme. So this is basically
a theme that resembles the GTK default somewhat using only WebKit
functionality for rendering the controls — so we can use it also in
the WPE port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630668</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-03-17 02:46:27 -0700</bug_when>
    <thetext>RenderThemeGTK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630669</commentid>
    <comment_count>11</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-03-17 02:49:42 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #10)
&gt; RenderThemeGTK?

No. It&apos;s also used by WPE now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630690</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-03-17 04:02:11 -0700</bug_when>
    <thetext>Well, it is still a GTK theme. 

RenderThemeGTKAndWPE :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630761</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-03-17 09:55:27 -0700</bug_when>
    <thetext>Hm, it&apos;s a bit different from Nicosia because the name Nicosia was largely arbitrary and WebKit-specific; we could replace Nicosia with FINLAN and it would make nearly as much sense. In contrast, Adwaita is the name of an existing popular upstream project that should be immediately recognizable to anyone working on Linux, and it&apos;s certainly easier to write than RenderThemeGTKAndWPE. The likelihood that we&apos;ll eventually have multiple hardcoded themes is quite high; Ubuntu, our biggest distributor, is going to be very unhappy and is sure to want a RenderThemeYaru. elementary OS will be very unhappy and want a RenderThemeGranite. Etc. We can&apos;t please everyone, but it&apos;s unlikely that Adwaita will remain the only supported theme.

We should probably blog about this very soon, by the way, because it&apos;s a real big deal and will affect LTS distros when they update to 2.30. It&apos;s also likely to cause a serious adoption problem; it&apos;s possible that Ubuntu won&apos;t be willing to update to 2.30 until Yaru support exists, but we&apos;re not going to want to write a Yaru theme ourselves, and Ubuntu&apos;s not likely to want to do it themselves either, so stalemate is likely....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631612</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-03-19 05:24:08 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #13)
&gt; Hm, it&apos;s a bit different from Nicosia because the name Nicosia was largely
&gt; arbitrary and WebKit-specific; we could replace Nicosia with FINLAN and it
&gt; would make nearly as much sense. In contrast, Adwaita is the name of an
&gt; existing popular upstream project that should be immediately recognizable to
&gt; anyone working on Linux, and it&apos;s certainly easier to write than
&gt; RenderThemeGTKAndWPE. The likelihood that we&apos;ll eventually have multiple
&gt; hardcoded themes is quite high; Ubuntu, our biggest distributor, is going to
&gt; be very unhappy and is sure to want a RenderThemeYaru. elementary OS will be
&gt; very unhappy and want a RenderThemeGranite. Etc. We can&apos;t please everyone,
&gt; but it&apos;s unlikely that Adwaita will remain the only supported theme.

That&apos;s not the plan, though. The idea is to have our own single theme and assume that we are going to lose the consistency with other apps. We have started the default theme based on adwaita to minimize the impact for users who don&apos;t change the default theme.

&gt; We should probably blog about this very soon, by the way, because it&apos;s a
&gt; real big deal and will affect LTS distros when they update to 2.30. It&apos;s
&gt; also likely to cause a serious adoption problem; it&apos;s possible that Ubuntu
&gt; won&apos;t be willing to update to 2.30 until Yaru support exists, but we&apos;re not
&gt; going to want to write a Yaru theme ourselves, and Ubuntu&apos;s not likely to
&gt; want to do it themselves either, so stalemate is likely....

For GTK3 the only solution I see is to bring back the old code and add a new setting (useSystemAppearance), disabled by default, that apps can use to keep the consistency. I understand it&apos;s not the same for a web browser like ephy, that would be inconsistent with other apps, than other apps like evo that would be inconsistent with itself (web views will have a scrollbar while other widgets will have others).

There&apos;s no solution for GTK4, foreign drawing is not supported and it&apos;s not even possible to ask GTK for the selection colors to keep a minimum consistency.

I don&apos;t know what else we can do from WebKit, to be honest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631667</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-03-19 09:02:48 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #14)
&gt; I don&apos;t know what else we can do from WebKit, to be honest.

I think we should just tell distros that they are welcome to maintain their own RenderTheme classes in WebKit if they want consistency with their system theme, but we will only maintain the Adwaita theme. Maybe they&apos;ll be OK with it looking like Adwaita, maybe not. Let&apos;s just give them a heads-up now so they&apos;re not surprised when 2.30 is released?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631793</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-03-19 13:23:35 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #14)
&gt; For GTK3 the only solution I see is to bring back the old code and add a new
&gt; setting (useSystemAppearance), disabled by default, that apps can use to
&gt; keep the consistency.

Compromise proposal: do this, but enabled by default, and only for scrollbars. All the web form controls can use Adwaita theme. Scrollbar is going to be more important than form controls since having a non-native scrollbar will look really out of place. The rest is just web content, and it&apos;s not expected that web content look native. Then when GTK 4 comes around... well, I don&apos;t know what to do for GTK 4, but I think retaining native scrollbar would be enough to avoid most complaints. Maybe we could try moving the scrollbar to the UI process, except when it&apos;s actually themed by websites (in which case it has to be in the web process no matter what).

Maybe we could add a config file or some other way of configuring a color scheme on top of Adwaita that Yaru and Granite (and other themes) could use, without creating a completely separate RenderTheme class that would be tough to maintain.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631805</commentid>
    <comment_count>17</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-03-19 13:49:17 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #16)
&gt; (In reply to Carlos Garcia Campos from comment #14)
&gt; &gt; For GTK3 the only solution I see is to bring back the old code and add a new
&gt; &gt; setting (useSystemAppearance), disabled by default, that apps can use to
&gt; &gt; keep the consistency.
&gt; 
&gt; Compromise proposal: do this, but enabled by default, and only for
&gt; scrollbars. All the web form controls can use Adwaita theme. Scrollbar is
&gt; going to be more important than form controls since having a non-native
&gt; scrollbar will look really out of place. The rest is just web content, and
&gt; it&apos;s not expected that web content look native. Then when GTK 4 comes
&gt; around... well, I don&apos;t know what to do for GTK 4, but I think retaining
&gt; native scrollbar would be enough to avoid most complaints. Maybe we could
&gt; try moving the scrollbar to the UI process, except when it&apos;s actually themed
&gt; by websites (in which case it has to be in the web process no matter what).
&gt; 
&gt; Maybe we could add a config file or some other way of configuring a color
&gt; scheme on top of Adwaita that Yaru and Granite (and other themes) could use,
&gt; without creating a completely separate RenderTheme class that would be tough
&gt; to maintain.

Wild idea: can we expose somehow in the WebKitWebView API the information
that an embedder might need to render a scrollbar? I think the following
additions each scrollbar should suffice:

 - Current position, range [0.0, 1.0].
 - Size of the viewport vs. page height (to know how long the thumb
   needs to be).
 - Whether the web view needs to show a scrollbar (e.g. FALSE if content
   does not need it, or if CSS has been used to override the default
   scrollbar look).
 - A new method to scroll to a given position.

Am I being too naïve with this idea?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1631810</commentid>
    <comment_count>18</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-03-19 13:53:31 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #17)

&gt; &gt; [...]
&gt; 
&gt; Wild idea: can we expose somehow in the WebKitWebView API the information
&gt; that an embedder might need to render a scrollbar? I think the following
&gt; additions each scrollbar should suffice:
&gt; 
&gt;  - Current position, range [0.0, 1.0].
&gt;  - Size of the viewport vs. page height (to know how long the thumb
&gt;    needs to be).
&gt;  - Whether the web view needs to show a scrollbar (e.g. FALSE if content
&gt;    does not need it, or if CSS has been used to override the default
&gt;    scrollbar look).
&gt;  - A new method to scroll to a given position.
&gt; 
&gt; Am I being too naïve with this idea?

I forgot to mention that this would be only for the topmost scrollbar, the
one attached to the web view itself, and I would not try to handle elements
inside web pages (iframes, textareas, etc.) — rendering for those would still
be done by WebKit.

Related (possibly complimentary) idea: style the controls that WebKit{GTK,WPE}
renders in a way that they do not recall any particular toolkit and are as
neutral as possible, so they blend well in most environments. Currently they
look a tad too much like GTK&apos;s Adwaita theme, and while it is not too bad,
the illusion falls apart a little bit when using other themes — specially
when it comes to the scrollbar attached to the sides of a web view, I think
we need a more subtle look there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632031</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-03-20 02:12:46 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #15)
&gt; (In reply to Carlos Garcia Campos from comment #14)
&gt; &gt; I don&apos;t know what else we can do from WebKit, to be honest.
&gt; 
&gt; I think we should just tell distros that they are welcome to maintain their
&gt; own RenderTheme classes in WebKit if they want consistency with their system
&gt; theme, but we will only maintain the Adwaita theme. Maybe they&apos;ll be OK with
&gt; it looking like Adwaita, maybe not. Let&apos;s just give them a heads-up now so
&gt; they&apos;re not surprised when 2.30 is released?

Do you mean distros maintaining a RenderTheme upstream or downstream? I don&apos;t think it will work in any case. In case of being upstream we will end up maintaining it, every time a change is made in base class it will break, etc. I prefer to keep the old code to be honest. And it would be a lot of work for downstream patches, I&apos;m afraid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632034</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-03-20 02:18:08 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #16)
&gt; (In reply to Carlos Garcia Campos from comment #14)
&gt; &gt; For GTK3 the only solution I see is to bring back the old code and add a new
&gt; &gt; setting (useSystemAppearance), disabled by default, that apps can use to
&gt; &gt; keep the consistency.
&gt; 
&gt; Compromise proposal: do this, but enabled by default, and only for
&gt; scrollbars. 

Sounds good to me.

&gt; All the web form controls can use Adwaita theme. Scrollbar is
&gt; going to be more important than form controls since having a non-native
&gt; scrollbar will look really out of place. The rest is just web content, and
&gt; it&apos;s not expected that web content look native. Then when GTK 4 comes
&gt; around... well, I don&apos;t know what to do for GTK 4, but I think retaining
&gt; native scrollbar would be enough to avoid most complaints.

Makes sense.

&gt; Maybe we could
&gt; try moving the scrollbar to the UI process, except when it&apos;s actually themed
&gt; by websites (in which case it has to be in the web process no matter what).

That would be a lot more work and very difficult to do it right.

&gt; Maybe we could add a config file or some other way of configuring a color
&gt; scheme on top of Adwaita that Yaru and Granite (and other themes) could use,
&gt; without creating a completely separate RenderTheme class that would be tough
&gt; to maintain.

Benjamin Otte suggested something similar, GTK themes could include a file with color definitions to be used by WebKit and/or other browsers (at least the selection colors). That wouldn&apos;t fix the scrollbars, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632035</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-03-20 02:22:30 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #17)
&gt; (In reply to Michael Catanzaro from comment #16)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #14)
&gt; &gt; &gt; For GTK3 the only solution I see is to bring back the old code and add a new
&gt; &gt; &gt; setting (useSystemAppearance), disabled by default, that apps can use to
&gt; &gt; &gt; keep the consistency.
&gt; &gt; 
&gt; &gt; Compromise proposal: do this, but enabled by default, and only for
&gt; &gt; scrollbars. All the web form controls can use Adwaita theme. Scrollbar is
&gt; &gt; going to be more important than form controls since having a non-native
&gt; &gt; scrollbar will look really out of place. The rest is just web content, and
&gt; &gt; it&apos;s not expected that web content look native. Then when GTK 4 comes
&gt; &gt; around... well, I don&apos;t know what to do for GTK 4, but I think retaining
&gt; &gt; native scrollbar would be enough to avoid most complaints. Maybe we could
&gt; &gt; try moving the scrollbar to the UI process, except when it&apos;s actually themed
&gt; &gt; by websites (in which case it has to be in the web process no matter what).
&gt; &gt; 
&gt; &gt; Maybe we could add a config file or some other way of configuring a color
&gt; &gt; scheme on top of Adwaita that Yaru and Granite (and other themes) could use,
&gt; &gt; without creating a completely separate RenderTheme class that would be tough
&gt; &gt; to maintain.
&gt; 
&gt; Wild idea: can we expose somehow in the WebKitWebView API the information
&gt; that an embedder might need to render a scrollbar? I think the following
&gt; additions each scrollbar should suffice:
&gt; 
&gt;  - Current position, range [0.0, 1.0].
&gt;  - Size of the viewport vs. page height (to know how long the thumb
&gt;    needs to be).
&gt;  - Whether the web view needs to show a scrollbar (e.g. FALSE if content
&gt;    does not need it, or if CSS has been used to override the default
&gt;    scrollbar look).
&gt;  - A new method to scroll to a given position.
&gt; 
&gt; Am I being too naïve with this idea?

In WebKit1, we coordinated the view scrolling with the GtkScrollWindow and it was nightmare, and a source of weird bugs. It was very difficult to keep it in sync in the same process, I can&apos;t imagine between two processes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632058</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-03-20 06:03:17 -0700</bug_when>
    <thetext>Maybe we can get Benjamin to give us something to allow foreign drawing of just scrollbars alone. He probably won&apos;t be terribly happy about that, but foreign drawing for just one particular widget is probably only 2% the complexity of the original foreign drawing API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632062</commentid>
    <comment_count>23</comment_count>
    <who name="Benjamin Otte">otte</who>
    <bug_when>2020-03-20 06:14:55 -0700</bug_when>
    <thetext>GTK is using a CSS engine and widgets are combinations of elements, so asking for &quot;just the styling of the scrollbar&quot; is like asking webkitgtk for &quot;just the styling of the Youtube player&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1632108</commentid>
    <comment_count>24</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-03-20 09:08:40 -0700</bug_when>
    <thetext>Well, definitely I was being naïve when suggesting to expose
API to allow the embedder to render the scrollbars (thanks for
the background, Carlos).

All things considered, it is starting to look like the lesser
of evils might be allowing somehow for GTK themes to provide
styling information used by WebKit to render scrollbars 🤷‍♂️️</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391524</attachid>
            <date>2020-02-24 04:38:08 -0800</date>
            <delta_ts>2020-02-24 04:45:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-gtk-theme.diff</filename>
            <type>text/plain</type>
            <size>221500</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2Mjc4NmVmM2RkMy4uNWNi
MmY1YjA0YzkgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAyMC0wMi0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gU3RvcCB1c2luZyBndGsgZm9yZWlnbiBkcmF3aW5nIEFQ
SSB0byBzdHlsZSBmb3JtIGNvbnRyb2xzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDgxMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSB0ZXN0IGNhc2UgZm9yIGRhdGFsaXN0IGVsZW1lbnQuCisK
KyAgICAgICAgKiBNYW51YWxUZXN0cy9ndGsvdGhlbWUuaHRtbDoKKwogMjAyMC0wMi0yMCAgQ2Fy
bG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXVtXUEVdIE5vdCBzZXQgY2NhY2hlIGNvbXBpbGVyIHByZWZpeCBpZiBjY2FjaGUgaXRzIGFs
cmVhZHkgdGhlIGNvbXBpbGVyIGJpbmFyeSBpbiBwYXRoLgpkaWZmIC0tZ2l0IGEvTWFudWFsVGVz
dHMvZ3RrL3RoZW1lLmh0bWwgYi9NYW51YWxUZXN0cy9ndGsvdGhlbWUuaHRtbAppbmRleCA2NDM4
NjVhMTg0OC4uYzE0MTIzOWI3OGYgMTAwNjQ0Ci0tLSBhL01hbnVhbFRlc3RzL2d0ay90aGVtZS5o
dG1sCisrKyBiL01hbnVhbFRlc3RzL2d0ay90aGVtZS5odG1sCkBAIC0xNDcsNiArMTQ3LDE2IEBA
CiAgICAgICA8L2h0bWw+Ij4KICAgPC9pZnJhbWU+CiAKKyAgPGgxPkRhdGFsaXN0PC9oMT4KKyAg
PGlucHV0IGxpc3Q9InBvcnRzIiBuYW1lPSJwb3J0Ij4KKyAgPGRhdGFsaXN0IGlkPSJwb3J0cyI+
CisgICAgPG9wdGlvbiB2YWx1ZT0iV2ViS2l0R1RLIj4KKyAgICA8b3B0aW9uIHZhbHVlPSJXUEVX
ZWJLaXQiPgorICAgIDxvcHRpb24gdmFsdWU9IlBsYXlTdGF0aW9uIj4KKyAgICA8b3B0aW9uIHZh
bHVlPSJtYWNPUyI+CisgICAgPG9wdGlvbiB2YWx1ZT0iaU9TIj4KKyAgPC9kYXRhbGlzdD4KKwog
ICA8aDE+TWVkaWEgY29udHJvbHM8L2gxPgogICA8dmlkZW8gY29udHJvbHM+PC92aWRlbz4KICAg
PC9ib2R5PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCBhNWNiYTJlMDUwYy4uYmY2ODliYWQ5Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMjAtMDItMjQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFN0b3AgdXNpbmcgZ3RrIGZvcmVpZ24gZHJhd2luZyBBUEkgdG8g
c3R5bGUgZm9ybSBjb250cm9scworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA4MTI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRW5hYmxlIFVTRV9ORVdfVEhFTUUgZm9yIHRoZSBHVEsgcG9ydC4KKworICAg
ICAgICAqIHd0Zi9QbGF0Zm9ybVVzZS5oOgorCiAyMDIwLTAyLTIwICBKaWV3ZW4gVGFuICA8amll
d2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhuXSBSZXBsYWNlIERldmljZUlk
ZW50aXR5LmZyYW1ld29yawpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1Vc2Uu
aCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgKaW5kZXggYzQ3ZGMxNmExYTQuLjAwMTEw
MjExMzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtVXNlLmgKQEAgLTI5MSw3ICsyOTEsNyBAQAogI2RlZmluZSBV
U0VfQ0ZORVRXT1JLX0NPTlRFTlRfRU5DT0RJTkdfU05JRkZJTkdfT1ZFUlJJREUgMQogI2VuZGlm
CiAKLSNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFdQRSkKKyNpZiBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKFdQRSkgfHwgUExBVEZPUk0oR1RLKQogLyogRklYTUU6IFRoaXMgcmVhbGx5
IG5lZWRzIGEgZGVzY3JpcHRpdmUgbmFtZSwgdGhpcyAibmV3IHRoZW1lIiB3YXMgYWRkZWQgaW4g
MjAwOC4gKi8KICNkZWZpbmUgVVNFX05FV19USEVNRSAxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBl
YTE0ODQzZWJlNy4uOGE4ODM5NzM2ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTYgQEAKKzIw
MjAtMDItMjQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtHVEtdIFN0b3AgdXNpbmcgZ3RrIGZvcmVpZ24gZHJhd2luZyBBUEkgdG8gc3R5bGUg
Zm9ybSBjb250cm9scworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA4MTI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgSXQgY2F1c2VzIGxheW91dCBpc3N1ZXMgaW4gc29tZSB3ZWJzaXRlcywgaXQgZG9lc24n
dCByZWFsbHkgd29yayB3aXRoIGFsbCBHVEsgdGhlbWVzIGFuZCBpdCB3b24ndCBiZSBwb3NzaWJs
ZQorICAgICAgICB3aXRoIEdUSzQgYmVjYXVzZSBmb3JlaWduIGRyYXdpbmcgQVBJcyBoYXZlIGJl
ZW4gcmVtb3ZlZC4gSW5zdGVhZCwgd2UgY2FuIHVzZSB0aGUgbmV3IGN1c3RvbSBzdHlsZSB1c2Vk
IGJ5IFdQRQorICAgICAgICBwb3J0LCB3aGljaCBpcyBiYXNlZCBvbiBhZHdhaXRhLCBidXQgc2lt
cGxpZmllZCB0byBhdm9pZCB0aGUgaHVnZSBtaW5pbXVtIGNvbnRyb2wgc2l6ZXMsIHRoZSB1c2Fn
ZSBvZiBncmFkaWVudHMKKyAgICAgICAgYW5kIHRyYW5zcGFyZW5jaWVzLCBldGMuIFdlIGNhbiBz
dGlsbCB1c2UgdGhlIEdUSyBBUEkgdG8gZ2V0IHRoZSBzZWxlY3Rpb24gY29sb3JzLCB0byBrZWVw
IHNvbWUgY29uc2lzdGVuY3kgd2l0aAorICAgICAgICB0aGUgYWN0dWFsIEdUSyB0aGVtZSwgYnV0
IHRoYXQgd29uJ3QgYmUgcG9zc2libGUgd2l0aCBHVEs0IGVpdGhlci4gVGhpcyBhbHNvIG1lYW5z
IHdlIHdvbid0IGJlIHJlbmRlcmluZworICAgICAgICBkaXJlY3RseSB0byB0aGUgY2Fpcm8gY29u
dGV4dCBhbnltb3JlICh3aGljaCB3YXMgcmVxdWlyZWQgYnkgR1RLIGZvcmVpZ24gZHJhd2luZyks
IHNvIHdlIGNhbiB1c2UgdGhpbmdzIGxpa2UKKyAgICAgICAgdGhyZWFkZWQgcmVuZGVyaW5nIGlu
IHRoZSBHVEsgcG9ydCBub3cuIFRoaXMgcGF0Y2ggcmVuYW1lcyBTY3JvbGxiYXJUaGVtZVdQRSwg
UmVuZGVyVGhlbWVXUEUgYW5kIFRoZW1lV1BFIGFzCisgICAgICAgIFNjcm9sbGJhclRoZW1lQWR3
YWl0YSwgUmVuZGVyVGhlbWVBZHdhaXRhIGFuZCBUaGVtZUFkd2FpdGEgYW5kIGFkZHMgVGhlbWVH
dGsuIEdUSyBtZWRpYSBjb250cm9scyBDU1MgYW5kCisgICAgICAgIEphdmFTY3JpcHQgZmlsZXMg
aGF2ZSBiZWVuIHJlbW92ZWQgaW4gZmF2b3Igb2YgdXNpbmcgdGhlIGFkd2FpdGEgb25lcy4KKwor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzR3RrLmpzOiBSZW1v
dmVkLgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV1BF
LmNtYWtlOgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNXUEUu
dHh0OgorICAgICAgICAqIGNzcy9tZWRpYUNvbnRyb2xzR3RrLmNzczogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvU2Nyb2xsYmFyVGhlbWVXUEUuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVBZHdhaXRhOjp1c2VzT3ZlcmxheVNjcm9s
bGJhcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVBZHdhaXRhOjpz
Y3JvbGxiYXJUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVBZHdh
aXRhOjptaW5pbXVtVGh1bWJMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWVBZHdhaXRhOjpoYXNCdXR0b25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
QWR3YWl0YTo6aGFzVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVBZHdh
aXRhOjpiYWNrQnV0dG9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUFk
d2FpdGE6OmZvcndhcmRCdXR0b25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lQWR3YWl0YTo6dHJhY2tSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1l
QWR3YWl0YTo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVBZHdhaXRh
OjpoYW5kbGVNb3VzZVByZXNzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhl
bWU6Om5hdGl2ZVRoZW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRo
ZW1lQWR3YWl0YS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvU2Ny
b2xsYmFyVGhlbWVXUEUuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0
YS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvVGhlbWVXUEUu
Y3BwLgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJD
b3JlOjpUaGVtZUFkd2FpdGE6OmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUFkd2FpdGE6OmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUFkd2FpdGE6OmluYWN0aXZl
U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1l
QWR3YWl0YTo6aW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6VGhlbWVBZHdhaXRhOjpmb2N1c0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUFkd2Fp
dGE6OnBhaW50QXJyb3cpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVBZHdhaXRhOjpjb250cm9s
U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUFkd2FpdGE6OnBhaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRoZW1lQWR3YWl0YTo6cGFpbnRDaGVja2JveCk6CisgICAgICAgIChX
ZWJDb3JlOjpUaGVtZUFkd2FpdGE6OnBhaW50UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6VGhl
bWVBZHdhaXRhOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUFkd2FpdGE6
OnBhaW50U3BpbkJ1dHRvbik6CisgICAgICAgICogcGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2Fp
dGEuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9UaGVtZVdQRS5o
LgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVBZHdhaXRhOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5n
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUdhZGdldC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3RrL1JlbmRlclRoZW1lV2lkZ2V0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvUmVuZGVyVGhlbWVXaWRnZXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
dGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0
ay9TY3JvbGxiYXJUaGVtZUd0ay5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9U
aGVtZUd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OnNpbmdsZXRvbik6
CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUd0azo6ZW5zdXJlUGxhdGZvcm1Db2xvcnMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVHdGs6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlRoZW1lR3RrOjphY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVHdGs6OmFjdGl2ZVNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUd0azo6aW5hY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhl
bWVHdGs6OmluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvVGhlbWVHdGsuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dwZS9TY3JvbGxiYXJUaGVtZVdQRS5oLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUFkd2FpdGEuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d3BlL1JlbmRlclRoZW1lV1BFLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpz
aW5nbGV0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpzdXBwb3J0
c0ZvY3VzUmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6
OnNob3VsZEhhdmVDYXBzTG9ja0luZGljYXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUFkd2FpdGE6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1J
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUFkd2FpdGE6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZv
cm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkJh
Y2tncm91bmRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2Fp
dGE6OnBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1BY3RpdmVM
aXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRh
OjpwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQWR3YWl0YTo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVl
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6Om1lZGlhQ29udHJvbHNT
Y3JpcHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludFRleHRG
aWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50VGV4dEFy
ZWEpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludFNlYXJjaEZp
ZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6cG9wdXBJbnRlcm5h
bFBhZGRpbmdCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRh
OjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6
cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQWR3YWl0YTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6OmFuaW1hdGlvbkR1cmF0
aW9uRm9yUHJvZ3Jlc3NCYXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVB
ZHdhaXRhOjpwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6OmFkanVzdFNsaWRlclRodW1iU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50U2xpZGVyVGh1bWIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludE1lZGlhU2xpZGVyVHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludE1lZGlhVm9s
dW1lU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpz
bGlkZXJUaWNrU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2Fp
dGE6OnNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjphZGp1c3RMaXN0QnV0dG9uU3R5bGUgY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5oLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpjYXJldEJsaW5rSW50ZXJ2YWwgY29uc3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5oOgorCiAyMDIwLTAyLTIxICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1BFXSBVc2Ug
Y3VzdG9tIHRoZW1lIHN0eWxlIGZvciBtZWRpYSBjb250cm9scwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL21lZGlhQ29udHJvbHNHdGsuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0d0ay5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlOGM1ODhkYjIuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzR3RrLmpz
CisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLWZ1bmN0aW9uIGNyZWF0ZUNvbnRyb2xz
KHJvb3QsIHZpZGVvLCBob3N0KQotewotICAgIHJldHVybiBuZXcgQ29udHJvbGxlckd0ayhyb290
LCB2aWRlbywgaG9zdCk7Ci19OwotCi1mdW5jdGlvbiBDb250cm9sbGVyR3RrKHJvb3QsIHZpZGVv
LCBob3N0KQotewotICAgIENvbnRyb2xsZXIuY2FsbCh0aGlzLCByb290LCB2aWRlbywgaG9zdCk7
Ci19OwotCi1mdW5jdGlvbiBjb250YWlucyhsaXN0LCBvYmopCi17Ci0gICAgdmFyIGkgPSBsaXN0
Lmxlbmd0aDsKLSAgICB3aGlsZSAoaS0tKQotICAgICAgICBpZiAobGlzdFtpXSA9PT0gb2JqKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfTsKLQotQ29udHJv
bGxlckd0ay5wcm90b3R5cGUgPSB7Ci0KLSAgICBjcmVhdGVDb250cm9sczogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuY3JlYXRlQ29udHJvbHMuYXBwbHko
dGhpcyk7Ci0KLSAgICAgICAgdGhpcy5jb250cm9scy5jdXJyZW50VGltZS5jbGFzc0xpc3QuYWRk
KHRoaXMuQ2xhc3NOYW1lcy5oaWRkZW4pOwotICAgICAgICB0aGlzLmNvbnRyb2xzLnJlbWFpbmlu
Z1RpbWUuY2xhc3NMaXN0LmFkZCh0aGlzLkNsYXNzTmFtZXMuaGlkZGVuKTsKLQotICAgICAgICB0
aGlzLmNvbnRyb2xzLnZvbHVtZUJveC5jbGFzc0xpc3QuYWRkKHRoaXMuQ2xhc3NOYW1lcy5oaWRp
bmcpOwotCi0gICAgICAgIHRoaXMubGlzdGVuRm9yKHRoaXMuY29udHJvbHMubXV0ZUJveCwgJ21v
dXNlb3V0JywgdGhpcy5oYW5kbGVWb2x1bWVCb3hNb3VzZU91dCk7Ci0gICAgICAgIHRoaXMubGlz
dGVuRm9yKHRoaXMuY29udHJvbHMubXV0ZUJ1dHRvbiwgJ21vdXNlb3ZlcicsIHRoaXMuaGFuZGxl
TXV0ZUJ1dHRvbk1vdXNlT3Zlcik7Ci0gICAgICAgIHRoaXMubGlzdGVuRm9yKHRoaXMuY29udHJv
bHMudm9sdW1lQm94LCAnbW91c2VvdmVyJywgdGhpcy5oYW5kbGVNdXRlQnV0dG9uTW91c2VPdmVy
KTsKLSAgICAgICAgdGhpcy5saXN0ZW5Gb3IodGhpcy5jb250cm9scy52b2x1bWUsICdtb3VzZW92
ZXInLCB0aGlzLmhhbmRsZU11dGVCdXR0b25Nb3VzZU92ZXIpOwotICAgICAgICB0aGlzLmxpc3Rl
bkZvcih0aGlzLmNvbnRyb2xzLmNhcHRpb25CdXR0b24sICdtb3VzZW92ZXInLCB0aGlzLmhhbmRs
ZUNhcHRpb25CdXR0b25Nb3VzZU92ZXIpOwotICAgICAgICB0aGlzLmxpc3RlbkZvcih0aGlzLmNv
bnRyb2xzLmNhcHRpb25CdXR0b24sICdtb3VzZW91dCcsIHRoaXMuaGFuZGxlQ2FwdGlvbkJ1dHRv
bk1vdXNlT3V0KTsKLQotICAgICAgICB2YXIgZW5jbG9zdXJlID0gdGhpcy5jb250cm9scy5lbmNs
b3N1cmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAgZW5jbG9zdXJl
LnNldEF0dHJpYnV0ZSgncHNldWRvJywgJy13ZWJraXQtbWVkaWEtY29udHJvbHMtZW5jbG9zdXJl
Jyk7Ci0gICAgfSwKLQotICAgIGNvbmZpZ3VyZUlubGluZUNvbnRyb2xzOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLmNvbnRyb2xzLnBhbmVsLmFwcGVuZENoaWxkKHRoaXMuY29udHJv
bHMucGxheUJ1dHRvbik7Ci0gICAgICAgIHRoaXMuY29udHJvbHMucGFuZWwuYXBwZW5kQ2hpbGQo
dGhpcy5jb250cm9scy50aW1lbGluZSk7Ci0gICAgICAgIHRoaXMuY29udHJvbHMucGFuZWwuYXBw
ZW5kQ2hpbGQodGhpcy5jb250cm9scy5jdXJyZW50VGltZSk7Ci0gICAgICAgIHRoaXMuY29udHJv
bHMucGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5jb250cm9scy5yZW1haW5pbmdUaW1lKTsKLSAgICAg
ICAgdGhpcy5jb250cm9scy5wYW5lbC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRyb2xzLmNhcHRpb25C
dXR0b24pOwotICAgICAgICB0aGlzLmNvbnRyb2xzLnBhbmVsLmFwcGVuZENoaWxkKHRoaXMuY29u
dHJvbHMuZnVsbHNjcmVlbkJ1dHRvbik7Ci0gICAgICAgIHRoaXMuY29udHJvbHMucGFuZWwuYXBw
ZW5kQ2hpbGQodGhpcy5jb250cm9scy5tdXRlQm94KTsKLSAgICAgICAgdGhpcy5jb250cm9scy5t
dXRlQm94LmFwcGVuZENoaWxkKHRoaXMuY29udHJvbHMubXV0ZUJ1dHRvbik7Ci0gICAgICAgIHRo
aXMuY29udHJvbHMubXV0ZUJveC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRyb2xzLnZvbHVtZUJveCk7
Ci0gICAgICAgIHRoaXMuY29udHJvbHMudm9sdW1lQm94LmFwcGVuZENoaWxkKHRoaXMuY29udHJv
bHMudm9sdW1lKTsKLSAgICAgICAgdGhpcy5jb250cm9scy5lbmNsb3N1cmUuYXBwZW5kQ2hpbGQo
dGhpcy5jb250cm9scy5wYW5lbCk7Ci0gICAgfSwKLQotICAgIHNob3VsZEhhdmVDb250cm9sczog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLmlzQXVkaW8oKSAmJiAhdGhpcy5o
b3N0LmFsbG93c0lubGluZU1lZGlhUGxheWJhY2spCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgICAgICByZXR1cm4gdGhpcy52aWRlby5jb250cm9scyB8fCB0aGlzLmlzRnVsbFNjcmVl
bigpOwotICAgIH0sCi0KLSAgICByZWNvbm5lY3RDb250cm9sczogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuZGlzY29ubmVjdENvbnRyb2xzLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgdGhpcy5jb25maWd1cmVJbmxpbmVDb250cm9scygp
OwotCi0gICAgICAgIGlmICh0aGlzLnNob3VsZEhhdmVDb250cm9scygpKQotICAgICAgICAgICAg
dGhpcy5hZGRDb250cm9scygpOwotICAgIH0sCi0KLSAgICBzZXRTdGF0dXNIaWRkZW46IGZ1bmN0
aW9uKGhpZGRlbikKLSAgICB7Ci0gICAgfSwKLQotICAgIHVwZGF0ZVRpbWU6IGZ1bmN0aW9uKGZv
cmNlVXBkYXRlKQotICAgIHsKLSAgICAgICAgaWYgKCFmb3JjZVVwZGF0ZSAmJiB0aGlzLmNvbnRy
b2xzQXJlSGlkZGVuKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGN1cnJl
bnRUaW1lID0gdGhpcy52aWRlby5jdXJyZW50VGltZTsKLSAgICAgICAgdmFyIGR1cmF0aW9uID0g
dGhpcy52aWRlby5kdXJhdGlvbjsKLQotICAgICAgICB0aGlzLmNvbnRyb2xzLmN1cnJlbnRUaW1l
LmlubmVyVGV4dCA9IHRoaXMuZm9ybWF0VGltZShjdXJyZW50VGltZSk7Ci0gICAgICAgIHRoaXMu
Y29udHJvbHMudGltZWxpbmUudmFsdWUgPSBjdXJyZW50VGltZTsKLSAgICAgICAgaWYgKGR1cmF0
aW9uID09PSBJbmZpbml0eSB8fCBkdXJhdGlvbiA9PT0gTmFOKQotICAgICAgICAgICAgdGhpcy5j
b250cm9scy5yZW1haW5pbmdUaW1lLmNsYXNzTGlzdC5hZGQodGhpcy5DbGFzc05hbWVzLmhpZGRl
bik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGhpcy5jb250cm9scy5jdXJyZW50VGlt
ZS5pbm5lclRleHQgKz0gIiAvICIgKyB0aGlzLmZvcm1hdFRpbWUoZHVyYXRpb24pOwotICAgICAg
ICAgICAgdGhpcy5jb250cm9scy5yZW1haW5pbmdUaW1lLmlubmVyVGV4dCA9IHRoaXMuZm9ybWF0
VGltZShkdXJhdGlvbik7Ci0gICAgICAgICAgICBpZiAodGhpcy5jb250cm9scy5jdXJyZW50VGlt
ZS5jbGFzc0xpc3QuY29udGFpbnModGhpcy5DbGFzc05hbWVzLmhpZGRlbikpCi0gICAgICAgICAg
ICAgICAgdGhpcy5jb250cm9scy5yZW1haW5pbmdUaW1lLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5D
bGFzc05hbWVzLmhpZGRlbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY3VycmVudFRpbWUg
PiAwKQotICAgICAgICAgICAgdGhpcy5zaG93Q3VycmVudFRpbWUoKTsKLSAgICB9LAotCi0gICAg
c2hvd0N1cnJlbnRUaW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmNvbnRyb2xz
LmN1cnJlbnRUaW1lLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5DbGFzc05hbWVzLmhpZGRlbik7Ci0g
ICAgICAgIHRoaXMuY29udHJvbHMucmVtYWluaW5nVGltZS5jbGFzc0xpc3QuYWRkKHRoaXMuQ2xh
c3NOYW1lcy5oaWRkZW4pOwotICAgIH0sCi0KLSAgICBoYW5kbGVQbGF5OiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIENvbnRyb2xsZXIucHJvdG90eXBlLmhhbmRsZVBsYXkuYXBwbHko
dGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgdGhpcy5zaG93Q3VycmVudFRpbWUoKTsKLSAgICAg
ICAgaWYgKCF0aGlzLmlzTGl2ZSkKLSAgICAgICAgICAgIHRoaXMuc2hvd0N1cnJlbnRUaW1lKCk7
Ci0gICAgfSwKLQotICAgIGhhbmRsZVRpbWVVcGRhdGU6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgdGhpcy51cGRhdGVUaW1lKCk7Ci0gICAgfSwKLQotICAgIGhhbmRsZU11dGVCdXR0
b25Nb3VzZU92ZXI6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMudmlk
ZW8ub2Zmc2V0VG9wICsgdGhpcy5jb250cm9scy5lbmNsb3N1cmUub2Zmc2V0VG9wIDwgMTA1KSB7
Ci0gICAgICAgICAgICB0aGlzLmNvbnRyb2xzLnZvbHVtZUJveC5jbGFzc0xpc3QuYWRkKHRoaXMu
Q2xhc3NOYW1lcy5kb3duKTsKLSAgICAgICAgICAgIHRoaXMuY29udHJvbHMucGFuZWwuY2xhc3NM
aXN0LmFkZCh0aGlzLkNsYXNzTmFtZXMuZG93bik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICB0aGlzLmNvbnRyb2xzLnZvbHVtZUJveC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuQ2xhc3NO
YW1lcy5kb3duKTsKLSAgICAgICAgICAgIHRoaXMuY29udHJvbHMucGFuZWwuY2xhc3NMaXN0LnJl
bW92ZSh0aGlzLkNsYXNzTmFtZXMuZG93bik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5jb250
cm9scy52b2x1bWVCb3guY2xhc3NMaXN0LnJlbW92ZSh0aGlzLkNsYXNzTmFtZXMuaGlkaW5nKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIGhhbmRsZVZvbHVtZUJveE1vdXNl
T3V0OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuY29udHJvbHMudm9sdW1l
Qm94LmNsYXNzTGlzdC5hZGQodGhpcy5DbGFzc05hbWVzLmhpZGluZyk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0sCi0KLSAgICByZW1vdmVDb250cm9sczogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuY29udHJvbHMuZW5jbG9zdXJlLnBhcmVudE5vZGUpCi0gICAgICAg
ICAgICB0aGlzLmNvbnRyb2xzLmVuY2xvc3VyZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMu
Y29udHJvbHMuZW5jbG9zdXJlKTsKLSAgICAgICAgdGhpcy5kZXN0cm95Q2FwdGlvbk1lbnUoKTsK
LSAgICB9LAotCi0gICAgYWRkQ29udHJvbHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuYmFzZS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRyb2xzLmVuY2xvc3VyZSk7Ci0gICAgfSwKLQot
ICAgIHVwZGF0ZVJlYWR5U3RhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Lmhvc3Quc3VwcG9ydHNGdWxsc2NyZWVuICYmIHRoaXMudmlkZW8udmlkZW9UcmFja3MubGVuZ3Ro
KQotICAgICAgICAgICAgdGhpcy5jb250cm9scy5mdWxsc2NyZWVuQnV0dG9uLmNsYXNzTGlzdC5y
ZW1vdmUodGhpcy5DbGFzc05hbWVzLmhpZGRlbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHRoaXMuY29udHJvbHMuZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QuYWRkKHRoaXMuQ2xhc3NO
YW1lcy5oaWRkZW4pOwotICAgICAgICB0aGlzLnVwZGF0ZVZvbHVtZSgpOwotICAgIH0sCi0KLSAg
ICB1cGRhdGVEdXJhdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgQ29udHJvbGxlci5w
cm90b3R5cGUudXBkYXRlRHVyYXRpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAg
aWYgKHRoaXMuaXNMaXZlKQotICAgICAgICAgICAgdGhpcy5jb250cm9scy50aW1lbGluZS5tYXgg
PSAwOwotICAgIH0sCi0KLSAgICBzZXRJc0xpdmU6IGZ1bmN0aW9uKGxpdmUpCi0gICAgewotICAg
ICAgICBDb250cm9sbGVyLnByb3RvdHlwZS5zZXRJc0xpdmUuYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKLSAgICAgICAgdGhpcy5jb250cm9scy50aW1lbGluZS5kaXNhYmxlZCA9IHRoaXMuaXNMaXZl
OwotICAgIH0sCi0KLSAgICB1cGRhdGVQbGF5aW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBDb250cm9sbGVyLnByb3RvdHlwZS51cGRhdGVQbGF5aW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7Ci0gICAgICAgIGlmICghdGhpcy5jYW5QbGF5KCkpCi0gICAgICAgICAgICB0aGlzLnNob3dD
b250cm9scygpOwotICAgIH0sCi0KLSAgICBoYW5kbGVDYXB0aW9uQnV0dG9uQ2xpY2tlZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLmhhbmRsZUNhcHRpb25CdXR0b25TaG93
TWVudShldmVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIGJ1aWxkQ2Fw
dGlvbk1lbnU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIENvbnRyb2xsZXIucHJvdG90eXBl
LmJ1aWxkQ2FwdGlvbk1lbnUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLQotICAgICAgICB0aGlz
Lmxpc3RlbkZvcih0aGlzLmNhcHRpb25NZW51LCAnbW91c2VvdXQnLCB0aGlzLmhhbmRsZUNhcHRp
b25Nb3VzZU91dCk7Ci0gICAgICAgIHRoaXMubGlzdGVuRm9yKHRoaXMuY2FwdGlvbk1lbnUsICd0
cmFuc2l0aW9uZW5kJywgdGhpcy5jYXB0aW9uTWVudVRyYW5zaXRpb25FbmQpOwotCi0gICAgICAg
IHRoaXMuY2FwdGlvbk1lbnUuY2FwdGlvbk1lbnVUcmVlRWxlbWVudHMgPSB0aGlzLmNhcHRpb25N
ZW51LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0KLSAgICAgICAgLy8gQ2FwdGlvbiBtZW51
IGhhcyB0byBiZSBjZW50ZXJlZCB0byB0aGUgY2FwdGlvbiBidXR0b24uCi0gICAgICAgIHZhciBj
YXB0aW9uQnV0dG9uQ2VudGVyID0gIHRoaXMuY29udHJvbHMucGFuZWwub2Zmc2V0TGVmdCArIHRo
aXMuY29udHJvbHMuY2FwdGlvbkJ1dHRvbi5vZmZzZXRMZWZ0ICsKLSAgICAgICAgICAgIHRoaXMu
Y29udHJvbHMuY2FwdGlvbkJ1dHRvbi5vZmZzZXRXaWR0aCAvIDI7Ci0gICAgICAgIHZhciBjYXB0
aW9uTWVudUxlZnQgPSAoY2FwdGlvbkJ1dHRvbkNlbnRlciAtIHRoaXMuY2FwdGlvbk1lbnUub2Zm
c2V0V2lkdGggLyAyKTsKLSAgICAgICAgaWYgKGNhcHRpb25NZW51TGVmdCArIHRoaXMuY2FwdGlv
bk1lbnUub2Zmc2V0V2lkdGggPiB0aGlzLmNvbnRyb2xzLnBhbmVsLm9mZnNldExlZnQgKyB0aGlz
LmNvbnRyb2xzLnBhbmVsLm9mZnNldFdpZHRoKQotICAgICAgICAgICAgdGhpcy5jYXB0aW9uTWVu
dS5jbGFzc0xpc3QuYWRkKHRoaXMuQ2xhc3NOYW1lcy5vdXQpOwotICAgICAgICB0aGlzLmNhcHRp
b25NZW51LnN0eWxlLmxlZnQgPSBjYXB0aW9uTWVudUxlZnQgKyAncHgnOwotICAgICAgICAvLyBB
cyBoZWlnaHQgaXMgbm90IGluIHRoZSBjc3MsIGl0IG5lZWRzIHRvIGJlIHNwZWNpZmllZCB0byBh
bmltYXRlIGl0LgotICAgICAgICB0aGlzLmNhcHRpb25NZW51LmhlaWdodCA9IHRoaXMuY2FwdGlv
bk1lbnUub2Zmc2V0SGVpZ2h0OwotICAgICAgICB0aGlzLmNhcHRpb25NZW51LnN0eWxlLmhlaWdo
dCA9IDA7Ci0gICAgfSwKLQotICAgIGRlc3Ryb3lDYXB0aW9uTWVudTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5oaWRlQ2FwdGlvbk1lbnUoKTsKLSAgICB9LAotCi0gICAgc2hvd0Nh
cHRpb25NZW51OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmNhcHRpb25NZW51LnN0
eWxlLmhlaWdodCA9IHRoaXMuY2FwdGlvbk1lbnUuaGVpZ2h0ICsgJ3B4JzsKLSAgICB9LAotCi0g
ICAgaGlkZUNhcHRpb25NZW51OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmNhcHRp
b25NZW51LnN0eWxlLmhlaWdodCA9IDA7Ci0gICAgfSwKLQotICAgIGNhcHRpb25NZW51VHJhbnNp
dGlvbkVuZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5jYXB0aW9u
TWVudS5vZmZzZXRIZWlnaHQgPT09IDApCi0gICAgICAgICAgICBDb250cm9sbGVyLnByb3RvdHlw
ZS5kZXN0cm95Q2FwdGlvbk1lbnUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICB9LAotCi0g
ICAgaGFuZGxlQ2FwdGlvbkJ1dHRvbk1vdXNlT3ZlcjogZnVuY3Rpb24oZXZlbnQpCi0gICAgewot
ICAgICAgICB0aGlzLmhhbmRsZUNhcHRpb25CdXR0b25TaG93TWVudShldmVudCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBoYW5kbGVDYXB0aW9uQnV0dG9uU2hvd01lbnU6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLmNhcHRpb25NZW51KQot
ICAgICAgICAgICAgdGhpcy5idWlsZENhcHRpb25NZW51KCk7Ci0gICAgICAgIGlmICghY29udGFp
bnModGhpcy5jYXB0aW9uTWVudS5jYXB0aW9uTWVudVRyZWVFbGVtZW50cywgZXZlbnQucmVsYXRl
ZFRhcmdldCkpCi0gICAgICAgICAgICB0aGlzLnNob3dDYXB0aW9uTWVudSgpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgaGFuZGxlQ2FwdGlvbkJ1dHRvbk1vdXNlT3V0OiBm
dW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmNhcHRpb25NZW51ICYmICFj
b250YWlucyh0aGlzLmNhcHRpb25NZW51LmNhcHRpb25NZW51VHJlZUVsZW1lbnRzLCBldmVudC5y
ZWxhdGVkVGFyZ2V0KSkKLSAgICAgICAgICAgIHRoaXMuaGlkZUNhcHRpb25NZW51KCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBoYW5kbGVDYXB0aW9uTW91c2VPdXQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgIT0g
dGhpcy5jb250cm9scy5jYXB0aW9uQnV0dG9uICYmCi0gICAgICAgICAgICAhY29udGFpbnModGhp
cy5jYXB0aW9uTWVudS5jYXB0aW9uTWVudVRyZWVFbGVtZW50cywgZXZlbnQucmVsYXRlZFRhcmdl
dCkpCi0gICAgICAgICAgICB0aGlzLmhpZGVDYXB0aW9uTWVudSgpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9LAotfTsKLQotT2JqZWN0LmNyZWF0ZShDb250cm9sbGVyLnByb3RvdHlwZSku
ZXh0ZW5kKENvbnRyb2xsZXJHdGsucHJvdG90eXBlKTsKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShD
b250cm9sbGVyR3RrLnByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgeyBlbnVtZXJhYmxlOmZhbHNl
LCB2YWx1ZTpDb250cm9sbGVyR3RrIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAy
ZmI5ZTM5NWI2My4uNzc4MWQwYzU4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0x
OCw2ICsxOCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9S
SUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvYXRrIgogICAgICIke1dFQkNP
UkVfRElSfS9lZGl0aW5nL2F0ayIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9ndGsiCisgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2Fkd2FpdGEiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL2dlbmVyaWMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0ayIKICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZWdsIgpAQCAtNjQsMTYgKzY1LDE3IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogKQogCiBsaXN0
KEFQUEVORCBXZWJDb3JlX1VTRVJfQUdFTlRfU1RZTEVfU0hFRVRTCi0gICAgJHtXRUJDT1JFX0RJ
Un0vY3NzL21lZGlhQ29udHJvbHNHdGsuY3NzCisgICAgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9t
ZWRpYWNvbnRyb2xzL21lZGlhQ29udHJvbHNBZHdhaXRhLmNzcworICAgICR7V0VCQ09SRV9ESVJ9
L2Nzcy90aGVtZUFkd2FpdGEuY3NzCiApCiAKIHNldChXZWJDb3JlX1VTRVJfQUdFTlRfU0NSSVBU
UwogICAgICR7V0VCQ09SRV9ESVJ9L2VuLmxwcm9qL21lZGlhQ29udHJvbHNMb2NhbGl6ZWRTdHJp
bmdzLmpzCisgICAgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYWNvbnRyb2xzL21lZGlhQ29u
dHJvbHNBZHdhaXRhLmpzCiAgICAgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L21lZGlhQ29udHJvbHNCYXNlLmpzCi0gICAgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYWNv
bnRyb2xzL21lZGlhQ29udHJvbHNHdGsuanMKICkKIAotc2V0KFdlYkNvcmVfVVNFUl9BR0VOVF9T
Q1JJUFRTX0RFUEVOREVOQ0lFUyAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhl
bWVHdGsuY3BwKQorc2V0KFdlYkNvcmVfVVNFUl9BR0VOVF9TQ1JJUFRTX0RFUEVOREVOQ0lFUyAk
e1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNwcCkKIAogbGlzdChB
UFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKICAgICAke0FUS19MSUJSQVJJRVN9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV1BFLmNtYWtlCmluZGV4IDFkMjM0MjdhNWJiLi4yMDJlYmFjYmJmZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XUEUuY21ha2UKQEAgLTE4LDYgKzE4LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9VTklG
SUVEX1NPVVJDRV9MSVNUX0ZJTEVTCiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNM
VURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvYXRrIgor
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9hZHdhaXRhIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL2Vwb3h5IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IGJjZDhkOWYyNzczLi4xN2I1MTNiMjJiOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlc0dUSy50eHQKQEAgLTY1LDYgKzY1LDkgQEAgcGFnZS9zY3JvbGxpbmcvZ2VuZXJpYy9T
Y3JvbGxpbmdUaHJlYWRHZW5lcmljLmNwcAogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yy5jcHAKIHBsYXRmb3JtL1VzZXJBZ2VudFF1aXJrcy5jcHAKIAorcGxhdGZvcm0vYWR3YWl0YS9T
Y3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwCitwbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5j
cHAKKwogcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuY3BwCiAKIHBsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAgQG5vLXVuaWZ5CkBAIC0xMTIsMTAgKzExNSw4IEBA
IHBsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCiBwbGF0Zm9ybS9ndGsvUGxh
dGZvcm1QYXN0ZWJvYXJkR3RrLmNwcAogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNw
cAogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKLXBsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUdhZGdldC5jcHAKLXBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZVdpZGdldC5jcHAK
LXBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKIHBsYXRmb3JtL2d0ay9TZWxlY3Rp
b25EYXRhLmNwcAorcGxhdGZvcm0vZ3RrL1RoZW1lR3RrLmNwcAogcGxhdGZvcm0vZ3RrL1dpZGdl
dEd0ay5jcHAKIAogcGxhdGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5jcHAKQEAgLTEyOSw0ICsxMzAs
NSBAQCBwbGF0Zm9ybS91bml4L0xvZ2dpbmdVbml4LmNwcAogCiBwbGF0Zm9ybS94ZGcvTUlNRVR5
cGVSZWdpc3RyeVhkZy5jcHAKIAorcmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHAKIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNXUEUudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQKaW5kZXggOTdlY2Rh
YzQ5MjIuLmViZmUyMjY5Y2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BF
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dApAQCAtNjIsNiArNjIsOSBA
QCBwYWdlL3Njcm9sbGluZy9nZW5lcmljL1Njcm9sbGluZ1RocmVhZEdlbmVyaWMuY3BwCiBwbGF0
Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcAogcGxhdGZvcm0vVXNlckFnZW50UXVpcmtz
LmNwcAogCitwbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHAKK3BsYXRm
b3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcAorCiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFu
aW1hdG9yR2VuZXJpYy5jcHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcApAQCAt
OTEsOCArOTQsNyBAQCBwbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAKIHBsYXRmb3JtL3VuaXgv
TG9nZ2luZ1VuaXguY3BwCiAKIHBsYXRmb3JtL3dwZS9QbGF0Zm9ybVNjcmVlbldQRS5jcHAKLXBs
YXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5jcHAKLXBsYXRmb3JtL3dwZS9TY3JvbGxiYXJUaGVt
ZVdQRS5jcHAKLXBsYXRmb3JtL3dwZS9UaGVtZVdQRS5jcHAKIAogcGxhdGZvcm0veGRnL01JTUVU
eXBlUmVnaXN0cnlYZGcuY3BwCisKK3JlbmRlcmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0d0ay5jc3MgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0d0ay5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGE2ODg0NzhmYjQxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvbWVkaWFDb250cm9sc0d0ay5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0MDIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qIFRoZXNl
IGFyZSBiYXNlZCBvbiB0aGUgQ2hyb21pdW0gbWVkaWEgY29udHJvbHMgKi8KLQotdmlkZW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwgKjphY3RpdmUsCi12aWRlbzo6LXdlYmtpdC1tZWRp
YS1jb250cm9scy1wYW5lbCAqOmZvY3VzLAotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
cGFuZWwgKjphY3RpdmUsCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCAqOmZv
Y3VzIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQocmdiYSgwLCAwLCAw
LCAuMDUpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4wNSkpICFpbXBvcnRhbnQ7Ci19Ci0KLWF1ZGlv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsLmRvd24gKjphY3RpdmUsCi1hdWRpbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy1wYW5lbC5kb3duICo6Zm9jdXMgewotICAgIGJhY2tncm91bmQt
aW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDI1NSwgMjU1LCAyNTUsIC4wNSksIHJnYmEoMCwg
MCwgMCwgLjA1KSkgIWltcG9ydGFudDsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtcGFuZWwuaGlkZGVuLAotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwuaGlk
ZGVuIHsKLSAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Ci19Ci0KLWJvZHk6LXdlYmtpdC1m
dWxsLXBhZ2UtbWVkaWEgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigwLCAwLCAwKTsKLX0K
LQotYXVkaW8gewotICAgIHdpZHRoOiAzMDBweDsKLSAgICBoZWlnaHQ6IDMwcHg7Ci19Ci0KLWF1
ZGlvOi13ZWJraXQtZnVsbC1wYWdlLW1lZGlhLCB2aWRlbzotd2Via2l0LWZ1bGwtcGFnZS1tZWRp
YSB7Ci0gICAgbWF4LWhlaWdodDogMTAwJTsKLSAgICBtYXgtd2lkdGg6IDEwMCU7Ci19Ci0KLWF1
ZGlvOi13ZWJraXQtZnVsbC1wYWdlLW1lZGlhOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVs
LAotdmlkZW86LXdlYmtpdC1mdWxsLXBhZ2UtbWVkaWE6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
cGFuZWwgewotICAgIGJvdHRvbTogMHB4OwotfQotCi06Oi13ZWJraXQtbWVkaWEtY29udHJvbHMg
ewotICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICBq
dXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwotICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Ci19Ci0K
LWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWVuY2xvc3VyZSwgdmlkZW86Oi13ZWJraXQt
bWVkaWEtY29udHJvbHMtZW5jbG9zdXJlIHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBtYXgtd2lk
dGg6IDgwMHB4OwotICAgIGhlaWdodDogMzBweDsKLSAgICBib3R0b206IDA7Ci0gICAgdGV4dC1p
bmRlbnQ6IDA7Ci0gICAgcGFkZGluZzogMDsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owot
ICAgIG92ZXJmbG93OiB2aXNpYmxlOwotfQotCi12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9s
cy1lbmNsb3N1cmUgewotICAgIHBhZGRpbmc6IDVweDsKLSAgICBoZWlnaHQ6IDQwcHg7Ci19Ci0K
LWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsLCB2aWRlbzo6LXdlYmtpdC1tZWRp
YS1jb250cm9scy1wYW5lbCB7Ci0gICAgZGlzcGxheTogZmxleDsKLSAgICBmbGV4LWRpcmVjdGlv
bjogcm93OwotICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Ci0gICAganVzdGlmeS1jb250ZW50OiBm
bGV4LXN0YXJ0OwotICAgIGJvdHRvbTogYXV0bzsKLSAgICBoZWlnaHQ6IDMwcHg7Ci0gICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiYSgyMCwgMjAsIDIwLCAwLjgpOwotICAgIGJvcmRlci1yYWRpdXM6
IDVweDsKLSAgICBvdmVyZmxvdzogdmlzaWJsZTsKLSAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAu
MjVzIGxpbmVhcjsKLX0KLQotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwgewot
ICAgIG9wYWNpdHk6IDA7Ci19Ci0KLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVs
LAotdmlkZW86LXdlYmtpdC1mdWxsLXBhZ2UtbWVkaWE6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
cGFuZWwubm8tdmlkZW8sCi12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbDpob3Zl
ciwKLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsLnNob3csCi12aWRlbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy1wYW5lbC5wYXVzZWQgewotICAgIG9wYWNpdHk6IDE7Ci19Ci0K
LXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsIGRpdi5tdXRlLWJveCwKLWF1ZGlv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsIGRpdi5tdXRlLWJveCB7Ci0gICAgZGlzcGxh
eTogZmxleDsKLSAgICBmbGV4OiBub25lOwotICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0g
ICAgd2lkdGg6IDMwcHg7Ci0gICAgaGVpZ2h0OiAzMHB4OwotICAgIG1hcmdpbjogMCA5cHggMCAt
N3B4OwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCBkaXYubXV0ZS1i
b3guaGlkZGVuLAotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwgZGl2Lm11dGUt
Ym94LmhpZGRlbiB7Ci0gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwotfQotCi1hdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtbXV0ZS1idXR0b24gewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtbXV0
ZS1idXR0b247Ci0gICAgZGlzcGxheTogZmxleDsKLSAgICBmbGV4OiBub25lOwotICAgIGJvcmRl
cjogbm9uZTsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIHdpZHRoOiAzMHB4Owot
ICAgIGhlaWdodDogMzBweDsKLSAgICBsaW5lLWhlaWdodDogMzBweDsKLSAgICBvdXRsaW5lOiBu
b25lOwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wbGF5LWJ1dHRvbiwgdmlk
ZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGxheS1idXR0b24gewotICAgIC13ZWJraXQtYXBw
ZWFyYW5jZTogbWVkaWEtcGxheS1idXR0b247Ci0gICAgZGlzcGxheTogZmxleDsKLSAgICBmbGV4
OiBub25lOwotICAgIGJvcmRlcjogbm9uZTsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owot
ICAgIHdpZHRoOiAzMHB4OwotICAgIGhlaWdodDogMzBweDsKLSAgICBsaW5lLWhlaWdodDogMzBw
eDsKLSAgICBtYXJnaW46IDAgOXB4OwotICAgIG91dGxpbmU6IG5vbmU7Ci19Ci0KLS8qIFBhdXNl
ZCBjbGFzc2VzIGZvciBhdWRpby92aWRlbyBjb250cm9scyBzaG91bGQgYmUgZGVmaW5lZCB0byBt
YWtlIGEgZGlmZmVyZW5jZSBpbiBzdHlsZSBmcm9tIG5vdCBoYXZpbmcgdGhpcyBjbGFzcy4gT3Ro
ZXJ3aXNlIGEgcmVwYWludCB3b3VsZCBub3QgaGFwcGVuLiAqLwotYXVkaW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtcGxheS1idXR0b24ucGF1c2VkLAotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtcGxheS1idXR0b24ucGF1c2VkIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci19Ci0K
LWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5LCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSwKLWF1ZGlvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUtcmVtYWluaW5nLWRpc3BsYXksIHZpZGVvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUtcmVtYWluaW5nLWRpc3BsYXkgewotICAgIC13ZWJraXQt
YXBwZWFyYW5jZTogbWVkaWEtY3VycmVudC10aW1lLWRpc3BsYXk7Ci0gICAgLXdlYmtpdC11c2Vy
LXNlbGVjdDogbm9uZTsKLSAgICBmbGV4OiBub25lOwotICAgIGRpc3BsYXk6IGJsb2NrOwotICAg
IGJvcmRlcjogbm9uZTsKLSAgICBjdXJzb3I6IGRlZmF1bHQ7Ci0KLSAgICBoZWlnaHQ6IDMwcHg7
Ci0gICAgbWFyZ2luOiAwIDE1cHggMCAwOwotCi0gICAgbGluZS1oZWlnaHQ6IDMwcHg7Ci0gICAg
Zm9udC1mYW1pbHk6IC13ZWJraXQtc21hbGwtY29udHJvbDsKLSAgICBmb250LXNpemU6IDEzcHg7
Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICBmb250LXN0eWxlOiBub3JtYWw7Ci0gICAg
Y29sb3I6IHdoaXRlOwotCi0gICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsKLSAgICB3b3JkLXNw
YWNpbmc6IG5vcm1hbDsKLSAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKLSAgICB0ZXh0LWluZGVu
dDogMDsKLSAgICB0ZXh0LXNoYWRvdzogbm9uZTsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7
Ci19Ci0KLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5
LmhpZGRlbiwKLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNw
bGF5LmhpZGRlbiwKLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUtcmVtYWluaW5n
LWRpc3BsYXkuaGlkZGVuLAotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1h
aW5pbmctZGlzcGxheS5oaWRkZW4gewotICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKLX0K
LQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUsIHZpZGVvOjotd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lIHsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlh
LXNsaWRlciAhaW1wb3J0YW50OwotICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKLSAgICBm
bGV4OiAxIDEgYXV0byAhaW1wb3J0YW50OwotICAgIGhlaWdodDogOHB4ICFpbXBvcnRhbnQ7Ci0g
ICAgbWFyZ2luOiAwIDE1cHggMCAxcHggIWltcG9ydGFudDsKLSAgICBwYWRkaW5nOiAwICFpbXBv
cnRhbnQ7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKLSAg
ICBtaW4td2lkdGg6IDI1cHggIWltcG9ydGFudDsKLSAgICBib3JkZXItcmFkaXVzOiA0cHggIWlt
cG9ydGFudDsKLSAgICBjb2xvcjogcmdiYSgyMzAsIDIzMCwgMjMwLCAwLjM1KSAhaW1wb3J0YW50
OwotICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtdGltZWxpbmVbZGlzYWJsZWRdLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy10aW1lbGluZVtkaXNhYmxlZF0gewotICAgIG9wYWNpdHk6IDAuMyAhaW1wb3J0YW50Owot
fQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZS5oaWRkZW4sCi12aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZS5oaWRkZW4gewotICAgIGRpc3BsYXk6
IG5vbmUgIWltcG9ydGFudDsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9s
dW1lLXNsaWRlci1jb250YWluZXIsIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVt
ZS1zbGlkZXItY29udGFpbmVyIHsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVt
ZS1zbGlkZXItY29udGFpbmVyOwotICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgb3ZlcmZsb3c6IGhp
ZGRlbjsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcGFkZGluZzogMDsKLSAgICBoZWln
aHQ6IDEwMHB4OwotICAgIHdpZHRoOiAzMHB4OwotICAgIGJvdHRvbTogMzBweDsKLSAgICB6LWlu
ZGV4OiAyOwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjAsIDIwLCAyMCwgMC44KTsKLSAg
ICByaWdodDogOXB4OwotICAgIGJvcmRlci1yYWRpdXM6IDVweCA1cHggMHB4IDBweDsKLSAgICB0
cmFuc2l0aW9uOiBoZWlnaHQgMC4xMHMgbGluZWFyOwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRp
YS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lci5oaWRpbmcsCi12aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lci5oaWRpbmcgewotICAgIGhl
aWdodDogMDsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRl
ci1jb250YWluZXIuZG93biwKLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1z
bGlkZXItY29udGFpbmVyLmRvd24gewotICAgIGJvdHRvbTogLTEwMHB4OwotICAgIGJvcmRlci1y
YWRpdXM6IDBweCAwcHggNXB4IDVweDsKLSAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMC4xMHMgbGlu
ZWFyLCBib3R0b20gMC4xMHMgbGluZWFyOwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1wYW5lbCAuaGlkaW5nLmRvd24sCi12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1w
YW5lbCAuaGlkaW5nLmRvd24gewotICAgIGJvdHRvbTogMDsKLX0KLQotYXVkaW86Oi13ZWJraXQt
bWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdm9sdW1lLXNsaWRlciB7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUt
c2xpZGVyICFpbXBvcnRhbnQ7Ci0gICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwotICAgIGFs
aWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKLSAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1u
ICFpbXBvcnRhbnQ7Ci0gICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50OwotICAg
IGhlaWdodDogODBweCAhaW1wb3J0YW50OwotICAgIHdpZHRoOiA4cHggIWltcG9ydGFudDsKLSAg
ICBtYXJnaW46IDEwcHggYXV0byAhaW1wb3J0YW50OwotICAgIGJvcmRlci1yYWRpdXM6IDRweCAh
aW1wb3J0YW50OwotICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7
Ci0gICAgY29sb3I6IHJnYmEoMjMwLCAyMzAsIDIzMCwgMC4zNSkgIWltcG9ydGFudDsKLSAgICBv
dXRsaW5lOiBub25lICFpbXBvcnRhbnQ7Ci19Ci0KLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRy
b2xzLXZvbHVtZS1zbGlkZXItY29udGFpbmVyIGlucHV0W3R5cGU9InJhbmdlIl06Oi13ZWJraXQt
bWVkaWEtc2xpZGVyLWNvbnRhaW5lciA+IGRpdiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgaW5wdXRbdHlwZT0icmFuZ2UiXTo6LXdlYmtpdC1t
ZWRpYS1zbGlkZXItY29udGFpbmVyID4gZGl2IHsKLSAgICBtYXJnaW46IC03cHggMDsKLX0KLQot
YXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgaW5w
dXRbdHlwZT0icmFuZ2UiXTo6LXdlYmtpdC1tZWRpYS1zbGlkZXItdGh1bWIsIHZpZGVvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXItY29udGFpbmVyIGlucHV0W3R5cGU9InJh
bmdlIl06Oi13ZWJraXQtbWVkaWEtc2xpZGVyLXRodW1iIHsKLSAgICAtd2Via2l0LWFwcGVhcmFu
Y2U6IG1lZGlhLXZvbHVtZS1zbGlkZXJ0aHVtYjsKLSAgICB3aWR0aDogMTJweDsKLSAgICBoZWln
aHQ6IDEycHg7Ci0gICAgYm9yZGVyLXJhZGl1czogM3B4OwotICAgIGNvbG9yOiB3aGl0ZTsKLSAg
ICBtYXJnaW46IDA7Ci19Ci0KLWlucHV0W3R5cGU9InJhbmdlIl06Oi13ZWJraXQtbWVkaWEtc2xp
ZGVyLWNvbnRhaW5lciB7Ci0gICAgZGlzcGxheTogZmxleDsKLSAgICBhbGlnbi1pdGVtczogY2Vu
dGVyOwotICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7IC8qIFRoaXMgcHJvcGVydHkgaXMgdXBkYXRl
ZCBieSBDKysgY29kZS4gKi8KLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIGhlaWdo
dDogMTAwJTsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIz
MCwgMjMwLCAyMzAsIDAuMzUpOwotICAgIGJvcmRlci1yYWRpdXM6IDRweDsKLSAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKLX0KLQotLyogVGhlIG5lZ2F0aXZlIHJpZ2h0IG1hcmdp
biBjYXVzZXMgdGhlIHRyYWNrIHRvIG92ZXJmbG93IGl0cyBjb250YWluZXIuICovCi1pbnB1dFt0
eXBlPSJyYW5nZSJdOjotd2Via2l0LW1lZGlhLXNsaWRlci1jb250YWluZXIgPiBkaXYgewotICAg
IG1hcmdpbi1yaWdodDogLTE0cHg7Ci19Ci0KLWlucHV0W3R5cGU9InJhbmdlIl06Oi13ZWJraXQt
bWVkaWEtc2xpZGVyLXRodW1iIHsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXNsaWRl
cnRodW1iOwotICAgIHdpZHRoOiAxMnB4OwotICAgIGhlaWdodDogMTJweDsKLSAgICBib3JkZXIt
cmFkaXVzOiAzcHg7Ci0gICAgY29sb3I6IHdoaXRlOwotICAgIG1hcmdpbi1sZWZ0OiAtN3B4Owot
ICAgIG1hcmdpbi1yaWdodDogLTdweDsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNv
bnRyb2xzLXRvZ2dsZS1jbG9zZWQtY2FwdGlvbnMtYnV0dG9uIHsKLSAgICAtd2Via2l0LWFwcGVh
cmFuY2U6IG1lZGlhLXRvZ2dsZS1jbG9zZWQtY2FwdGlvbnMtYnV0dG9uOwotICAgIGRpc3BsYXk6
IGZsZXg7Ci0gICAgZmxleDogbm9uZTsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgYm94LXNpemlu
ZzogYm9yZGVyLWJveDsKLSAgICB3aWR0aDogMzBweDsKLSAgICBoZWlnaHQ6IDMwcHg7Ci0gICAg
bGluZS1oZWlnaHQ6IDMwcHg7Ci0gICAgbWFyZ2luOiAwIDlweCAwIC03cHg7Ci0gICAgb3V0bGlu
ZTogbm9uZTsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9nZ2xlLWNsb3Nl
ZC1jYXB0aW9ucy1idXR0b24uaGlkZGVuLAotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
dG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24uaGlkZGVuIHsKLSAgICBkaXNwbGF5OiBub25l
ICFpbXBvcnRhbnQ7Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1j
YXB0aW9ucy1jb250YWluZXIgewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtY2xvc2Vk
LWNhcHRpb25zLWNvbnRhaW5lcjsKLSAgICBkaXNwbGF5OiBmbGV4OwotICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKLSAgICBib3R0b206IDM1cHg7Ci0gICAgei1pbmRleDogMjsKLSAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiByZ2JhKDIwLCAyMCwgMjAsIDAuOCk7Ci0gICAgYm9yZGVyLXJhZGl1czogNXB4
IDVweCAwcHggMHB4OwotICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAgbWF4LXdpZHRoOiAtd2Vi
a2l0LWNhbGMoMTAwJSAtIDQ4cHgpOyAvKiByaWdodCArIDEwcHggKi8KLSAgICBtYXgtaGVpZ2h0
OiAtd2Via2l0LWNhbGMoMTAwJSAtIDM1cHgpOyAvKiBib3R0b20gKyAxMHB4ICovCi0gICAgY3Vy
c29yOiBkZWZhdWx0OwotICAgIGZvbnQtZmFtaWx5OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7Ci0g
ICAgZm9udC1zaXplOiAxMHB0OwotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgZm9udC1z
dHlsZTogbm9ybWFsOwotICAgIGNvbG9yOiB3aGl0ZTsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0
OiBub25lOwotICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjEwcyBsaW5lYXI7Ci19Ci0KLXZpZGVv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1jYXB0aW9ucy1jb250YWluZXIub3V0IHsK
LSAgICBib3JkZXItcmFkaXVzOiA1cHg7Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRy
b2xzLWNsb3NlZC1jYXB0aW9ucy1jb250YWluZXIuaGlkZGVuIHsKLSAgICBkaXNwbGF5OiBub25l
ICFpbXBvcnRhbnQ7Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1j
YXB0aW9ucy1jb250YWluZXIgaDMgewotICAgIHBhZGRpbmctdG9wOiA4cHg7Ci0gICAgbWFyZ2lu
OiAwOwotICAgIHBhZGRpbmctbGVmdDogMTdweDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4Owot
ICAgIGZvbnQtc2l6ZTogMTBwdDsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBmb250LXN0
eWxlOiBub3JtYWw7Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1j
YXB0aW9ucy1jb250YWluZXIgdWwgewotICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKLSAgICBt
YXJnaW46IDAgMCA0cHggMDsKLSAgICBwYWRkaW5nOiA0cHggMCAwIDA7Ci19Ci0KLXZpZGVvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1jYXB0aW9ucy1jb250YWluZXIgbGkgewotICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBjb2xvcjogd2hpdGU7Ci0gICAgbWFyZ2luOiAwOwot
ICAgIHBhZGRpbmctbGVmdDogMTdweDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4OwotICAgIHBh
ZGRpbmctdG9wOiAwLjE1ZW07Ci0gICAgcGFkZGluZy1ib3R0b206IDAuMmVtOwotICAgIGJveC1z
aXppbmc6IGJvcmRlci1ib3g7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICB3aGl0ZS1zcGFj
ZTogbm93cmFwOwotICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwotICAgIG91dGxpbmU6IG5v
bmU7Ci19Ci12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jbG9zZWQtY2FwdGlvbnMtY29u
dGFpbmVyIGxpLnNlbGVjdGVkIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzMCwgMjMw
LCAyMzAsIDAuMTUpOwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2Ny
ZWVuLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0
b24gewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtZW50ZXItZnVsbHNjcmVlbi1idXR0
b247Ci0gICAgZGlzcGxheTogZmxleDsKLSAgICBmbGV4OiBub25lOwotICAgIGJvcmRlcjogbm9u
ZTsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIHdpZHRoOiAzMHB4OwotICAgIGhl
aWdodDogMzBweDsKLSAgICBsaW5lLWhlaWdodDogMzBweDsKLSAgICBtYXJnaW46IDAgOXB4IDAg
LTdweDsKLSAgICBvdXRsaW5lOiBub25lOwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1mdWxsc2NyZWVuLWJ1dHRvbi5oaWRkZW4sCi12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1mdWxsc2NyZWVuLWJ1dHRvbi5oaWRkZW4gewotICAgIGRpc3BsYXk6IG5vbmUgIWltcG9y
dGFudDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9TY3JvbGxi
YXJUaGVtZVdQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJh
clRoZW1lQWR3YWl0YS5jcHAKc2ltaWxhcml0eSBpbmRleCA3OSUKcmVuYW1lIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3BlL1Njcm9sbGJhclRoZW1lV1BFLmNwcApyZW5hbWUgdG8gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwCmlu
ZGV4IGEzOTYyNDE5ZjRkLi40MTYzZTVhYjQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3BlL1Njcm9sbGJhclRoZW1lV1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
Y3JvbGxiYXJUaGVtZVdQRS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQWR3YWl0YS5oIgog
CiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJUaGVt
ZUFkd2FpdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OSw0MiArNTAsNTIgQEAg
c3RhdGljIGNvbnN0IENvbG9yIHRodW1iSG92ZXJlZENvbG9yID0gbWFrZVJHQig4NiwgOTEsIDky
KTsKIHN0YXRpYyBjb25zdCBDb2xvciB0aHVtYlByZXNzZWRDb2xvciA9IG1ha2VSR0IoMjcsIDEw
NiwgMjAzKTsKIHN0YXRpYyBjb25zdCBDb2xvciB0aHVtYkNvbG9yID0gbWFrZVJHQigxMjYsIDEy
OSwgMTMwKTsKIAotaW50IFNjcm9sbGJhclRoZW1lV1BFOjpzY3JvbGxiYXJUaGlja25lc3MoU2Ny
b2xsYmFyQ29udHJvbFNpemUsIFNjcm9sbGJhckV4cGFuc2lvblN0YXRlKQorYm9vbCBTY3JvbGxi
YXJUaGVtZUFkd2FpdGE6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Cit7CisjaWYgUExB
VEZPUk0oR1RLKQorICAgIHN0YXRpYyBib29sIHNob3VsZFV1c2VPdmVybGF5U2Nyb2xsYmFycyA9
IGdfc3RyY21wMChnX2dldGVudigiR1RLX09WRVJMQVlfU0NST0xMSU5HIiksICIwIik7CisgICAg
cmV0dXJuIHNob3VsZFV1c2VPdmVybGF5U2Nyb2xsYmFyczsKKyNlbHNlCisgICAgcmV0dXJuIHRy
dWU7CisjZW5kaWYKK30KKworaW50IFNjcm9sbGJhclRoZW1lQWR3YWl0YTo6c2Nyb2xsYmFyVGhp
Y2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplLCBTY3JvbGxiYXJFeHBhbnNpb25TdGF0ZSkKIHsK
ICAgICByZXR1cm4gc2Nyb2xsYmFyU2l6ZTsKIH0KIAotaW50IFNjcm9sbGJhclRoZW1lV1BFOjpt
aW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyJikKK2ludCBTY3JvbGxiYXJUaGVtZUFkd2FpdGE6
Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXImKQogewogICAgIHJldHVybiAwOwogfQogCi1i
b29sIFNjcm9sbGJhclRoZW1lV1BFOjpoYXNCdXR0b25zKFNjcm9sbGJhciYpCitib29sIFNjcm9s
bGJhclRoZW1lQWR3YWl0YTo6aGFzQnV0dG9ucyhTY3JvbGxiYXImKQogewogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVtZVdQRTo6aGFzVGh1bWIoU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIpCitib29sIFNjcm9sbGJhclRoZW1lQWR3YWl0YTo6aGFzVGh1bWIoU2Nyb2xsYmFy
JiBzY3JvbGxiYXIpCiB7CiAgICAgcmV0dXJuIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikgPiAwOwog
fQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lV1BFOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIm
LCBTY3JvbGxiYXJQYXJ0LCBib29sKQorSW50UmVjdCBTY3JvbGxiYXJUaGVtZUFkd2FpdGE6OmJh
Y2tCdXR0b25SZWN0KFNjcm9sbGJhciYsIFNjcm9sbGJhclBhcnQsIGJvb2wpCiB7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotSW50UmVjdCBTY3JvbGxiYXJUaGVtZVdQRTo6Zm9yd2FyZEJ1dHRvblJl
Y3QoU2Nyb2xsYmFyJiwgU2Nyb2xsYmFyUGFydCwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFyVGhl
bWVBZHdhaXRhOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXImLCBTY3JvbGxiYXJQYXJ0LCBi
b29sKQogewogICAgIHJldHVybiB7IH07CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVXUEU6
OnRyYWNrUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFy
VGhlbWVBZHdhaXRhOjp0cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wpCiB7CiAg
ICAgcmV0dXJuIHNjcm9sbGJhci5mcmFtZVJlY3QoKTsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVt
ZVdQRTo6cGFpbnQoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorYm9vbCBTY3JvbGxiYXJUaGVt
ZUFkd2FpdGE6OnBhaW50KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKIHsKICAgICBpZiAoZ3Jh
cGhpY3NDb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtOTYsNyArMTA3LDExIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVXUEU6OnBhaW50KFNjcm9sbGJh
ciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAgICAgaWYgKCFyZWN0
LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgZG91
YmxlIG9wYWNpdHkgPSBzY3JvbGxiYXIuaG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQgPyBzY3JvbGxi
YXIub3BhY2l0eSgpIDogc2Nyb2xsYmFyT3BhY2l0eTsKKyAgICBkb3VibGUgb3BhY2l0eTsKKyAg
ICBpZiAodXNlc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIG9wYWNpdHkgPSBzY3JvbGxi
YXIuaG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQgPyBzY3JvbGxiYXIub3BhY2l0eSgpIDogc2Nyb2xs
YmFyT3BhY2l0eTsKKyAgICBlbHNlCisgICAgICAgIG9wYWNpdHkgPSAxOwogICAgIGlmICghb3Bh
Y2l0eSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTEwNiw3ICsxMjEsNyBAQCBib29sIFNj
cm9sbGJhclRoZW1lV1BFOjpwYWludChTY3JvbGxiYXImIHNjcm9sbGJhciwgR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbgogICAgICAgICBncmFwaGljc0NvbnRleHQuYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihvcGFjaXR5KTsKICAgICB9CiAKLSAgICBpZiAoc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0
KCkgIT0gTm9QYXJ0KSB7CisgICAgaWYgKHNjcm9sbGJhci5ob3ZlcmVkUGFydCgpICE9IE5vUGFy
dCB8fCAhdXNlc092ZXJsYXlTY3JvbGxiYXJzKCkpIHsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LmZpbGxSZWN0KHJlY3QsIHNjcm9sbGJhckJhY2tncm91bmRDb2xvcik7CiAKICAgICAgICAgSW50
UmVjdCBmcmFtZSA9IHJlY3Q7CkBAIC0xMjIsNyArMTM3LDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVt
ZVdQRTo6cGFpbnQoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb24KICAgICBpbnQgdGh1bWJQb3MgPSB0aHVtYlBvc2l0aW9uKHNjcm9sbGJhcik7CiAgICAg
aW50IHRodW1iTGVuID0gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKTsKICAgICBJbnRSZWN0IHRodW1i
ID0gcmVjdDsKLSAgICBpZiAoc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB7Cisg
ICAgaWYgKHNjcm9sbGJhci5ob3ZlcmVkUGFydCgpID09IE5vUGFydCAmJiB1c2VzT3ZlcmxheVNj
cm9sbGJhcnMoKSkgewogICAgICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWxTY3JvbGxiYXIpIHsKICAgICAgICAgICAgIGlmIChzY3JvbGxiYXIuc2Nyb2xsYWJsZUFy
ZWEoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCiAgICAgICAg
ICAgICAgICAgdGh1bWIubW92ZShob3ZlcmVkU2Nyb2xsYmFyQm9yZGVyU2l6ZSwgdGh1bWJQb3Mg
KyB0aHVtYkJvcmRlclNpemUpOwpAQCAtMTUyLDcgKzE2Nyw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhl
bWVXUEU6OnBhaW50KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBo
aWNzQ29uCiAKICAgICBGbG9hdFNpemUgY29ybmVyKDQsIDQpOwogICAgIFBhdGggcGF0aDsKLSAg
ICBpZiAoc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB7CisgICAgaWYgKHNjcm9s
bGJhci5ob3ZlcmVkUGFydCgpID09IE5vUGFydCAmJiB1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkg
ewogICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHRodW1iLCBjb3JuZXIpOwogICAgICAgICB0
aHVtYi5pbmZsYXRlKC0xKTsKICAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdCh0aHVtYiwgY29y
bmVyKTsKQEAgLTE2NCwxMCArMTc5LDEwIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVXUEU6OnBhaW50
KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAKICAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHRodW1iLCBjb3JuZXIpOwogICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRGaWxsUnVsZShXaW5kUnVsZTo6Tm9uWmVybyk7Ci0gICAgaWYgKHNjcm9sbGJhci5ob3Zl
cmVkUGFydCgpID09IE5vUGFydCkKKyAgICBpZiAoc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgPT0g
Tm9QYXJ0ICYmIHVzZXNPdmVybGF5U2Nyb2xsYmFycygpKQogICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0RmlsbENvbG9yKG92ZXJsYXlUaHVtYkNvbG9yKTsKICAgICBlbHNlIGlmIChzY3JvbGxi
YXIucHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXRGaWxsQ29sb3IodGh1bWJQcmVzc2VkQ29sb3IpOworICAgICAgICBncmFwaGljc0NvbnRleHQu
c2V0RmlsbENvbG9yKHN0YXRpY19jYXN0PFRoZW1lQWR3YWl0YSY+KFRoZW1lOjpzaW5nbGV0b24o
KSkuYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogICAgIGVsc2UgaWYgKHNjcm9s
bGJhci5ob3ZlcmVkUGFydCgpID09IFRodW1iUGFydCkKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LnNldEZpbGxDb2xvcih0aHVtYkhvdmVyZWRDb2xvcik7CiAgICAgZWxzZQpAQCAtMTgwLDcgKzE5
NSw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVXUEU6OnBhaW50KFNjcm9sbGJhciYgc2Nyb2xsYmFy
LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVNj
cm9sbGJhckJ1dHRvblByZXNzQWN0aW9uIFNjcm9sbGJhclRoZW1lV1BFOjpoYW5kbGVNb3VzZVBy
ZXNzRXZlbnQoU2Nyb2xsYmFyJiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgU2Ny
b2xsYmFyUGFydCBwcmVzc2VkUGFydCkKK1Njcm9sbGJhckJ1dHRvblByZXNzQWN0aW9uIFNjcm9s
bGJhclRoZW1lQWR3YWl0YTo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KFNjcm9sbGJhciYsIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQpCiB7
CiAgICAgc3dpdGNoIChwcmVzc2VkUGFydCkgewogICAgIGNhc2UgQmFja1RyYWNrUGFydDoKQEAg
LTIwNyw3ICsyMjIsNyBAQCBTY3JvbGxiYXJCdXR0b25QcmVzc0FjdGlvbiBTY3JvbGxiYXJUaGVt
ZVdQRTo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KFNjcm9sbGJhciYsCiAKIFNjcm9sbGJhclRoZW1l
JiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQogewotICAgIHN0YXRpYyBTY3JvbGxiYXJU
aGVtZVdQRSB0aGVtZTsKKyAgICBzdGF0aWMgU2Nyb2xsYmFyVGhlbWVBZHdhaXRhIHRoZW1lOwog
ICAgIHJldHVybiB0aGVtZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3BlL1Njcm9sbGJhclRoZW1lV1BFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdh
aXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5oCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9TY3JvbGxiYXJUaGVtZVdQRS5oCnJlbmFt
ZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0
YS5oCmluZGV4IGFlOWQ2NTkxMWJkLi4yNjYxZGU5ZTliMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3BlL1Njcm9sbGJhclRoZW1lV1BFLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOSwxMyArMjksMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3Jv
bGxiYXJUaGVtZVdQRSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSB7Citj
bGFzcyBTY3JvbGxiYXJUaGVtZUFkd2FpdGEgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVD
b21wb3NpdGUgewogcHVibGljOgotICAgIFNjcm9sbGJhclRoZW1lV1BFKCkgPSBkZWZhdWx0Owot
ICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lV1BFKCkgPSBkZWZhdWx0OworICAgIFNjcm9sbGJh
clRoZW1lQWR3YWl0YSgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZUFk
d2FpdGEoKSA9IGRlZmF1bHQ7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCB1c2VzT3ZlcmxheVNjcm9s
bGJhcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCB1c2VzT3Zl
cmxheVNjcm9sbGJhcnMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGludmFsaWRhdGVPbk1v
dXNlRW50ZXJFeGl0KCkgb3ZlcnJpZGUgeyByZXR1cm4gdXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7
IH0KIAogICAgIGJvb2wgcGFpbnQoU2Nyb2xsYmFyJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOwogICAgIFNjcm9sbGJhckJ1dHRvblByZXNzQWN0aW9uIGhhbmRs
ZU1vdXNlUHJlc3NFdmVudChTY3JvbGxiYXImLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBT
Y3JvbGxiYXJQYXJ0KSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dwZS9UaGVtZVdQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Ro
ZW1lQWR3YWl0YS5jcHAKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3BlL1RoZW1lV1BFLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCmluZGV4IGMzMzBiMmQ5NTY4Li42MWQ2
MDRhODRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1RoZW1lV1BF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUaGVtZVdQRS5oIgorI2luY2x1ZGUgIlRoZW1lQWR3YWl0YS5oIgog
CiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb250cm9sU3RhdGVzLmgiCkBAIC00MSw3
ICs0MSw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBhcnJvd1NpemUgPSAxNjsKIHN0YXRpYyBj
b25zdCBDb2xvciBhcnJvd0NvbG9yID0gbWFrZVJHQig0NiwgNTIsIDU0KTsKIHN0YXRpYyBjb25z
dCBpbnQgYnV0dG9uRm9jdXNPZmZzZXQgPSAtMzsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBidXR0
b25QYWRkaW5nID0gNTsKLXN0YXRpYyBjb25zdCBpbnQgYnV0dG9uQm9yZGVyU2l6ZSA9IDE7IC8v
IEtlZXAgaW4gc3luYyB3aXRoIG1lbnVMaXN0QnV0dG9uQm9yZGVyU2l6ZSBpbiBSZW5kZXJUaGVt
ZVdQRS4KK3N0YXRpYyBjb25zdCBpbnQgYnV0dG9uQm9yZGVyU2l6ZSA9IDE7IC8vIEtlZXAgaW4g
c3luYyB3aXRoIG1lbnVMaXN0QnV0dG9uQm9yZGVyU2l6ZSBpbiBSZW5kZXJUaGVtZUFkd2FpdGEu
CiBzdGF0aWMgY29uc3QgQ29sb3IgYnV0dG9uQm9yZGVyQ29sb3IgPSBtYWtlUkdCKDIwNSwgMTk5
LCAxOTQpOwogc3RhdGljIGNvbnN0IENvbG9yIGJ1dHRvbkJhY2tncm91bmRDb2xvciA9IG1ha2VS
R0IoMjQ0LCAyNDIsIDI0MSk7CiBzdGF0aWMgY29uc3QgQ29sb3IgYnV0dG9uQmFja2dyb3VuZFBy
ZXNzZWRDb2xvciA9IG1ha2VSR0IoMjE0LCAyMDksIDIwNSk7CkBAIC01OSwxOCArNTksNDAgQEAg
c3RhdGljIGNvbnN0IENvbG9yIHNwaW5CdXR0b25CYWNrZ3JvdW5kQ29sb3IgPSBtYWtlUkdCKDI1
MiwgMjUyLCAyNTIpOwogc3RhdGljIGNvbnN0IENvbG9yIHNwaW5CdXR0b25CYWNrZ3JvdW5kSG92
ZXJlZENvbG9yID0gbWFrZVJHQkEoNDYsIDUyLCA1NCwgNTApOwogc3RhdGljIGNvbnN0IENvbG9y
IHNwaW5CdXR0b25CYWNrZ3JvdW5kUHJlc3NlZENvbG9yID0gbWFrZVJHQkEoNDYsIDUyLCA1NCwg
NzApOwogCisjaWYgIVBMQVRGT1JNKEdUSykKIFRoZW1lJiBUaGVtZTo6c2luZ2xldG9uKCkKIHsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhlbWVXUEU+IHRoZW1lOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxUaGVtZUFkd2FpdGE+IHRoZW1lOwogICAgIHJldHVybiB0aGVtZTsKIH0K
KyNlbmRpZgogCi1Db2xvciBUaGVtZVdQRTo6Zm9jdXNDb2xvcigpCitDb2xvciBUaGVtZUFkd2Fp
dGE6OmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1ha2VSR0IoMjU1LCAyNTUsIDI1NSk7Cit9CisKK0NvbG9yIFRoZW1lQWR3YWl0YTo6YWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFrZVJHQig1
MiwgMTMyLCAyMjgpOworfQorCitDb2xvciBUaGVtZUFkd2FpdGE6OmluYWN0aXZlU2VsZWN0aW9u
Rm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFrZVJHQigyNTIsIDI1Miwg
MjUyKTsKK30KKworQ29sb3IgVGhlbWVBZHdhaXRhOjppbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpOworfQorCitDb2xvciBUaGVtZUFkd2FpdGE6OmZvY3VzQ29sb3IoKQogewogICAgIHJl
dHVybiBmb2N1c1JpbmdDb2xvcjsKIH0KIAotdm9pZCBUaGVtZVdQRTo6cGFpbnRGb2N1cyhHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBpbnQg
b2Zmc2V0KQordm9pZCBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoR3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgaW50IG9mZnNldCkKIHsKICAg
ICBGbG9hdFJlY3QgZm9jdXNSZWN0ID0gcmVjdDsKICAgICBmb2N1c1JlY3QuaW5mbGF0ZShvZmZz
ZXQpOwpAQCAtNzksNyArMTAxLDcgQEAgdm9pZCBUaGVtZVdQRTo6cGFpbnRGb2N1cyhHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWMKICAgICBwYWlu
dEZvY3VzKGdyYXBoaWNzQ29udGV4dCwgcGF0aCwgZm9jdXNSaW5nQ29sb3IpOwogfQogCi12b2lk
IFRoZW1lV1BFOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBQYXRoJiBwYXRoLCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFRoZW1lQWR3YWl0YTo6
cGFpbnRGb2N1cyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgUGF0aCYg
cGF0aCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCkBAIC05Nyw3ICsxMTksNyBAQCB2b2lk
IFRoZW1lV1BFOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBQYXRoJiBwYXRoLCBjbwogICAgIGdyYXBoaWNzQ29udGV4dC5lbmRUcmFuc3BhcmVuY3lM
YXllcigpOwogfQogCi12b2lkIFRoZW1lV1BFOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKICAgICBGbG9hdFNpemUgY29ybmVyKDIsIDIpOwogICAgIFBhdGgg
cGF0aDsKQEAgLTEwNiw3ICsxMjgsNyBAQCB2b2lkIFRoZW1lV1BFOjpwYWludEZvY3VzKEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRSZQogICAgIHBh
aW50Rm9jdXMoZ3JhcGhpY3NDb250ZXh0LCBwYXRoLCBjb2xvcik7CiB9CiAKLXZvaWQgVGhlbWVX
UEU6OnBhaW50QXJyb3coR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEFycm93RGly
ZWN0aW9uIGRpcmVjdGlvbikKK3ZvaWQgVGhlbWVBZHdhaXRhOjpwYWludEFycm93KEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBBcnJvd0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAg
ICAgUGF0aCBwYXRoOwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CkBAIC0xMjcsNyArMTQ5LDcg
QEAgdm9pZCBUaGVtZVdQRTo6cGFpbnRBcnJvdyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgQXJyb3dEaXJlY3Rpb24gZGlyZWMKICAgICBncmFwaGljc0NvbnRleHQuZmlsbFBhdGgo
cGF0aCk7CiB9CiAKLUxlbmd0aFNpemUgVGhlbWVXUEU6OmNvbnRyb2xTaXplKENvbnRyb2xQYXJ0
IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgY29uc3QgTGVuZ3RoU2l6ZSYg
em9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xlbmd0aFNpemUgVGhlbWVBZHdh
aXRhOjpjb250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dENhc2NhZGUsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3Ip
IGNvbnN0CiB7CiAgICAgaWYgKCF6b29tZWRTaXplLndpZHRoLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgIXpvb21lZFNpemUuaGVpZ2h0LmlzSW50cmluc2ljT3JBdXRvKCkpCiAgICAgICAgIHJldHVy
biBUaGVtZTo6Y29udHJvbFNpemUocGFydCwgZm9udENhc2NhZGUsIHpvb21lZFNpemUsIHpvb21G
YWN0b3IpOwpAQCAtMTUxLDcgKzE3Myw3IEBAIExlbmd0aFNpemUgVGhlbWVXUEU6OmNvbnRyb2xT
aXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkCiAgICAg
cmV0dXJuIFRoZW1lOjpjb250cm9sU2l6ZShwYXJ0LCBmb250Q2FzY2FkZSwgem9vbWVkU2l6ZSwg
em9vbUZhY3Rvcik7CiB9CiAKLXZvaWQgVGhlbWVXUEU6OnBhaW50KENvbnRyb2xQYXJ0IHBhcnQs
IENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqLCBmbG9h
dCwgZmxvYXQsIGJvb2wsIGJvb2wpCit2b2lkIFRoZW1lQWR3YWl0YTo6cGFpbnQoQ29udHJvbFBh
cnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmll
dyosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAg
ICBjYXNlIENoZWNrYm94UGFydDoKQEAgLTE3NCw3ICsxOTYsNyBAQCB2b2lkIFRoZW1lV1BFOjpw
YWludChDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29u
dGV4dCYgYwogICAgIH0KIH0KIAotdm9pZCBUaGVtZVdQRTo6cGFpbnRDaGVja2JveChDb250cm9s
U3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0KQordm9pZCBUaGVtZUFkd2FpdGE6OnBhaW50Q2hl
Y2tib3goQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCkKIHsKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIApAQCAtMjI4
LDcgKzI1MCw3IEBAIHZvaWQgVGhlbWVXUEU6OnBhaW50Q2hlY2tib3goQ29udHJvbFN0YXRlcyYg
c3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAgICAgICAgIHBhaW50Rm9jdXMo
Z3JhcGhpY3NDb250ZXh0LCB6b29tZWRSZWN0LCB0b2dnbGVGb2N1c09mZnNldCk7CiB9CiAKLXZv
aWQgVGhlbWVXUEU6OnBhaW50UmFkaW8oQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9h
dCkKK3ZvaWQgVGhlbWVBZHdhaXRhOjpwYWludFJhZGlvKENvbnRyb2xTdGF0ZXMmIHN0YXRlcywg
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVk
UmVjdCwgZmxvYXQpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGdyYXBoaWNzQ29udGV4dCk7CiAgICAgRmxvYXRSZWN0IGZpZWxkUmVjdCA9IHpvb21lZFJlY3Q7
CkBAIC0yNjYsNyArMjg4LDcgQEAgdm9pZCBUaGVtZVdQRTo6cGFpbnRSYWRpbyhDb250cm9sU3Rh
dGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXgKICAgICAgICAgcGFp
bnRGb2N1cyhncmFwaGljc0NvbnRleHQsIHpvb21lZFJlY3QsIHRvZ2dsZUZvY3VzT2Zmc2V0KTsK
IH0KIAotdm9pZCBUaGVtZVdQRTo6cGFpbnRCdXR0b24oQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRS
ZWN0LCBmbG9hdCkKK3ZvaWQgVGhlbWVBZHdhaXRhOjpwYWludEJ1dHRvbihDb250cm9sU3RhdGVz
JiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIHpvb21lZFJlY3QsIGZsb2F0KQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCkBAIC0yOTcsNyArMzE5LDcgQEAgdm9pZCBU
aGVtZVdQRTo6cGFpbnRCdXR0b24oQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGUKICAgICAgICAgcGFpbnRGb2N1cyhncmFwaGljc0NvbnRleHQsIHpv
b21lZFJlY3QsIGJ1dHRvbkZvY3VzT2Zmc2V0KTsKIH0KIAotdm9pZCBUaGVtZVdQRTo6cGFpbnRT
cGluQnV0dG9uKENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQpCit2b2lkIFRoZW1l
QWR3YWl0YTo6cGFpbnRTcGluQnV0dG9uKENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxv
YXQpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNz
Q29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9UaGVt
ZVdQRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuaApz
aW1pbGFyaXR5IGluZGV4IDg2JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
cGUvVGhlbWVXUEUuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9U
aGVtZUFkd2FpdGEuaAppbmRleCAzMDc1YTgxYmZiMi4uOTA5ZjM1YjEwMGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9UaGVtZVdQRS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUs
IDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
OCArMjgsOSBAQAogI2luY2x1ZGUgIlRoZW1lLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIFBhdGg7CiAKLWNsYXNzIFRoZW1lV1BFIGZpbmFsIDogcHVibGljIFRoZW1lIHsKK2NsYXNz
IFRoZW1lQWR3YWl0YSA6IHB1YmxpYyBUaGVtZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIENvbG9y
IGZvY3VzQ29sb3IoKTsKICAgICBzdGF0aWMgdm9pZCBwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGludCBvZmZzZXQpOwpAQCAtMzgsOSArMzksMTQgQEAgcHVi
bGljOgogICAgIGVudW0gY2xhc3MgQXJyb3dEaXJlY3Rpb24geyBVcCwgRG93biB9OwogICAgIHN0
YXRpYyB2b2lkIHBhaW50QXJyb3coR3JhcGhpY3NDb250ZXh0JiwgQXJyb3dEaXJlY3Rpb24pOwog
CisgICAgdmlydHVhbCBDb2xvciBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIENvbG9yIGFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNv
bnN0OworICAgIHZpcnR1YWwgQ29sb3IgaW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCkg
eyB9OworCiBwcml2YXRlOgogICAgIExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQs
IGNvbnN0IEZvbnRDYXNjYWRlJiwgY29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0KSBjb25zdCBmaW5h
bDsKLQogICAgIHZvaWQgcGFpbnQoQ29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCwgU2Nyb2xsVmlldyosIGZsb2F0LCBm
bG9hdCwgYm9vbCwgYm9vbCkgZmluYWw7CiAKICAgICB2b2lkIHBhaW50Q2hlY2tib3goQ29udHJv
bFN0YXRlcyYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3Bl
cmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuY3BwCmluZGV4IGNkOGYxZGIzNTllLi5hZDMzMjY1NDE4ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09w
ZXJhdGlvbnMuY3BwCkBAIC0yNzksMzQgKzI3OSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxs
Q3VycmVudENhaXJvUGF0aChQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBj
CiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RG
b2N1c1JpbmdDb2xvcihDb2xvciYgY29sb3IpCi17Ci0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAv
LyBGb3JjZSB0aGUgYWxwaGEgdG8gNTAlLiBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgTWFjIGRvZXMg
d2l0aCBvdXRsaW5lIHJpbmdzLgotICAgIGNvbG9yID0gQ29sb3IobWFrZVJHQkEoY29sb3IucmVk
KCksIGNvbG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSwgMTI3KSk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShjb2xvcik7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEZv
Y3VzUmluZ0xpbmVXaWR0aChmbG9hdCYgd2lkdGgpCi17Ci0jaWYgUExBVEZPUk0oR1RLKQotICAg
IHdpZHRoID0gMjsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSNlbmRpZgotfQot
Ci1zdGF0aWMgaW5saW5lIFN0cm9rZVN0eWxlIGZvY3VzUmluZ1N0cm9rZVN0eWxlKCkKLXsKLSNp
ZiBQTEFURk9STShHVEspCi0gICAgcmV0dXJuIERvdHRlZFN0cm9rZTsKLSNlbHNlCi0gICAgcmV0
dXJuIFNvbGlkU3Ryb2tlOwotI2VuZGlmCi19Ci0KIHN0YXRpYyB2b2lkIGRyYXdHbHlwaHNUb0Nv
bnRleHQoY2Fpcm9fdCogY29udGV4dCwgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCwg
ZG91YmxlIHN5bnRoZXRpY0JvbGRPZmZzZXQsIGNvbnN0IFZlY3RvcjxjYWlyb19nbHlwaF90PiYg
Z2x5cGhzLCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKICAgICBjYWly
b19tYXRyaXhfdCBvcmlnaW5hbFRyYW5zZm9ybTsKQEAgLTExNTEsOSArMTEyMyw5IEBAIHZvaWQg
ZHJhd0ZvY3VzUmluZyhQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBQYXRoJiBwYXRoLCBmbG9hCiB7CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkcmF3IHBhdGhz
IHRoYXQgZGVzY3JpYmUgYSByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5lcnMKICAgICAvLyBz
byBhcyB0byBiZSBjb25zaXN0ZW50IHdpdGggaG93IHdlIGRyYXcgcmVjdGFuZ3VsYXIgZm9jdXMg
cmluZ3MuCi0gICAgQ29sb3IgcmluZ0NvbG9yID0gY29sb3I7Ci0gICAgYWRqdXN0Rm9jdXNSaW5n
Q29sb3IocmluZ0NvbG9yKTsKLSAgICBhZGp1c3RGb2N1c1JpbmdMaW5lV2lkdGgod2lkdGgpOwor
CisgICAgLy8gRm9yY2UgdGhlIGFscGhhIHRvIDUwJS4gVGhpcyBtYXRjaGVzIHdoYXQgdGhlIE1h
YyBkb2VzIHdpdGggb3V0bGluZSByaW5ncy4KKyAgICBDb2xvciByaW5nQ29sb3IgPSBtYWtlUkdC
QShjb2xvci5yZWQoKSwgY29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpLCAxMjcpOwogCiAgICAg
Y2Fpcm9fdCogY3IgPSBwbGF0Zm9ybUNvbnRleHQuY3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsK
QEAgLTExNjIsNyArMTEzNCw2IEBAIHZvaWQgZHJhd0ZvY3VzUmluZyhQbGF0Zm9ybUNvbnRleHRD
YWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBmbG9hCiAgICAgYXBwZW5k
V2ViQ29yZVBhdGhUb0NhaXJvQ29udGV4dChjciwgcGF0aCk7CiAgICAgc2V0U291cmNlUkdCQUZy
b21Db2xvcihjciwgcmluZ0NvbG9yKTsKICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjciwgd2lk
dGgpOwotICAgIENhaXJvOjpTdGF0ZTo6c2V0U3Ryb2tlU3R5bGUocGxhdGZvcm1Db250ZXh0LCBm
b2N1c1JpbmdTdHJva2VTdHlsZSgpKTsKICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJP
X09QRVJBVE9SX09WRVIpOwogICAgIGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjcik7CiAKQEAgLTEx
ODAsMTAgKzExNTEsNiBAQCB2b2lkIGRyYXdGb2N1c1JpbmcoUGxhdGZvcm1Db250ZXh0Q2Fpcm8m
IHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgZmxvYQogdm9pZCBkcmF3Rm9jdXNS
aW5nKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFZlY3RvcjxG
bG9hdFJlY3Q+JiByZWN0cywgZmxvYXQgd2lkdGgsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAg
ICBQYXRoIHBhdGg7Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIGZvciAoY29uc3QgYXV0byYgcmVj
dCA6IHJlY3RzKQotICAgICAgICBwYXRoLmFkZFJlY3QocmVjdCk7Ci0jZWxzZQogICAgIHVuc2ln
bmVkIHJlY3RDb3VudCA9IHJlY3RzLnNpemUoKTsKICAgICBpbnQgcmFkaXVzID0gKHdpZHRoIC0g
MSkgLyAyOwogICAgIFBhdGggc3ViUGF0aDsKQEAgLTExOTMsNyArMTE2MCw2IEBAIHZvaWQgZHJh
d0ZvY3VzUmluZyhQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBW
ZWN0b3I8RmxvYXRSZWN0CiAgICAgICAgIHN1YlBhdGguYWRkUm91bmRlZFJlY3QocmVjdHNbaV0s
IEZsb2F0U2l6ZShyYWRpdXMsIHJhZGl1cykpOwogICAgICAgICBwYXRoLmFkZFBhdGgoc3ViUGF0
aCwgQWZmaW5lVHJhbnNmb3JtKCkpOwogICAgIH0KLSNlbmRpZgogCiAgICAgZHJhd0ZvY3VzUmlu
ZyhwbGF0Zm9ybUNvbnRleHQsIHBhdGgsIHdpZHRoLCBjb2xvcik7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAKaW5kZXggOGY5YTZkNWM3MGYuLmExMDQ2NTZjYjVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC01MSw4ICs1MSw4IEBACiAjaW5jbHVkZSA8Y2Fpcm8t
d2luMzIuaD4KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oV1BFKQotI2luY2x1ZGUgIlRoZW1lV1BF
LmgiCisjaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCisjaW5jbHVkZSAiVGhlbWVB
ZHdhaXRhLmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjkyLDggKzI5Miw4
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgs
IGZsb2F0IHdpZHRoLCBmbG9hdCBvZmZzZXQsCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0jaWYgUExBVEZPUk0oV1BFKQotICAgIFRoZW1lV1BFOjpwYWlu
dEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xvcik7CisjaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9S
TShHVEspCisgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xvcik7
CiAgICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAg
ICByZXR1cm47CkBAIC0zMTQsOCArMzE0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBQTEFURk9S
TShXUEUpCi0gICAgVGhlbWVXUEU6OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7Cisj
aWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCisgICAgVGhlbWVBZHdhaXRhOjpwYWlu
dEZvY3VzKCp0aGlzLCByZWN0cywgY29sb3IpOwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CiAg
ICAgVU5VU0VEX1BBUkFNKG9mZnNldCk7CiAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUdhZGdldC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDczZTA3NThhNmVkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHYWRnZXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlJlbmRlclRoZW1lR2FkZ2V0LmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0PiBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRl
KGNvbnN0IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvLCBSZW5kZXJUaGVtZUdhZGdldCog
cGFyZW50LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdzLCB1
bnNpZ25lZCBwb3NpdGlvbikKLXsKLSAgICBzd2l0Y2ggKGluZm8udHlwZSkgewotICAgIGNhc2Ug
UmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWM6Ci0gICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPFJlbmRlclRoZW1lR2FkZ2V0PihpbmZvLCBwYXJlbnQsIHNpYmxpbmdzLCBwb3NpdGlvbik7
Ci0gICAgY2FzZSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6VGV4dEZpZWxkOgotICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZVRleHRGaWVsZEdhZGdldD4oaW5mbywgcGFyZW50
LCBzaWJsaW5ncywgcG9zaXRpb24pOwotICAgIGNhc2UgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6
OlJhZGlvOgotICAgIGNhc2UgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkNoZWNrOgotICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZVRvZ2dsZUdhZGdldD4oaW5mbywgcGFyZW50
LCBzaWJsaW5ncywgcG9zaXRpb24pOwotICAgIGNhc2UgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6
OkFycm93OgotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZUFycm93R2FkZ2V0
PihpbmZvLCBwYXJlbnQsIHNpYmxpbmdzLCBwb3NpdGlvbik7Ci0gICAgY2FzZSBSZW5kZXJUaGVt
ZUdhZGdldDo6VHlwZTo6SWNvbjoKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVuZGVyVGhl
bWVJY29uR2FkZ2V0PihpbmZvLCBwYXJlbnQsIHNpYmxpbmdzLCBwb3NpdGlvbik7Ci0gICAgY2Fz
ZSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6U2Nyb2xsYmFyOgotICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldD4oaW5mbywgcGFyZW50LCBzaWJsaW5n
cywgcG9zaXRpb24pOwotICAgIGNhc2UgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkJ1dHRvbjoK
LSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVuZGVyVGhlbWVCdXR0b25HYWRnZXQ+KGluZm8s
IHBhcmVudCwgc2libGluZ3MsIHBvc2l0aW9uKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIEdSZWZQdHI8R3RrU3R5
bGVDb250ZXh0PiBjcmVhdGVTdHlsZUNvbnRleHQoR3RrV2lkZ2V0UGF0aCogcGF0aCwgR3RrU3R5
bGVDb250ZXh0KiBwYXJlbnQpCi17Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRl
eHQgPSBhZG9wdEdSZWYoZ3RrX3N0eWxlX2NvbnRleHRfbmV3KCkpOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9wYXRoKGNvbnRleHQuZ2V0KCksIHBhdGgpOwotICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9wYXJlbnQoY29udGV4dC5nZXQoKSwgcGFyZW50KTsKLSAgICByZXR1cm4gY29udGV4
dDsKLX0KLQotc3RhdGljIHZvaWQgYXBwZW5kRWxlbWVudFRvUGF0aChHdGtXaWRnZXRQYXRoKiBw
YXRoLCBjb25zdCBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyYgaW5mbykKLXsKLSAgICAvLyBTY3Jv
bGxiYXJzIG5lZWQgdG8gdXNlIGl0cyBHVHlwZSB0byBiZSBhYmxlIHRvIGdldCBub24tQ1NTIHN0
eWxlIHByb3BlcnRpZXMuCi0gICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGgsIGlu
Zm8udHlwZSA9PSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6U2Nyb2xsYmFyID8gR1RLX1RZUEVf
U0NST0xMQkFSIDogR19UWVBFX05PTkUpOwotICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9v
YmplY3RfbmFtZShwYXRoLCAtMSwgaW5mby5uYW1lKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8qIGNs
YXNzTmFtZSA6IGluZm8uY2xhc3NMaXN0KQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9h
ZGRfY2xhc3MocGF0aCwgLTEsIGNsYXNzTmFtZSk7Ci19Ci0KLVJlbmRlclRoZW1lR2FkZ2V0OjpS
ZW5kZXJUaGVtZUdhZGdldChjb25zdCBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyYgaW5mbywgUmVu
ZGVyVGhlbWVHYWRnZXQqIHBhcmVudCwgY29uc3QgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJ
bmZvPiBzaWJsaW5ncywgdW5zaWduZWQgcG9zaXRpb24pCi17Ci0gICAgR1JlZlB0cjxHdGtXaWRn
ZXRQYXRoPiBwYXRoID0gcGFyZW50ID8gYWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9jb3B5KGd0
a19zdHlsZV9jb250ZXh0X2dldF9wYXRoKHBhcmVudC0+Y29udGV4dCgpKSkpIDogYWRvcHRHUmVm
KGd0a193aWRnZXRfcGF0aF9uZXcoKSk7Ci0gICAgaWYgKCFzaWJsaW5ncy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBzaWJsaW5nc1BhdGggPSBhZG9wdEdSZWYo
Z3RrX3dpZGdldF9wYXRoX25ldygpKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzaWJsaW5n
SW5mbyA6IHNpYmxpbmdzKQotICAgICAgICAgICAgYXBwZW5kRWxlbWVudFRvUGF0aChzaWJsaW5n
c1BhdGguZ2V0KCksIHNpYmxpbmdJbmZvKTsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVu
ZF93aXRoX3NpYmxpbmdzKHBhdGguZ2V0KCksIHNpYmxpbmdzUGF0aC5nZXQoKSwgcG9zaXRpb24p
OwotICAgIH0gZWxzZQotICAgICAgICBhcHBlbmRFbGVtZW50VG9QYXRoKHBhdGguZ2V0KCksIGlu
Zm8pOwotICAgIG1fY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChwYXRoLmdldCgpLCBwYXJl
bnQgPyBwYXJlbnQtPmNvbnRleHQoKSA6IG51bGxwdHIpOwotfQotCi1SZW5kZXJUaGVtZUdhZGdl
dDo6flJlbmRlclRoZW1lR2FkZ2V0KCkgPSBkZWZhdWx0OwotCi1HdGtCb3JkZXIgUmVuZGVyVGhl
bWVHYWRnZXQ6Om1hcmdpbkJveCgpIGNvbnN0Ci17Ci0gICAgR3RrQm9yZGVyIHJldHVyblZhbHVl
OwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9tYXJnaW4obV9jb250ZXh0LmdldCgpLCBndGtf
c3R5bGVfY29udGV4dF9nZXRfc3RhdGUobV9jb250ZXh0LmdldCgpKSwgJnJldHVyblZhbHVlKTsK
LSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLUd0a0JvcmRlciBSZW5kZXJUaGVtZUdhZGdl
dDo6Ym9yZGVyQm94KCkgY29uc3QKLXsKLSAgICBHdGtCb3JkZXIgcmV0dXJuVmFsdWU7Ci0gICAg
Z3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JvcmRlcihtX2NvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdGF0ZShtX2NvbnRleHQuZ2V0KCkpLCAmcmV0dXJuVmFsdWUpOwotICAgIHJl
dHVybiByZXR1cm5WYWx1ZTsKLX0KLQotR3RrQm9yZGVyIFJlbmRlclRoZW1lR2FkZ2V0OjpwYWRk
aW5nQm94KCkgY29uc3QKLXsKLSAgICBHdGtCb3JkZXIgcmV0dXJuVmFsdWU7Ci0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcobV9jb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4
dF9nZXRfc3RhdGUobV9jb250ZXh0LmdldCgpKSwgJnJldHVyblZhbHVlKTsKLSAgICByZXR1cm4g
cmV0dXJuVmFsdWU7Ci19Ci0KLUd0a0JvcmRlciBSZW5kZXJUaGVtZUdhZGdldDo6Y29udGVudHNC
b3goKSBjb25zdAotewotICAgIGF1dG8gbWFyZ2luID0gbWFyZ2luQm94KCk7Ci0gICAgYXV0byBi
b3JkZXIgPSBib3JkZXJCb3goKTsKLSAgICBhdXRvIHBhZGRpbmcgPSBwYWRkaW5nQm94KCk7Ci0g
ICAgcGFkZGluZy5sZWZ0ICs9IG1hcmdpbi5sZWZ0ICsgYm9yZGVyLmxlZnQ7Ci0gICAgcGFkZGlu
Zy5yaWdodCArPSBtYXJnaW4ucmlnaHQgKyBib3JkZXIucmlnaHQ7Ci0gICAgcGFkZGluZy50b3Ag
Kz0gbWFyZ2luLnRvcCArIGJvcmRlci50b3A7Ci0gICAgcGFkZGluZy5ib3R0b20gKz0gbWFyZ2lu
LmJvdHRvbSArIGJvcmRlci5ib3R0b207Ci0gICAgcmV0dXJuIHBhZGRpbmc7Ci19Ci0KLUNvbG9y
IFJlbmRlclRoZW1lR2FkZ2V0Ojpjb2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSByZXR1cm5W
YWx1ZTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfY29sb3IobV9jb250ZXh0LmdldCgpLCBn
dGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUobV9jb250ZXh0LmdldCgpKSwgJnJldHVyblZhbHVl
KTsKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR2FkZ2V0
OjpiYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIEdka1JHQkEgcmV0dXJuVmFsdWU7Ci0g
ICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IobV9jb250ZXh0LmdldCgp
LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUobV9jb250ZXh0LmdldCgpKSwgJnJldHVyblZh
bHVlKTsKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLWRvdWJsZSBSZW5kZXJUaGVtZUdh
ZGdldDo6b3BhY2l0eSgpIGNvbnN0Ci17Ci0gICAgZG91YmxlIHJldHVyblZhbHVlOwotICAgIGd0
a19zdHlsZV9jb250ZXh0X2dldChtX2NvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dl
dF9zdGF0ZShtX2NvbnRleHQuZ2V0KCkpLCAib3BhY2l0eSIsICZyZXR1cm5WYWx1ZSwgbnVsbHB0
cik7Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi1HdGtTdGF0ZUZsYWdzIFJlbmRlclRo
ZW1lR2FkZ2V0OjpzdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGd0a19zdHlsZV9jb250ZXh0
X2dldF9zdGF0ZShtX2NvbnRleHQuZ2V0KCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR2FkZ2V0
OjpzZXRTdGF0ZShHdGtTdGF0ZUZsYWdzIHN0YXRlKQotewotICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9zdGF0ZShtX2NvbnRleHQuZ2V0KCksIHN0YXRlKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJU
aGVtZUdhZGdldDo6bWluaW11bVNpemUoKSBjb25zdAotewotICAgIGludCB3aWR0aCwgaGVpZ2h0
OwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldChtX2NvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdGF0ZShtX2NvbnRleHQuZ2V0KCkpLCAibWluLXdpZHRoIiwgJndpZHRoLCAi
bWluLWhlaWdodCIsICZoZWlnaHQsIG51bGxwdHIpOwotICAgIHJldHVybiBJbnRTaXplKHdpZHRo
LCBoZWlnaHQpOwotfQotCi1JbnRTaXplIFJlbmRlclRoZW1lR2FkZ2V0OjpwcmVmZXJyZWRTaXpl
KCkgY29uc3QKLXsKLSAgICBhdXRvIG1hcmdpbiA9IG1hcmdpbkJveCgpOwotICAgIGF1dG8gYm9y
ZGVyID0gYm9yZGVyQm94KCk7Ci0gICAgYXV0byBwYWRkaW5nID0gcGFkZGluZ0JveCgpOwotICAg
IGF1dG8gbWluU2l6ZSA9IG1pbmltdW1TaXplKCk7Ci0gICAgbWluU2l6ZS5leHBhbmQobWFyZ2lu
LmxlZnQgKyBtYXJnaW4ucmlnaHQgKyBib3JkZXIubGVmdCArIGJvcmRlci5yaWdodCArIHBhZGRp
bmcubGVmdCArIHBhZGRpbmcucmlnaHQsCi0gICAgICAgIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90
dG9tICsgYm9yZGVyLnRvcCArIGJvcmRlci5ib3R0b20gKyBwYWRkaW5nLnRvcCArIHBhZGRpbmcu
Ym90dG9tKTsKLSAgICByZXR1cm4gbWluU2l6ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUdhZGdl
dDo6cmVuZGVyKGNhaXJvX3QqIGNyLCBjb25zdCBGbG9hdFJlY3QmIHBhaW50UmVjdCwgRmxvYXRS
ZWN0KiBjb250ZW50c1JlY3QpCi17Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBwYWludFJlY3Q7Ci0K
LSAgICBhdXRvIG1hcmdpbiA9IG1hcmdpbkJveCgpOwotICAgIHJlY3QubW92ZShtYXJnaW4ubGVm
dCwgbWFyZ2luLnRvcCk7Ci0gICAgcmVjdC5jb250cmFjdChtYXJnaW4ubGVmdCArIG1hcmdpbi5y
aWdodCwgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20pOwotCi0gICAgYXV0byBtaW5TaXplID0g
bWluaW11bVNpemUoKTsKLSAgICByZWN0LnNldFdpZHRoKHN0ZDo6bWF4PGZsb2F0PihyZWN0Lndp
ZHRoKCksIG1pblNpemUud2lkdGgoKSkpOwotICAgIHJlY3Quc2V0SGVpZ2h0KHN0ZDo6bWF4PGZs
b2F0PihyZWN0LmhlaWdodCgpLCBtaW5TaXplLmhlaWdodCgpKSk7Ci0KLSAgICBndGtfcmVuZGVy
X2JhY2tncm91bmQobV9jb250ZXh0LmdldCgpLCBjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0
LmdldCgpLCBjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwotCi0gICAgaWYgKGNvbnRlbnRzUmVjdCkgewotICAgICAgICBhdXRvIGJvcmRlciA9IGJv
cmRlckJveCgpOwotICAgICAgICBhdXRvIHBhZGRpbmcgPSBwYWRkaW5nQm94KCk7Ci0gICAgICAg
ICpjb250ZW50c1JlY3QgPSByZWN0OwotICAgICAgICBjb250ZW50c1JlY3QtPm1vdmUoYm9yZGVy
LmxlZnQgKyBwYWRkaW5nLmxlZnQsIGJvcmRlci50b3AgKyBwYWRkaW5nLnRvcCk7Ci0gICAgICAg
IGNvbnRlbnRzUmVjdC0+Y29udHJhY3QoYm9yZGVyLmxlZnQgKyBib3JkZXIucmlnaHQgKyBwYWRk
aW5nLmxlZnQgKyBwYWRkaW5nLnJpZ2h0LCBib3JkZXIudG9wICsgYm9yZGVyLmJvdHRvbSArIHBh
ZGRpbmcudG9wICsgcGFkZGluZy5ib3R0b20pOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFJlbmRlclRoZW1lR2FkZ2V0OjpyZW5kZXJGb2N1cyhjYWlyb190KiBjciwgY29u
c3QgRmxvYXRSZWN0JiBmb2N1c1JlY3QpCi17Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBmb2N1c1Jl
Y3Q7Ci0gICAgYXV0byBtYXJnaW4gPSBtYXJnaW5Cb3goKTsKLSAgICByZWN0Lm1vdmUobWFyZ2lu
LmxlZnQsIG1hcmdpbi50b3ApOwotICAgIHJlY3QuY29udHJhY3QobWFyZ2luLmxlZnQgKyBtYXJn
aW4ucmlnaHQsIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tKTsKLSAgICBndGtfcmVuZGVyX2Zv
Y3VzKG1fY29udGV4dC5nZXQoKSwgY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgp
LCByZWN0LmhlaWdodCgpKTsKLX0KLQotUmVuZGVyVGhlbWVCb3hHYWRnZXQ6OlJlbmRlclRoZW1l
Qm94R2FkZ2V0KGNvbnN0IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvLCBHdGtPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgY29uc3QgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBj
aGlsZHJlbiwgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVudCkKLSAgICA6IFJlbmRlclRoZW1lR2Fk
Z2V0KGluZm8sIHBhcmVudCwgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPigpLCAwKQot
ICAgICwgbV9vcmllbnRhdGlvbihvcmllbnRhdGlvbikKLXsKLSAgICBtX2NoaWxkcmVuLnJlc2Vy
dmVDYXBhY2l0eShjaGlsZHJlbi5zaXplKCkpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkSW5mbyA6IGNoaWxkcmVuKQotICAgICAgICBtX2NoaWxk
cmVuLnVuY2hlY2tlZEFwcGVuZChSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGNoaWxkSW5mbywg
dGhpcywgY2hpbGRyZW4sIGluZGV4KyspKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJUaGVtZUJveEdh
ZGdldDo6cHJlZmVycmVkU2l6ZSgpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBjaGlsZHJlblNpemU7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAgSW50
U2l6ZSBjaGlsZFNpemUgPSBjaGlsZC0+cHJlZmVycmVkU2l6ZSgpOwotICAgICAgICBzd2l0Y2gg
KG1fb3JpZW50YXRpb24pIHsKLSAgICAgICAgY2FzZSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRB
TDoKLSAgICAgICAgICAgIGNoaWxkcmVuU2l6ZS5zZXRXaWR0aChjaGlsZHJlblNpemUud2lkdGgo
KSArIGNoaWxkU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgICAgIGNoaWxkcmVuU2l6ZS5zZXRIZWln
aHQoc3RkOjptYXgoY2hpbGRyZW5TaXplLmhlaWdodCgpLCBjaGlsZFNpemUuaGVpZ2h0KCkpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdUS19PUklFTlRBVElPTl9WRVJUSUNB
TDoKLSAgICAgICAgICAgIGNoaWxkcmVuU2l6ZS5zZXRXaWR0aChzdGQ6Om1heChjaGlsZHJlblNp
emUud2lkdGgoKSwgY2hpbGRTaXplLndpZHRoKCkpKTsKLSAgICAgICAgICAgIGNoaWxkcmVuU2l6
ZS5zZXRIZWlnaHQoY2hpbGRyZW5TaXplLmhlaWdodCgpICsgY2hpbGRTaXplLmhlaWdodCgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBSZW5kZXJU
aGVtZUdhZGdldDo6cHJlZmVycmVkU2l6ZSgpLmV4cGFuZGVkVG8oY2hpbGRyZW5TaXplKTsKLX0K
LQotUmVuZGVyVGhlbWVUZXh0RmllbGRHYWRnZXQ6OlJlbmRlclRoZW1lVGV4dEZpZWxkR2FkZ2V0
KGNvbnN0IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvLCBSZW5kZXJUaGVtZUdhZGdldCog
cGFyZW50LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdzLCB1
bnNpZ25lZCBwb3NpdGlvbikKLSAgICA6IFJlbmRlclRoZW1lR2FkZ2V0KGluZm8sIHBhcmVudCwg
c2libGluZ3MsIHBvc2l0aW9uKQotewotfQotCi1JbnRTaXplIFJlbmRlclRoZW1lVGV4dEZpZWxk
R2FkZ2V0OjptaW5pbXVtU2l6ZSgpIGNvbnN0Ci17Ci0gICAgLy8gV2UgYWxsb3cgdGV4dCBmaWVs
ZHMgc21hbGxlciB0aGFuIHRoZSBtaW4gc2l6ZSBzZXQgb24gdGhlbWVzLgotICAgIHJldHVybiBJ
bnRTaXplKCk7Ci19Ci0KLVJlbmRlclRoZW1lVG9nZ2xlR2FkZ2V0OjpSZW5kZXJUaGVtZVRvZ2ds
ZUdhZGdldChjb25zdCBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyYgaW5mbywgUmVuZGVyVGhlbWVH
YWRnZXQqIHBhcmVudCwgY29uc3QgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBzaWJs
aW5ncywgdW5zaWduZWQgcG9zaXRpb24pCi0gICAgOiBSZW5kZXJUaGVtZUdhZGdldChpbmZvLCBw
YXJlbnQsIHNpYmxpbmdzLCBwb3NpdGlvbikKLSAgICAsIG1fdHlwZShpbmZvLnR5cGUpCi17Ci0g
ICAgQVNTRVJUKG1fdHlwZSA9PSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6UmFkaW8gfHwgbV90
eXBlID09IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpDaGVjayk7Ci19Ci0KLWJvb2wgUmVuZGVy
VGhlbWVUb2dnbGVHYWRnZXQ6OnJlbmRlcihjYWlyb190KiBjciwgY29uc3QgRmxvYXRSZWN0JiBw
YWludFJlY3QsIEZsb2F0UmVjdCopCi17Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKLSAg
ICBSZW5kZXJUaGVtZUdhZGdldDo6cmVuZGVyKGNyLCBwYWludFJlY3QsICZjb250ZW50c1JlY3Qp
OwotICAgIGlmIChtX3R5cGUgPT0gUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OlJhZGlvKQotICAg
ICAgICBndGtfcmVuZGVyX29wdGlvbihtX2NvbnRleHQuZ2V0KCksIGNyLCBjb250ZW50c1JlY3Qu
eCgpLCBjb250ZW50c1JlY3QueSgpLCBjb250ZW50c1JlY3Qud2lkdGgoKSwgY29udGVudHNSZWN0
LmhlaWdodCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGd0a19yZW5kZXJfY2hlY2sobV9jb250ZXh0
LmdldCgpLCBjciwgY29udGVudHNSZWN0LngoKSwgY29udGVudHNSZWN0LnkoKSwgY29udGVudHNS
ZWN0LndpZHRoKCksIGNvbnRlbnRzUmVjdC5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLVJlbmRlclRoZW1lQXJyb3dHYWRnZXQ6OlJlbmRlclRoZW1lQXJyb3dHYWRnZXQoY29uc3Qg
UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8mIGluZm8sIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQs
IGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVk
IHBvc2l0aW9uKQotICAgIDogUmVuZGVyVGhlbWVHYWRnZXQoaW5mbywgcGFyZW50LCBzaWJsaW5n
cywgcG9zaXRpb24pCi17Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVBcnJvd0dhZGdldDo6cmVuZGVy
KGNhaXJvX3QqIGNyLCBjb25zdCBGbG9hdFJlY3QmIHBhaW50UmVjdCwgRmxvYXRSZWN0KikKLXsK
LSAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0OwotICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpyZW5k
ZXIoY3IsIHBhaW50UmVjdCwgJmNvbnRlbnRzUmVjdCk7Ci0gICAgSW50U2l6ZSBtaW5TaXplID0g
bWluaW11bVNpemUoKTsKLSAgICBpbnQgYXJyb3dTaXplID0gc3RkOjptaW4obWluU2l6ZS53aWR0
aCgpLCBtaW5TaXplLmhlaWdodCgpKTsKLSAgICBGbG9hdFBvaW50IGFycm93UG9zaXRpb24oY29u
dGVudHNSZWN0LngoKSwgY29udGVudHNSZWN0LnkoKSArIChjb250ZW50c1JlY3QuaGVpZ2h0KCkg
LSBhcnJvd1NpemUpIC8gMik7Ci0gICAgaWYgKGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZSht
X2NvbnRleHQuZ2V0KCkpICYgR1RLX1NUQVRFX0ZMQUdfRElSX0xUUikKLSAgICAgICAgYXJyb3dQ
b3NpdGlvbi5tb3ZlKGNvbnRlbnRzUmVjdC53aWR0aCgpIC0gYXJyb3dTaXplLCAwKTsKLSAgICBn
dGtfcmVuZGVyX2Fycm93KG1fY29udGV4dC5nZXQoKSwgY3IsIEdfUEkgLyAyLCBhcnJvd1Bvc2l0
aW9uLngoKSwgYXJyb3dQb3NpdGlvbi55KCksIGFycm93U2l6ZSk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLVJlbmRlclRoZW1lSWNvbkdhZGdldDo6UmVuZGVyVGhlbWVJY29uR2FkZ2V0KGNvbnN0
IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvLCBSZW5kZXJUaGVtZUdhZGdldCogcGFyZW50
LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdzLCB1bnNpZ25l
ZCBwb3NpdGlvbikKLSAgICA6IFJlbmRlclRoZW1lR2FkZ2V0KGluZm8sIHBhcmVudCwgc2libGlu
Z3MsIHBvc2l0aW9uKQotewotfQotCi1HdGtJY29uU2l6ZSBSZW5kZXJUaGVtZUljb25HYWRnZXQ6
Omd0a0ljb25TaXplRm9yUGl4ZWxTaXplKHVuc2lnbmVkIHBpeGVsU2l6ZSkgY29uc3QKLXsKLSAg
ICBpZiAocGl4ZWxTaXplIDwgSWNvblNpemVHdGs6OlNtYWxsVG9vbGJhcikKLSAgICAgICAgcmV0
dXJuIEdUS19JQ09OX1NJWkVfTUVOVTsKLSAgICBpZiAocGl4ZWxTaXplID49IEljb25TaXplR3Rr
OjpTbWFsbFRvb2xiYXIgJiYgcGl4ZWxTaXplIDwgSWNvblNpemVHdGs6OkJ1dHRvbikKLSAgICAg
ICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfU01BTExfVE9PTEJBUjsKLSAgICBpZiAocGl4ZWxTaXpl
ID49IEljb25TaXplR3RrOjpCdXR0b24gJiYgcGl4ZWxTaXplIDwgSWNvblNpemVHdGs6Okxhcmdl
VG9vbGJhcikKLSAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfQlVUVE9OOwotICAgIGlmIChw
aXhlbFNpemUgPj0gSWNvblNpemVHdGs6OkxhcmdlVG9vbGJhciAmJiBwaXhlbFNpemUgPCBJY29u
U2l6ZUd0azo6RHJhZ0FuZERyb3ApCi0gICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0xBUkdF
X1RPT0xCQVI7Ci0gICAgaWYgKHBpeGVsU2l6ZSA+PSBJY29uU2l6ZUd0azo6RHJhZ0FuZERyb3Ag
JiYgcGl4ZWxTaXplIDwgSWNvblNpemVHdGs6OkRpYWxvZykKLSAgICAgICAgcmV0dXJuIEdUS19J
Q09OX1NJWkVfRE5EOwotCi0gICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRElBTE9HOwotfQotCi1i
b29sIFJlbmRlclRoZW1lSWNvbkdhZGdldDo6cmVuZGVyKGNhaXJvX3QqIGNyLCBjb25zdCBGbG9h
dFJlY3QmIHBhaW50UmVjdCwgRmxvYXRSZWN0KikKLXsKLSAgICBBU1NFUlQoIW1faWNvbk5hbWUu
aXNOdWxsKCkpOwotICAgIEdSZWZQdHI8R0ljb24+IGljb24gPSBhZG9wdEdSZWYoZ190aGVtZWRf
aWNvbl9uZXcobV9pY29uTmFtZS5kYXRhKCkpKTsKLSAgICB1bnNpZ25lZCBsb29rdXBGbGFncyA9
IEdUS19JQ09OX0xPT0tVUF9VU0VfQlVJTFRJTiB8IEdUS19JQ09OX0xPT0tVUF9GT1JDRV9TSVpF
IHwgR1RLX0lDT05fTE9PS1VQX0ZPUkNFX1NWRzsKLSAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiA9IGd0a19zdHlsZV9jb250ZXh0X2dldF9kaXJlY3Rpb24obV9jb250ZXh0LmdldCgpKTsK
LSAgICBpZiAoZGlyZWN0aW9uICYgR1RLX1RFWFRfRElSX0xUUikKLSAgICAgICAgbG9va3VwRmxh
Z3MgfD0gR1RLX0lDT05fTE9PS1VQX0RJUl9MVFI7Ci0gICAgZWxzZSBpZiAoZGlyZWN0aW9uICYg
R1RLX1RFWFRfRElSX1JUTCkKLSAgICAgICAgbG9va3VwRmxhZ3MgfD0gR1RLX0lDT05fTE9PS1VQ
X0RJUl9SVEw7Ci0gICAgaW50IGljb25XaWR0aCwgaWNvbkhlaWdodDsKLSAgICBpZiAoIWd0a19p
Y29uX3NpemVfbG9va3VwKGd0a0ljb25TaXplRm9yUGl4ZWxTaXplKG1faWNvblNpemUpLCAmaWNv
bldpZHRoLCAmaWNvbkhlaWdodCkpCi0gICAgICAgIGljb25XaWR0aCA9IGljb25IZWlnaHQgPSBt
X2ljb25TaXplOwotICAgIEdSZWZQdHI8R3RrSWNvbkluZm8+IGljb25JbmZvID0gYWRvcHRHUmVm
KGd0a19pY29uX3RoZW1lX2xvb2t1cF9ieV9naWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVs
dCgpLCBpY29uLmdldCgpLAotICAgICAgICBzdGQ6Om1pbihpY29uV2lkdGgsIGljb25IZWlnaHQp
LCBzdGF0aWNfY2FzdDxHdGtJY29uTG9va3VwRmxhZ3M+KGxvb2t1cEZsYWdzKSkpOwotICAgIGlm
ICghaWNvbkluZm8pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R2RrUGl4
YnVmPiBpY29uUGl4YnVmID0gYWRvcHRHUmVmKGd0a19pY29uX2luZm9fbG9hZF9zeW1ib2xpY19m
b3JfY29udGV4dChpY29uSW5mby5nZXQoKSwgbV9jb250ZXh0LmdldCgpLCBudWxscHRyLCBudWxs
cHRyKSk7Ci0gICAgaWYgKCFpY29uUGl4YnVmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBGbG9hdFNpemUgcGl4YnVmU2l6ZShnZGtfcGl4YnVmX2dldF93aWR0aChpY29uUGl4YnVmLmdl
dCgpKSwgZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGljb25QaXhidWYuZ2V0KCkpKTsKLSAgICBGbG9h
dFJlY3QgY29udGVudHNSZWN0OwotICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpyZW5kZXIoY3IsIHBh
aW50UmVjdCwgJmNvbnRlbnRzUmVjdCk7Ci0gICAgaWYgKHBpeGJ1ZlNpemUud2lkdGgoKSA+IGNv
bnRlbnRzUmVjdC53aWR0aCgpIHx8IHBpeGJ1ZlNpemUuaGVpZ2h0KCkgPiBjb250ZW50c1JlY3Qu
aGVpZ2h0KCkpIHsKLSAgICAgICAgaWNvbldpZHRoID0gaWNvbkhlaWdodCA9IHN0ZDo6bWluKGNv
bnRlbnRzUmVjdC53aWR0aCgpLCBjb250ZW50c1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICBwaXhi
dWZTaXplID0gRmxvYXRTaXplKGljb25XaWR0aCwgaWNvbkhlaWdodCk7Ci0gICAgICAgIGljb25Q
aXhidWYgPSBhZG9wdEdSZWYoZ2RrX3BpeGJ1Zl9zY2FsZV9zaW1wbGUoaWNvblBpeGJ1Zi5nZXQo
KSwgcGl4YnVmU2l6ZS53aWR0aCgpLCBwaXhidWZTaXplLmhlaWdodCgpLCBHREtfSU5URVJQX0JJ
TElORUFSKSk7Ci0gICAgfQotCi0gICAgZ3RrX3JlbmRlcl9pY29uKG1fY29udGV4dC5nZXQoKSwg
Y3IsIGljb25QaXhidWYuZ2V0KCksIGNvbnRlbnRzUmVjdC54KCkgKyAoY29udGVudHNSZWN0Lndp
ZHRoKCkgLSBwaXhidWZTaXplLndpZHRoKCkpIC8gMiwKLSAgICAgICAgY29udGVudHNSZWN0Lnko
KSArIChjb250ZW50c1JlY3QuaGVpZ2h0KCkgLSBwaXhidWZTaXplLmhlaWdodCgpKSAvIDIpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi1JbnRTaXplIFJlbmRlclRoZW1lSWNvbkdhZGdldDo6bWlu
aW11bVNpemUoKSBjb25zdAotewotICAgIGlmIChtX2ljb25TaXplIDwgSWNvblNpemVHdGs6Ok1l
bnUpCi0gICAgICAgIHJldHVybiBJbnRTaXplKG1faWNvblNpemUsIG1faWNvblNpemUpOwotCi0g
ICAgaW50IGljb25XaWR0aCwgaWNvbkhlaWdodDsKLSAgICBpZiAoZ3RrX2ljb25fc2l6ZV9sb29r
dXAoZ3RrSWNvblNpemVGb3JQaXhlbFNpemUobV9pY29uU2l6ZSksICZpY29uV2lkdGgsICZpY29u
SGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuIEludFNpemUoaWNvbldpZHRoLCBpY29uSGVpZ2h0KTsK
LQotICAgIHJldHVybiBJbnRTaXplKG1faWNvblNpemUsIG1faWNvblNpemUpOwotfQotCi1SZW5k
ZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6UmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQoY29uc3Qg
UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8mIGluZm8sIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQs
IGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVk
IHBvc2l0aW9uKQotICAgIDogUmVuZGVyVGhlbWVHYWRnZXQoaW5mbywgcGFyZW50LCBzaWJsaW5n
cywgcG9zaXRpb24pCi17Ci0gICAgZ2Jvb2xlYW4gaGFzQmFja3dhcmQsIGhhc0ZvcndhcmQsIGhh
c1NlY29uZGFyeUJhY2t3YXJkLCBoYXNTZWNvbmRhcnlGb3J3YXJkOwotICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9zdHlsZShtX2NvbnRleHQuZ2V0KCksICJoYXMtYmFja3dhcmQtc3RlcHBlciIs
ICZoYXNCYWNrd2FyZCwgImhhcy1mb3J3YXJkLXN0ZXBwZXIiLCAmaGFzRm9yd2FyZCwKLSAgICAg
ICAgImhhcy1zZWNvbmRhcnktYmFja3dhcmQtc3RlcHBlciIsICZoYXNTZWNvbmRhcnlCYWNrd2Fy
ZCwgImhhcy1zZWNvbmRhcnktZm9yd2FyZC1zdGVwcGVyIiwgJmhhc1NlY29uZGFyeUZvcndhcmQs
IG51bGxwdHIpOwotICAgIGlmIChoYXNCYWNrd2FyZCkKLSAgICAgICAgbV9zdGVwcGVycy5hZGQo
U3RlcHBlcnM6OkJhY2t3YXJkKTsKLSAgICBpZiAoaGFzRm9yd2FyZCkKLSAgICAgICAgbV9zdGVw
cGVycy5hZGQoU3RlcHBlcnM6OkZvcndhcmQpOwotICAgIGlmIChoYXNTZWNvbmRhcnlCYWNrd2Fy
ZCkKLSAgICAgICAgbV9zdGVwcGVycy5hZGQoU3RlcHBlcnM6OlNlY29uZGFyeUJhY2t3YXJkKTsK
LSAgICBpZiAoaGFzU2Vjb25kYXJ5Rm9yd2FyZCkKLSAgICAgICAgbV9zdGVwcGVycy5hZGQoU3Rl
cHBlcnM6OlNlY29uZGFyeUZvcndhcmQpOwotfQotCi12b2lkIFJlbmRlclRoZW1lU2Nyb2xsYmFy
R2FkZ2V0OjpyZW5kZXJTdGVwcGVyKGNhaXJvX3QqIGNyLCBjb25zdCBGbG9hdFJlY3QmIHBhaW50
UmVjdCwgUmVuZGVyVGhlbWVHYWRnZXQqIHN0ZXBwZXJHYWRnZXQsIEd0a09yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBTdGVwcGVycyBzdGVwcGVyKQotewotICAgIEZsb2F0UmVjdCBjb250ZW50c1Jl
Y3Q7Ci0gICAgc3RlcHBlckdhZGdldC0+cmVuZGVyKGNyLCBwYWludFJlY3QsICZjb250ZW50c1Jl
Y3QpOwotICAgIGRvdWJsZSBhbmdsZTsKLSAgICBzd2l0Y2ggKHN0ZXBwZXIpIHsKLSAgICBjYXNl
IFN0ZXBwZXJzOjpCYWNrd2FyZDoKLSAgICBjYXNlIFN0ZXBwZXJzOjpTZWNvbmRhcnlCYWNrd2Fy
ZDoKLSAgICAgICAgYW5nbGUgPSBvcmllbnRhdGlvbiA9PSBHVEtfT1JJRU5UQVRJT05fVkVSVElD
QUwgPyAwIDogMyAqIChHX1BJIC8gMik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3RlcHBl
cnM6OkZvcndhcmQ6Ci0gICAgY2FzZSBTdGVwcGVyczo6U2Vjb25kYXJ5Rm9yd2FyZDoKLSAgICAg
ICAgYW5nbGUgPSBvcmllbnRhdGlvbiA9PSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgPyBHX1BJ
IC8gMiA6IEdfUEk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGludCBzdGVwcGVyU2l6
ZSA9IHN0ZDo6bWF4KGNvbnRlbnRzUmVjdC53aWR0aCgpLCBjb250ZW50c1JlY3QuaGVpZ2h0KCkp
OwotICAgIGd0a19yZW5kZXJfYXJyb3coc3RlcHBlckdhZGdldC0+Y29udGV4dCgpLCBjciwgYW5n
bGUsIGNvbnRlbnRzUmVjdC54KCkgKyAoY29udGVudHNSZWN0LndpZHRoKCkgLSBzdGVwcGVyU2l6
ZSkgLyAyLAotICAgICAgICBjb250ZW50c1JlY3QueSgpICsgKGNvbnRlbnRzUmVjdC5oZWlnaHQo
KSAtIHN0ZXBwZXJTaXplKSAvIDIsIHN0ZXBwZXJTaXplKTsKLX0KLQotUmVuZGVyVGhlbWVCdXR0
b25HYWRnZXQ6OlJlbmRlclRoZW1lQnV0dG9uR2FkZ2V0KGNvbnN0IEluZm8mIGluZm8sIFJlbmRl
clRoZW1lR2FkZ2V0KiBwYXJlbnQsIGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5m
bz4gc2libGluZ3MsIHVuc2lnbmVkIHBvc2l0aW9uKQotICAgIDogUmVuZGVyVGhlbWVHYWRnZXQo
aW5mbywgcGFyZW50LCBzaWJsaW5ncywgcG9zaXRpb24pCi17Ci19Ci0KLUludFNpemUgUmVuZGVy
VGhlbWVCdXR0b25HYWRnZXQ6Om1pbmltdW1TaXplKCkgY29uc3QKLXsKLSAgICAvLyBBbGxvdyBi
dXR0b25zIHRvIGJlIHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSBzaXplCi0gICAgcmV0dXJuIElu
dFNpemUoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR2FkZ2V0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVHYWRnZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2MxOGY4OWQ2ZWIuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9SZW5kZXJUaGVtZUdhZGdldC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJDb2xvci5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0j
aW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci0KLWNsYXNzIFJlbmRlclRo
ZW1lR2FkZ2V0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZW5kZXJUaGVtZUdhZGdldCk7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBU
eXBlIHsKLSAgICAgICAgR2VuZXJpYywKLSAgICAgICAgVGV4dEZpZWxkLAotICAgICAgICBDaGVj
aywKLSAgICAgICAgUmFkaW8sCi0gICAgICAgIEFycm93LAotICAgICAgICBJY29uLAotICAgICAg
ICBTY3JvbGxiYXIsCi0gICAgICAgIEJ1dHRvbgotICAgIH07Ci0KLSAgICBzdHJ1Y3QgSW5mbyB7
Ci0gICAgICAgIFR5cGUgdHlwZTsKLSAgICAgICAgY29uc3QgY2hhciogbmFtZTsKLSAgICAgICAg
VmVjdG9yPGNvbnN0IGNoYXIqPiBjbGFzc0xpc3Q7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IGNyZWF0ZShjb25zdCBJbmZvJiwgUmVuZGVy
VGhlbWVHYWRnZXQqIHBhcmVudCA9IG51bGxwdHIsIGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdh
ZGdldDo6SW5mbz4gc2libGluZ3MgPSBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+KCks
IHVuc2lnbmVkIHBvc2l0aW9uID0gMCk7Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQoY29uc3QgSW5m
byYsIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQsIGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdh
ZGdldDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVkIHBvc2l0aW9uKTsKLSAgICB2aXJ0dWFsIH5S
ZW5kZXJUaGVtZUdhZGdldCgpOwotCi0gICAgdmlydHVhbCBJbnRTaXplIHByZWZlcnJlZFNpemUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyKGNhaXJvX3QqLCBjb25zdCBGbG9hdFJl
Y3QmLCBGbG9hdFJlY3QqID0gbnVsbHB0cik7Ci0gICAgdmlydHVhbCBJbnRTaXplIG1pbmltdW1T
aXplKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHJlbmRlckZvY3VzKGNhaXJvX3QqLCBjb25zdCBGbG9h
dFJlY3QmKTsKLQotICAgIEd0a0JvcmRlciBjb250ZW50c0JveCgpIGNvbnN0OwotICAgIENvbG9y
IGNvbG9yKCkgY29uc3Q7Ci0gICAgQ29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAg
ZG91YmxlIG9wYWNpdHkoKSBjb25zdDsKLQotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQotCi0gICAgR3RrU3RhdGVGbGFncyBz
dGF0ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0U3RhdGUoR3RrU3RhdGVGbGFncyk7Ci0KLXByb3Rl
Y3RlZDoKLSAgICBHdGtCb3JkZXIgbWFyZ2luQm94KCkgY29uc3Q7Ci0gICAgR3RrQm9yZGVyIGJv
cmRlckJveCgpIGNvbnN0OwotICAgIEd0a0JvcmRlciBwYWRkaW5nQm94KCkgY29uc3Q7Ci0KLSAg
ICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gbV9jb250ZXh0OwotfTsKLQotY2xhc3MgUmVuZGVy
VGhlbWVCb3hHYWRnZXQgZmluYWwgOiBwdWJsaWMgUmVuZGVyVGhlbWVHYWRnZXQgewotcHVibGlj
OgotICAgIFJlbmRlclRoZW1lQm94R2FkZ2V0KGNvbnN0IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZv
JiwgR3RrT3JpZW50YXRpb24sIGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4g
Y2hpbGRyZW4sIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQgPSBudWxscHRyKTsKLQotICAgIElu
dFNpemUgcHJlZmVycmVkU2l6ZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgUmVuZGVyVGhlbWVH
YWRnZXQqIGNoaWxkKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuW2lu
ZGV4XS5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyVGhlbWVHYWRnZXQ+PiBtX2NoaWxkcmVuOwotICAgIEd0a09yaWVudGF0aW9uIG1fb3JpZW50
YXRpb24geyBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCB9OwotfTsKLQotY2xhc3MgUmVuZGVy
VGhlbWVUZXh0RmllbGRHYWRnZXQgZmluYWwgOiBwdWJsaWMgUmVuZGVyVGhlbWVHYWRnZXQgewot
cHVibGljOgotICAgIFJlbmRlclRoZW1lVGV4dEZpZWxkR2FkZ2V0KGNvbnN0IEluZm8mLCBSZW5k
ZXJUaGVtZUdhZGdldCogcGFyZW50LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6Oklu
Zm8+IHNpYmxpbmdzLCB1bnNpZ25lZCBwb3NpdGlvbik7Ci0KLSAgICBJbnRTaXplIG1pbmltdW1T
aXplKCkgY29uc3Qgb3ZlcnJpZGU7Ci19OwotCi1jbGFzcyBSZW5kZXJUaGVtZVRvZ2dsZUdhZGdl
dCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZUdhZGdldCB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVy
VGhlbWVUb2dnbGVHYWRnZXQoY29uc3QgSW5mbyYsIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQs
IGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVk
IHBvc2l0aW9uKTsKLQotICAgIGJvb2wgcmVuZGVyKGNhaXJvX3QqLCBjb25zdCBGbG9hdFJlY3Qm
LCBGbG9hdFJlY3QqID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgUmVuZGVy
VGhlbWVHYWRnZXQ6OlR5cGUgbV90eXBlOwotfTsKLQotY2xhc3MgUmVuZGVyVGhlbWVBcnJvd0dh
ZGdldCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZUdhZGdldCB7Ci1wdWJsaWM6Ci0gICAgUmVu
ZGVyVGhlbWVBcnJvd0dhZGdldChjb25zdCBJbmZvJiwgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVu
dCwgY29uc3QgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBzaWJsaW5ncywgdW5zaWdu
ZWQgcG9zaXRpb24pOwotCi0gICAgYm9vbCByZW5kZXIoY2Fpcm9fdCosIGNvbnN0IEZsb2F0UmVj
dCYsIEZsb2F0UmVjdCogPSBudWxscHRyKSBvdmVycmlkZTsKLX07Ci0KLWNsYXNzIFJlbmRlclRo
ZW1lSWNvbkdhZGdldCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZUdhZGdldCB7Ci1wdWJsaWM6
Ci0gICAgUmVuZGVyVGhlbWVJY29uR2FkZ2V0KGNvbnN0IEluZm8mLCBSZW5kZXJUaGVtZUdhZGdl
dCogcGFyZW50LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdz
LCB1bnNpZ25lZCBwb3NpdGlvbik7Ci0KLSAgICBib29sIHJlbmRlcihjYWlyb190KiwgY29uc3Qg
RmxvYXRSZWN0JiwgRmxvYXRSZWN0KiA9IG51bGxwdHIpIG92ZXJyaWRlOwotICAgIEludFNpemUg
bWluaW11bVNpemUoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgc2V0SWNvbk5hbWUoY29u
c3QgY2hhciogaWNvbk5hbWUpIHsgbV9pY29uTmFtZSA9IGljb25OYW1lOyB9Ci0gICAgdm9pZCBz
ZXRJY29uU2l6ZSh1bnNpZ25lZCBpY29uU2l6ZSkgeyBtX2ljb25TaXplID0gaWNvblNpemU7IH0K
LQotICAgIC8vIERlZmluZWQgaW4gR1RLKyAoZ3RrL2d0a2ljb25mYWN0b3J5LmMpLgotICAgIGVu
dW0gSWNvblNpemVHdGsgewotICAgICAgICBNZW51ID0gMTYsCi0gICAgICAgIFNtYWxsVG9vbGJh
ciA9IDE4LAotICAgICAgICBCdXR0b24gPSAyMCwKLSAgICAgICAgTGFyZ2VUb29sYmFyID0gMjQs
Ci0gICAgICAgIERyYWdBbmREcm9wID0gMzIsCi0gICAgICAgIERpYWxvZyA9IDQ4Ci0gICAgfTsK
LQotcHJpdmF0ZToKLSAgICBHdGtJY29uU2l6ZSBndGtJY29uU2l6ZUZvclBpeGVsU2l6ZSh1bnNp
Z25lZCkgY29uc3Q7Ci0KLSAgICBDU3RyaW5nIG1faWNvbk5hbWU7Ci0gICAgdW5zaWduZWQgbV9p
Y29uU2l6ZSB7IDAgfTsKLX07Ci0KLWNsYXNzIFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0IGZp
bmFsIDogcHVibGljIFJlbmRlclRoZW1lR2FkZ2V0IHsKLXB1YmxpYzoKLSAgICBSZW5kZXJUaGVt
ZVNjcm9sbGJhckdhZGdldChjb25zdCBJbmZvJiwgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVudCwg
Y29uc3QgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBzaWJsaW5ncywgdW5zaWduZWQg
cG9zaXRpb24pOwotCi0gICAgZW51bSBjbGFzcyBTdGVwcGVycyB7Ci0gICAgICAgIEJhY2t3YXJk
ID0gMSA8PCAwLAotICAgICAgICBGb3J3YXJkID0gMSA8PCAxLAotICAgICAgICBTZWNvbmRhcnlC
YWNrd2FyZCA9IDEgPDwgMiwKLSAgICAgICAgU2Vjb25kYXJ5Rm9yd2FyZCA9IDEgPDwgMwotICAg
IH07Ci0gICAgT3B0aW9uU2V0PFN0ZXBwZXJzPiBzdGVwcGVycygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RlcHBlcnM7IH07Ci0KLSAgICB2b2lkIHJlbmRlclN0ZXBwZXIoY2Fpcm9fdCosIGNvbnN0IEZs
b2F0UmVjdCYsIFJlbmRlclRoZW1lR2FkZ2V0KiwgR3RrT3JpZW50YXRpb24sIFN0ZXBwZXJzKTsK
LQotcHJpdmF0ZToKLSAgICBPcHRpb25TZXQ8U3RlcHBlcnM+IG1fc3RlcHBlcnM7Ci19OwotCi1j
bGFzcyBSZW5kZXJUaGVtZUJ1dHRvbkdhZGdldCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZUdh
ZGdldCB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyVGhlbWVCdXR0b25HYWRnZXQoY29uc3QgSW5mbyYs
IFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQsIGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdl
dDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVkIHBvc2l0aW9uKTsKLQotICAgIEludFNpemUgbWlu
aW11bVNpemUoKSBjb25zdCBvdmVycmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZVdpZGdl
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVXaWRnZXQuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTZlZDkxOGE1MC4uMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lV2lkZ2V0LmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDMwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IElnYWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVdpZGdldC5oIgotCi0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclRoZW1lV2lkZ2V0Pj4mIHdpZGdldE1hcCgpCi17Ci0gICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJU
aGVtZVdpZGdldD4+PiBtYXA7Ci0gICAgcmV0dXJuIG1hcDsKLX0KLQotUmVuZGVyVGhlbWVXaWRn
ZXQmIFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShUeXBlIHdpZGdldFR5cGUpCi17Ci0g
ICAgYXV0byBhZGRSZXN1bHQgPSB3aWRnZXRNYXAoKS5lbnN1cmUoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHdpZGdldFR5cGUpLCBbd2lkZ2V0VHlwZV0oKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
VGhlbWVXaWRnZXQ+IHsKLSAgICAgICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7Ci0gICAgICAgIGNh
c2UgUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OlZlcnRpY2FsU2Nyb2xsYmFyUmlnaHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZVNjcm9sbGJhcj4oR1RLX09SSUVO
VEFUSU9OX1ZFUlRJQ0FMLCBSZW5kZXJUaGVtZVNjcm9sbGJhcjo6TW9kZTo6RnVsbCk7Ci0gICAg
ICAgIGNhc2UgUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OlZlcnRpY2FsU2Nyb2xsYmFyTGVmdDoK
LSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lU2Nyb2xsYmFyPihHVEtf
T1JJRU5UQVRJT05fVkVSVElDQUwsIFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpNb2RlOjpGdWxsLCBS
ZW5kZXJUaGVtZVNjcm9sbGJhcjo6VmVydGljYWxQb3NpdGlvbjo6TGVmdCk7Ci0gICAgICAgIGNh
c2UgUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6Okhvcml6b250YWxTY3JvbGxiYXI6Ci0gICAgICAg
ICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZVNjcm9sbGJhcj4oR1RLX09SSUVOVEFU
SU9OX0hPUklaT05UQUwsIFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpNb2RlOjpGdWxsKTsKLSAgICAg
ICAgY2FzZSBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6VmVydGljYWxTY3JvbGxJbmRpY2F0b3JS
aWdodDoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lU2Nyb2xsYmFy
PihHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwsIFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpNb2RlOjpJ
bmRpY2F0b3IpOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNh
bFNjcm9sbEluZGljYXRvckxlZnQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5k
ZXJUaGVtZVNjcm9sbGJhcj4oR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCBSZW5kZXJUaGVtZVNj
cm9sbGJhcjo6TW9kZTo6SW5kaWNhdG9yLCBSZW5kZXJUaGVtZVNjcm9sbGJhcjo6VmVydGljYWxQ
b3NpdGlvbjo6TGVmdCk7Ci0gICAgICAgIGNhc2UgUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6Okhv
cml6b250YWxTY3JvbGxJbmRpY2F0b3I6Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxS
ZW5kZXJUaGVtZVNjcm9sbGJhcj4oR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIFJlbmRlclRo
ZW1lU2Nyb2xsYmFyOjpNb2RlOjpJbmRpY2F0b3IpOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1l
V2lkZ2V0OjpUeXBlOjpDaGVja0J1dHRvbjoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVl
PFJlbmRlclRoZW1lVG9nZ2xlQnV0dG9uPihSZW5kZXJUaGVtZVRvZ2dsZUJ1dHRvbjo6VHlwZTo6
Q2hlY2spOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpSYWRpb0J1dHRv
bjoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lVG9nZ2xlQnV0dG9u
PihSZW5kZXJUaGVtZVRvZ2dsZUJ1dHRvbjo6VHlwZTo6UmFkaW8pOwotICAgICAgICBjYXNlIFJl
bmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpCdXR0b246Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxSZW5kZXJUaGVtZUJ1dHRvbj4oUmVuZGVyVGhlbWVCdXR0b246OkRlZmF1bHQ6Ok5vKTsK
LSAgICAgICAgY2FzZSBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6QnV0dG9uRGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lQnV0dG9uPihSZW5kZXJUaGVt
ZUJ1dHRvbjo6RGVmYXVsdDo6WWVzKTsKLSAgICAgICAgY2FzZSBSZW5kZXJUaGVtZVdpZGdldDo6
VHlwZTo6Q29tYm9Cb3g6Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVt
ZUNvbWJvQm94PigpOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpFbnRy
eToKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lRW50cnk+KCk7Ci0g
ICAgICAgIGNhc2UgUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OlNlbGVjdGVkRW50cnk6Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZUVudHJ5PihSZW5kZXJUaGVtZUVu
dHJ5OjpTZWxlY3RlZDo6WWVzKTsKLSAgICAgICAgY2FzZSBSZW5kZXJUaGVtZVdpZGdldDo6VHlw
ZTo6U2VhcmNoRW50cnk6Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVt
ZVNlYXJjaEVudHJ5PigpOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpT
cGluQnV0dG9uOgotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVuZGVyVGhlbWVTcGlu
QnV0dG9uPigpOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNh
bFNsaWRlcjoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lU2xpZGVy
PihHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwpOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1lV2lk
Z2V0OjpUeXBlOjpIb3Jpem9udGFsU2xpZGVyOgotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8UmVuZGVyVGhlbWVTbGlkZXI+KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKTsKLSAgICAg
ICAgY2FzZSBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6UHJvZ3Jlc3NCYXI6Ci0gICAgICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZVByb2dyZXNzQmFyPihSZW5kZXJUaGVtZVBy
b2dyZXNzQmFyOjpNb2RlOjpEZXRlcm1pbmF0ZSk7Ci0gICAgICAgIGNhc2UgUmVuZGVyVGhlbWVX
aWRnZXQ6OlR5cGU6OkluZGV0ZXJtaW5hdGVQcm9ncmVzc0JhcjoKLSAgICAgICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPFJlbmRlclRoZW1lUHJvZ3Jlc3NCYXI+KFJlbmRlclRoZW1lUHJvZ3Jlc3NC
YXI6Ok1vZGU6OkluZGV0ZXJtaW5hdGUpOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0
OjpUeXBlOjpMaXN0VmlldzoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRo
ZW1lTGlzdFZpZXc+KCk7Ci0gICAgICAgIGNhc2UgUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6Oklj
b246Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZUljb24+KCk7Ci0g
ICAgICAgIGNhc2UgUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OldpbmRvdzoKLSAgICAgICAgICAg
IHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lV2luZG93PigpOwotICAgICAgICB9Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
KTsKLSAgICByZXR1cm4gKmFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLXZvaWQgUmVu
ZGVyVGhlbWVXaWRnZXQ6OmNsZWFyQ2FjaGUoKQotewotICAgIHdpZGdldE1hcCgpLmNsZWFyKCk7
Ci19Ci0KLVJlbmRlclRoZW1lV2lkZ2V0Ojp+UmVuZGVyVGhlbWVXaWRnZXQoKSA9IGRlZmF1bHQ7
Ci0KLVJlbmRlclRoZW1lU2Nyb2xsYmFyOjpSZW5kZXJUaGVtZVNjcm9sbGJhcihHdGtPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiwgTW9kZSBtb2RlLCBWZXJ0aWNhbFBvc2l0aW9uIHZlcnRpY2FsUG9z
aXRpb24pCi17Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8gaW5mbyA9IHsgUmVuZGVyVGhl
bWVHYWRnZXQ6OlR5cGU6OlNjcm9sbGJhciwgInNjcm9sbGJhciIsIHsgfSB9OwotICAgIGlmIChv
cmllbnRhdGlvbiA9PSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwpIHsKLSAgICAgICAgaW5mby5j
bGFzc0xpc3QuYXBwZW5kKCJ2ZXJ0aWNhbCIpOwotICAgICAgICBpbmZvLmNsYXNzTGlzdC5hcHBl
bmQodmVydGljYWxQb3NpdGlvbiA9PSBWZXJ0aWNhbFBvc2l0aW9uOjpSaWdodCA/ICJyaWdodCIg
OiAibGVmdCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgi
aG9yaXpvbnRhbCIpOwotICAgICAgICBpbmZvLmNsYXNzTGlzdC5hcHBlbmQoImJvdHRvbSIpOwot
ICAgIH0KLSAgICBzdGF0aWMgYm9vbCB1c2VzT3ZlcmxheVNjcm9sbGJhcnMgPSBnX3N0cmNtcDAo
Z19nZXRlbnYoIkdUS19PVkVSTEFZX1NDUk9MTElORyIpLCAiMCIpOwotICAgIGlmICh1c2VzT3Zl
cmxheVNjcm9sbGJhcnMpCi0gICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgib3ZlcmxheS1p
bmRpY2F0b3IiKTsKLSAgICBpZiAobW9kZSA9PSBNb2RlOjpGdWxsKQotICAgICAgICBpbmZvLmNs
YXNzTGlzdC5hcHBlbmQoImhvdmVyaW5nIik7Ci0gICAgbV9zY3JvbGxiYXIgPSBSZW5kZXJUaGVt
ZUdhZGdldDo6Y3JlYXRlKGluZm8pOwotCi0gICAgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJ
bmZvPiBjaGlsZHJlbjsKLSAgICBhdXRvIHN0ZXBwZXJzID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhl
bWVTY3JvbGxiYXJHYWRnZXQqPihtX3Njcm9sbGJhci5nZXQoKSktPnN0ZXBwZXJzKCk7Ci0gICAg
aWYgKHN0ZXBwZXJzLmNvbnRhaW5zKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVy
czo6QmFja3dhcmQpKSB7Ci0gICAgICAgIG1fc3RlcHBlcnNQb3NpdGlvblswXSA9IGNoaWxkcmVu
LnNpemUoKTsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5
cGU6OkdlbmVyaWMsICJidXR0b24iLCB7ICJ1cCIgfSB9KTsKLSAgICB9Ci0gICAgaWYgKHN0ZXBw
ZXJzLmNvbnRhaW5zKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6U2Vjb25k
YXJ5Rm9yd2FyZCkpIHsKLSAgICAgICAgbV9zdGVwcGVyc1Bvc2l0aW9uWzFdID0gY2hpbGRyZW4u
c2l6ZSgpOwotICAgICAgICBjaGlsZHJlbi5hcHBlbmQoeyBSZW5kZXJUaGVtZUdhZGdldDo6VHlw
ZTo6R2VuZXJpYywgImJ1dHRvbiIsIHsgImRvd24iIH0gfSk7Ci0gICAgfQotICAgIG1fdHJvdWdo
UG9zaXRpb24gPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAgY2hpbGRyZW4uYXBwZW5kKHsgUmVuZGVy
VGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJ0cm91Z2giLCB7IH0gfSk7Ci0gICAgaWYgKHN0
ZXBwZXJzLmNvbnRhaW5zKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6U2Vj
b25kYXJ5QmFja3dhcmQpKSB7Ci0gICAgICAgIG1fc3RlcHBlcnNQb3NpdGlvblsyXSA9IGNoaWxk
cmVuLnNpemUoKTsKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKHsgUmVuZGVyVGhlbWVHYWRnZXQ6
OlR5cGU6OkdlbmVyaWMsICJidXR0b24iLCB7ICJ1cCIgfSB9KTsKLSAgICB9Ci0gICAgaWYgKHN0
ZXBwZXJzLmNvbnRhaW5zKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6Rm9y
d2FyZCkpIHsKLSAgICAgICAgbV9zdGVwcGVyc1Bvc2l0aW9uWzNdID0gY2hpbGRyZW4uc2l6ZSgp
OwotICAgICAgICBjaGlsZHJlbi5hcHBlbmQoeyBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2Vu
ZXJpYywgImJ1dHRvbiIsIHsgImRvd24iIH0gfSk7Ci0gICAgfQotICAgIGluZm8udHlwZSA9IFJl
bmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpHZW5lcmljOwotICAgIGluZm8ubmFtZSA9ICJjb250ZW50
cyI7Ci0gICAgaW5mby5jbGFzc0xpc3QuY2xlYXIoKTsKLSAgICBtX2NvbnRlbnRzID0gbWFrZVVu
aXF1ZTxSZW5kZXJUaGVtZUJveEdhZGdldD4oaW5mbywgR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FM
LCBjaGlsZHJlbiwgbV9zY3JvbGxiYXIuZ2V0KCkpOwotICAgIGluZm8ubmFtZSA9ICJzbGlkZXIi
OwotICAgIG1fc2xpZGVyID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvLCBtX2NvbnRl
bnRzLT5jaGlsZChtX3Ryb3VnaFBvc2l0aW9uKSk7Ci19Ci0KLVJlbmRlclRoZW1lR2FkZ2V0KiBS
ZW5kZXJUaGVtZVNjcm9sbGJhcjo6c3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6
U3RlcHBlcnMgc2Nyb2xsYmFyU3RlcHBlcikKLXsKLSAgICBpZiAoIXN0YXRpY19jYXN0PFJlbmRl
clRoZW1lU2Nyb2xsYmFyR2FkZ2V0Kj4obV9zY3JvbGxiYXIuZ2V0KCkpLT5zdGVwcGVycygpLmNv
bnRhaW5zKHNjcm9sbGJhclN0ZXBwZXIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHN3aXRjaCAoc2Nyb2xsYmFyU3RlcHBlcikgewotICAgIGNhc2UgUmVuZGVyVGhlbWVTY3JvbGxi
YXJHYWRnZXQ6OlN0ZXBwZXJzOjpCYWNrd2FyZDoKLSAgICAgICAgcmV0dXJuIG1fY29udGVudHMt
PmNoaWxkKG1fc3RlcHBlcnNQb3NpdGlvblswXSk7Ci0gICAgY2FzZSBSZW5kZXJUaGVtZVNjcm9s
bGJhckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFyeUZvcndhcmQ6Ci0gICAgICAgIHJldHVybiBt
X2NvbnRlbnRzLT5jaGlsZChtX3N0ZXBwZXJzUG9zaXRpb25bMV0pOwotICAgIGNhc2UgUmVuZGVy
VGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpTZWNvbmRhcnlCYWNrd2FyZDoKLSAgICAg
ICAgcmV0dXJuIG1fY29udGVudHMtPmNoaWxkKG1fc3RlcHBlcnNQb3NpdGlvblsyXSk7Ci0gICAg
Y2FzZSBSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnM6OkZvcndhcmQ6Ci0gICAg
ICAgIHJldHVybiBtX2NvbnRlbnRzLT5jaGlsZChtX3N0ZXBwZXJzUG9zaXRpb25bM10pOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi1SZW5kZXJUaGVtZVRvZ2dsZUJ1dHRvbjo6UmVuZGVyVGhlbWVUb2dnbGVCdXR0b24oVHlw
ZSB0b2dnbGVUeXBlKQotewotICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvIGluZm8gPSB7IFJl
bmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpHZW5lcmljLCB0b2dnbGVUeXBlID09IFR5cGU6OkNoZWNr
ID8gImNoZWNrYnV0dG9uIiA6ICJyYWRpb2J1dHRvbiIsIHsgInRleHQtYnV0dG9uIiB9IH07Ci0g
ICAgbV9idXR0b24gPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8pOwotICAgIGlmICh0
b2dnbGVUeXBlID09IFR5cGU6OkNoZWNrKSB7Ci0gICAgICAgIGluZm8udHlwZSA9IFJlbmRlclRo
ZW1lR2FkZ2V0OjpUeXBlOjpDaGVjazsKLSAgICAgICAgaW5mby5uYW1lID0gImNoZWNrIjsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpbmZvLnR5cGUgPSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6
UmFkaW87Ci0gICAgICAgIGluZm8ubmFtZSA9ICJyYWRpbyI7Ci0gICAgfQotICAgIGluZm8uY2xh
c3NMaXN0LmNsZWFyKCk7Ci0gICAgbV90b2dnbGUgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRl
KGluZm8sIG1fYnV0dG9uLmdldCgpKTsKLX0KLQotUmVuZGVyVGhlbWVCdXR0b246OlJlbmRlclRo
ZW1lQnV0dG9uKERlZmF1bHQgaXNEZWZhdWx0KQotewotICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpJ
bmZvIGluZm8gPSB7IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpCdXR0b24sICJidXR0b24iLCB7
ICJ0ZXh0LWJ1dHRvbiIgfSB9OwotICAgIGlmIChpc0RlZmF1bHQgPT0gRGVmYXVsdDo6WWVzKQot
ICAgICAgICBpbmZvLmNsYXNzTGlzdC5hcHBlbmQoImRlZmF1bHQiKTsKLSAgICBtX2J1dHRvbiA9
IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbyk7Ci19Ci0KLVJlbmRlclRoZW1lQ29tYm9C
b3g6OlJlbmRlclRoZW1lQ29tYm9Cb3goKQotewotICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZv
IGluZm8gPSB7IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpHZW5lcmljLCAiY29tYm9ib3giLCB7
IH0gfTsKLSAgICBtX2NvbWJvQm94ID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvKTsK
LSAgICBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IGNoaWxkcmVuID0gewotICAgICAg
ICB7IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpHZW5lcmljLCAiYnV0dG9uIiwgeyAiY29tYm8i
IH0gfQotICAgIH07Ci0gICAgaW5mby5uYW1lID0gImJveCI7Ci0gICAgaW5mby5jbGFzc0xpc3Qg
PSB7ICJob3Jpem9udGFsIiwgImxpbmtlZCIgfTsKLSAgICBtX2JveCA9IG1ha2VVbmlxdWU8UmVu
ZGVyVGhlbWVCb3hHYWRnZXQ+KGluZm8sIEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCBjaGls
ZHJlbiwgbV9jb21ib0JveC5nZXQoKSk7Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQqIGJ1dHRvbiA9
IG1fYm94LT5jaGlsZCgwKTsKLSAgICBpbmZvLmNsYXNzTGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAg
bV9idXR0b25Cb3ggPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIGJ1dHRvbik7Ci0g
ICAgaW5mby50eXBlID0gUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkFycm93OwotICAgIGluZm8u
bmFtZSA9ICJhcnJvdyI7Ci0gICAgaW5mby5jbGFzc0xpc3QgPSB7IH07Ci0gICAgbV9hcnJvdyA9
IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgbV9idXR0b25Cb3guZ2V0KCkpOwotfQot
Ci1SZW5kZXJUaGVtZUVudHJ5OjpSZW5kZXJUaGVtZUVudHJ5KFNlbGVjdGVkIGlzU2VsZWN0ZWQp
Ci17Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8gaW5mbyA9IHsgUmVuZGVyVGhlbWVHYWRn
ZXQ6OlR5cGU6OlRleHRGaWVsZCwgImVudHJ5IiwgeyB9IH07Ci0gICAgbV9lbnRyeSA9IFJlbmRl
clRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbyk7Ci0gICAgaWYgKGlzU2VsZWN0ZWQgPT0gU2VsZWN0
ZWQ6OlllcykgewotICAgICAgICBpbmZvLnR5cGUgPSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6
R2VuZXJpYzsKLSAgICAgICAgaW5mby5uYW1lID0gInNlbGVjdGlvbiI7Ci0gICAgICAgIG1fc2Vs
ZWN0aW9uID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvLCBtX2VudHJ5LmdldCgpKTsK
LSAgICB9Ci19Ci0KLVJlbmRlclRoZW1lU2VhcmNoRW50cnk6OlJlbmRlclRoZW1lU2VhcmNoRW50
cnkoKQotewotICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvIGluZm8gPSB7IFJlbmRlclRoZW1l
R2FkZ2V0OjpUeXBlOjpJY29uLCAiaW1hZ2UiLCB7ICJsZWZ0IiB9IH07Ci0gICAgbV9sZWZ0SWNv
biA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgbV9lbnRyeS5nZXQoKSk7Ci0gICAg
c3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVJY29uR2FkZ2V0Kj4obV9sZWZ0SWNvbi5nZXQoKSktPnNl
dEljb25OYW1lKCJlZGl0LWZpbmQtc3ltYm9saWMiKTsKLSAgICBpbmZvLmNsYXNzTGlzdC5jbGVh
cigpOwotICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgicmlnaHQiKTsKLSAgICBtX3JpZ2h0SWNv
biA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgbV9lbnRyeS5nZXQoKSk7Ci0gICAg
c3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVJY29uR2FkZ2V0Kj4obV9yaWdodEljb24uZ2V0KCkpLT5z
ZXRJY29uTmFtZSgiZWRpdC1jbGVhci1zeW1ib2xpYyIpOwotfQotCi1SZW5kZXJUaGVtZVNwaW5C
dXR0b246OlJlbmRlclRoZW1lU3BpbkJ1dHRvbigpCi17Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQ6
OkluZm8gaW5mbyA9IHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJzcGluYnV0
dG9uIiwgeyAiaG9yaXpvbnRhbCIgfSB9OwotICAgIG1fc3BpbkJ1dHRvbiA9IFJlbmRlclRoZW1l
R2FkZ2V0OjpjcmVhdGUoaW5mbyk7Ci0gICAgaW5mby50eXBlID0gUmVuZGVyVGhlbWVHYWRnZXQ6
OlR5cGU6OlRleHRGaWVsZDsKLSAgICBpbmZvLm5hbWUgPSAiZW50cnkiOwotICAgIGluZm8uY2xh
c3NMaXN0LmNsZWFyKCk7Ci0gICAgbV9lbnRyeSA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUo
aW5mbywgbV9zcGluQnV0dG9uLmdldCgpKTsKLSAgICBpbmZvLnR5cGUgPSBSZW5kZXJUaGVtZUdh
ZGdldDo6VHlwZTo6SWNvbjsKLSAgICBpbmZvLm5hbWUgPSAiYnV0dG9uIjsKLSAgICBpbmZvLmNs
YXNzTGlzdC5hcHBlbmQoInVwIik7Ci0gICAgbV91cCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVh
dGUoaW5mbywgbV9zcGluQnV0dG9uLmdldCgpKTsKLSAgICBhdXRvKiB1cEljb24gPSBzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUljb25HYWRnZXQqPihtX3VwLmdldCgpKTsKLSAgICB1cEljb24tPnNl
dEljb25TaXplKFJlbmRlclRoZW1lSWNvbkdhZGdldDo6SWNvblNpemVHdGs6Ok1lbnUpOwotICAg
IHVwSWNvbi0+c2V0SWNvbk5hbWUoImxpc3QtYWRkLXN5bWJvbGljIik7Ci0gICAgaW5mby5jbGFz
c0xpc3RbMF0gPSAiZG93biI7Ci0gICAgbV9kb3duID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0
ZShpbmZvLCBtX3NwaW5CdXR0b24uZ2V0KCkpOwotICAgIGF1dG8qIGRvd25JY29uID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyVGhlbWVJY29uR2FkZ2V0Kj4obV9kb3duLmdldCgpKTsKLSAgICBkb3duSWNv
bi0+c2V0SWNvblNpemUoUmVuZGVyVGhlbWVJY29uR2FkZ2V0OjpJY29uU2l6ZUd0azo6TWVudSk7
Ci0gICAgZG93bkljb24tPnNldEljb25OYW1lKCJsaXN0LXJlbW92ZS1zeW1ib2xpYyIpOwotfQot
Ci1SZW5kZXJUaGVtZVNsaWRlcjo6UmVuZGVyVGhlbWVTbGlkZXIoR3RrT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pCi17Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8gaW5mbyA9IHsgUmVuZGVy
VGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJzY2FsZSIsIHsgfSB9OwotICAgIGlmIChvcmll
bnRhdGlvbiA9PSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwpCi0gICAgICAgIGluZm8uY2xhc3NM
aXN0LmFwcGVuZCgidmVydGljYWwiKTsKLSAgICBlbHNlCi0gICAgICAgIGluZm8uY2xhc3NMaXN0
LmFwcGVuZCgiaG9yaXpvbnRhbCIpOwotICAgIG1fc2NhbGUgPSBSZW5kZXJUaGVtZUdhZGdldDo6
Y3JlYXRlKGluZm8pOwotICAgIGluZm8ubmFtZSA9ICJjb250ZW50cyI7Ci0gICAgaW5mby5jbGFz
c0xpc3QuY2xlYXIoKTsKLSAgICBtX2NvbnRlbnRzID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0
ZShpbmZvLCBtX3NjYWxlLmdldCgpKTsKLSAgICBpbmZvLm5hbWUgPSAidHJvdWdoIjsKLSAgICBt
X3Ryb3VnaCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgbV9jb250ZW50cy5nZXQo
KSk7Ci0gICAgaW5mby5uYW1lID0gInNsaWRlciI7Ci0gICAgbV9zbGlkZXIgPSBSZW5kZXJUaGVt
ZUdhZGdldDo6Y3JlYXRlKGluZm8sIG1fdHJvdWdoLmdldCgpKTsKLSAgICBpbmZvLm5hbWUgPSAi
aGlnaGxpZ2h0IjsKLSAgICBtX2hpZ2hsaWdodCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUo
aW5mbywgbV90cm91Z2guZ2V0KCkpOwotfQotCi1SZW5kZXJUaGVtZVByb2dyZXNzQmFyOjpSZW5k
ZXJUaGVtZVByb2dyZXNzQmFyKE1vZGUgbW9kZSkKLXsKLSAgICBSZW5kZXJUaGVtZUdhZGdldDo6
SW5mbyBpbmZvID0geyBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2VuZXJpYywgInByb2dyZXNz
YmFyIiwgeyAiaG9yaXpvbnRhbCIgfSB9OwotICAgIG1fcHJvZ3Jlc3NCYXIgPSBSZW5kZXJUaGVt
ZUdhZGdldDo6Y3JlYXRlKGluZm8pOwotICAgIGluZm8ubmFtZSA9ICJ0cm91Z2giOwotICAgIGlu
Zm8uY2xhc3NMaXN0LmNsZWFyKCk7Ci0gICAgbV90cm91Z2ggPSBSZW5kZXJUaGVtZUdhZGdldDo6
Y3JlYXRlKGluZm8sIG1fcHJvZ3Jlc3NCYXIuZ2V0KCkpOwotICAgIGluZm8ubmFtZSA9ICJwcm9n
cmVzcyI7Ci0gICAgaWYgKG1vZGUgPT0gTW9kZTo6RGV0ZXJtaW5hdGUpCi0gICAgICAgIGluZm8u
Y2xhc3NMaXN0LmFwcGVuZCgicHVsc2UiKTsKLSAgICBtX3Byb2dyZXNzID0gUmVuZGVyVGhlbWVH
YWRnZXQ6OmNyZWF0ZShpbmZvLCBtX3Ryb3VnaC5nZXQoKSk7Ci19Ci0KLVJlbmRlclRoZW1lTGlz
dFZpZXc6OlJlbmRlclRoZW1lTGlzdFZpZXcoKQotICAgIDogbV90cmVldmlldyhSZW5kZXJUaGVt
ZUdhZGdldDo6Y3JlYXRlKHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJ0cmVl
dmlldyIsIHsgInZpZXciIH0gfSkpCi17Ci19Ci0KLVJlbmRlclRoZW1lSWNvbjo6UmVuZGVyVGhl
bWVJY29uKCkKLSAgICA6IG1faWNvbihSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKHsgUmVuZGVy
VGhlbWVHYWRnZXQ6OlR5cGU6Okljb24sICJpbWFnZSIsIHsgfSB9KSkKLXsKLX0KLQotUmVuZGVy
VGhlbWVXaW5kb3c6OlJlbmRlclRoZW1lV2luZG93KCkKLSAgICA6IG1fd2luZG93KFJlbmRlclRo
ZW1lR2FkZ2V0OjpjcmVhdGUoeyBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2VuZXJpYywgIndp
bmRvdyIsIHsgImJhY2tncm91bmQiIH0gfSkpCi17Ci19Ci0KLX0gLy8gbmFtZXBzYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZVdp
ZGdldC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lV2lkZ2V0LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzM2UwMDQ4ZjFlLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVXaWRnZXQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDI0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEln
YWxpYSBTLkwuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0jaW5jbHVkZSAiUmVuZGVyVGhl
bWVHYWRnZXQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJUaGVtZVdp
ZGdldCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUmVuZGVyVGhlbWVXaWRnZXQpOwotcHVibGljOgotICAgIGVudW0gY2xhc3MgVHlwZSB7
Ci0gICAgICAgIFZlcnRpY2FsU2Nyb2xsYmFyUmlnaHQgPSAxLAotICAgICAgICBWZXJ0aWNhbFNj
cm9sbGJhckxlZnQsCi0gICAgICAgIEhvcml6b250YWxTY3JvbGxiYXIsCi0gICAgICAgIFZlcnRp
Y2FsU2Nyb2xsSW5kaWNhdG9yUmlnaHQsCi0gICAgICAgIFZlcnRpY2FsU2Nyb2xsSW5kaWNhdG9y
TGVmdCwKLSAgICAgICAgSG9yaXpvbnRhbFNjcm9sbEluZGljYXRvciwKLSAgICAgICAgQ2hlY2tC
dXR0b24sCi0gICAgICAgIFJhZGlvQnV0dG9uLAotICAgICAgICBCdXR0b24sCi0gICAgICAgIEJ1
dHRvbkRlZmF1bHQsCi0gICAgICAgIENvbWJvQm94LAotICAgICAgICBFbnRyeSwKLSAgICAgICAg
U2VsZWN0ZWRFbnRyeSwKLSAgICAgICAgU2VhcmNoRW50cnksCi0gICAgICAgIFNwaW5CdXR0b24s
Ci0gICAgICAgIFZlcnRpY2FsU2xpZGVyLAotICAgICAgICBIb3Jpem9udGFsU2xpZGVyLAotICAg
ICAgICBQcm9ncmVzc0JhciwKLSAgICAgICAgSW5kZXRlcm1pbmF0ZVByb2dyZXNzQmFyLAotICAg
ICAgICBMaXN0VmlldywKLSAgICAgICAgSWNvbiwKLSAgICAgICAgV2luZG93LAotICAgIH07Ci0g
ICAgc3RhdGljIFJlbmRlclRoZW1lV2lkZ2V0JiBnZXRPckNyZWF0ZShUeXBlKTsKLSAgICBzdGF0
aWMgdm9pZCBjbGVhckNhY2hlKCk7Ci0KLSAgICBSZW5kZXJUaGVtZVdpZGdldCgpID0gZGVmYXVs
dDsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVdpZGdldCgpOwotfTsKLQotY2xhc3MgUmVuZGVy
VGhlbWVTY3JvbGxiYXIgZmluYWwgOiBwdWJsaWMgUmVuZGVyVGhlbWVXaWRnZXQgewotcHVibGlj
OgotICAgIGVudW0gY2xhc3MgTW9kZSB7IEZ1bGwsIEluZGljYXRvciB9OwotICAgIGVudW0gY2xh
c3MgVmVydGljYWxQb3NpdGlvbiB7IFJpZ2h0LCBMZWZ0IH07Ci0gICAgUmVuZGVyVGhlbWVTY3Jv
bGxiYXIoR3RrT3JpZW50YXRpb24sIE1vZGUsIFZlcnRpY2FsUG9zaXRpb24gPSBWZXJ0aWNhbFBv
c2l0aW9uOjpSaWdodCk7Ci0gICAgflJlbmRlclRoZW1lU2Nyb2xsYmFyKCkgPSBkZWZhdWx0Owot
Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIHNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuICptX3Nj
cm9sbGJhcjsgfQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiBjb250ZW50cygpIGNvbnN0IHsgcmV0
dXJuICptX2NvbnRlbnRzOyB9Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIHNsaWRlcigpIGNvbnN0
IHsgcmV0dXJuICptX3NsaWRlcjsgfQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiB0cm91Z2goKSBj
b25zdCB7IHJldHVybiAqbV9jb250ZW50cy0+Y2hpbGQobV90cm91Z2hQb3NpdGlvbik7IH0KLSAg
ICBSZW5kZXJUaGVtZUdhZGdldCogc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6
U3RlcHBlcnMpOwotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdh
ZGdldD4gbV9zY3JvbGxiYXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1lQm94R2Fk
Z2V0PiBtX2NvbnRlbnRzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4g
bV9zbGlkZXI7Ci0gICAgdW5zaWduZWQgbV90cm91Z2hQb3NpdGlvbjsKLSAgICB1bnNpZ25lZCBt
X3N0ZXBwZXJzUG9zaXRpb25bNF07Ci19OwotCi1jbGFzcyBSZW5kZXJUaGVtZVRvZ2dsZUJ1dHRv
biBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZVdpZGdldCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBj
bGFzcyBUeXBlIHsgQ2hlY2ssIFJhZGlvIH07Ci0gICAgZXhwbGljaXQgUmVuZGVyVGhlbWVUb2dn
bGVCdXR0b24oVHlwZSk7Ci0gICAgflJlbmRlclRoZW1lVG9nZ2xlQnV0dG9uKCkgPSBkZWZhdWx0
OwotCi0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIGJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuICptX2J1
dHRvbjsgfQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiB0b2dnbGUoKSBjb25zdCB7IHJldHVybiAq
bV90b2dnbGU7IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVH
YWRnZXQ+IG1fYnV0dG9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4g
bV90b2dnbGU7Ci19OwotCi1jbGFzcyBSZW5kZXJUaGVtZUJ1dHRvbiBmaW5hbCA6IHB1YmxpYyBS
ZW5kZXJUaGVtZVdpZGdldCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBEZWZhdWx0IHsgTm8s
IFllcyB9OwotICAgIGV4cGxpY2l0IFJlbmRlclRoZW1lQnV0dG9uKERlZmF1bHQpOwotICAgIH5S
ZW5kZXJUaGVtZUJ1dHRvbigpID0gZGVmYXVsdDsKLQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiBi
dXR0b24oKSBjb25zdCB7IHJldHVybiAqbV9idXR0b247IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IG1fYnV0dG9uOwotfTsKLQotY2xhc3MgUmVu
ZGVyVGhlbWVDb21ib0JveCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZVdpZGdldCB7Ci1wdWJs
aWM6Ci0gICAgUmVuZGVyVGhlbWVDb21ib0JveCgpOwotICAgIH5SZW5kZXJUaGVtZUNvbWJvQm94
KCkgPSBkZWZhdWx0OwotCi0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIGNvbWJvQm94KCkgY29uc3Qg
eyByZXR1cm4gKm1fY29tYm9Cb3g7IH0KLSAgICBSZW5kZXJUaGVtZUdhZGdldCYgYm94KCkgY29u
c3QgeyByZXR1cm4gKm1fYm94OyB9Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIGJ1dHRvbigpIGNv
bnN0IHsgcmV0dXJuICptX2JveC0+Y2hpbGQoMCk7IH0KLSAgICBSZW5kZXJUaGVtZUdhZGdldCYg
YnV0dG9uQm94KCkgY29uc3QgeyByZXR1cm4gKm1fYnV0dG9uQm94OyB9Ci0gICAgUmVuZGVyVGhl
bWVHYWRnZXQmIGFycm93KCkgY29uc3QgeyByZXR1cm4gKm1fYXJyb3c7IH0KLQotcHJpdmF0ZToK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IG1fY29tYm9Cb3g7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1lQm94R2FkZ2V0PiBtX2JveDsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IG1fYnV0dG9uQm94OwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV9hcnJvdzsKLX07Ci0KLWNsYXNzIFJlbmRlclRoZW1l
RW50cnkgOiBwdWJsaWMgUmVuZGVyVGhlbWVXaWRnZXQgewotcHVibGljOgotICAgIGVudW0gY2xh
c3MgU2VsZWN0ZWQgeyBObywgWWVzIH07Ci0gICAgZXhwbGljaXQgUmVuZGVyVGhlbWVFbnRyeShT
ZWxlY3RlZCA9IFNlbGVjdGVkOjpObyk7Ci0gICAgflJlbmRlclRoZW1lRW50cnkoKSA9IGRlZmF1
bHQ7Ci0KLSAgICBSZW5kZXJUaGVtZUdhZGdldCYgZW50cnkoKSBjb25zdCB7IHJldHVybiAqbV9l
bnRyeTsgfQotICAgIFJlbmRlclRoZW1lR2FkZ2V0KiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX3NlbGVjdGlvbi5nZXQoKTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclRoZW1lR2FkZ2V0PiBtX2VudHJ5OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJU
aGVtZUdhZGdldD4gbV9zZWxlY3Rpb247Ci19OwotCi1jbGFzcyBSZW5kZXJUaGVtZVNlYXJjaEVu
dHJ5IGZpbmFsIDogcHVibGljIFJlbmRlclRoZW1lRW50cnkgewotcHVibGljOgotICAgIFJlbmRl
clRoZW1lU2VhcmNoRW50cnkoKTsKLSAgICB+UmVuZGVyVGhlbWVTZWFyY2hFbnRyeSgpID0gZGVm
YXVsdDsKLQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiBsZWZ0SWNvbigpIGNvbnN0IHsgcmV0dXJu
ICptX2xlZnRJY29uOyB9Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIHJpZ2h0SWNvbigpIGNvbnN0
IHsgcmV0dXJuICptX3JpZ2h0SWNvbjsgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJUaGVtZUdhZGdldD4gbV9sZWZ0SWNvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyVGhlbWVHYWRnZXQ+IG1fcmlnaHRJY29uOwotfTsKLQotY2xhc3MgUmVuZGVyVGhlbWVTcGlu
QnV0dG9uIGZpbmFsIDogcHVibGljIFJlbmRlclRoZW1lV2lkZ2V0IHsKLXB1YmxpYzoKLSAgICBS
ZW5kZXJUaGVtZVNwaW5CdXR0b24oKTsKLSAgICB+UmVuZGVyVGhlbWVTcGluQnV0dG9uKCkgPSBk
ZWZhdWx0OwotCi0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIHNwaW5CdXR0b24oKSBjb25zdCB7IHJl
dHVybiAqbV9zcGluQnV0dG9uOyB9Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIGVudHJ5KCkgY29u
c3QgeyByZXR1cm4gKm1fZW50cnk7IH0KLSAgICBSZW5kZXJUaGVtZUdhZGdldCYgdXAoKSBjb25z
dCB7IHJldHVybiAqbV91cDsgfQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiBkb3duKCkgY29uc3Qg
eyByZXR1cm4gKm1fZG93bjsgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJUaGVtZUdhZGdldD4gbV9zcGluQnV0dG9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJU
aGVtZUdhZGdldD4gbV9lbnRyeTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRn
ZXQ+IG1fdXA7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0PiBtX2Rvd247
Ci19OwotCi1jbGFzcyBSZW5kZXJUaGVtZVNsaWRlciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVt
ZVdpZGdldCB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgUmVuZGVyVGhlbWVTbGlkZXIoR3RrT3Jp
ZW50YXRpb24pOwotICAgIH5SZW5kZXJUaGVtZVNsaWRlcigpID0gZGVmYXVsdDsKLQotICAgIFJl
bmRlclRoZW1lR2FkZ2V0JiBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuICptX3NjYWxlOyB9Ci0gICAg
UmVuZGVyVGhlbWVHYWRnZXQmIGNvbnRlbnRzKCkgY29uc3QgeyByZXR1cm4gKm1fY29udGVudHM7
IH0KLSAgICBSZW5kZXJUaGVtZUdhZGdldCYgdHJvdWdoKCkgY29uc3QgeyByZXR1cm4gKm1fdHJv
dWdoOyB9Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIHNsaWRlcigpIGNvbnN0IHsgcmV0dXJuICpt
X3NsaWRlcjsgfQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiBoaWdobGlnaHQoKSBjb25zdCB7IHJl
dHVybiAqbV9oaWdobGlnaHQ7IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyVGhlbWVHYWRnZXQ+IG1fc2NhbGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1l
R2FkZ2V0PiBtX2NvbnRlbnRzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdl
dD4gbV90cm91Z2g7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0PiBtX3Ns
aWRlcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IG1faGlnaGxpZ2h0
OwotfTsKLQotY2xhc3MgUmVuZGVyVGhlbWVQcm9ncmVzc0JhciBmaW5hbCA6IHB1YmxpYyBSZW5k
ZXJUaGVtZVdpZGdldCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBNb2RlIHsgRGV0ZXJtaW5h
dGUsIEluZGV0ZXJtaW5hdGUgfTsKLSAgICBleHBsaWNpdCBSZW5kZXJUaGVtZVByb2dyZXNzQmFy
KE1vZGUpOwotICAgIH5SZW5kZXJUaGVtZVByb2dyZXNzQmFyKCkgPSBkZWZhdWx0OwotCi0gICAg
UmVuZGVyVGhlbWVHYWRnZXQmIHByb2dyZXNzQmFyKCkgY29uc3QgeyByZXR1cm4gKm1fcHJvZ3Jl
c3NCYXI7IH0KLSAgICBSZW5kZXJUaGVtZUdhZGdldCYgdHJvdWdoKCkgY29uc3QgeyByZXR1cm4g
Km1fdHJvdWdoOyB9Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIHByb2dyZXNzKCkgY29uc3QgeyBy
ZXR1cm4gKm1fcHJvZ3Jlc3M7IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyVGhlbWVHYWRnZXQ+IG1fcHJvZ3Jlc3NCYXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clRoZW1lR2FkZ2V0PiBtX3Ryb3VnaDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVH
YWRnZXQ+IG1fcHJvZ3Jlc3M7Ci19OwotCi1jbGFzcyBSZW5kZXJUaGVtZUxpc3RWaWV3IGZpbmFs
IDogcHVibGljIFJlbmRlclRoZW1lV2lkZ2V0IHsKLXB1YmxpYzoKLSAgICBSZW5kZXJUaGVtZUxp
c3RWaWV3KCk7Ci0gICAgflJlbmRlclRoZW1lTGlzdFZpZXcoKSA9IGRlZmF1bHQ7Ci0KLSAgICBS
ZW5kZXJUaGVtZUdhZGdldCYgdHJlZXZpZXcoKSBjb25zdCB7IHJldHVybiAqbV90cmVldmlldzsg
fQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV90
cmVldmlldzsKLX07Ci0KLWNsYXNzIFJlbmRlclRoZW1lSWNvbiBmaW5hbCA6IHB1YmxpYyBSZW5k
ZXJUaGVtZVdpZGdldCB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyVGhlbWVJY29uKCk7Ci0gICAgflJl
bmRlclRoZW1lSWNvbigpID0gZGVmYXVsdDsKLQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiBpY29u
KCkgY29uc3QgeyByZXR1cm4gKm1faWNvbjsgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV9pY29uOwotfTsKLQotY2xhc3MgUmVuZGVyVGhlbWVX
aW5kb3cgZmluYWwgOiBwdWJsaWMgUmVuZGVyVGhlbWVXaWRnZXQgewotcHVibGljOgotICAgIFJl
bmRlclRoZW1lV2luZG93KCk7Ci0gICAgflJlbmRlclRoZW1lV2luZG93KCkgPSBkZWZhdWx0Owot
Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIHdpbmRvdygpIGNvbnN0IHsgcmV0dXJuICptX3dpbmRv
dzsgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4g
bV93aW5kb3c7Ci0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0MDhiMWI5ZjU3OS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDUxNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCi0KLSNpbmNsdWRlICJHUmVmUHRy
R3RrLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJQbGF0
Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVdpZGdldC5oIgotI2luY2x1
ZGUgIlNjcm9sbFZpZXcuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlIDxjc3Rk
bGliPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TY3Jv
bGxiYXJUaGVtZSYgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKLXsKLSAgICBzdGF0aWMg
U2Nyb2xsYmFyVGhlbWVHdGsgdGhlbWU7Ci0gICAgcmV0dXJuIHRoZW1lOwotfQotCi1TY3JvbGxi
YXJUaGVtZUd0azo6flNjcm9sbGJhclRoZW1lR3RrKCkgPSBkZWZhdWx0OwotCi1zdGF0aWMgdm9p
ZCB0aGVtZUNoYW5nZWRDYWxsYmFjaygpCi17Ci0gICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCku
dGhlbWVDaGFuZ2VkKCk7Ci19Ci0KLVNjcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0
aygpCi17Ci0gICAgbV91c2VzT3ZlcmxheVNjcm9sbGJhcnMgPSBnX3N0cmNtcDAoZ19nZXRlbnYo
IkdUS19PVkVSTEFZX1NDUk9MTElORyIpLCAiMCIpOwotCi0gICAgc3RhdGljIGJvb2wgdGhlbWVN
b25pdG9ySW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBpZiAoIXRoZW1lTW9uaXRvckluaXRpYWxp
emVkKSB7Ci0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZ3RrX3NldHRpbmdzX2dldF9kZWZhdWx0
KCksICJub3RpZnk6Omd0ay10aGVtZS1uYW1lIiwgR19DQUxMQkFDSyh0aGVtZUNoYW5nZWRDYWxs
YmFjayksIG51bGxwdHIpOwotICAgICAgICB0aGVtZU1vbml0b3JJbml0aWFsaXplZCA9IHRydWU7
Ci0gICAgICAgIHVwZGF0ZVRoZW1lUHJvcGVydGllcygpOwotICAgIH0KLX0KLQotdm9pZCBTY3Jv
bGxiYXJUaGVtZUd0azo6dGhlbWVDaGFuZ2VkKCkKLXsKLSAgICBSZW5kZXJUaGVtZVdpZGdldDo6
Y2xlYXJDYWNoZSgpOwotICAgIHVwZGF0ZVRoZW1lUHJvcGVydGllcygpOwotfQotCi12b2lkIFNj
cm9sbGJhclRoZW1lR3RrOjp1cGRhdGVUaGVtZVByb3BlcnRpZXMoKQotewotICAgIGF1dG8mIHNj
cm9sbGJhciA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFyJj4oUmVuZGVyVGhlbWVX
aWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNhbFNjcm9s
bGJhclJpZ2h0KSk7Ci0gICAgbV9oYXNCYWNrQnV0dG9uU3RhcnRQYXJ0ID0gc2Nyb2xsYmFyLnN0
ZXBwZXIoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpCYWNrd2FyZCk7Ci0g
ICAgbV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFydCA9IHNjcm9sbGJhci5zdGVwcGVyKFJlbmRlclRo
ZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6Rm9yd2FyZCk7Ci0gICAgbV9oYXNCYWNrQnV0
dG9uRW5kUGFydCA9IHNjcm9sbGJhci5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0
OjpTdGVwcGVyczo6U2Vjb25kYXJ5QmFja3dhcmQpOwotICAgIG1faGFzRm9yd2FyZEJ1dHRvblN0
YXJ0UGFydCA9IHNjcm9sbGJhci5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpT
dGVwcGVyczo6U2Vjb25kYXJ5Rm9yd2FyZCk7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6
Omhhc0J1dHRvbnMoU2Nyb2xsYmFyJiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJh
ci5lbmFibGVkKCkgJiYgKG1faGFzQmFja0J1dHRvblN0YXJ0UGFydCB8fCBtX2hhc0ZvcndhcmRC
dXR0b25FbmRQYXJ0IHx8IG1faGFzQmFja0J1dHRvbkVuZFBhcnQgfHwgbV9oYXNGb3J3YXJkQnV0
dG9uU3RhcnRQYXJ0KTsKLX0KLQotc3RhdGljIEd0a1N0YXRlRmxhZ3Mgc2Nyb2xsYmFyUGFydFN0
YXRlRmxhZ3MoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCBw
YWludGluZyA9IGZhbHNlKQotewotICAgIHVuc2lnbmVkIHN0YXRlRmxhZ3MgPSAwOwotICAgIHN3
aXRjaCAocGFydCkgewotICAgIGNhc2UgQWxsUGFydHM6Ci0gICAgICAgIGlmICghcGFpbnRpbmcg
fHwgc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgIT0gTm9QYXJ0KQotICAgICAgICAgICAgc3RhdGVG
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBCYWNrVHJhY2tQYXJ0OgotICAgIGNhc2UgRm9yd2FyZFRyYWNrUGFydDoKLSAgICAgICAgaWYg
KHNjcm9sbGJhci5ob3ZlcmVkUGFydCgpID09IEJhY2tUcmFja1BhcnQgfHwgc2Nyb2xsYmFyLmhv
dmVyZWRQYXJ0KCkgPT0gRm9yd2FyZFRyYWNrUGFydCkKLSAgICAgICAgICAgIHN0YXRlRmxhZ3Mg
fD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7Ci0gICAgICAgIGlmIChzY3JvbGxiYXIucHJlc3Nl
ZFBhcnQoKSA9PSBCYWNrVHJhY2tQYXJ0IHx8IHNjcm9sbGJhci5wcmVzc2VkUGFydCgpID09IEZv
cndhcmRUcmFja1BhcnQpCi0gICAgICAgICAgICBzdGF0ZUZsYWdzIHw9IEdUS19TVEFURV9GTEFH
X0FDVElWRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCYWNrQnV0dG9uU3RhcnRQYXJ0Ogot
ICAgIGNhc2UgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydDoKLSAgICBjYXNlIEJhY2tCdXR0b25FbmRQ
YXJ0OgotICAgIGNhc2UgRm9yd2FyZEJ1dHRvbkVuZFBhcnQ6Ci0gICAgICAgIGlmICgoKHBhcnQg
PT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0KSAmJiAh
c2Nyb2xsYmFyLmN1cnJlbnRQb3MoKSkKLSAgICAgICAgICAgIHx8ICgocGFydCA9PSBGb3J3YXJk
QnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQpICYmIHNjcm9s
bGJhci5jdXJyZW50UG9zKCkgPT0gc2Nyb2xsYmFyLm1heGltdW0oKSkpIHsKLSAgICAgICAgICAg
IHN0YXRlRmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBpZiAoc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgPT0gcGFydCkKLSAgICAgICAgICAgIHN0
YXRlRmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7Ci0KLSAgICAgICAgaWYgKHNjcm9s
bGJhci5wcmVzc2VkUGFydCgpID09IHBhcnQpCi0gICAgICAgICAgICBzdGF0ZUZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX0FDVElWRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KHN0YXRlRmxhZ3MpOwotfQotCi1zdGF0aWMgUmVu
ZGVyVGhlbWVXaWRnZXQ6OlR5cGUgd2lkZ2V0VHlwZUZvclNjcm9sbGJhcihTY3JvbGxiYXImIHNj
cm9sbGJhciwgR3RrU3RhdGVGbGFncyBzY3JvbGxiYXJTdGF0ZSkKLXsKLSAgICBpZiAoc2Nyb2xs
YmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaWYgKHNj
cm9sbGJhci5zY3JvbGxhYmxlQXJlYSgpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxi
YXJPbkxlZnQoKSkKLSAgICAgICAgICAgIHJldHVybiBzY3JvbGxiYXJTdGF0ZSAmIEdUS19TVEFU
RV9GTEFHX1BSRUxJR0hUID8gUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OlZlcnRpY2FsU2Nyb2xs
YmFyTGVmdCA6IFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNhbFNjcm9sbEluZGljYXRv
ckxlZnQ7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXJTdGF0ZSAmIEdUS19TVEFURV9GTEFHX1BS
RUxJR0hUID8gUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OlZlcnRpY2FsU2Nyb2xsYmFyUmlnaHQg
OiBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6VmVydGljYWxTY3JvbGxJbmRpY2F0b3JSaWdodDsK
LSAgICB9Ci0gICAgcmV0dXJuIHNjcm9sbGJhclN0YXRlICYgR1RLX1NUQVRFX0ZMQUdfUFJFTElH
SFQgPyBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6SG9yaXpvbnRhbFNjcm9sbGJhciA6IFJlbmRl
clRoZW1lV2lkZ2V0OjpUeXBlOjpIb3Jpem9udGFsU2Nyb2xsSW5kaWNhdG9yOwotfQotCi1zdGF0
aWMgSW50UmVjdCBjb250ZW50c1JlY3RhbmdsZShTY3JvbGxiYXImIHNjcm9sbGJhciwgUmVuZGVy
VGhlbWVTY3JvbGxiYXImIHNjcm9sbGJhcldpZGdldCkKLXsKLSAgICBHdGtCb3JkZXIgc2Nyb2xs
YmFyQ29udGVudHNCb3ggPSBzY3JvbGxiYXJXaWRnZXQuc2Nyb2xsYmFyKCkuY29udGVudHNCb3go
KTsKLSAgICBHdGtCb3JkZXIgY29udGVudHNDb250ZW50c0JveCA9IHNjcm9sbGJhcldpZGdldC5j
b250ZW50cygpLmNvbnRlbnRzQm94KCk7Ci0gICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAgcGFk
ZGluZy5sZWZ0ID0gc2Nyb2xsYmFyQ29udGVudHNCb3gubGVmdCArIGNvbnRlbnRzQ29udGVudHNC
b3gubGVmdDsKLSAgICBwYWRkaW5nLnJpZ2h0ID0gc2Nyb2xsYmFyQ29udGVudHNCb3gucmlnaHQg
KyBjb250ZW50c0NvbnRlbnRzQm94LnJpZ2h0OwotICAgIHBhZGRpbmcudG9wID0gc2Nyb2xsYmFy
Q29udGVudHNCb3gudG9wICsgY29udGVudHNDb250ZW50c0JveC50b3A7Ci0gICAgcGFkZGluZy5i
b3R0b20gPSBzY3JvbGxiYXJDb250ZW50c0JveC5ib3R0b20gKyBjb250ZW50c0NvbnRlbnRzQm94
LmJvdHRvbTsKLSAgICBJbnRSZWN0IGNvbnRlbnRzUmVjdCA9IHNjcm9sbGJhci5mcmFtZVJlY3Qo
KTsKLSAgICBjb250ZW50c1JlY3QubW92ZShwYWRkaW5nLmxlZnQsIHBhZGRpbmcudG9wKTsKLSAg
ICBjb250ZW50c1JlY3QuY29udHJhY3QocGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodCwgcGFk
ZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbSk7Ci0gICAgcmV0dXJuIGNvbnRlbnRzUmVjdDsKLX0K
LQotSW50UmVjdCBTY3JvbGxiYXJUaGVtZUd0azo6dHJhY2tSZWN0KFNjcm9sbGJhciYgc2Nyb2xs
YmFyLCBib29sIC8qcGFpbnRpbmcqLykKLXsKLSAgICBhdXRvIHNjcm9sbGJhclN0YXRlID0gc2Ny
b2xsYmFyUGFydFN0YXRlRmxhZ3Moc2Nyb2xsYmFyLCBBbGxQYXJ0cyk7Ci0gICAgYXV0byYgc2Ny
b2xsYmFyV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVTY3JvbGxiYXImPihSZW5kZXJU
aGVtZVdpZGdldDo6Z2V0T3JDcmVhdGUod2lkZ2V0VHlwZUZvclNjcm9sbGJhcihzY3JvbGxiYXIs
IHNjcm9sbGJhclN0YXRlKSkpOwotICAgIHNjcm9sbGJhcldpZGdldC5zY3JvbGxiYXIoKS5zZXRT
dGF0ZShzY3JvbGxiYXJTdGF0ZSk7Ci0KLSAgICBJbnRSZWN0IHJlY3QgPSBjb250ZW50c1JlY3Rh
bmdsZShzY3JvbGxiYXIsIHNjcm9sbGJhcldpZGdldCk7Ci0gICAgaWYgKGF1dG8qIGJhY2t3YXJk
U3RlcHBlciA9IHNjcm9sbGJhcldpZGdldC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2Fk
Z2V0OjpTdGVwcGVyczo6QmFja3dhcmQpKSB7Ci0gICAgICAgIGJhY2t3YXJkU3RlcHBlci0+c2V0
U3RhdGUoc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Moc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQ
YXJ0KSk7Ci0gICAgICAgIEludFNpemUgc3RlcHBlclNpemUgPSBiYWNrd2FyZFN0ZXBwZXItPnBy
ZWZlcnJlZFNpemUoKTsKLSAgICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICByZWN0Lm1vdmUoMCwgc3RlcHBlclNpemUu
aGVpZ2h0KCkpOwotICAgICAgICAgICAgcmVjdC5jb250cmFjdCgwLCBzdGVwcGVyU2l6ZS5oZWln
aHQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZWN0Lm1vdmUoc3RlcHBlclNp
emUud2lkdGgoKSwgMCk7Ci0gICAgICAgICAgICByZWN0LmNvbnRyYWN0KHN0ZXBwZXJTaXplLndp
ZHRoKCksIDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChhdXRvKiBzZWNvbmRhcnlGb3J3
YXJkU3RlcHBlciA9IHNjcm9sbGJhcldpZGdldC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFy
R2FkZ2V0OjpTdGVwcGVyczo6U2Vjb25kYXJ5Rm9yd2FyZCkpIHsKLSAgICAgICAgc2Vjb25kYXJ5
Rm9yd2FyZFN0ZXBwZXItPnNldFN0YXRlKHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJh
ciwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkpOwotICAgICAgICBJbnRTaXplIHN0ZXBwZXJTaXpl
ID0gc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKTsKLSAgICAgICAgaWYg
KHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAg
ICAgICByZWN0Lm1vdmUoMCwgc3RlcHBlclNpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAgcmVj
dC5jb250cmFjdCgwLCBzdGVwcGVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICByZWN0Lm1vdmUoc3RlcHBlclNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgICAg
ICByZWN0LmNvbnRyYWN0KHN0ZXBwZXJTaXplLndpZHRoKCksIDApOwotICAgICAgICB9Ci0gICAg
fQotICAgIGlmIChhdXRvKiBzZWNvbmRhcnlCYWNrd2FyZFN0ZXBwZXIgPSBzY3JvbGxiYXJXaWRn
ZXQuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFy
eUJhY2t3YXJkKSkgewotICAgICAgICBzZWNvbmRhcnlCYWNrd2FyZFN0ZXBwZXItPnNldFN0YXRl
KHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgQmFja0J1dHRvbkVuZFBhcnQpKTsK
LSAgICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFy
KQotICAgICAgICAgICAgcmVjdC5jb250cmFjdCgwLCBzZWNvbmRhcnlCYWNrd2FyZFN0ZXBwZXIt
PnByZWZlcnJlZFNpemUoKS5oZWlnaHQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJl
Y3QuY29udHJhY3Qoc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVyLT5wcmVmZXJyZWRTaXplKCkud2lk
dGgoKSwgMCk7Ci0gICAgfQotICAgIGlmIChhdXRvKiBmb3J3YXJkU3RlcHBlciA9IHNjcm9sbGJh
cldpZGdldC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6Rm9y
d2FyZCkpIHsKLSAgICAgICAgZm9yd2FyZFN0ZXBwZXItPnNldFN0YXRlKHNjcm9sbGJhclBhcnRT
dGF0ZUZsYWdzKHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvbkVuZFBhcnQpKTsKLSAgICAgICAgaWYg
KHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAg
ICAgcmVjdC5jb250cmFjdCgwLCBmb3J3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpLmhlaWdo
dCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVjdC5jb250cmFjdChmb3J3YXJkU3Rl
cHBlci0+cHJlZmVycmVkU2l6ZSgpLndpZHRoKCksIDApOwotICAgIH0KLQotICAgIGlmIChzY3Jv
bGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJu
IHNjcm9sbGJhci5oZWlnaHQoKSA8IHJlY3QuaGVpZ2h0KCkgPyBJbnRSZWN0KCkgOiByZWN0Owot
Ci0gICAgcmV0dXJuIHNjcm9sbGJhci53aWR0aCgpIDwgcmVjdC53aWR0aCgpID8gSW50UmVjdCgp
IDogcmVjdDsKLX0KLQotYm9vbCBTY3JvbGxiYXJUaGVtZUd0azo6aGFzVGh1bWIoU2Nyb2xsYmFy
JiBzY3JvbGxiYXIpCi17Ci0gICAgLy8gVGhpcyBtZXRob2QgaXMganVzdCBjYWxsZWQgYXMgYSBw
YWludC10aW1lIG9wdGltaXphdGlvbiB0byBzZWUgaWYKLSAgICAvLyBwYWludGluZyB0aGUgdGh1
bWIgY2FuIGJlIHNraXBwZWQuIFdlIGRvbid0IGhhdmUgdG8gYmUgZXhhY3QgaGVyZS4KLSAgICBy
ZXR1cm4gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKSA+IDA7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFy
VGhlbWVHdGs6OmJhY2tCdXR0b25SZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQ
YXJ0IHBhcnQsIGJvb2wgLypwYWludGluZyovKQotewotICAgIEFTU0VSVChwYXJ0ID09IEJhY2tC
dXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBCYWNrQnV0dG9uRW5kUGFydCk7Ci0gICAgaWYgKChw
YXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25FbmRQYXJ0KSB8fCAo
cGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQp
KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgYXV0byBzY3JvbGxiYXJTdGF0ZSA9
IHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgQWxsUGFydHMpOwotICAgIGF1dG8m
IHNjcm9sbGJhcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFyJj4oUmVu
ZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKHdpZGdldFR5cGVGb3JTY3JvbGxiYXIoc2Nyb2xs
YmFyLCBzY3JvbGxiYXJTdGF0ZSkpKTsKLSAgICBzY3JvbGxiYXJXaWRnZXQuc2Nyb2xsYmFyKCku
c2V0U3RhdGUoc2Nyb2xsYmFyU3RhdGUpOwotCi0gICAgSW50UmVjdCByZWN0ID0gY29udGVudHNS
ZWN0YW5nbGUoc2Nyb2xsYmFyLCBzY3JvbGxiYXJXaWRnZXQpOwotICAgIGlmIChwYXJ0ID09IEJh
Y2tCdXR0b25TdGFydFBhcnQpIHsKLSAgICAgICAgYXV0byogYmFja3dhcmRTdGVwcGVyID0gc2Ny
b2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJz
OjpCYWNrd2FyZCk7Ci0gICAgICAgIEFTU0VSVChiYWNrd2FyZFN0ZXBwZXIpOwotICAgICAgICBi
YWNrd2FyZFN0ZXBwZXItPnNldFN0YXRlKHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJh
ciwgQmFja0J1dHRvblN0YXJ0UGFydCkpOwotICAgICAgICByZXR1cm4gSW50UmVjdChyZWN0Lmxv
Y2F0aW9uKCksIGJhY2t3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpKTsKLSAgICB9Ci0KLSAg
ICBpZiAoYXV0byogc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXIgPSBzY3JvbGxiYXJXaWRnZXQuc3Rl
cHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFyeUZvcndh
cmQpKSB7Ci0gICAgICAgIHNlY29uZGFyeUZvcndhcmRTdGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxi
YXJQYXJ0U3RhdGVGbGFncyhzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25TdGFydFBhcnQpKTsKLSAg
ICAgICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXItPnBy
ZWZlcnJlZFNpemUoKTsKLSAgICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZl
cnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICByZWN0Lm1vdmUoMCwgcHJlZmVycmVkU2l6
ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICByZWN0LmNvbnRyYWN0KDAsIHByZWZlcnJlZFNpemUu
aGVpZ2h0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVjdC5tb3ZlKHByZWZl
cnJlZFNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgICAgICByZWN0LmNvbnRyYWN0KDAsIHByZWZl
cnJlZFNpemUud2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYXV0byogc2Vj
b25kYXJ5QmFja3dhcmRTdGVwcGVyID0gc2Nyb2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhl
bWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpTZWNvbmRhcnlCYWNrd2FyZCkpIHsKLSAgICAg
ICAgc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVG
bGFncyhzY3JvbGxiYXIsIEJhY2tCdXR0b25FbmRQYXJ0KSk7Ci0gICAgICAgIGlmIChzY3JvbGxi
YXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJlY3Qu
Y29udHJhY3QoMCwgc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVyLT5wcmVmZXJyZWRTaXplKCkuaGVp
Z2h0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWN0LmNvbnRyYWN0KHNlY29uZGFy
eUJhY2t3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpLndpZHRoKCksIDApOwotICAgIH0KLQot
ICAgIGF1dG8qIGZvcndhcmRTdGVwcGVyID0gc2Nyb2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVy
VGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpGb3J3YXJkKTsKLSAgICBBU1NFUlQoZm9y
d2FyZFN0ZXBwZXIpOwotICAgIGZvcndhcmRTdGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0
U3RhdGVGbGFncyhzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25FbmRQYXJ0KSk7Ci0gICAgSW50U2l6
ZSBwcmVmZXJyZWRTaXplID0gZm9yd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKTsKLSAgICBp
ZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAg
IHJlY3QubW92ZSgwLCByZWN0LmhlaWdodCgpIC0gcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgZWxzZQotICAgICAgICByZWN0Lm1vdmUocmVjdC53aWR0aCgpIC0gcHJlZmVycmVkU2l6ZS53
aWR0aCgpLCAwKTsKLQotICAgIHJldHVybiBJbnRSZWN0KHJlY3QubG9jYXRpb24oKSwgcHJlZmVy
cmVkU2l6ZSk7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25S
ZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgLypwYWlu
dGluZyovKQotewotICAgIEFTU0VSVChwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwg
cGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCk7Ci0gICAgaWYgKChwYXJ0ID09IEZvcndhcmRC
dXR0b25TdGFydFBhcnQgJiYgIW1faGFzRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgfHwgKHBhcnQg
PT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgJiYgIW1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQpKQot
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgYXV0byBzY3JvbGxiYXJTdGF0ZSA9IHNj
cm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgQWxsUGFydHMpOwotICAgIGF1dG8mIHNj
cm9sbGJhcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFyJj4oUmVuZGVy
VGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKHdpZGdldFR5cGVGb3JTY3JvbGxiYXIoc2Nyb2xsYmFy
LCBzY3JvbGxiYXJTdGF0ZSkpKTsKLSAgICBzY3JvbGxiYXJXaWRnZXQuc2Nyb2xsYmFyKCkuc2V0
U3RhdGUoc2Nyb2xsYmFyU3RhdGUpOwotCi0gICAgSW50UmVjdCByZWN0ID0gY29udGVudHNSZWN0
YW5nbGUoc2Nyb2xsYmFyLCBzY3JvbGxiYXJXaWRnZXQpOwotICAgIGlmIChhdXRvKiBiYWNrd2Fy
ZFN0ZXBwZXIgPSBzY3JvbGxiYXJXaWRnZXQuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdh
ZGdldDo6U3RlcHBlcnM6OkJhY2t3YXJkKSkgewotICAgICAgICBiYWNrd2FyZFN0ZXBwZXItPnNl
dFN0YXRlKHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgQmFja0J1dHRvblN0YXJ0
UGFydCkpOwotICAgICAgICBJbnRTaXplIHByZWZlcnJlZFNpemUgPSBiYWNrd2FyZFN0ZXBwZXIt
PnByZWZlcnJlZFNpemUoKTsKLSAgICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09
IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICByZWN0Lm1vdmUoMCwgcHJlZmVycmVk
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICByZWN0LmNvbnRyYWN0KDAsIHByZWZlcnJlZFNp
emUuaGVpZ2h0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVjdC5tb3ZlKHBy
ZWZlcnJlZFNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgICAgICByZWN0LmNvbnRyYWN0KHByZWZl
cnJlZFNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYXV0byog
c2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXIgPSBzY3JvbGxiYXJXaWRnZXQuc3RlcHBlcihSZW5kZXJU
aGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFyeUZvcndhcmQpKSB7Ci0gICAg
ICAgIHNlY29uZGFyeUZvcndhcmRTdGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVG
bGFncyhzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25TdGFydFBhcnQpKTsKLSAgICAgICAgSW50U2l6
ZSBwcmVmZXJyZWRTaXplID0gc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUo
KTsKLSAgICAgICAgaWYgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkKLSAgICAgICAg
ICAgIHJldHVybiBJbnRSZWN0KHJlY3QubG9jYXRpb24oKSwgcHJlZmVycmVkU2l6ZSk7Ci0KLSAg
ICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7
Ci0gICAgICAgICAgICByZWN0Lm1vdmUoMCwgcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSk7Ci0gICAg
ICAgICAgICByZWN0LmNvbnRyYWN0KDAsIHByZWZlcnJlZFNpemUuaGVpZ2h0KCkpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcmVjdC5tb3ZlKHByZWZlcnJlZFNpemUud2lkdGgoKSwg
MCk7Ci0gICAgICAgICAgICByZWN0LmNvbnRyYWN0KHByZWZlcnJlZFNpemUud2lkdGgoKSwgMCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvKiBmb3J3YXJkU3RlcHBlciA9IHNjcm9sbGJh
cldpZGdldC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6Rm9y
d2FyZCk7Ci0gICAgQVNTRVJUKGZvcndhcmRTdGVwcGVyKTsKLSAgICBmb3J3YXJkU3RlcHBlci0+
c2V0U3RhdGUoc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Moc2Nyb2xsYmFyLCBGb3J3YXJkQnV0dG9u
RW5kUGFydCkpOwotICAgIEludFNpemUgcHJlZmVycmVkU2l6ZSA9IGZvcndhcmRTdGVwcGVyLT5w
cmVmZXJyZWRTaXplKCk7Ci0gICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRp
Y2FsU2Nyb2xsYmFyKQotICAgICAgICByZWN0Lm1vdmUoMCwgcmVjdC5oZWlnaHQoKSAtIHByZWZl
cnJlZFNpemUuaGVpZ2h0KCkpOwotICAgIGVsc2UKLSAgICAgICAgcmVjdC5tb3ZlKHJlY3Qud2lk
dGgoKSAtIHByZWZlcnJlZFNpemUud2lkdGgoKSwgMCk7Ci0KLSAgICByZXR1cm4gSW50UmVjdChy
ZWN0LmxvY2F0aW9uKCksIHByZWZlcnJlZFNpemUpOwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1l
R3RrOjpwYWludChTY3JvbGxiYXImIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpCi17Ci0gICAgaWYgKGdyYXBoaWNz
Q29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghc2Nyb2xsYmFyLmVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBk
b3VibGUgb3BhY2l0eSA9IHNjcm9sbGJhci5ob3ZlcmVkUGFydCgpID09IE5vUGFydCA/IHNjcm9s
bGJhci5vcGFjaXR5KCkgOiAxOwotICAgIGlmICghb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBJbnRSZWN0IHJlY3QgPSBzY3JvbGxiYXIuZnJhbWVSZWN0KCk7Ci0gICAgaWYg
KCFyZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgYXV0byBzY3JvbGxiYXJTdGF0ZSA9IHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJh
ciwgQWxsUGFydHMsIHRydWUpOwotICAgIGF1dG8mIHNjcm9sbGJhcldpZGdldCA9IHN0YXRpY19j
YXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFyJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRl
KHdpZGdldFR5cGVGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyLCBzY3JvbGxiYXJTdGF0ZSkpKTsKLSAg
ICBhdXRvJiBzY3JvbGxiYXJHYWRnZXQgPSBzY3JvbGxiYXJXaWRnZXQuc2Nyb2xsYmFyKCk7Ci0g
ICAgc2Nyb2xsYmFyR2FkZ2V0LnNldFN0YXRlKHNjcm9sbGJhclN0YXRlKTsKLSAgICBpZiAobV91
c2VzT3ZlcmxheVNjcm9sbGJhcnMpCi0gICAgICAgIG9wYWNpdHkgKj0gc2Nyb2xsYmFyR2FkZ2V0
Lm9wYWNpdHkoKTsKLSAgICBpZiAoIW9wYWNpdHkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgYXV0byYgdHJvdWdoID0gc2Nyb2xsYmFyV2lkZ2V0LnRyb3VnaCgpOwotICAgIHRyb3VnaC5z
ZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVGbGFncyhzY3JvbGxiYXIsIEJhY2tUcmFja1BhcnQp
KTsKLQotICAgIGF1dG8qIGJhY2t3YXJkU3RlcHBlciA9IHNjcm9sbGJhcldpZGdldC5zdGVwcGVy
KFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6QmFja3dhcmQpOwotICAgIGlm
IChiYWNrd2FyZFN0ZXBwZXIpCi0gICAgICAgIGJhY2t3YXJkU3RlcHBlci0+c2V0U3RhdGUoc2Ny
b2xsYmFyUGFydFN0YXRlRmxhZ3Moc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0KSk7Ci0g
ICAgYXV0byogc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXIgPSBzY3JvbGxiYXJXaWRnZXQuc3RlcHBl
cihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFyeUZvcndhcmQp
OwotICAgIGlmIChzZWNvbmRhcnlGb3J3YXJkU3RlcHBlcikKLSAgICAgICAgc2Vjb25kYXJ5Rm9y
d2FyZFN0ZXBwZXItPnNldFN0YXRlKHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwg
Rm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkpOwotICAgIGF1dG8qIHNlY29uZGFyeUJhY2t3YXJkU3Rl
cHBlciA9IHNjcm9sbGJhcldpZGdldC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0
OjpTdGVwcGVyczo6U2Vjb25kYXJ5QmFja3dhcmQpOwotICAgIGlmIChzZWNvbmRhcnlCYWNrd2Fy
ZFN0ZXBwZXIpCi0gICAgICAgIHNlY29uZGFyeUJhY2t3YXJkU3RlcHBlci0+c2V0U3RhdGUoc2Ny
b2xsYmFyUGFydFN0YXRlRmxhZ3Moc2Nyb2xsYmFyLCBCYWNrQnV0dG9uRW5kUGFydCkpOwotICAg
IGF1dG8qIGZvcndhcmRTdGVwcGVyID0gc2Nyb2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhl
bWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpGb3J3YXJkKTsKLSAgICBpZiAoZm9yd2FyZFN0
ZXBwZXIpCi0gICAgICAgIGZvcndhcmRTdGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3Rh
dGVGbGFncyhzY3JvbGxiYXIsIEZvcndhcmRCdXR0b25FbmRQYXJ0KSk7Ci0KLSAgICBJbnRTaXpl
IHByZWZlcnJlZFNpemUgPSBzY3JvbGxiYXJXaWRnZXQuY29udGVudHMoKS5wcmVmZXJyZWRTaXpl
KCk7Ci0gICAgaW50IHRodW1iU2l6ZSA9IHRodW1iTGVuZ3RoKHNjcm9sbGJhcik7Ci0gICAgaWYg
KHRodW1iU2l6ZSkgewotICAgICAgICBzY3JvbGxiYXJXaWRnZXQuc2xpZGVyKCkuc2V0U3RhdGUo
c2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Moc2Nyb2xsYmFyLCBUaHVtYlBhcnQpKTsKLSAgICAgICAg
cHJlZmVycmVkU2l6ZSA9IHByZWZlcnJlZFNpemUuZXhwYW5kZWRUbyhzY3JvbGxiYXJXaWRnZXQu
c2xpZGVyKCkucHJlZmVycmVkU2l6ZSgpKTsKLSAgICB9Ci0gICAgcHJlZmVycmVkU2l6ZSArPSBz
Y3JvbGxiYXJHYWRnZXQucHJlZmVycmVkU2l6ZSgpIC0gc2Nyb2xsYmFyR2FkZ2V0Lm1pbmltdW1T
aXplKCk7Ci0KLSAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0KHJlY3QpOwotICAgIC8vIFdoZW4g
dXNpbmcgb3ZlcmxheSBzY3JvbGxiYXJzIHdlIGFsd2F5cyBjbGFpbSB0aGUgc2l6ZSBvZiB0aGUg
c2Nyb2xsYmFyIHdoZW4gaG92ZXJlZCwgc28gd2hlbgotICAgIC8vIGRyYXdpbmcgdGhlIGluZGlj
YXRvciB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgcmVjdGFuZ2xlIHRvIGl0cyBhY3R1YWwgc2l6ZSBp
biBpbmRpY2F0b3IgbW9kZS4KLSAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaWYgKHJlY3Qud2lkdGgoKSAhPSBwcmVmZXJyZWRT
aXplLndpZHRoKCkpIHsKLSAgICAgICAgICAgIGlmICghc2Nyb2xsYmFyLnNjcm9sbGFibGVBcmVh
KCkuc2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAg
ICAgICAgIGNvbnRlbnRzUmVjdC5tb3ZlKHN0ZDo6YWJzKHJlY3Qud2lkdGgoKSAtIHByZWZlcnJl
ZFNpemUud2lkdGgoKSksIDApOwotICAgICAgICAgICAgY29udGVudHNSZWN0LnNldFdpZHRoKHBy
ZWZlcnJlZFNpemUud2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAocmVjdC5oZWlnaHQoKSAhPSBwcmVmZXJyZWRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgICAg
ICBjb250ZW50c1JlY3QubW92ZSgwLCBzdGQ6OmFicyhyZWN0LmhlaWdodCgpIC0gcHJlZmVycmVk
U2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgY29udGVudHNSZWN0LnNldEhlaWdodChwcmVm
ZXJyZWRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChvcGFjaXR5
ICE9IDEpIHsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKLSAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LmNsaXAoZGFtYWdlUmVjdCk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5iZWdp
blRyYW5zcGFyZW5jeUxheWVyKG9wYWNpdHkpOwotICAgIH0KLQotICAgIHNjcm9sbGJhckdhZGdl
dC5yZW5kZXIoZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBjb250ZW50
c1JlY3QsICZjb250ZW50c1JlY3QpOwotICAgIHNjcm9sbGJhcldpZGdldC5jb250ZW50cygpLnJl
bmRlcihncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGNvbnRlbnRzUmVj
dCwgJmNvbnRlbnRzUmVjdCk7Ci0KLSAgICBpZiAoYmFja3dhcmRTdGVwcGVyKSB7Ci0gICAgICAg
IEZsb2F0UmVjdCBidXR0b25SZWN0ID0gY29udGVudHNSZWN0OwotICAgICAgICBpZiAoc2Nyb2xs
YmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBidXR0
b25SZWN0LnNldEhlaWdodChiYWNrd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKS5oZWlnaHQo
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJ1dHRvblJlY3Quc2V0V2lkdGgoYmFja3dh
cmRTdGVwcGVyLT5wcmVmZXJyZWRTaXplKCkud2lkdGgoKSk7Ci0gICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0Jj4oc2Nyb2xsYmFyR2FkZ2V0KS5yZW5kZXJTdGVw
cGVyKGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdCwg
YmFja3dhcmRTdGVwcGVyLAotICAgICAgICAgICAgc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWxTY3JvbGxiYXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtfT1JJRU5U
QVRJT05fSE9SSVpPTlRBTCwgUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpC
YWNrd2FyZCk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bFNjcm9sbGJhcikgewotICAgICAgICAgICAgY29udGVudHNSZWN0Lm1vdmUoMCwgYnV0dG9uUmVj
dC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250ZW50c1JlY3QuY29udHJhY3QoMCwgYnV0dG9u
UmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZW50c1Jl
Y3QubW92ZShidXR0b25SZWN0LndpZHRoKCksIDApOwotICAgICAgICAgICAgY29udGVudHNSZWN0
LmNvbnRyYWN0KGJ1dHRvblJlY3Qud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
aWYgKHNlY29uZGFyeUZvcndhcmRTdGVwcGVyKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBidXR0b25S
ZWN0ID0gY29udGVudHNSZWN0OwotICAgICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBidXR0b25SZWN0LnNldEhlaWdodChz
ZWNvbmRhcnlGb3J3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgYnV0dG9uUmVjdC5zZXRXaWR0aChzZWNvbmRhcnlGb3J3YXJk
U3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpLndpZHRoKCkpOwotICAgICAgICBzdGF0aWNfY2FzdDxS
ZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldCY+KHNjcm9sbGJhckdhZGdldCkucmVuZGVyU3RlcHBl
cihncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QsIHNl
Y29uZGFyeUZvcndhcmRTdGVwcGVyLAotICAgICAgICAgICAgc2Nyb2xsYmFyLm9yaWVudGF0aW9u
KCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtf
T1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBw
ZXJzOjpTZWNvbmRhcnlGb3J3YXJkKTsKLSAgICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICBjb250ZW50c1JlY3QubW92
ZSgwLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5jb250
cmFjdCgwLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGNvbnRlbnRzUmVjdC5tb3ZlKGJ1dHRvblJlY3Qud2lkdGgoKSwgMCk7Ci0gICAgICAgICAg
ICBjb250ZW50c1JlY3QuY29udHJhY3QoYnV0dG9uUmVjdC53aWR0aCgpLCAwKTsKLSAgICAgICAg
fQotICAgIH0KLSAgICBpZiAoc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVyKSB7Ci0gICAgICAgIEZs
b2F0UmVjdCBidXR0b25SZWN0ID0gY29udGVudHNSZWN0OwotICAgICAgICBpZiAoc2Nyb2xsYmFy
Lm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgICAgIGJ1dHRv
blJlY3Quc2V0SGVpZ2h0KHNlY29uZGFyeUJhY2t3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgp
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIGJ1dHRvblJlY3QubW92ZSgwLCBjb250ZW50c1JlY3Qu
aGVpZ2h0KCkgLSBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGJ1dHRvblJlY3Quc2V0V2lkdGgoc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVyLT5wcmVm
ZXJyZWRTaXplKCkud2lkdGgoKSk7Ci0gICAgICAgICAgICBidXR0b25SZWN0Lm1vdmUoY29udGVu
dHNSZWN0LndpZHRoKCkgLSBidXR0b25SZWN0LndpZHRoKCksIDApOwotICAgICAgICB9Ci0gICAg
ICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0Jj4oc2Nyb2xsYmFyR2Fk
Z2V0KS5yZW5kZXJTdGVwcGVyKGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwgYnV0dG9uUmVjdCwgc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVyLAotICAgICAgICAgICAgc2Ny
b2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyBHVEtfT1JJRU5UQVRJ
T05fVkVSVElDQUwgOiBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgUmVuZGVyVGhlbWVTY3Jv
bGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpTZWNvbmRhcnlCYWNrd2FyZCk7Ci0gICAgICAgIGlmIChz
Y3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAg
IGNvbnRlbnRzUmVjdC5jb250cmFjdCgwLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgY29udGVudHNSZWN0LmNvbnRyYWN0KGJ1dHRvblJlY3Qud2lkdGgo
KSwgMCk7Ci0gICAgfQotICAgIGlmIChmb3J3YXJkU3RlcHBlcikgewotICAgICAgICBGbG9hdFJl
Y3QgYnV0dG9uUmVjdCA9IGNvbnRlbnRzUmVjdDsKLSAgICAgICAgaWYgKHNjcm9sbGJhci5vcmll
bnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICBidXR0b25SZWN0
LnNldEhlaWdodChmb3J3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpKTsKLSAg
ICAgICAgICAgIGJ1dHRvblJlY3QubW92ZSgwLCBjb250ZW50c1JlY3QuaGVpZ2h0KCkgLSBidXR0
b25SZWN0LmhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1dHRvblJl
Y3Quc2V0V2lkdGgoZm9yd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKS53aWR0aCgpKTsKLSAg
ICAgICAgICAgIGJ1dHRvblJlY3QubW92ZShjb250ZW50c1JlY3Qud2lkdGgoKSAtIGJ1dHRvblJl
Y3Qud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhl
bWVTY3JvbGxiYXJHYWRnZXQmPihzY3JvbGxiYXJHYWRnZXQpLnJlbmRlclN0ZXBwZXIoZ3JhcGhp
Y3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LCBmb3J3YXJkU3Rl
cHBlciwKLSAgICAgICAgICAgIHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Ny
b2xsYmFyID8gR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMIDogR1RLX09SSUVOVEFUSU9OX0hPUkla
T05UQUwsIFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6Rm9yd2FyZCk7Ci0g
ICAgICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikK
LSAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5jb250cmFjdCgwLCBidXR0b25SZWN0LmhlaWdodCgp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGVudHNSZWN0LmNvbnRyYWN0KGJ1dHRv
blJlY3Qud2lkdGgoKSwgMCk7Ci0gICAgfQotCi0gICAgdHJvdWdoLnJlbmRlcihncmFwaGljc0Nv
bnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGNvbnRlbnRzUmVjdCwgJmNvbnRlbnRzUmVj
dCk7Ci0KLSAgICBpZiAodGh1bWJTaXplKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXIub3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICAgICAgY29udGVudHNSZWN0
Lm1vdmUoMCwgdGh1bWJQb3NpdGlvbihzY3JvbGxiYXIpKTsKLSAgICAgICAgICAgIGNvbnRlbnRz
UmVjdC5zZXRXaWR0aChzY3JvbGxiYXJXaWRnZXQuc2xpZGVyKCkucHJlZmVycmVkU2l6ZSgpLndp
ZHRoKCkpOwotICAgICAgICAgICAgY29udGVudHNSZWN0LnNldEhlaWdodCh0aHVtYlNpemUpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY29udGVudHNSZWN0Lm1vdmUodGh1bWJQb3Np
dGlvbihzY3JvbGxiYXIpLCAwKTsKLSAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5zZXRXaWR0aCh0
aHVtYlNpemUpOwotICAgICAgICAgICAgY29udGVudHNSZWN0LnNldEhlaWdodChzY3JvbGxiYXJX
aWRnZXQuc2xpZGVyKCkucHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpKTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoY29udGVudHNSZWN0LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgICAg
ICBzY3JvbGxiYXJXaWRnZXQuc2xpZGVyKCkucmVuZGVyKGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKSwgY29udGVudHNSZWN0KTsKLSAgICB9Ci0KLSAgICBpZiAob3BhY2l0
eSAhPSAxKSB7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigp
OwotICAgICAgICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgpOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1TY3JvbGxiYXJCdXR0b25QcmVzc0FjdGlvbiBTY3JvbGxiYXJUaGVtZUd0
azo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KFNjcm9sbGJhciYsIGNvbnN0IFBsYXRmb3JtTW91c2VF
dmVudCYgZXZlbnQsIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQpCi17Ci0gICAgZ2Jvb2xlYW4g
d2FycFNsaWRlciA9IEZBTFNFOwotICAgIHN3aXRjaCAocHJlc3NlZFBhcnQpIHsKLSAgICBjYXNl
IEJhY2tUcmFja1BhcnQ6Ci0gICAgY2FzZSBGb3J3YXJkVHJhY2tQYXJ0OgotICAgICAgICBnX29i
amVjdF9nZXQoZ3RrX3NldHRpbmdzX2dldF9kZWZhdWx0KCksCi0gICAgICAgICAgICAiZ3RrLXBy
aW1hcnktYnV0dG9uLXdhcnBzLXNsaWRlciIsCi0gICAgICAgICAgICAmd2FycFNsaWRlciwgbnVs
bHB0cik7Ci0gICAgICAgIC8vIFRoZSBzaGlmdCBrZXkgb3IgbWlkZGxlL3JpZ2h0IGJ1dHRvbiBy
ZXZlcnNlcyB0aGUgc2Vuc2UuCi0gICAgICAgIGlmIChldmVudC5zaGlmdEtleSgpIHx8IGV2ZW50
LmJ1dHRvbigpICE9IExlZnRCdXR0b24pCi0gICAgICAgICAgICB3YXJwU2xpZGVyID0gIXdhcnBT
bGlkZXI7Ci0gICAgICAgIHJldHVybiB3YXJwU2xpZGVyID8KLSAgICAgICAgICAgIFNjcm9sbGJh
ckJ1dHRvblByZXNzQWN0aW9uOjpDZW50ZXJPblRodW1iOgotICAgICAgICAgICAgU2Nyb2xsYmFy
QnV0dG9uUHJlc3NBY3Rpb246OlNjcm9sbDsKLSAgICBjYXNlIFRodW1iUGFydDoKLSAgICAgICAg
aWYgKGV2ZW50LmJ1dHRvbigpICE9IFJpZ2h0QnV0dG9uKQotICAgICAgICAgICAgcmV0dXJuIFNj
cm9sbGJhckJ1dHRvblByZXNzQWN0aW9uOjpTdGFydERyYWc7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQmFja0J1dHRvblN0YXJ0UGFydDoKLSAgICBjYXNlIEZvcndhcmRCdXR0b25TdGFydFBh
cnQ6Ci0gICAgY2FzZSBCYWNrQnV0dG9uRW5kUGFydDoKLSAgICBjYXNlIEZvcndhcmRCdXR0b25F
bmRQYXJ0OgotICAgICAgICByZXR1cm4gU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb246OlNjcm9s
bDsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gU2Ny
b2xsYmFyQnV0dG9uUHJlc3NBY3Rpb246Ok5vbmU7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZUd0
azo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplLCBTY3JvbGxiYXJFeHBh
bnNpb25TdGF0ZSkKLXsKLSAgICBhdXRvJiBzY3JvbGxiYXJXaWRnZXQgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJUaGVtZVNjcm9sbGJhciY+KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5k
ZXJUaGVtZVdpZGdldDo6VHlwZTo6VmVydGljYWxTY3JvbGxiYXJSaWdodCkpOwotICAgIHNjcm9s
bGJhcldpZGdldC5zY3JvbGxiYXIoKS5zZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19QUkVMSUdIVCk7
Ci0gICAgSW50U2l6ZSBjb250ZW50c1ByZWZlcnJlZFNpemUgPSBzY3JvbGxiYXJXaWRnZXQuY29u
dGVudHMoKS5wcmVmZXJyZWRTaXplKCk7Ci0gICAgY29udGVudHNQcmVmZXJyZWRTaXplID0gY29u
dGVudHNQcmVmZXJyZWRTaXplLmV4cGFuZGVkVG8oc2Nyb2xsYmFyV2lkZ2V0LnNsaWRlcigpLnBy
ZWZlcnJlZFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gY29udGVudHNQcmVm
ZXJyZWRTaXplICsgc2Nyb2xsYmFyV2lkZ2V0LnNjcm9sbGJhcigpLnByZWZlcnJlZFNpemUoKSAt
IHNjcm9sbGJhcldpZGdldC5zY3JvbGxiYXIoKS5taW5pbXVtU2l6ZSgpOwotICAgIHJldHVybiBw
cmVmZXJyZWRTaXplLndpZHRoKCk7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11
bVRodW1iTGVuZ3RoKFNjcm9sbGJhciYgc2Nyb2xsYmFyKQotewotICAgIGF1dG8mIHNjcm9sbGJh
cldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFyJj4oUmVuZGVyVGhlbWVX
aWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNhbFNjcm9s
bGJhclJpZ2h0KSk7Ci0gICAgc2Nyb2xsYmFyV2lkZ2V0LnNjcm9sbGJhcigpLnNldFN0YXRlKEdU
S19TVEFURV9GTEFHX1BSRUxJR0hUKTsKLSAgICBJbnRTaXplIG1pblNpemUgPSBzY3JvbGxiYXJX
aWRnZXQuc2xpZGVyKCkubWluaW11bVNpemUoKTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyLm9yaWVu
dGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyBtaW5TaXplLmhlaWdodCgpIDogbWluU2l6
ZS53aWR0aCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzMWFiNjNmZTY1My4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Njcm9sbGJhclRoZW1lR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBTY3JvbGxiYXI7Ci0KLWNsYXNzIFNjcm9sbGJhclRo
ZW1lR3RrIGZpbmFsIDogcHVibGljIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIHsKLXB1YmxpYzoK
LSAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZUd0aygpOwotCi0gICAgYm9vbCBoYXNCdXR0b25z
KFNjcm9sbGJhciYpIG92ZXJyaWRlOwotICAgIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyJikgb3Zl
cnJpZGU7Ci0gICAgSW50UmVjdCBiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXImLCBTY3JvbGxiYXJQ
YXJ0LCBib29sKSBvdmVycmlkZTsKLSAgICBJbnRSZWN0IGZvcndhcmRCdXR0b25SZWN0KFNjcm9s
bGJhciYsIFNjcm9sbGJhclBhcnQsIGJvb2wpIG92ZXJyaWRlOwotICAgIEludFJlY3QgdHJhY2tS
ZWN0KFNjcm9sbGJhciYsIGJvb2wpIG92ZXJyaWRlOwotCi0gICAgU2Nyb2xsYmFyVGhlbWVHdGso
KTsKLQotICAgIGJvb2wgcGFpbnQoU2Nyb2xsYmFyJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UmVjdCYgZGFtYWdlUmVjdCkgb3ZlcnJpZGU7Ci0gICAgU2Nyb2xsYmFyQnV0dG9uUHJlc3NB
Y3Rpb24gaGFuZGxlTW91c2VQcmVzc0V2ZW50KFNjcm9sbGJhciYsIGNvbnN0IFBsYXRmb3JtTW91
c2VFdmVudCYsIFNjcm9sbGJhclBhcnQpIG92ZXJyaWRlOwotICAgIGludCBzY3JvbGxiYXJUaGlj
a25lc3MoU2Nyb2xsYmFyQ29udHJvbFNpemUsIFNjcm9sbGJhckV4cGFuc2lvblN0YXRlID0gU2Ny
b2xsYmFyRXhwYW5zaW9uU3RhdGU6OkV4cGFuZGVkKSBvdmVycmlkZTsKLSAgICBpbnQgbWluaW11
bVRodW1iTGVuZ3RoKFNjcm9sbGJhciYpIG92ZXJyaWRlOwotCi0gICAgLy8gVE9ETzogVGhlc2Ug
YXJlIHRoZSBkZWZhdWx0IEdUSysgdmFsdWVzLiBBdCBzb21lIHBvaW50IHdlIHNob3VsZCBwdWxs
IHRoZXNlIGZyb20gdGhlIHRoZW1lIGl0c2VsZi4KLSAgICBTZWNvbmRzIGluaXRpYWxBdXRvc2Ny
b2xsVGltZXJEZWxheSgpIG92ZXJyaWRlIHsgcmV0dXJuIDIwMF9tczsgfQotICAgIFNlY29uZHMg
YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBvdmVycmlkZSB7IHJldHVybiAyMF9tczsgfQotICAgIHZv
aWQgdGhlbWVDaGFuZ2VkKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCB1c2VzT3ZlcmxheVNjcm9sbGJh
cnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3VzZXNPdmVybGF5U2Nyb2xsYmFyczsgfQot
ICAgIC8vIFdoZW4gdXNpbmcgb3ZlcmxheSBzY3JvbGxiYXJzLCBhbHdheXMgaW52YWxpZGF0ZSB0
aGUgd2hvbGUgc2Nyb2xsYmFyIHdoZW4gZW50ZXJpbmcvbGVhdmluZy4KLSAgICBib29sIGludmFs
aWRhdGVPbk1vdXNlRW50ZXJFeGl0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbV91c2VzT3ZlcmxheVNj
cm9sbGJhcnM7IH0KLQotcHJpdmF0ZToKLSAgICB2b2lkIHVwZGF0ZVRoZW1lUHJvcGVydGllcygp
OwotCi0gICAgYm9vbCBtX2hhc0ZvcndhcmRCdXR0b25TdGFydFBhcnQgOiAxOwotICAgIGJvb2wg
bV9oYXNGb3J3YXJkQnV0dG9uRW5kUGFydCA6IDE7Ci0gICAgYm9vbCBtX2hhc0JhY2tCdXR0b25T
dGFydFBhcnQgOiAxOwotICAgIGJvb2wgbV9oYXNCYWNrQnV0dG9uRW5kUGFydCA6IDE7Ci0gICAg
Ym9vbCBtX3VzZXNPdmVybGF5U2Nyb2xsYmFycyB7IGZhbHNlIH07Ci19OwotCi19Ci0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9UaGVtZUd0ay5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGhlbWVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5mMGVkYTYwYjRiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9UaGVtZUd0ay5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlRoZW1lR3RrLmgiCisKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgi
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgor
I2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitUaGVtZSYgVGhlbWU6OnNpbmdsZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFRoZW1lR3RrPiB0aGVtZTsKKyAgICByZXR1cm4gdGhlbWU7Cit9CisKK3ZvaWQgVGhlbWVHdGs6
OmVuc3VyZVBsYXRmb3JtQ29sb3JzKCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVm
UHRyPEd0a1dpZGdldFBhdGg+IGVudHJ5UGF0aCA9IGFkb3B0R1JlZihndGtfd2lkZ2V0X3BhdGhf
bmV3KCkpOworICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShlbnRyeVBhdGguZ2V0KCks
IEdfVFlQRV9OT05FKTsKKyAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUo
ZW50cnlQYXRoLmdldCgpLCAtMSwgImVudHJ5Iik7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRl
eHQ+IGVudHJ5Q29udGV4dCA9IGFkb3B0R1JlZihndGtfc3R5bGVfY29udGV4dF9uZXcoKSk7Cisg
ICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhdGgoZW50cnlDb250ZXh0LmdldCgpLCBlbnRyeVBh
dGguZ2V0KCkpOworCisgICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBzZWxlY3Rpb25QYXRoID0g
YWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9jb3B5KGd0a19zdHlsZV9jb250ZXh0X2dldF9wYXRo
KGVudHJ5Q29udGV4dC5nZXQoKSkpKTsKKyAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUo
c2VsZWN0aW9uUGF0aC5nZXQoKSwgR19UWVBFX05PTkUpOworICAgIGd0a193aWRnZXRfcGF0aF9p
dGVyX3NldF9vYmplY3RfbmFtZShzZWxlY3Rpb25QYXRoLmdldCgpLCAtMSwgInNlbGVjdGlvbiIp
OworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBzZWxlY3Rpb25Db250ZXh0ID0gYWRvcHRH
UmVmKGd0a19zdHlsZV9jb250ZXh0X25ldygpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRf
cGF0aChzZWxlY3Rpb25Db250ZXh0LmdldCgpLCBzZWxlY3Rpb25QYXRoLmdldCgpKTsKKyAgICBn
dGtfc3R5bGVfY29udGV4dF9zZXRfcGFyZW50KHNlbGVjdGlvbkNvbnRleHQuZ2V0KCksIGVudHJ5
Q29udGV4dC5nZXQoKSk7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoc2VsZWN0
aW9uQ29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oR1RLX1NUQVRFX0ZM
QUdfU0VMRUNURUQgfCBHVEtfU1RBVEVfRkxBR19GT0NVU0VEKSk7CisKKyAgICBHZGtSR0JBIGNv
bG9yOworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKHNlbGVjdGlv
bkNvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShzZWxlY3Rpb25Db250
ZXh0LmdldCgpKSwgJmNvbG9yKTsKKyAgICBtX2FjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
ciA9IGNvbG9yOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKHNlbGVjdGlvbkNv
bnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShzZWxlY3Rpb25Db250ZXh0
LmdldCgpKSwgJmNvbG9yKTsKKyAgICBtX2F0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yID0g
Y29sb3I7CisKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoc2VsZWN0aW9uQ29udGV4
dC5nZXQoKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfZ2V0X2JhY2tncm91bmRfY29sb3Ioc2VsZWN0aW9uQ29udGV4dC5nZXQoKSwgZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X3N0YXRlKHNlbGVjdGlvbkNvbnRleHQuZ2V0KCkpLCAmY29sb3IpOworICAg
IG1faW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKworICAgIGd0a19z
dHlsZV9jb250ZXh0X2dldF9jb2xvcihzZWxlY3Rpb25Db250ZXh0LmdldCgpLCBndGtfc3R5bGVf
Y29udGV4dF9nZXRfc3RhdGUoc2VsZWN0aW9uQ29udGV4dC5nZXQoKSksICZjb2xvcik7CisgICAg
bV9pbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvciA9IGNvbG9yOworfQorCit2b2lkIFRo
ZW1lR3RrOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpCit7CisgICAgbV9hY3RpdmVTZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IgPSB7IH07Cit9CisKK0NvbG9yIFRoZW1lR3RrOjphY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIGVuc3VyZVBsYXRmb3JtQ29sb3Jz
KCk7CisgICAgcmV0dXJuIG1fYXRpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7Cit9CisKK0Nv
bG9yIFRoZW1lR3RrOjphY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAorewor
ICAgIGVuc3VyZVBsYXRmb3JtQ29sb3JzKCk7CisgICAgcmV0dXJuIG1fYWN0aXZlU2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yOworfQorCitDb2xvciBUaGVtZUd0azo6aW5hY3RpdmVTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIGVuc3VyZVBsYXRmb3JtQ29sb3JzKCk7Cisg
ICAgcmV0dXJuIG1faW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7Cit9CisKK0NvbG9y
IFRoZW1lR3RrOjppbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7Cisg
ICAgZW5zdXJlUGxhdGZvcm1Db2xvcnMoKTsKKyAgICByZXR1cm4gbV9pbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1RoZW1lR3RrLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvVGhlbWVHdGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNWNmMjllNGNmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvVGhlbWVHdGsuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJUaGVtZUFkd2FpdGEuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBUaGVtZUd0ayBmaW5hbCA6IHB1YmxpYyBUaGVtZUFkd2FpdGEgeworcHJp
dmF0ZToKKyAgICBDb2xvciBhY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBDb2xvciBhY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dCBvdmVycmlkZTsKKyAgICBDb2xvciBpbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigp
IGNvbnN0IG92ZXJyaWRlOworICAgIENvbG9yIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgp
IG92ZXJyaWRlOworCisgICAgdm9pZCBlbnN1cmVQbGF0Zm9ybUNvbG9ycygpIGNvbnN0OworCisg
ICAgbXV0YWJsZSBDb2xvciBtX2FjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKKyAgICBt
dXRhYmxlIENvbG9yIG1fYXRpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7CisgICAgbXV0YWJs
ZSBDb2xvciBtX2luYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOworICAgIG11dGFibGUg
Q29sb3IgbV9pbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9S
ZW5kZXJUaGVtZVdQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVB
ZHdhaXRhLmNwcApzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93cGUvUmVuZGVyVGhlbWVXUEUuY3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNwcAppbmRleCBlODQ5MzA2YzdhZS4uYzA4
YTQzN2JlYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5kZXJU
aGVtZVdQRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3
YWl0YS5jcHAKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiUmVuZGVyVGhlbWVXUEUuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUFkd2FpdGEu
aCIKIAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgpA
QCAtMzIsMTMgKzMyLDEyIEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUg
IlRoZW1lV1BFLmgiCisjaW5jbHVkZSAiVGhlbWVBZHdhaXRhLmgiCiAjaW5jbHVkZSAiVGltZVJh
bmdlcy5oIgogI2luY2x1ZGUgIlVzZXJBZ2VudFNjcmlwdHMuaCIKICNpbmNsdWRlICJVc2VyQWdl
bnRTdHlsZVNoZWV0cy5oIgpAQCAtNTQsNyArNTMsNyBAQCBzdGF0aWMgY29uc3QgQ29sb3IgdGV4
dEZpZWxkQmFja2dyb3VuZERpc2FibGVkQ29sb3IgPSBtYWtlUkdCKDI1MiwgMjUyLCAyNTIpOwog
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG1lbnVMaXN0QnV0dG9uQXJyb3dTaXplID0gMTY7CiBzdGF0
aWMgY29uc3QgaW50IG1lbnVMaXN0QnV0dG9uRm9jdXNPZmZzZXQgPSAtMzsKIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBtZW51TGlzdEJ1dHRvblBhZGRpbmcgPSA1Owotc3RhdGljIGNvbnN0IGludCBt
ZW51TGlzdEJ1dHRvbkJvcmRlclNpemUgPSAxOyAvLyBLZWVwIGluIHN5bmMgd2l0aCBidXR0b25C
b3JkZXJTaXplIGluIFRoZW1lV1BFLgorc3RhdGljIGNvbnN0IGludCBtZW51TGlzdEJ1dHRvbkJv
cmRlclNpemUgPSAxOyAvLyBLZWVwIGluIHN5bmMgd2l0aCBidXR0b25Cb3JkZXJTaXplIGluIFRo
ZW1lQWR3YWl0YS4KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tz
ID0gNTsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lQ291bnQg
PSA3NTsKIHN0YXRpYyBjb25zdCBTZWNvbmRzIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlID0g
MzNfbXM7IC8vIDMwZnBzLgpAQCAtNzgsMTMgKzc3LDE1IEBAIHN0YXRpYyBjb25zdCBDb2xvciBt
ZWRpYVNsaWRlclRyYWNrQnVmZmVyZWRDb2xvciA9IG1ha2VSR0IoMTczLCAxNzMsIDE3Myk7CiBz
dGF0aWMgY29uc3QgQ29sb3IgbWVkaWFTbGlkZXJUcmFja0FjdGl2ZUNvbG9yID0gbWFrZVJHQigy
NTIsIDI1MiwgMjUyKTsKICNlbmRpZgogCisjaWYgIVBMQVRGT1JNKEdUSykKIFJlbmRlclRoZW1l
JiBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
UmVuZGVyVGhlbWVXUEU+IHRoZW1lOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZW5kZXJU
aGVtZUFkd2FpdGE+IHRoZW1lOwogICAgIHJldHVybiB0aGVtZTsKIH0KKyNlbmRpZgogCi1ib29s
IFJlbmRlclRoZW1lV1BFOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lQWR3YWl0YTo6c3VwcG9ydHNGb2N1c1JpbmcoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAogewogICAgIHN3aXRjaCAoc3R5bGUuYXBwZWFy
YW5jZSgpKSB7CiAgICAgY2FzZSBQdXNoQnV0dG9uUGFydDoKQEAgLTEwNSw2OCArMTA2LDc0IEBA
IGJvb2wgUmVuZGVyVGhlbWVXUEU6OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVX
UEU6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJikgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWVBZHdhaXRhOjpzaG91bGRI
YXZlQ2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkgY29u
c3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBlbGVtZW50LmlzUGFzc3dv
cmRGaWVsZCgpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZVdQRTo6cGxhdGZvcm1Gb2N1c1JpbmdD
b2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CitDb2xvciBSZW5kZXJU
aGVtZUFkd2FpdGE6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlv
blNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKIHsKLSAgICByZXR1cm4gVGhlbWVXUEU6
OmZvY3VzQ29sb3IoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhlbWVBZHdhaXRhJj4oVGhl
bWU6OnNpbmdsZXRvbigpKS5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKIH0KIAot
Q29sb3IgUmVuZGVyVGhlbWVXUEU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKK0NvbG9yIFJlbmRlclRo
ZW1lQWR3YWl0YTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRp
b25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1ha2VSR0Io
NTIsIDEzMiwgMjI4KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhlbWVBZHdhaXRhJj4oVGhl
bWU6OnNpbmdsZXRvbigpKS5pbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwogfQog
Ci1Db2xvciBSZW5kZXJUaGVtZVdQRTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykgY29uc3QKK0Nv
bG9yIFJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAogewotICAgIHJldHVy
biBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihvcHRpb25zKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VGhlbWVBZHdhaXRhJj4oVGhlbWU6OnNpbmdsZXRvbigpKS5hY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVXUEU6
OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNv
bG9yOjpPcHRpb25zPikgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1J
bmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1ha2VSR0IoMjU1LCAyNTUsIDI1NSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFRoZW1lQWR3YWl0YSY+KFRoZW1lOjpzaW5nbGV0b24oKSkuaW5h
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVX
UEU6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0
eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVBZHdhaXRhOjpwbGF0
Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+KSBjb25zdAogewotICAgIHJldHVybiBtYWtlUkdCKDI1MiwgMjUyLCAy
NTIpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUaGVtZUFkd2FpdGEmPihUaGVtZTo6c2luZ2xl
dG9uKCkpLmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwogfQogCi1Db2xvciBSZW5k
ZXJUaGVtZVdQRTo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9y
KE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25zdAorQ29sb3IgUmVu
ZGVyVGhlbWVBZHdhaXRhOjpwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKG9wdGlvbnMpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUaGVtZUFkd2FpdGEmPihUaGVtZTo6c2luZ2xldG9uKCkpLmlu
YWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1l
V1BFOjpwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRp
b25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykgY29uc3QKK0NvbG9yIFJlbmRlclRo
ZW1lQWR3YWl0YTo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKIHsKLSAgICByZXR1cm4gcGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihvcHRpb25zKTsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VGhlbWVBZHdhaXRhJj4oVGhlbWU6OnNpbmdsZXRvbigpKS5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVXUEU6OnBs
YXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5
bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQWR3YWl0
YTo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9u
U2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAogewotICAgIHJldHVybiBwbGF0Zm9ybUFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihvcHRpb25zKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VGhlbWVBZHdhaXRhJj4oVGhlbWU6OnNpbmdsZXRvbigpKS5pbmFjdGl2ZVNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcigpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZVdQRTo6cGxhdGZvcm1J
bmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29s
b3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZUFkd2FpdGE6OnBs
YXRmb3JtRm9jdXNSaW5nQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25z
dAogewotICAgIHJldHVybiBwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KG9wdGlvbnMpOworICAgIHJldHVybiBUaGVtZUFkd2FpdGE6OmZvY3VzQ29sb3IoKTsKIH0KIAot
U3RyaW5nIFJlbmRlclRoZW1lV1BFOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKK3ZvaWQgUmVu
ZGVyVGhlbWVBZHdhaXRhOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpCit7CisgICAgc3RhdGlj
X2Nhc3Q8VGhlbWVBZHdhaXRhJj4oVGhlbWU6OnNpbmdsZXRvbigpKS5wbGF0Zm9ybUNvbG9yc0Rp
ZENoYW5nZSgpOworICAgIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOwor
fQorCitTdHJpbmcgUmVuZGVyVGhlbWVBZHdhaXRhOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkK
IHsKICAgICByZXR1cm4gU3RyaW5nKHRoZW1lQWR3YWl0YVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNp
emVvZih0aGVtZUFkd2FpdGFVc2VyQWdlbnRTdHlsZVNoZWV0KSk7CiB9CiAKICNpZiBFTkFCTEUo
VklERU8pCi1TdHJpbmcgUmVuZGVyVGhlbWVXUEU6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hl
ZXQoKQorU3RyaW5nIFJlbmRlclRoZW1lQWR3YWl0YTo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVT
aGVldCgpCiB7CiAgICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xzQWR3YWl0YVVzZXJBZ2Vu
dFN0eWxlU2hlZXQsIHNpemVvZihtZWRpYUNvbnRyb2xzQWR3YWl0YVVzZXJBZ2VudFN0eWxlU2hl
ZXQpKTsKIH0KIAotU3RyaW5nIFJlbmRlclRoZW1lV1BFOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkK
K1N0cmluZyBSZW5kZXJUaGVtZUFkd2FpdGE6Om1lZGlhQ29udHJvbHNTY3JpcHQoKQogewogICAg
IFN0cmluZ0J1aWxkZXIgc2NyaXB0QnVpbGRlcjsKICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZENo
YXJhY3RlcnMobWVkaWFDb250cm9sc0xvY2FsaXplZFN0cmluZ3NKYXZhU2NyaXB0LCBzaXplb2Yo
bWVkaWFDb250cm9sc0xvY2FsaXplZFN0cmluZ3NKYXZhU2NyaXB0KSk7CkBAIC0xNzYsNyArMTgz
LDcgQEAgU3RyaW5nIFJlbmRlclRoZW1lV1BFOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKIH0KICNl
bmRpZgogCi1ib29sIFJlbmRlclRoZW1lV1BFOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludFRleHRGaWVsZChj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBhdXRvJiBncmFwaGljc0NvbnRleHQg
PSBwYWludEluZm8uY29udGV4dCgpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihncmFwaGljc0NvbnRleHQpOwpAQCAtMjA5LDIwICsyMTYsMzcgQEAgYm9vbCBSZW5k
ZXJUaGVtZVdQRTo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW4KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcih0ZXh0
RmllbGRCYWNrZ3JvdW5kQ29sb3IpOwogICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUGF0aChwYXRo
KTsKIAorI2lmIEVOQUJMRShEQVRBTElTVF9FTEVNRU5UKQorICAgIGlmIChpczxIVE1MSW5wdXRF
bGVtZW50PihyZW5kZXJPYmplY3QuZ2VuZXJhdGluZ05vZGUoKSkgJiYgZG93bmNhc3Q8SFRNTElu
cHV0RWxlbWVudD4oKihyZW5kZXJPYmplY3QuZ2VuZXJhdGluZ05vZGUoKSkpLmxpc3QoKSkgewor
ICAgICAgICBGbG9hdFJlY3QgYXJyb3dSZWN0ID0gcmVjdDsKKyAgICAgICAgaWYgKHJlbmRlck9i
amVjdC5zdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAg
ICAgIGFycm93UmVjdC5tb3ZlKGFycm93UmVjdC53aWR0aCgpIC0gKG1lbnVMaXN0QnV0dG9uQXJy
b3dTaXplICsgdGV4dEZpZWxkQm9yZGVyU2l6ZSAqIDIpLCAoYXJyb3dSZWN0LmhlaWdodCgpIC8g
Mi4pIC0gKG1lbnVMaXN0QnV0dG9uQXJyb3dTaXplIC8gMi4pKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZmllbGRSZWN0Lm1vdmUodGV4dEZpZWxkQm9yZGVyU2l6ZSAqIDIsIChhcnJvd1Jl
Y3QuaGVpZ2h0KCkgLyAyLikgLSAobWVudUxpc3RCdXR0b25BcnJvd1NpemUgLyAyLikpOworICAg
ICAgICBhcnJvd1JlY3Quc2V0V2lkdGgobWVudUxpc3RCdXR0b25BcnJvd1NpemUpOworICAgICAg
ICBhcnJvd1JlY3Quc2V0SGVpZ2h0KG1lbnVMaXN0QnV0dG9uQXJyb3dTaXplKTsKKyAgICAgICAg
eworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBhcnJvd1N0YXRlU2F2ZXIo
Z3JhcGhpY3NDb250ZXh0KTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUo
YXJyb3dSZWN0LngoKSwgYXJyb3dSZWN0LnkoKSk7CisgICAgICAgICAgICBUaGVtZUFkd2FpdGE6
OnBhaW50QXJyb3coZ3JhcGhpY3NDb250ZXh0LCBUaGVtZUFkd2FpdGE6OkFycm93RGlyZWN0aW9u
OjpEb3duKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIFJlbmRlclRoZW1lV1BFOjpwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVj
dCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50VGV4dEFyZWEoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKHJlbmRl
ck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdQRTo6cGFp
bnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1l
QWR3YWl0YTo6cGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAg
ICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsK
IH0KIAotTGVuZ3RoQm94IFJlbmRlclRoZW1lV1BFOjpwb3B1cEludGVybmFsUGFkZGluZ0JveChj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CitMZW5ndGhCb3ggUmVuZGVyVGhlbWVBZHdh
aXRhOjpwb3B1cEludGVybmFsUGFkZGluZ0JveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNv
bnN0CiB7CiAgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQogICAg
ICAgICByZXR1cm4geyB9OwpAQCAtMjMzLDcgKzI1Nyw3IEBAIExlbmd0aEJveCBSZW5kZXJUaGVt
ZVdQRTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBj
b25zCiAgICAgcmV0dXJuIHsgbWVudUxpc3RCdXR0b25QYWRkaW5nLCByaWdodFBhZGRpbmcsIG1l
bnVMaXN0QnV0dG9uUGFkZGluZywgbGVmdFBhZGRpbmcgfTsKIH0KIAotYm9vbCBSZW5kZXJUaGVt
ZVdQRTo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgUmVu
ZGVyVGhlbWVBZHdhaXRhOjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewogICAgIGF1dG8mIGdyYXBoaWNzQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7CiAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7
CkBAIC0yNTksMzYgKzI4MywzNiBAQCBib29sIFJlbmRlclRoZW1lV1BFOjpwYWludE1lbnVMaXN0
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludAogICAgIHsKICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBhcnJvd1N0YXRlU2F2ZXIoZ3JhcGhpY3ND
b250ZXh0KTsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZShmaWVsZFJlY3QueCgp
LCBmaWVsZFJlY3QueSgpKTsKLSAgICAgICAgVGhlbWVXUEU6OnBhaW50QXJyb3coZ3JhcGhpY3ND
b250ZXh0LCBUaGVtZVdQRTo6QXJyb3dEaXJlY3Rpb246OkRvd24pOworICAgICAgICBUaGVtZUFk
d2FpdGE6OnBhaW50QXJyb3coZ3JhcGhpY3NDb250ZXh0LCBUaGVtZUFkd2FpdGE6OkFycm93RGly
ZWN0aW9uOjpEb3duKTsKICAgICB9CiAKICAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkp
Ci0gICAgICAgIFRoZW1lV1BFOjpwYWludEZvY3VzKGdyYXBoaWNzQ29udGV4dCwgcmVjdCwgbWVu
dUxpc3RCdXR0b25Gb2N1c09mZnNldCk7CisgICAgICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1
cyhncmFwaGljc0NvbnRleHQsIHJlY3QsIG1lbnVMaXN0QnV0dG9uRm9jdXNPZmZzZXQpOwogCiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1lV1BFOjpwYWludE1lbnVMaXN0
QnV0dG9uRGVjb3JhdGlvbnMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJPYmplY3QsIGNvbnN0IFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRo
ZW1lQWR3YWl0YTo6cGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlckJv
eCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewogICAgIHJldHVybiBwYWludE1lbnVMaXN0KHJlbmRlck9iamVjdCwgcGFp
bnRJbmZvLCByZWN0KTsKIH0KIAotU2Vjb25kcyBSZW5kZXJUaGVtZVdQRTo6YW5pbWF0aW9uUmVw
ZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CitTZWNvbmRz
IFJlbmRlclRoZW1lQWR3YWl0YTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0Jh
cihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9u
RnJhbWVSYXRlOwogfQogCi1TZWNvbmRzIFJlbmRlclRoZW1lV1BFOjphbmltYXRpb25EdXJhdGlv
bkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKK1NlY29uZHMgUmVuZGVyVGhl
bWVBZHdhaXRhOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNz
JikgY29uc3QKIHsKICAgICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25GcmFtZVJhdGUgKiBwcm9n
cmVzc0FuaW1hdGlvbkZyYW1lQ291bnQ7CiB9CiAKLUludFJlY3QgUmVuZGVyVGhlbWVXUEU6OnBy
b2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0
JiBib3VuZHMpIGNvbnN0CitJbnRSZWN0IFJlbmRlclRoZW1lQWR3YWl0YTo6cHJvZ3Jlc3NCYXJS
ZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmIGJvdW5kcykg
Y29uc3QKIHsKICAgICByZXR1cm4geyBib3VuZHMueCgpLCBib3VuZHMueSgpLCBib3VuZHMud2lk
dGgoKSwgcHJvZ3Jlc3NCYXJTaXplIH07CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXUEU6OnBhaW50
UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUFk
d2FpdGE6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAg
IGlmICghcmVuZGVyT2JqZWN0LmlzUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0zNDUsNyArMzY5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZVdQRTo6cGFpbnRQcm9ncmVzc0Jhcihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGEKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXUEU6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVu
ZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50U2xpZGVyVHJh
Y2soY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGF1dG8mIGdyYXBoaWNzQ29udGV4
dCA9IHBhaW50SW5mby5jb250ZXh0KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CkBAIC00MTAsMTIgKzQzNCwxMiBAQCBib29sIFJl
bmRlclRoZW1lV1BFOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBQYQogICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUGF0aChwYXRoKTsKIAog
ICAgIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgVGhlbWVXUEU6OnBhaW50
Rm9jdXMoZ3JhcGhpY3NDb250ZXh0LCBmaWVsZFJlY3QsIHNsaWRlclRyYWNrRm9jdXNPZmZzZXQp
OworICAgICAgICBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoZ3JhcGhpY3NDb250ZXh0LCBmaWVs
ZFJlY3QsIHNsaWRlclRyYWNrRm9jdXNPZmZzZXQpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci12b2lkIFJlbmRlclRoZW1lV1BFOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVBZHdhaXRhOjph
ZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50Kikg
Y29uc3QKIHsKICAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwogICAg
IGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJU
aHVtYlZlcnRpY2FsUGFydCkKQEAgLTQyNSw3ICs0NDksNyBAQCB2b2lkIFJlbmRlclRoZW1lV1BF
OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50
KikgYwogICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc2xpZGVyVGh1bWJTaXplLCBGaXhlZCkp
OwogfQogCi1ib29sIFJlbmRlclRoZW1lV1BFOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
SW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludFNsaWRlclRodW1i
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBhdXRvJiBncmFwaGljc0NvbnRleHQg
PSBwYWludEluZm8uY29udGV4dCgpOwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcihncmFwaGljc0NvbnRleHQpOwpAQCAtNDU5LDcgKzQ4Myw3IEBAIGJvb2wgUmVuZGVy
VGhlbWVXUEU6OnBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhCiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1ib29sIFJlbmRlclRoZW1lV1BF
OjpwYWludE1lZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3Qs
IGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBS
ZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7CiAgICAgYXV0byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQo
cmVuZGVyT2JqZWN0KTsKICAgICBpZiAoIW1lZGlhRWxlbWVudCkKQEAgLTUwNyw3ICs1MzEsNyBA
QCBib29sIFJlbmRlclRoZW1lV1BFOjpwYWludE1lZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBS
ZW5kZXJUaGVtZVdQRTo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50
UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludE1lZGlhVm9sdW1lU2xp
ZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGF1dG8gbWVkaWFFbGVt
ZW50ID0gcGFyZW50TWVkaWFFbGVtZW50KHJlbmRlck9iamVjdCk7CiAgICAgaWYgKCFtZWRpYUVs
ZW1lbnQpCkBAIC01MzgsNCArNTYyLDI3IEBAIGJvb2wgUmVuZGVyVGhlbWVXUEU6OnBhaW50TWVk
aWFWb2x1bWVTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjCiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKFZJREVPKQogCisjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCitJ
bnRTaXplIFJlbmRlclRoZW1lQWR3YWl0YTo6c2xpZGVyVGlja1NpemUoKSBjb25zdAoreworICAg
IC8vIEZJWE1FOiBXZSBuZWVkIHRvIHNldCB0aGlzIHRvIHRoZSBzaXplIG9mIG9uZSB0aWNrIG1h
cmsuCisgICAgcmV0dXJuIEludFNpemUoMCwgMCk7Cit9CisKK2ludCBSZW5kZXJUaGVtZUFkd2Fp
dGE6OnNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiBXZSBuZWVkIHRvIHNldCB0aGlzIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGljayBtYXJr
cy4KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBSZW5kZXJUaGVtZUFkd2FpdGE6OmFkanVzdExp
c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAor
eworICAgIC8vIEFkZCBhIG1hcmdpbiB0byBwbGFjZSB0aGUgYnV0dG9uIGF0IGVuZCBvZiB0aGUg
aW5wdXQgZmllbGQuCisgICAgaWYgKHN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAg
ICAgICAgc3R5bGUuc2V0TWFyZ2luUmlnaHQoTGVuZ3RoKC0yLCBGaXhlZCkpOworICAgIGVsc2UK
KyAgICAgICAgc3R5bGUuc2V0TWFyZ2luTGVmdChMZW5ndGgoLTIsIEZpeGVkKSk7Cit9CisjZW5k
aWYgLy8gRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5oCnNpbWlsYXJp
dHkgaW5kZXggNjglCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5k
ZXJUaGVtZVdQRS5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVBZHdhaXRhLmgKaW5kZXggMjk5OGZmYjA5YjMuLmUyMWNjMjc1MTBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvUmVuZGVyVGhlbWVXUEUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmgKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNjAg
KzI5LDYyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyVGhlbWVXUEUg
ZmluYWwgOiBwdWJsaWMgUmVuZGVyVGhlbWUgeworY2xhc3MgUmVuZGVyVGhlbWVBZHdhaXRhIDog
cHVibGljIFJlbmRlclRoZW1lIHsKIHB1YmxpYzoKLSAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8
UmVuZGVyVGhlbWVXUEU+OworICAgIHZpcnR1YWwgflJlbmRlclRoZW1lQWR3YWl0YSgpID0gZGVm
YXVsdDsKIAotICAgIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7Citw
cml2YXRlOgorICAgIFN0cmluZyBleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkgZmluYWw7CiAjaWYg
RU5BQkxFKFZJREVPKQotICAgIFN0cmluZyBleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkg
b3ZlcnJpZGU7Ci0gICAgU3RyaW5nIG1lZGlhQ29udHJvbHNTY3JpcHQoKSBvdmVycmlkZTsKKyAg
ICBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpIGZpbmFsOworICAgIFN0cmlu
ZyBtZWRpYUNvbnRyb2xzU2NyaXB0KCkgZmluYWw7CiAjZW5kaWYKIAotcHJpdmF0ZToKLSAgICBS
ZW5kZXJUaGVtZVdQRSgpID0gZGVmYXVsdDsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVdQRSgp
ID0gZGVmYXVsdDsKLQotICAgIGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSYp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBib29sIHN1cHBvcnRzRm9jdXNS
aW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0
ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250Q2FzY2FkZURlc2Ny
aXB0aW9uJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBDb2xvciBwbGF0Zm9ybUZvY3VzUmluZ0Nv
bG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8
U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3Jt
SW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9w
dGlvbnM+KSBjb25zdCBvdmVycmlkZTsKLSAgICBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92
ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCBvdmVycmlkZTsKLQotICAg
IENvbG9yIHBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRp
b25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBs
YXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5
bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3JtSW5h
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9y
OjpPcHRpb25zPikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlv
bnM+KSBjb25zdCBvdmVycmlkZTsKLQotICAgIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVu
ZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRTZWFyY2hG
aWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7Ci0KLSAgICBib29sIHBvcHNNZW51QnlTcGFjZU9yUmV0dXJuKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIExlbmd0aEJveCBwb3B1cEludGVybmFsUGFk
ZGluZ0JveChjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcGFp
bnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0
aW9ucyhjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKLQotICAgIFNlY29uZHMgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFNlY29uZHMgYW5p
bWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIEludFJlY3QgcHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHBhaW50UHJv
Z3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGFkanVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAg
IGJvb2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIHRydWU7IH0KKyAgICBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxl
JikgY29uc3QgZmluYWw7CisgICAgYm9vbCBzaG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3IoY29u
c3QgSFRNTElucHV0RWxlbWVudCYpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCB1cGRhdGVDYWNo
ZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlv
biYpIGNvbnN0IG92ZXJyaWRlIHsgfTsKKworICAgIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Qg
ZmluYWw7CisgICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IGZpbmFsOworICAgIENvbG9y
IHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNv
bG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7CisgICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNv
bnN0IGZpbmFsOworICAgIENvbG9yIHBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IGZpbmFsOwor
ICAgIENvbG9yIHBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihP
cHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IGZpbmFsOworICAgIENvbG9yIHBs
YXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxT
dHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7CisgICAgQ29sb3IgcGxhdGZvcm1JbmFj
dGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6
Ok9wdGlvbnM+KSBjb25zdCBmaW5hbDsKKyAgICBDb2xvciBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9y
KE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7CisgICAgdm9pZCBw
bGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpIGZpbmFsOworCisgICAgYm9vbCBwYWludFRleHRGaWVs
ZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3Qm
KSBmaW5hbDsKKyAgICBib29sIHBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0JikgZmluYWw7CisgICAgYm9vbCBwYWludFNl
YXJjaEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBmaW5hbDsKKworICAgIGJvb2wgcG9wc01lbnVCeVNwYWNlT3JSZXR1cm4oKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgTGVuZ3RoQm94IHBvcHVwSW50ZXJuYWxQYWRk
aW5nQm94KGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QgZmluYWw7CisgICAgYm9vbCBwYWludE1l
bnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0
UmVjdCYpIGZpbmFsOworICAgIGJvb2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNv
bnN0IFJlbmRlckJveCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFs
OworCisgICAgU2Vjb25kcyBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJl
bmRlclByb2dyZXNzJikgY29uc3QgZmluYWw7CisgICAgU2Vjb25kcyBhbmltYXRpb25EdXJhdGlv
bkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QgZmluYWw7CisgICAgSW50UmVj
dCBwcm9ncmVzc0JhclJlY3RGb3JCb3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50
UmVjdCYpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgZmluYWw7CisKKyAg
ICBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOworICAgIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJT
aXplKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
cGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBJbnRSZWN0JikgZmluYWw7CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgYm9vbCBwYWlu
dE1lZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRl
clRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKKyAgICBib29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAg
Ym9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIGZpbmFsOwogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoREFUQUxJU1RfRUxFTUVOVCkKKyAgICBJbnRTaXplIHNsaWRlclRpY2tTaXplKCkgY29uc3Qg
ZmluYWw7CisgICAgaW50IHNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdCBm
aW5hbDsKKyAgICB2b2lkIGFkanVzdExpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0
IEVsZW1lbnQqKSBjb25zdCBmaW5hbDsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXgg
MWFiYTM1YmNkOGQuLmQ3M2FmNmM2N2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUd0ay5jcHAKQEAgLTEsOSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA3IEFwcGxlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9r
ZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4KLSAqIENvcHlyaWdodCAoQykg
MjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI2LDM4ICsyMiwxMSBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1l
R3RrLmgiCiAKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiRmlsZUxp
c3QuaCIKLSNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udERlc2Ny
aXB0aW9uLmgiCiAjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIkdVbmlxdWVQdHJH
dGsuaCIKLSNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIk1lZGlhQ29u
dHJvbEVsZW1lbnRzLmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94
LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3Mu
aCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZVdpZGdldC5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lR3RrLmgiCi0jaW5jbHVkZSAiU3RyaW5nVHJ1bmNhdG9yLmgiCi0jaW5jbHVkZSAiVGltZVJh
bmdlcy5oIgotI2luY2x1ZGUgIlVzZXJBZ2VudFNjcmlwdHMuaCIKLSNpbmNsdWRlICJVc2VyQWdl
bnRTdHlsZVNoZWV0cy5oIgotI2luY2x1ZGUgPGNtYXRoPgotI2luY2x1ZGUgPGdkay9nZGsuaD4K
LSNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDx3dGYv
Z2xpYi9HUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjcsMTkgKzM2LDYgQEAgUmVuZGVyVGhl
bWUmIFJlbmRlclRoZW1lOjpzaW5nbGV0b24oKQogICAgIHJldHVybiB0aGVtZTsKIH0KIAotc3Rh
dGljIGRvdWJsZSBnZXRTY3JlZW5EUEkoKQotewotICAgIC8vIEZJWE1FOiBSZWFsbHkgdGhpcyBz
aG91bGQgYmUgdGhlIHdpZGdldCdzIHNjcmVlbi4KLSAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdk
a19zY3JlZW5fZ2V0X2RlZmF1bHQoKTsKLSAgICBpZiAoIXNjcmVlbikKLSAgICAgICAgcmV0dXJu
IDk2OyAvLyBEZWZhdWx0IHRvIDk2IERQSS4KLQotICAgIGZsb2F0IGRwaSA9IGdka19zY3JlZW5f
Z2V0X3Jlc29sdXRpb24oc2NyZWVuKTsKLSAgICBpZiAoZHBpIDw9IDApCi0gICAgICAgIHJldHVy
biA5NjsKLSAgICByZXR1cm4gZHBpOwotfQotCiB2b2lkIFJlbmRlclRoZW1lR3RrOjp1cGRhdGVD
YWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9udENhc2NhZGVEZXNjcmlw
dGlvbiYgZm9udERlc2NyaXB0aW9uKSBjb25zdAogewogICAgIEd0a1NldHRpbmdzKiBzZXR0aW5n
cyA9IGd0a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpOwpAQCAtMTAxLDcgKzU3LDcgQEAgdm9pZCBS
ZW5kZXJUaGVtZUd0azo6dXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVl
SUQsIEZvbnRDYXNjYWRlRGUKICAgICBpbnQgc2l6ZSA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25f
Z2V0X3NpemUocGFuZ29EZXNjcmlwdGlvbikgLyBQQU5HT19TQ0FMRTsKICAgICAvLyBJZiB0aGUg
c2l6ZSBvZiB0aGUgZm9udCBpcyBpbiBwb2ludHMsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBw
aXhlbHMuCiAgICAgaWYgKCFwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplX2lzX2Fic29s
dXRlKHBhbmdvRGVzY3JpcHRpb24pKQotICAgICAgICBzaXplID0gc2l6ZSAqIChnZXRTY3JlZW5E
UEkoKSAvIDcyLjApOworICAgICAgICBzaXplID0gc2l6ZSAqIChzY3JlZW5EUEkoKSAvIDcyLjAp
OwogCiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CiAgICAgZm9u
dERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHRydWUpOwpAQCAtMTEwLDEwODUgKzY2LDEy
IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlv
bihDU1NWYWx1ZUlELCBGb250Q2FzY2FkZURlCiAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9m
cmVlKHBhbmdvRGVzY3JpcHRpb24pOwogfQogCi0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQp
Ci1JbnRTaXplIFJlbmRlclRoZW1lR3RrOjpzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IFdlIG5lZWQgdG8gc2V0IHRoaXMgdG8gdGhlIHNpemUgb2Ygb25lIHRpY2sgbWFy
ay4KLSAgICByZXR1cm4gSW50U2l6ZSgwLCAwKTsKLX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpz
bGlkZXJUaWNrT2Zmc2V0RnJvbVRyYWNrQ2VudGVyKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTog
V2UgbmVlZCB0byBzZXQgdGhpcyB0byB0aGUgcG9zaXRpb24gb2YgdGhlIHRpY2sgbWFya3MuCi0g
ICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotZW51bSBSZW5kZXJUaGVtZVBhcnQgewotICAgIEVu
dHJ5LAotICAgIEVudHJ5U2VsZWN0aW9uLAotICAgIEVudHJ5SWNvbkxlZnQsCi0gICAgRW50cnlJ
Y29uUmlnaHQsCi0gICAgQnV0dG9uLAotICAgIENoZWNrQnV0dG9uLAotICAgIFJhZGlvQnV0dG9u
LAotICAgIENvbWJvQm94LAotICAgIENvbWJvQm94QnV0dG9uLAotICAgIENvbWJvQm94QXJyb3cs
Ci0gICAgU2NhbGUsCi0gICAgU2NhbGVUcm91Z2gsCi0gICAgU2NhbGVTbGlkZXIsCi0gICAgUHJv
Z3Jlc3NCYXIsCi0gICAgUHJvZ3Jlc3NCYXJUcm91Z2gsCi0gICAgUHJvZ3Jlc3NCYXJQcm9ncmVz
cywKLSAgICBMaXN0Qm94LAotICAgIFNwaW5CdXR0b24sCi0gICAgU3BpbkJ1dHRvblVwQnV0dG9u
LAotICAgIFNwaW5CdXR0b25Eb3duQnV0dG9uLAotI2lmIEVOQUJMRShWSURFTykKLSAgICBNZWRp
YUJ1dHRvbiwKLSNlbmRpZgotICAgIFdpbmRvdywKLX07Ci0KLSNpZiBFTkFCTEUoVklERU8pCi1z
dGF0aWMgYm9vbCBub2RlSGFzUHNldWRvKE5vZGUmIG5vZGUsIGNvbnN0IGNoYXIqIHBzZXVkbykK
LXsKLSAgICByZXR1cm4gaXM8RWxlbWVudD4obm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4obm9k
ZSkucHNldWRvKCkgPT0gcHNldWRvOwotfQotCi1zdGF0aWMgYm9vbCBub2RlSGFzQ2xhc3MoTm9k
ZSogbm9kZSwgY29uc3QgY2hhciogY2xhc3NOYW1lKQotewotICAgIGlmICghaXM8RWxlbWVudD4o
Km5vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBFbGVtZW50JiBlbGVtZW50ID0g
ZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwotCi0gICAgaWYgKCFlbGVtZW50Lmhhc0NsYXNzKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBlbGVtZW50LmNsYXNzTmFtZXMo
KS5jb250YWlucyhjbGFzc05hbWUpOwotfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKLQotUmVu
ZGVyVGhlbWVHdGs6On5SZW5kZXJUaGVtZUd0aygpID0gZGVmYXVsdDsKLQotc3RhdGljIGJvb2wg
c3VwcG9ydHNGb2N1cyhDb250cm9sUGFydCBhcHBlYXJhbmNlKQotewotICAgIHN3aXRjaCAoYXBw
ZWFyYW5jZSkgewotICAgIGNhc2UgUHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0
OgotICAgIGNhc2UgVGV4dEZpZWxkUGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICBj
YXNlIFNlYXJjaEZpZWxkUGFydDoKLSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICBjYXNlIFJh
ZGlvUGFydDoKLSAgICBjYXNlIENoZWNrYm94UGFydDoKLSAgICBjYXNlIFNsaWRlckhvcml6b250
YWxQYXJ0OgotICAgIGNhc2UgU2xpZGVyVmVydGljYWxQYXJ0OgotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29s
IFJlbmRlclRoZW1lR3RrOjpzdXBwb3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUuYXBwZWFyYW5jZSgp
KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3Qg
UmVuZGVyT2JqZWN0JiBvKSBjb25zdAotewotICAgIHJldHVybiBpc0VuYWJsZWQobyk7Ci19Ci0K
LWludCBSZW5kZXJUaGVtZUd0azo6YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJCb3gmIGJv
eCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBzdHJhdGVneSBpcyBwb3NzaWJseSBpbmNv
cnJlY3QgZm9yIHRoZSBHVEsrIHBvcnQuCi0gICAgaWYgKGJveC5zdHlsZSgpLmFwcGVhcmFuY2Uo
KSA9PSBDaGVja2JveFBhcnQgfHwgYm94LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFy
dCkKLSAgICAgICAgcmV0dXJuIGJveC5tYXJnaW5Ub3AoKSArIGJveC5oZWlnaHQoKSAtIDI7Ci0g
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjpiYXNlbGluZVBvc2l0aW9uKGJveCk7Ci19Ci0KLXZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZs
b2F0UmVjdCYpCi17Ci19Ci1zdGF0aWMgR3RrU3RhdGVGbGFncyB0aGVtZVBhcnRTdGF0ZUZsYWdz
KGNvbnN0IFJlbmRlclRoZW1lR3RrJiB0aGVtZSwgUmVuZGVyVGhlbWVQYXJ0IHRoZW1lUGFydCwg
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QpCi17Ci0gICAgdW5zaWduZWQgc3RhdGVG
bGFncyA9IDA7Ci0gICAgc3dpdGNoIChyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkg
ewotICAgIGNhc2UgVGV4dERpcmVjdGlvbjo6UlRMOgotICAgICAgICBzdGF0ZUZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX0RJUl9SVEw7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dERpcmVj
dGlvbjo6TFRSOgotICAgICAgICBzdGF0ZUZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0RJUl9MVFI7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmICghdGhlbWUuaXNFbmFibGVkKHJlbmRl
ck9iamVjdCkgfHwgKHRoZW1lUGFydCA9PSBFbnRyeSAmJiB0aGVtZS5pc1JlYWRPbmx5Q29udHJv
bChyZW5kZXJPYmplY3QpKSkKLSAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxBR19J
TlNFTlNJVElWRTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHRoZW1lLmlzSG92ZXJlZChyZW5k
ZXJPYmplY3QpKQotICAgICAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVM
SUdIVDsKLSAgICAgICAgaWYgKHRoZW1lLmlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQotICAgICAg
ICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxBR19GT0NVU0VEOwotICAgIH0KLQotICAg
IHN3aXRjaCAodGhlbWVQYXJ0KSB7Ci0gICAgY2FzZSBDaGVja0J1dHRvbjoKLSAgICBjYXNlIFJh
ZGlvQnV0dG9uOgotICAgICAgICBpZiAodGhlbWUuaXNDaGVja2VkKHJlbmRlck9iamVjdCkpCi0g
ICAgICAgICAgICBzdGF0ZUZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0NIRUNLRUQ7Ci0gICAgICAg
IGlmICh0aGVtZS5pc0luZGV0ZXJtaW5hdGUocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgICAgIHN0
YXRlRmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5DT05TSVNURU5UOwotICAgICAgICBpZiAodGhl
bWUuaXNQcmVzc2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgICAgICBzdGF0ZUZsYWdzIHw9IEdU
S19TVEFURV9GTEFHX1NFTEVDVEVEOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJ1dHRvbjoK
LSAgICBjYXNlIENvbWJvQm94QnV0dG9uOgotICAgIGNhc2UgU2NhbGVTbGlkZXI6Ci0gICAgY2Fz
ZSBFbnRyeUljb25MZWZ0OgotICAgIGNhc2UgRW50cnlJY29uUmlnaHQ6Ci0jaWYgRU5BQkxFKFZJ
REVPKQotICAgIGNhc2UgTWVkaWFCdXR0b246Ci0jZW5kaWYKLSAgICAgICAgaWYgKHRoZW1lLmlz
UHJlc3NlZChyZW5kZXJPYmplY3QpKQotICAgICAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RB
VEVfRkxBR19BQ1RJVkU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3BpbkJ1dHRvblVwQnV0
dG9uOgotICAgICAgICBpZiAodGhlbWUuaXNQcmVzc2VkKHJlbmRlck9iamVjdCkgJiYgdGhlbWUu
aXNTcGluVXBCdXR0b25QYXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpKQotICAgICAgICAgICAgc3Rh
dGVGbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgICAgIGlmICh0aGVtZS5pc0hv
dmVyZWQocmVuZGVyT2JqZWN0KSAmJiAhdGhlbWUuaXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChy
ZW5kZXJPYmplY3QpKQotICAgICAgICAgICAgc3RhdGVGbGFncyAmPSB+R1RLX1NUQVRFX0ZMQUdf
UFJFTElHSFQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3BpbkJ1dHRvbkRvd25CdXR0b246
Ci0gICAgICAgIGlmICh0aGVtZS5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSAmJiAhdGhlbWUuaXNT
cGluVXBCdXR0b25QYXJ0UHJlc3NlZChyZW5kZXJPYmplY3QpKQotICAgICAgICAgICAgc3RhdGVG
bGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAgICAgIGlmICh0aGVtZS5pc0hvdmVy
ZWQocmVuZGVyT2JqZWN0KSAmJiB0aGVtZS5pc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKHJlbmRl
ck9iamVjdCkpCi0gICAgICAgICAgICBzdGF0ZUZsYWdzICY9IH5HVEtfU1RBVEVfRkxBR19QUkVM
SUdIVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KHN0YXRlRmxhZ3MpOwot
fQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIFNvbWUgbGF5b3V0IHRlc3Rz
IGNoZWNrIGV4cGxpY2l0bHkgdGhhdCBidXR0b25zIGlnbm9yZSBsaW5lLWhlaWdodC4KLSAgICBp
ZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IFB1c2hCdXR0b25QYXJ0KQotICAgICAgICBzdHlsZS5z
ZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLX0KLQotc3Rh
dGljIHZvaWQgc2hyaW5rVG9NaW5pbXVtU2l6ZUFuZENlbnRlclJlY3RhbmdsZShGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEludFNpemUmIG1pblNpemUpCi17Ci0gICAgaWYgKHJlY3Qud2lkdGgoKSA+
IG1pblNpemUud2lkdGgoKSkgewotICAgICAgICByZWN0LmluZmxhdGVYKC0ocmVjdC53aWR0aCgp
IC0gbWluU2l6ZS53aWR0aCgpKSAvIDIpOwotICAgICAgICByZWN0LnNldFdpZHRoKG1pblNpemUu
d2lkdGgoKSk7IC8vIEluIGNhc2UgcmVjdC53aWR0aCgpIHdhcyBlcXVhbCB0byBtaW5TaXplLndp
ZHRoKCkgKyAxLgotICAgIH0KLQotICAgIGlmIChyZWN0LmhlaWdodCgpID4gbWluU2l6ZS5oZWln
aHQoKSkgewotICAgICAgICByZWN0LmluZmxhdGVZKC0ocmVjdC5oZWlnaHQoKSAtIG1pblNpemUu
aGVpZ2h0KCkpIC8gMik7Ci0gICAgICAgIHJlY3Quc2V0SGVpZ2h0KG1pblNpemUuaGVpZ2h0KCkp
OyAvLyBJbiBjYXNlIHJlY3QuaGVpZ2h0KCkgd2FzIGVxdWFsIHRvIG1pblNpemUuaGVpZ2h0KCkg
KyAxLgotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShSZW5kZXJUaGVtZVBh
cnQgdGhlbWVQYXJ0LCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgQVNTRVJUKHRoZW1lUGFy
dCA9PSBDaGVja0J1dHRvbiB8fCB0aGVtZVBhcnQgPT0gUmFkaW9CdXR0b24pOwotCi0gICAgLy8g
VGhlIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJvdGggc3BlY2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3Qg
Y2hhbmdlIHRoZW0uCi0gICAgaWYgKCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgIXN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRv
JiB0b2dnbGVXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVRvZ2dsZUJ1dHRvbiY+KFJl
bmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZSh0aGVtZVBhcnQgPT0gQ2hlY2tCdXR0b24gPyBS
ZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6Q2hlY2tCdXR0b24gOiBSZW5kZXJUaGVtZVdpZGdldDo6
VHlwZTo6UmFkaW9CdXR0b24pKTsKLSAgICB0b2dnbGVXaWRnZXQuYnV0dG9uKCkuc2V0U3RhdGUo
R1RLX1NUQVRFX0ZMQUdfTk9STUFMKTsKLSAgICB0b2dnbGVXaWRnZXQudG9nZ2xlKCkuc2V0U3Rh
dGUoR1RLX1NUQVRFX0ZMQUdfTk9STUFMKTsKLSAgICBJbnRTaXplIHByZWZlcnJlZFNpemUgPSB0
b2dnbGVXaWRnZXQuYnV0dG9uKCkucHJlZmVycmVkU2l6ZSgpOwotICAgIHByZWZlcnJlZFNpemUg
PSBwcmVmZXJyZWRTaXplLmV4cGFuZGVkVG8odG9nZ2xlV2lkZ2V0LnRvZ2dsZSgpLnByZWZlcnJl
ZFNpemUoKSk7Ci0KLSAgICBpZiAoc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQot
ICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgocHJlZmVycmVkU2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOwotCi0gICAgaWYgKHN0eWxlLmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS5z
ZXRIZWlnaHQoTGVuZ3RoKHByZWZlcnJlZFNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHBhaW50VG9nZ2xlKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVy
VGhlbWVQYXJ0IHRoZW1lUGFydCwgY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBmdWxsUmVjdCkKLXsKLSAg
ICBBU1NFUlQodGhlbWVQYXJ0ID09IENoZWNrQnV0dG9uIHx8IHRoZW1lUGFydCA9PSBSYWRpb0J1
dHRvbik7Ci0KLSAgICBhdXRvJiB0b2dnbGVXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVt
ZVRvZ2dsZUJ1dHRvbiY+KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZSh0aGVtZVBhcnQg
PT0gQ2hlY2tCdXR0b24gPyBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6Q2hlY2tCdXR0b24gOiBS
ZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6UmFkaW9CdXR0b24pKTsKLSAgICBhdXRvIHRvZ2dsZVN0
YXRlID0gdGhlbWVQYXJ0U3RhdGVGbGFncygqdGhlbWUsIHRoZW1lUGFydCwgcmVuZGVyT2JqZWN0
KTsKLSAgICB0b2dnbGVXaWRnZXQuYnV0dG9uKCkuc2V0U3RhdGUodG9nZ2xlU3RhdGUpOwotICAg
IHRvZ2dsZVdpZGdldC50b2dnbGUoKS5zZXRTdGF0ZSh0b2dnbGVTdGF0ZSk7Ci0KLSAgICBGbG9h
dFJlY3QgcmVjdCA9IGZ1bGxSZWN0OwotICAgIC8vIFNvbWUgdGhlbWVzIGRvIG5vdCByZW5kZXIg
bGFyZ2UgdG9nZ2xlIGJ1dHRvbnMgcHJvcGVybHksIHNvIHdlIHNpbXBseQotICAgIC8vIHNocmlu
ayB0aGUgcmVjdGFuZ2xlIGJhY2sgZG93biB0byB0aGUgZGVmYXVsdCBzaXplIGFuZCB0aGVuIGNl
bnRlciBpdAotICAgIC8vIGluIHRoZSBmdWxsIHRvZ2dsZSBidXR0b24gcmVnaW9uLiBUaGUgcmVh
c29uIGZvciBub3Qgc2ltcGx5IGZvcmNpbmcgdG9nZ2xlCi0gICAgLy8gYnV0dG9ucyB0byBiZSBh
IHNtYWxsZXIgc2l6ZSBpcyB0aGF0IHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgc2l0ZSBsYXlvdXRz
LgotICAgIEludFNpemUgcHJlZmVycmVkU2l6ZSA9IHRvZ2dsZVdpZGdldC5idXR0b24oKS5wcmVm
ZXJyZWRTaXplKCk7Ci0gICAgcHJlZmVycmVkU2l6ZSA9IHByZWZlcnJlZFNpemUuZXhwYW5kZWRU
byh0b2dnbGVXaWRnZXQudG9nZ2xlKCkucHJlZmVycmVkU2l6ZSgpKTsKLSAgICBzaHJpbmtUb01p
bmltdW1TaXplQW5kQ2VudGVyUmVjdGFuZ2xlKHJlY3QsIHByZWZlcnJlZFNpemUpOwotICAgIHRv
Z2dsZVdpZGdldC5idXR0b24oKS5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci0gICAgdG9nZ2xlV2lkZ2V0LnRvZ2dsZSgpLnJlbmRlcihw
YWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0KTsKLQotICAg
IGlmICh0aGVtZS0+aXNGb2N1c2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIHRvZ2dsZVdpZGdl
dC5idXR0b24oKS5yZW5kZXJGb2N1cyhwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4
dCgpLT5jcigpLCByZWN0KTsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hT
aXplKFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKLXsKLSAgICBzZXRUb2dnbGVTaXplKENoZWNr
QnV0dG9uLCBzdHlsZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3go
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHBhaW50VG9nZ2xlKHRoaXMsIENoZWNr
QnV0dG9uLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAotewotICAgIHNldFRvZ2dsZVNpemUoUmFkaW9CdXR0b24sIHN0eWxlKTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJl
Y3QpCi17Ci0gICAgcGFpbnRUb2dnbGUodGhpcywgUmFkaW9CdXR0b24sIHJlbmRlck9iamVjdCwg
cGFpbnRJbmZvLCByZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRv
JiBidXR0b25XaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUJ1dHRvbiY+KFJlbmRlclRo
ZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShpc0RlZmF1bHQocmVuZGVyT2JqZWN0KSA/IFJlbmRlclRo
ZW1lV2lkZ2V0OjpUeXBlOjpCdXR0b25EZWZhdWx0IDogUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6
OkJ1dHRvbikpOwotICAgIGJ1dHRvbldpZGdldC5idXR0b24oKS5zZXRTdGF0ZSh0aGVtZVBhcnRT
dGF0ZUZsYWdzKCp0aGlzLCBCdXR0b24sIHJlbmRlck9iamVjdCkpOwotICAgIGJ1dHRvbldpZGdl
dC5idXR0b24oKS5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSwgcmVjdCk7Ci0gICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBi
dXR0b25XaWRnZXQuYnV0dG9uKCkucmVuZGVyRm9jdXMocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0
aWMgQ29sb3IgbWVudUxpc3RDb2xvcihjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGF1
dG8mIGNvbWJvV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVDb21ib0JveCY+KFJlbmRl
clRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6Q29tYm9C
b3gpKTsKLSAgICBHdGtTdGF0ZUZsYWdzIHN0YXRlID0gZWxlbWVudC0+aXNEaXNhYmxlZEZvcm1D
b250cm9sKCkgPyBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRSA6IEdUS19TVEFURV9GTEFHX05P
Uk1BTDsKLSAgICBjb21ib1dpZGdldC5jb21ib0JveCgpLnNldFN0YXRlKHN0YXRlKTsKLSAgICBj
b21ib1dpZGdldC5idXR0b24oKS5zZXRTdGF0ZShzdGF0ZSk7Ci0gICAgcmV0dXJuIGNvbWJvV2lk
Z2V0LmJ1dHRvbigpLmNvbG9yKCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1l
bnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBj
b25zdAotewotICAgIC8vIFRoZSB0ZXN0cyBjaGVjayBleHBsaWNpdGx5IHRoYXQgc2VsZWN0IG1l
bnUgYnV0dG9ucyBpZ25vcmUgbGluZSBoZWlnaHQuCi0gICAgc3R5bGUuc2V0TGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0KLSAgICAvLyBXZSBjYW5ub3QgZ2l2
ZSBhIHByb3BlciByZW5kZXJpbmcgd2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0
dW5hdGVseS4KLSAgICBzdHlsZS5yZXNldEJvcmRlclJhZGl1cygpOwotCi0gICAgaWYgKGVsZW1l
bnQpCi0gICAgICAgIHN0eWxlLnNldENvbG9yKG1lbnVMaXN0Q29sb3IoZWxlbWVudCkpOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZSkgY29uc3QKLXsKLSAgICBhZGp1c3RNZW51TGlz
dFN0eWxlKHN0eWxlLCBlKTsKLX0KLQotLyoKLSAqIEd0a0NvbWJvQm94IGdhZGdldHMgdHJlZQot
ICoKLSAqIGNvbWJvYm94Ci0gKiDilJzilIDilIAgYm94LmxpbmtlZAotICog4pSCICAg4pWw4pSA
4pSAIGJ1dHRvbi5jb21ibwotICog4pSCICAgICAgIOKVsOKUgOKUgCBib3gKLSAqIOKUgiAgICAg
ICAgICAg4pSc4pSA4pSAIGNlbGx2aWV3Ci0gKiDilIIgICAgICAgICAgIOKVsOKUgOKUgCBhcnJv
dwotICog4pWw4pSA4pSAIHdpbmRvdy5wb3B1cAotICovCi1MZW5ndGhCb3ggUmVuZGVyVGhlbWVH
dGs6OnBvcHVwSW50ZXJuYWxQYWRkaW5nQm94KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29u
c3QKLXsKLSAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCi0gICAg
ICAgIHJldHVybiBMZW5ndGhCb3goMCk7Ci0KLSAgICBhdXRvJiBjb21ib1dpZGdldCA9IHN0YXRp
Y19jYXN0PFJlbmRlclRoZW1lQ29tYm9Cb3gmPihSZW5kZXJUaGVtZVdpZGdldDo6Z2V0T3JDcmVh
dGUoUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OkNvbWJvQm94KSk7Ci0gICAgY29tYm9XaWRnZXQu
Y29tYm9Cb3goKS5zZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwotICAgIGNvbWJvV2lk
Z2V0LmJ1dHRvbigpLnNldFN0YXRlKEdUS19TVEFURV9GTEFHX05PUk1BTCk7Ci0gICAgY29tYm9X
aWRnZXQuYXJyb3coKS5zZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwotICAgIEd0a0Jv
cmRlciBjb21ib0NvbnRlbnRzQm94ID0gY29tYm9XaWRnZXQuY29tYm9Cb3goKS5jb250ZW50c0Jv
eCgpOwotICAgIEd0a0JvcmRlciBib3hDb250ZW50c0JveCA9IGNvbWJvV2lkZ2V0LmJveCgpLmNv
bnRlbnRzQm94KCk7Ci0gICAgR3RrQm9yZGVyIGJ1dHRvbkNvbnRlbnRzQm94ID0gY29tYm9XaWRn
ZXQuYnV0dG9uKCkuY29udGVudHNCb3goKTsKLSAgICBHdGtCb3JkZXIgYnV0dG9uQm94Q29udGVu
dHNCb3ggPSBjb21ib1dpZGdldC5idXR0b25Cb3goKS5jb250ZW50c0JveCgpOwotICAgIEd0a0Jv
cmRlciBwYWRkaW5nOwotICAgIHBhZGRpbmcubGVmdCA9IGNvbWJvQ29udGVudHNCb3gubGVmdCAr
IGJveENvbnRlbnRzQm94LmxlZnQgKyBidXR0b25Db250ZW50c0JveC5sZWZ0ICsgYnV0dG9uQm94
Q29udGVudHNCb3gubGVmdDsKLSAgICBwYWRkaW5nLnJpZ2h0ID0gY29tYm9Db250ZW50c0JveC5y
aWdodCArIGJveENvbnRlbnRzQm94LnJpZ2h0ICsgYnV0dG9uQ29udGVudHNCb3gucmlnaHQgKyBi
dXR0b25Cb3hDb250ZW50c0JveC5yaWdodDsKLSAgICBwYWRkaW5nLnRvcCA9IGNvbWJvQ29udGVu
dHNCb3gudG9wICsgYm94Q29udGVudHNCb3gudG9wICsgYnV0dG9uQ29udGVudHNCb3gudG9wICsg
YnV0dG9uQm94Q29udGVudHNCb3gudG9wOwotICAgIHBhZGRpbmcuYm90dG9tID0gY29tYm9Db250
ZW50c0JveC5ib3R0b20gKyBib3hDb250ZW50c0JveC5ib3R0b20gKyBidXR0b25Db250ZW50c0Jv
eC5ib3R0b20gKyBidXR0b25Cb3hDb250ZW50c0JveC5ib3R0b207Ci0KLSAgICBhdXRvIGFycm93
U2l6ZSA9IGNvbWJvV2lkZ2V0LmFycm93KCkucHJlZmVycmVkU2l6ZSgpOwotICAgIHJldHVybiBM
ZW5ndGhCb3gocGFkZGluZy50b3AsIHBhZGRpbmcucmlnaHQgKyAoc3R5bGUuZGlyZWN0aW9uKCkg
PT0gVGV4dERpcmVjdGlvbjo6TFRSID8gYXJyb3dTaXplLndpZHRoKCkgOiAwKSwKLSAgICAgICAg
cGFkZGluZy5ib3R0b20sIHBhZGRpbmcubGVmdCArIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0
RGlyZWN0aW9uOjpSVEwgPyBhcnJvd1NpemUud2lkdGgoKSA6IDApKTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVj
dCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsK
LSAgICBhdXRvJiBjb21ib1dpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lQ29tYm9Cb3gm
PihSZW5kZXJUaGVtZVdpZGdldDo6Z2V0T3JDcmVhdGUoUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6
OkNvbWJvQm94KSk7Ci0gICAgYXV0byBjb21ib1N0YXRlID0gdGhlbWVQYXJ0U3RhdGVGbGFncygq
dGhpcywgQ29tYm9Cb3hCdXR0b24sIHJlbmRlck9iamVjdCk7Ci0gICAgY29tYm9XaWRnZXQuY29t
Ym9Cb3goKS5zZXRTdGF0ZShjb21ib1N0YXRlKTsKLSAgICBjb21ib1dpZGdldC5idXR0b24oKS5z
ZXRTdGF0ZShjb21ib1N0YXRlKTsKLSAgICBjb21ib1dpZGdldC5hcnJvdygpLnNldFN0YXRlKGNv
bWJvU3RhdGUpOwotCi0gICAgY2Fpcm9fdCogY3IgPSBwYWludEluZm8uY29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpLT5jcigpOwotICAgIGNvbWJvV2lkZ2V0LmNvbWJvQm94KCkucmVuZGVyKGNy
LCByZWN0KTsKLSAgICBjb21ib1dpZGdldC5ib3goKS5yZW5kZXIoY3IsIHJlY3QpOwotICAgIEZs
b2F0UmVjdCBjb250ZW50c1JlY3Q7Ci0gICAgY29tYm9XaWRnZXQuYnV0dG9uKCkucmVuZGVyKGNy
LCByZWN0LCAmY29udGVudHNSZWN0KTsKLSAgICBjb21ib1dpZGdldC5idXR0b25Cb3goKS5yZW5k
ZXIoY3IsIGNvbnRlbnRzUmVjdCk7Ci0gICAgY29tYm9XaWRnZXQuYXJyb3coKS5yZW5kZXIoY3Is
IGNvbnRlbnRzUmVjdCk7Ci0gICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQotICAgICAg
ICBjb21ib1dpZGdldC5idXR0b24oKS5yZW5kZXJGb2N1cyhjciwgcmVjdCk7Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3RCdXR0b25E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJCb3gmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZv
LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVudUxpc3Qob2Jq
ZWN0LCBpbmZvLCByZWN0KTsKLX0KLQotc3RhdGljIEludFNpemUgc3BpbkJ1dHRvblNpemUoKQot
ewotICAgIGF1dG8mIHNwaW5CdXR0b25XaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNw
aW5CdXR0b24mPihSZW5kZXJUaGVtZVdpZGdldDo6Z2V0T3JDcmVhdGUoUmVuZGVyVGhlbWVXaWRn
ZXQ6OlR5cGU6OlNwaW5CdXR0b24pKTsKLSAgICBzcGluQnV0dG9uV2lkZ2V0LnNwaW5CdXR0b24o
KS5zZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwotICAgIHNwaW5CdXR0b25XaWRnZXQu
ZW50cnkoKS5zZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwotICAgIHNwaW5CdXR0b25X
aWRnZXQudXAoKS5zZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwotICAgIHNwaW5CdXR0
b25XaWRnZXQuZG93bigpLnNldFN0YXRlKEdUS19TVEFURV9GTEFHX05PUk1BTCk7Ci0KLSAgICBJ
bnRTaXplIHByZWZlcnJlZFNpemUgPSBzcGluQnV0dG9uV2lkZ2V0LnNwaW5CdXR0b24oKS5wcmVm
ZXJyZWRTaXplKCk7Ci0gICAgcHJlZmVycmVkU2l6ZSA9IHByZWZlcnJlZFNpemUuZXhwYW5kZWRU
byhzcGluQnV0dG9uV2lkZ2V0LmVudHJ5KCkucHJlZmVycmVkU2l6ZSgpKTsKLSAgICBJbnRTaXpl
IHVwUHJlZmVycmVkU2l6ZSA9IHByZWZlcnJlZFNpemUuZXhwYW5kZWRUbyhzcGluQnV0dG9uV2lk
Z2V0LnVwKCkucHJlZmVycmVkU2l6ZSgpKTsKLSAgICBJbnRTaXplIGRvd25QcmVmZXJyZWRTaXpl
ID0gcHJlZmVycmVkU2l6ZS5leHBhbmRlZFRvKHNwaW5CdXR0b25XaWRnZXQuZG93bigpLnByZWZl
cnJlZFNpemUoKSk7Ci0KLSAgICByZXR1cm4gSW50U2l6ZSh1cFByZWZlcnJlZFNpemUud2lkdGgo
KSArIGRvd25QcmVmZXJyZWRTaXplLndpZHRoKCksIHN0ZDo6bWF4KHVwUHJlZmVycmVkU2l6ZS5o
ZWlnaHQoKSwgZG93blByZWZlcnJlZFNpemUuaGVpZ2h0KCkpKTsKLX0KLQotCi12b2lkIFJlbmRl
clRoZW1lR3RrOjphZGp1c3RUZXh0RmllbGRTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50
PihlbGVtZW50KSB8fCAhc2hvdWxkSGF2ZVNwaW5CdXR0b24oZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4oKmVsZW1lbnQpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3R5bGUuc2V0TWluSGVp
Z2h0KExlbmd0aChzcGluQnV0dG9uU2l6ZSgpLmhlaWdodCgpLCBGaXhlZCkpOwotCi0gICAgLy8g
VGhlIGRlZmF1bHQgdGhlbWUgZm9yIHRoZSBHVEsrIHBvcnQgdXNlcyB2ZXJ5IHdpZGUgc3BpbiBi
dXR0b25zICg2NnB4KSBjb21wYXJlZCB0byB3aGF0IG90aGVyCi0gICAgLy8gYnJvd3NlcnMgdXNl
ICh+MTMgcHgpLiBBbmQgdW5mb3J0dW5hdGVseSwgbW9zdCBvZiB0aGUgd2ViIGRldmVsb3BlcnMg
d29uJ3QgdGVzdCBob3cgdGhlaXIgc2l0ZQotICAgIC8vIHJlbmRlcnMgb24gV2ViS2l0R1RLLiBU
byBlbnN1cmUgdGhhdCBzcGluIGJ1dHRvbnMgZG9uJ3QgZW5kIHVwIGNvdmVyaW5nIHRoZSB2YWx1
ZXMgb2YgdGhlIGlucHV0Ci0gICAgLy8gZmllbGQsIHdlIG92ZXJyaWRlIHRoZSB3aWR0aCBvZiB0
aGUgaW5wdXQgZWxlbWVudCBhbmQgYWx3YXlzIGluY3JlbWVudCBpdCB3aXRoIHRoZSB3aWR0aCBu
ZWVkZWQKLSAgICAvLyBmb3IgdGhlIHNwaW5idXR0b24gKHdoZW4gZHJhd2luZyB0aGUgc3BpbmJ1
dHRvbikuCi0gICAgaW50IG1pbmltdW1XaWR0aCA9IHN0eWxlLndpZHRoKCkuaW50VmFsdWUoKSAr
IHNwaW5CdXR0b25TaXplKCkud2lkdGgoKTsKLSAgICBzdHlsZS5zZXRNaW5XaWR0aChMZW5ndGgo
bWluaW11bVdpZHRoLCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRl
eHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoaXM8SFRNTElu
cHV0RWxlbWVudD4ocmVuZGVyT2JqZWN0Lm5vZGUoKSkgJiYgc2hvdWxkSGF2ZVNwaW5CdXR0b24o
ZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKnJlbmRlck9iamVjdC5ub2RlKCkpKSkgewotICAg
ICAgICBhdXRvJiBzcGluQnV0dG9uV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVTcGlu
QnV0dG9uJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1lV2lkZ2V0
OjpUeXBlOjpTcGluQnV0dG9uKSk7Ci0gICAgICAgIGF1dG8gc3BpbkJ1dHRvblN0YXRlID0gdGhl
bWVQYXJ0U3RhdGVGbGFncygqdGhpcywgRW50cnksIHJlbmRlck9iamVjdCk7Ci0gICAgICAgIHNw
aW5CdXR0b25XaWRnZXQuc3BpbkJ1dHRvbigpLnNldFN0YXRlKHNwaW5CdXR0b25TdGF0ZSk7Ci0g
ICAgICAgIHNwaW5CdXR0b25XaWRnZXQuZW50cnkoKS5zZXRTdGF0ZShzcGluQnV0dG9uU3RhdGUp
OwotICAgICAgICBzcGluQnV0dG9uV2lkZ2V0LnNwaW5CdXR0b24oKS5yZW5kZXIocGFpbnRJbmZv
LmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci0gICAgICAgIHNwaW5C
dXR0b25XaWRnZXQuZW50cnkoKS5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byYgZW50cnlX
aWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVudHJ5Jj4oUmVuZGVyVGhlbWVXaWRnZXQ6
OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpFbnRyeSkpOwotICAgICAgICBl
bnRyeVdpZGdldC5lbnRyeSgpLnNldFN0YXRlKHRoZW1lUGFydFN0YXRlRmxhZ3MoKnRoaXMsIEVu
dHJ5LCByZW5kZXJPYmplY3QpKTsKLSAgICAgICAgZW50cnlXaWRnZXQuZW50cnkoKS5yZW5kZXIo
cGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci0KLSNp
ZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1l
bnQ+KHJlbmRlck9iamVjdC5nZW5lcmF0aW5nTm9kZSgpKSkgewotICAgICAgICAgICAgY29uc3Qg
YXV0byYgaW5wdXQgPSBkb3duY2FzdDxIVE1MSW5wdXRFbGVtZW50PigqKHJlbmRlck9iamVjdC5n
ZW5lcmF0aW5nTm9kZSgpKSk7Ci0gICAgICAgICAgICBpZiAoaW5wdXQubGlzdCgpKQotICAgICAg
ICAgICAgICAgIHBhaW50TGlzdEJ1dHRvbkZvcklucHV0KHJlbmRlck9iamVjdCwgcGFpbnRJbmZv
LCByZWN0KTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotc3RhdGljIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoUmVuZGVyVGhlbWVQYXJ0
IHRoZW1lUGFydCwgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIEFTU0VSVCh0aGVtZVBhcnQg
PT0gRW50cnlJY29uTGVmdCB8fCB0aGVtZVBhcnQgPT0gRW50cnlJY29uUmlnaHQpOwotICAgIGF1
dG8mIHNlYXJjaEVudHJ5V2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVTZWFyY2hFbnRy
eSY+KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlw
ZTo6U2VhcmNoRW50cnkpKTsKLSAgICBzZWFyY2hFbnRyeVdpZGdldC5lbnRyeSgpLnNldFN0YXRl
KEdUS19TVEFURV9GTEFHX05PUk1BTCk7Ci0gICAgc2VhcmNoRW50cnlXaWRnZXQubGVmdEljb24o
KS5zZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwotICAgIHNlYXJjaEVudHJ5V2lkZ2V0
LnJpZ2h0SWNvbigpLnNldFN0YXRlKEdUS19TVEFURV9GTEFHX05PUk1BTCk7Ci0KLSAgICAvLyBH
ZXQgdGhlIGljb24gc2l6ZSBiYXNlZCBvbiB0aGUgZm9udCBzaXplLgotICAgIGF1dG8mIGljb24g
PSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUljb25HYWRnZXQmPih0aGVtZVBhcnQgPT0gRW50cnlJ
Y29uTGVmdCA/IHNlYXJjaEVudHJ5V2lkZ2V0LmxlZnRJY29uKCkgOiBzZWFyY2hFbnRyeVdpZGdl
dC5yaWdodEljb24oKSk7Ci0gICAgaWNvbi5zZXRJY29uU2l6ZShzdHlsZS5jb21wdXRlZEZvbnRQ
aXhlbFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gaWNvbi5wcmVmZXJyZWRT
aXplKCk7Ci0gICAgR3RrQm9yZGVyIGNvbnRlbnRzQm94ID0gc2VhcmNoRW50cnlXaWRnZXQuZW50
cnkoKS5jb250ZW50c0JveCgpOwotICAgIGlmICh0aGVtZVBhcnQgPT0gRW50cnlJY29uTGVmdCkK
LSAgICAgICAgcHJlZmVycmVkU2l6ZS5leHBhbmQoY29udGVudHNCb3gubGVmdCwgY29udGVudHNC
b3gudG9wICsgY29udGVudHNCb3guYm90dG9tKTsKLSAgICBlbHNlCi0gICAgICAgIHByZWZlcnJl
ZFNpemUuZXhwYW5kKGNvbnRlbnRzQm94LnJpZ2h0LCBjb250ZW50c0JveC50b3AgKyBjb250ZW50
c0JveC5ib3R0b20pOwotICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChwcmVmZXJyZWRTaXplLndp
ZHRoKCksIEZpeGVkKSk7Ci0gICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChwcmVmZXJyZWRTaXpl
LmhlaWdodCgpLCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRB
cmVhKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBGbG9h
dFJlY3QmIHIpCi17Ci0gICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi12
b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShS
ZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgYWRqdXN0
U2VhcmNoRmllbGRDYW5jZWxCdXR0b25TdHlsZShzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVy
VGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlckJveCYg
bywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVy
biBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0KG8sIGksIHJlY3QpOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9u
UGFydFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Ci17Ci0g
ICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUoRW50cnlJY29uTGVmdCwgc3R5bGUpOwotfQot
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxl
KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgYWRqdXN0
U2VhcmNoRmllbGRJY29uU3R5bGUoRW50cnlJY29uUmlnaHQsIHN0eWxlKTsKLX0KLQotc3RhdGlj
IGJvb2wgcGFpbnRTZWFyY2hGaWVsZEljb24oUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJU
aGVtZVBhcnQgdGhlbWVQYXJ0LCBjb25zdCBSZW5kZXJCb3gmIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJU
KHRoZW1lUGFydCA9PSBFbnRyeUljb25MZWZ0IHx8IHRoZW1lUGFydCA9PSBFbnRyeUljb25SaWdo
dCk7Ci0gICAgYXV0byYgc2VhcmNoRW50cnlXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVt
ZVNlYXJjaEVudHJ5Jj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1l
V2lkZ2V0OjpUeXBlOjpTZWFyY2hFbnRyeSkpOwotICAgIHNlYXJjaEVudHJ5V2lkZ2V0LmVudHJ5
KCkuc2V0U3RhdGUodGhlbWVQYXJ0U3RhdGVGbGFncygqdGhlbWUsIEVudHJ5LCByZW5kZXJPYmpl
Y3QpKTsKLSAgICBhdXRvJiBpY29uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVJY29uR2FkZ2V0
Jj4odGhlbWVQYXJ0ID09IEVudHJ5SWNvbkxlZnQgPyBzZWFyY2hFbnRyeVdpZGdldC5sZWZ0SWNv
bigpIDogc2VhcmNoRW50cnlXaWRnZXQucmlnaHRJY29uKCkpOwotICAgIGljb24uc2V0U3RhdGUo
dGhlbWVQYXJ0U3RhdGVGbGFncygqdGhlbWUsIHRoZW1lUGFydCwgcmVuZGVyT2JqZWN0KSk7Ci0g
ICAgaWNvbi5zZXRJY29uU2l6ZShyZW5kZXJPYmplY3Quc3R5bGUoKS5jb21wdXRlZEZvbnRQaXhl
bFNpemUoKSk7Ci0gICAgR3RrQm9yZGVyIGNvbnRlbnRzQm94ID0gc2VhcmNoRW50cnlXaWRnZXQu
ZW50cnkoKS5jb250ZW50c0JveCgpOwotICAgIEludFJlY3QgaWNvblJlY3QgPSByZWN0OwotICAg
IGlmICh0aGVtZVBhcnQgPT0gRW50cnlJY29uTGVmdCkgewotICAgICAgICBpY29uUmVjdC5tb3Zl
KGNvbnRlbnRzQm94LmxlZnQsIGNvbnRlbnRzQm94LnRvcCk7Ci0gICAgICAgIGljb25SZWN0LmNv
bnRyYWN0KGNvbnRlbnRzQm94LmxlZnQsIGNvbnRlbnRzQm94LnRvcCArIGNvbnRlbnRzQm94LmJv
dHRvbSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGljb25SZWN0LmNvbnRyYWN0KGNvbnRlbnRzQm94
LnJpZ2h0LCBjb250ZW50c0JveC50b3AgKyBjb250ZW50c0JveC5ib3R0b20pOwotICAgIHJldHVy
biAhaWNvbi5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSwgaWNvblJlY3QpOwotfQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydChjb25zdCBSZW5kZXJCb3gmIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJu
IHBhaW50U2VhcmNoRmllbGRJY29uKHRoaXMsIEVudHJ5SWNvbkxlZnQsIHJlbmRlck9iamVjdCwg
cGFpbnRJbmZvLCByZWN0KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hG
aWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJCb3gmIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBh
aW50U2VhcmNoRmllbGRJY29uKHRoaXMsIEVudHJ5SWNvblJpZ2h0LCByZW5kZXJPYmplY3QsIHBh
aW50SW5mbywgcmVjdCk7Ci19Ci0KLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLXZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdExpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUs
IGNvbnN0IEVsZW1lbnQqKSBjb25zdAotewotICAgIC8vIEFkZCBhIG1hcmdpbiB0byBwbGFjZSB0
aGUgYnV0dG9uIGF0IGVuZCBvZiB0aGUgaW5wdXQgZmllbGQuCi0gICAgaWYgKHN0eWxlLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgc3R5bGUuc2V0TWFyZ2luUmlnaHQoTGVuZ3Ro
KC00LCBGaXhlZCkpOwotICAgIGVsc2UKLSAgICAgICAgc3R5bGUuc2V0TWFyZ2luTGVmdChMZW5n
dGgoLTQsIEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnBhaW50TGlzdEJ1dHRv
bkZvcklucHV0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIC8vIFVzZSBhIGNv
bWJvIGJveCB3aWRnZXQgdG8gcmVuZGVyIGl0cyBhcnJvdy4KLSAgICBhdXRvJiBjb21ib1dpZGdl
dCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lQ29tYm9Cb3gmPihSZW5kZXJUaGVtZVdpZGdldDo6
Z2V0T3JDcmVhdGUoUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OkNvbWJvQm94KSk7Ci0gICAgY29t
Ym9XaWRnZXQuYXJyb3coKS5zZXRTdGF0ZSh0aGVtZVBhcnRTdGF0ZUZsYWdzKCp0aGlzLCBDb21i
b0JveEJ1dHRvbiwgcmVuZGVyT2JqZWN0KSk7Ci0KLSAgICAvLyBCdXQgYSBzZWFyY2ggZW50cnkg
d2lkZ2V0IHRvIGdldCB0aGUgY29udGVudHMgcmVjdCwgc2luY2UgdGhpcyBpcyBhIHRleHQgaW5w
dXQgZmllbGQuCi0gICAgYXV0byYgc2VhcmNoRW50cnlXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUaGVtZVNlYXJjaEVudHJ5Jj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRl
clRoZW1lV2lkZ2V0OjpUeXBlOjpTZWFyY2hFbnRyeSkpOwotICAgIGF1dG8mIGljb24gPSBzdGF0
aWNfY2FzdDxSZW5kZXJUaGVtZUljb25HYWRnZXQmPihzZWFyY2hFbnRyeVdpZGdldC5yaWdodElj
b24oKSk7Ci0gICAgaWNvbi5zZXRJY29uU2l6ZShjb21ib1dpZGdldC5hcnJvdygpLnByZWZlcnJl
ZFNpemUoKS53aWR0aCgpKTsKLSAgICBHdGtCb3JkZXIgY29udGVudHNCb3ggPSBzZWFyY2hFbnRy
eVdpZGdldC5lbnRyeSgpLmNvbnRlbnRzQm94KCk7Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkUmVj
dChyZWN0KTsKLSAgICBhZGp1c3RlZFJlY3QubW92ZShjb250ZW50c0JveC5sZWZ0LCBjb250ZW50
c0JveC50b3ApOwotICAgIGFkanVzdGVkUmVjdC5jb250cmFjdChjb250ZW50c0JveC5yaWdodCAr
IDEsIGNvbnRlbnRzQm94LnRvcCArIGNvbnRlbnRzQm94LmJvdHRvbSk7Ci0gICAgY29tYm9XaWRn
ZXQuYXJyb3coKS5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSwgYWRqdXN0ZWRSZWN0KTsKLX0KLSNlbmRpZgotCi12b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCop
IGNvbnN0Ci17Ci0gICAgLy8gV2UgY2Fubm90IGdpdmUgYSBwcm9wZXIgcmVuZGVyaW5nIHdoZW4g
Ym9yZGVyIHJhZGl1cyBpcyBhY3RpdmUsIHVuZm9ydHVuYXRlbHkuCi0gICAgc3R5bGUucmVzZXRC
b3JkZXJSYWRpdXMoKTsKLSAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0
aWFsTGluZUhlaWdodCgpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hG
aWVsZChjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50
UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcmVjdCk7Ci19
Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnNob3VsZEhhdmVDYXBzTG9ja0luZGljYXRvcihjb25z
dCBIVE1MSW5wdXRFbGVtZW50JiBlbGVtZW50KSBjb25zdAotewotICAgIHJldHVybiBlbGVtZW50
LmlzUGFzc3dvcmRGaWVsZCgpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlk
ZXJUcmFja1N0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Ci17
Ci0gICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxl
bWVudCogZWxlbWVudCkgY29uc3QKLXsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1
bWJTdHlsZShzdHlsZSwgZWxlbWVudCk7Ci0gICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIp
OwotfQotCi0vKgotICogR3RrU2NhbGUKLSAqCi0gKiBzY2FsZQotICog4pWw4pSA4pSAIGNvbnRl
bnRzCi0gKiAgICAg4pWw4pSA4pSAIHRyb3VnaAotICogICAgICAgICDilJzilIDilIAgc2xpZGVy
Ci0gKiAgICAgICAgIOKVsOKUgOKUgCBbaGlnaGxpZ2h0XQotICovCi1ib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBD
b250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwotICAg
IEFTU0VSVChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVy
dGljYWxQYXJ0KTsKLQotICAgIGF1dG8mIHNsaWRlcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lU2xpZGVyJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKHBhcnQgPT0gU2xp
ZGVySG9yaXpvbnRhbFBhcnQgPyBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6SG9yaXpvbnRhbFNs
aWRlciA6IFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNhbFNsaWRlcikpOwotICAgIGF1
dG8gc2NhbGVTdGF0ZSA9IHRoZW1lUGFydFN0YXRlRmxhZ3MoKnRoaXMsIFNjYWxlLCByZW5kZXJP
YmplY3QpOwotICAgIGF1dG8mIHNjYWxlID0gc2xpZGVyV2lkZ2V0LnNjYWxlKCk7Ci0gICAgc2Nh
bGUuc2V0U3RhdGUoc2NhbGVTdGF0ZSk7Ci0gICAgYXV0byYgY29udGVudHMgPSBzbGlkZXJXaWRn
ZXQuY29udGVudHMoKTsKLSAgICBhdXRvJiB0cm91Z2ggPSBzbGlkZXJXaWRnZXQudHJvdWdoKCk7
Ci0gICAgdHJvdWdoLnNldFN0YXRlKHNjYWxlU3RhdGUpOwotICAgIGF1dG8mIHNsaWRlciA9IHNs
aWRlcldpZGdldC5zbGlkZXIoKTsKLSAgICBhdXRvJiBoaWdobGlnaHQgPSBzbGlkZXJXaWRnZXQu
aGlnaGxpZ2h0KCk7Ci0KLSAgICAvLyBUaGUgZ2l2ZW4gcmVjdGFuZ2xlIGlzIG5vdCBjYWxjdWxh
dGVkIGJhc2VkIG9uIHRoZSBzY2FsZSBzaXplLCBidXQgYWxsIHRoZSBtYXJnaW5zIGFuZCBwYWRk
aW5ncyBhcmUgYmFzZWQgb24gaXQuCi0gICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gc2NhbGUu
cHJlZmVycmVkU2l6ZSgpOwotICAgIHByZWZlcnJlZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFu
ZGVkVG8oY29udGVudHMucHJlZmVycmVkU2l6ZSgpKTsKLSAgICBwcmVmZXJyZWRTaXplID0gcHJl
ZmVycmVkU2l6ZS5leHBhbmRlZFRvKHRyb3VnaC5wcmVmZXJyZWRTaXplKCkpOwotICAgIEZsb2F0
UmVjdCB0cmFja1JlY3QgPSByZWN0OwotICAgIGlmIChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQ
YXJ0KSB7Ci0gICAgICAgIHRyYWNrUmVjdC5tb3ZlKDAsIHJlY3QuaGVpZ2h0KCkgLyAyIC0gKHBy
ZWZlcnJlZFNpemUuaGVpZ2h0KCkgLyAyKSk7Ci0gICAgICAgIHRyYWNrUmVjdC5zZXRIZWlnaHQo
cHJlZmVycmVkU2l6ZS5oZWlnaHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdHJhY2tSZWN0
Lm1vdmUocmVjdC53aWR0aCgpIC8gMiAtIChwcmVmZXJyZWRTaXplLndpZHRoKCkgLyAyKSwgMCk7
Ci0gICAgICAgIHRyYWNrUmVjdC5zZXRXaWR0aChwcmVmZXJyZWRTaXplLndpZHRoKCkpOwotICAg
IH0KLQotICAgIEZsb2F0UmVjdCBjb250ZW50c1JlY3Q7Ci0gICAgc2NhbGUucmVuZGVyKHBhaW50
SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHRyYWNrUmVjdCwgJmNvbnRl
bnRzUmVjdCk7Ci0gICAgY29udGVudHMucmVuZGVyKHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCktPmNyKCksIGNvbnRlbnRzUmVjdCwgJmNvbnRlbnRzUmVjdCk7Ci0gICAgLy8g
U2NhbGUgdHJvdWdoIGRlZmluZXMgaXRzIHNpemUgcXVlcnlpbmcgc2xpZGVyIGFuZCBoaWdobGln
aHQuCi0gICAgaWYgKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQpCi0gICAgICAgIGNvbnRl
bnRzUmVjdC5zZXRIZWlnaHQodHJvdWdoLnByZWZlcnJlZFNpemUoKS5oZWlnaHQoKSArIHN0ZDo6
bWF4KHNsaWRlci5wcmVmZXJyZWRTaXplKCkuaGVpZ2h0KCksIGhpZ2hsaWdodC5wcmVmZXJyZWRT
aXplKCkuaGVpZ2h0KCkpKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRlbnRzUmVjdC5zZXRXaWR0
aCh0cm91Z2gucHJlZmVycmVkU2l6ZSgpLndpZHRoKCkgKyBzdGQ6Om1heChzbGlkZXIucHJlZmVy
cmVkU2l6ZSgpLndpZHRoKCksIGhpZ2hsaWdodC5wcmVmZXJyZWRTaXplKCkud2lkdGgoKSkpOwot
ICAgIEZsb2F0UmVjdCB0cm91Z2hSZWN0ID0gY29udGVudHNSZWN0OwotICAgIHRyb3VnaC5yZW5k
ZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgdHJvdWdoUmVj
dCwgJmNvbnRlbnRzUmVjdCk7Ci0gICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQotICAg
ICAgICB0cm91Z2gucmVuZGVyRm9jdXMocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgdHJvdWdoUmVjdCk7Ci0KLSAgICBMYXlvdXRQb2ludCB0aHVtYkxvY2F0aW9u
OwotICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihyZW5kZXJPYmplY3Qubm9kZSgpKSkgewot
ICAgICAgICBhdXRvJiBpbnB1dCA9IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpyZW5kZXJP
YmplY3Qubm9kZSgpKTsKLSAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBpbnB1dC5zbGlkZXJU
aHVtYkVsZW1lbnQoKSkKLSAgICAgICAgICAgIHRodW1iTG9jYXRpb24gPSBlbGVtZW50LT5yZW5k
ZXJCb3goKS0+bG9jYXRpb24oKTsKLSAgICB9Ci0KLSAgICBpZiAocGFydCA9PSBTbGlkZXJIb3Jp
em9udGFsUGFydCkgewotICAgICAgICBpZiAocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9u
KCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKSB7Ci0gICAgICAgICAgICBjb250ZW50c1JlY3QubW92
ZSh0aHVtYkxvY2F0aW9uLngoKSwgMCk7Ci0gICAgICAgICAgICBjb250ZW50c1JlY3Quc2V0V2lk
dGgoY29udGVudHNSZWN0LndpZHRoKCkgLSB0aHVtYkxvY2F0aW9uLngoKSk7Ci0gICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgY29udGVudHNSZWN0LnNldFdpZHRoKHRodW1iTG9jYXRpb24ueCgp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY29udGVudHNSZWN0LnNldEhlaWdodCh0aHVtYkxvY2F0
aW9uLnkoKSk7Ci0gICAgaGlnaGxpZ2h0LnJlbmRlcihwYWludEluZm8uY29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpLT5jcigpLCBjb250ZW50c1JlY3QpOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0
ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwotICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byYgc2xpZGVyV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVT
bGlkZXImPihSZW5kZXJUaGVtZVdpZGdldDo6Z2V0T3JDcmVhdGUocGFydCA9PSBTbGlkZXJUaHVt
Ykhvcml6b250YWxQYXJ0ID8gUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6Okhvcml6b250YWxTbGlk
ZXIgOiBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6VmVydGljYWxTbGlkZXIpKTsKLSAgICBzbGlk
ZXJXaWRnZXQuc2NhbGUoKS5zZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwotICAgIHNs
aWRlcldpZGdldC50cm91Z2goKS5zZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwotCi0g
ICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gc2xpZGVyV2lkZ2V0LnNjYWxlKCkucHJlZmVycmVk
U2l6ZSgpOwotICAgIHByZWZlcnJlZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFuZGVkVG8oc2xp
ZGVyV2lkZ2V0LmNvbnRlbnRzKCkucHJlZmVycmVkU2l6ZSgpKTsKLSAgICBwcmVmZXJyZWRTaXpl
ID0gcHJlZmVycmVkU2l6ZS5leHBhbmRlZFRvKHNsaWRlcldpZGdldC50cm91Z2goKS5wcmVmZXJy
ZWRTaXplKCkpOwotICAgIHByZWZlcnJlZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFuZGVkVG8o
c2xpZGVyV2lkZ2V0LnNsaWRlcigpLnByZWZlcnJlZFNpemUoKSk7Ci0gICAgaWYgKHBhcnQgPT0g
U2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkgewotICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5n
dGgocHJlZmVycmVkU2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS5zZXRIZWln
aHQoTGVuZ3RoKHByZWZlcnJlZFNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgQVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOwot
ICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aChwcmVmZXJyZWRTaXplLmhlaWdodCgpLCBGaXhlZCkp
OwotICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgocHJlZmVycmVkU2l6ZS53aWR0aCgpLCBGaXhl
ZCkpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0
LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwotICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iSG9y
aXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7Ci0KLSAgICBh
dXRvJiBzbGlkZXJXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNsaWRlciY+KFJlbmRl
clRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBh
cnQgPyBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6SG9yaXpvbnRhbFNsaWRlciA6IFJlbmRlclRo
ZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNhbFNsaWRlcikpOwotICAgIGF1dG8gc2NhbGVTdGF0ZSA9
IHRoZW1lUGFydFN0YXRlRmxhZ3MoKnRoaXMsIFNjYWxlLCByZW5kZXJPYmplY3QpOwotICAgIGF1
dG8mIHNjYWxlID0gc2xpZGVyV2lkZ2V0LnNjYWxlKCk7Ci0gICAgc2NhbGUuc2V0U3RhdGUoc2Nh
bGVTdGF0ZSk7Ci0gICAgYXV0byYgY29udGVudHMgPSBzbGlkZXJXaWRnZXQuY29udGVudHMoKTsK
LSAgICBhdXRvJiB0cm91Z2ggPSBzbGlkZXJXaWRnZXQudHJvdWdoKCk7Ci0gICAgdHJvdWdoLnNl
dFN0YXRlKHNjYWxlU3RhdGUpOwotICAgIGF1dG8mIHNsaWRlciA9IHNsaWRlcldpZGdldC5zbGlk
ZXIoKTsKLSAgICBzbGlkZXIuc2V0U3RhdGUodGhlbWVQYXJ0U3RhdGVGbGFncygqdGhpcywgU2Nh
bGVTbGlkZXIsIHJlbmRlck9iamVjdCkpOwotICAgIGF1dG8mIGhpZ2hsaWdodCA9IHNsaWRlcldp
ZGdldC5oaWdobGlnaHQoKTsKLQotICAgIEd0a0JvcmRlciBzY2FsZUNvbnRlbnRzQm94ID0gc2Nh
bGUuY29udGVudHNCb3goKTsKLSAgICBHdGtCb3JkZXIgY29udGVudHNDb250ZW50c0JveCA9IGNv
bnRlbnRzLmNvbnRlbnRzQm94KCk7Ci0gICAgR3RrQm9yZGVyIHRyb3VnaENvbnRlbnRzQm94ID0g
dHJvdWdoLmNvbnRlbnRzQm94KCk7Ci0gICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAgcGFkZGlu
Zy5sZWZ0ID0gc2NhbGVDb250ZW50c0JveC5sZWZ0ICsgY29udGVudHNDb250ZW50c0JveC5sZWZ0
ICsgdHJvdWdoQ29udGVudHNCb3gubGVmdDsKLSAgICBwYWRkaW5nLnJpZ2h0ID0gc2NhbGVDb250
ZW50c0JveC5yaWdodCArIGNvbnRlbnRzQ29udGVudHNCb3gucmlnaHQgKyB0cm91Z2hDb250ZW50
c0JveC5yaWdodDsKLSAgICBwYWRkaW5nLnRvcCA9IHNjYWxlQ29udGVudHNCb3gudG9wICsgY29u
dGVudHNDb250ZW50c0JveC50b3AgKyB0cm91Z2hDb250ZW50c0JveC50b3A7Ci0gICAgcGFkZGlu
Zy5ib3R0b20gPSBzY2FsZUNvbnRlbnRzQm94LmJvdHRvbSArIGNvbnRlbnRzQ29udGVudHNCb3gu
Ym90dG9tICsgdHJvdWdoQ29udGVudHNCb3guYm90dG9tOwotCi0gICAgLy8gU2NhbGUgdHJvdWdo
IGRlZmluZXMgaXRzIHNpemUgcXVlcnlpbmcgc2xpZGVyIGFuZCBoaWdobGlnaHQuCi0gICAgaW50
IHRyb3VnaEhlaWdodCA9IHRyb3VnaC5wcmVmZXJyZWRTaXplKCkuaGVpZ2h0KCkgKyBzdGQ6Om1h
eChzbGlkZXIucHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpLCBoaWdobGlnaHQucHJlZmVycmVkU2l6
ZSgpLmhlaWdodCgpKTsKLSAgICBJbnRSZWN0IHNsaWRlclJlY3QocmVjdC5sb2NhdGlvbigpLCBJ
bnRTaXplKHRyb3VnaEhlaWdodCwgdHJvdWdoSGVpZ2h0KSk7Ci0gICAgc2xpZGVyUmVjdC5tb3Zl
KHBhZGRpbmcubGVmdCwgcGFkZGluZy50b3ApOwotICAgIHNsaWRlclJlY3QuY29udHJhY3QocGFk
ZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodCwgcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbSk7
Ci0gICAgc2xpZGVyLnJlbmRlcihwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgp
LT5jcigpLCBzbGlkZXJSZWN0KTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUludFJlY3QgUmVu
ZGVyVGhlbWVHdGs6OnByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgSW50UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIGNvbnN0
IGF1dG8mIHJlbmRlclByb2dyZXNzID0gZG93bmNhc3Q8UmVuZGVyUHJvZ3Jlc3M+KHJlbmRlck9i
amVjdCk7Ci0gICAgYXV0byYgcHJvZ3Jlc3NCYXJXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJU
aGVtZVByb2dyZXNzQmFyJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKHJlbmRlclBy
b2dyZXNzLmlzRGV0ZXJtaW5hdGUoKSA/IFJlbmRlclRoZW1lUHJvZ3Jlc3NCYXI6OlR5cGU6OlBy
b2dyZXNzQmFyIDogUmVuZGVyVGhlbWVQcm9ncmVzc0Jhcjo6VHlwZTo6SW5kZXRlcm1pbmF0ZVBy
b2dyZXNzQmFyKSk7Ci0gICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gcHJvZ3Jlc3NCYXJXaWRn
ZXQucHJvZ3Jlc3NCYXIoKS5wcmVmZXJyZWRTaXplKCk7Ci0gICAgcHJlZmVycmVkU2l6ZSA9IHBy
ZWZlcnJlZFNpemUuZXhwYW5kZWRUbyhwcm9ncmVzc0JhcldpZGdldC50cm91Z2goKS5wcmVmZXJy
ZWRTaXplKCkpOwotICAgIHByZWZlcnJlZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFuZGVkVG8o
cHJvZ3Jlc3NCYXJXaWRnZXQucHJvZ3Jlc3MoKS5wcmVmZXJyZWRTaXplKCkpOwotICAgIHJldHVy
biBJbnRSZWN0KGJvdW5kcy54KCksIGJvdW5kcy55KCksIGJvdW5kcy53aWR0aCgpLCBwcmVmZXJy
ZWRTaXplLmhlaWdodCgpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRQcm9ncmVz
c0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZW5kZXJPYmplY3Qu
aXNQcm9ncmVzcygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNvbnN0IGF1dG8mIHJl
bmRlclByb2dyZXNzID0gZG93bmNhc3Q8UmVuZGVyUHJvZ3Jlc3M+KHJlbmRlck9iamVjdCk7Ci0g
ICAgYXV0byYgcHJvZ3Jlc3NCYXJXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVByb2dy
ZXNzQmFyJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKHJlbmRlclByb2dyZXNzLmlz
RGV0ZXJtaW5hdGUoKSA/IFJlbmRlclRoZW1lUHJvZ3Jlc3NCYXI6OlR5cGU6OlByb2dyZXNzQmFy
IDogUmVuZGVyVGhlbWVQcm9ncmVzc0Jhcjo6VHlwZTo6SW5kZXRlcm1pbmF0ZVByb2dyZXNzQmFy
KSk7Ci0gICAgcHJvZ3Jlc3NCYXJXaWRnZXQucHJvZ3Jlc3NCYXIoKS5yZW5kZXIocGFpbnRJbmZv
LmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci0gICAgcHJvZ3Jlc3NC
YXJXaWRnZXQudHJvdWdoKCkucmVuZGVyKHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250
ZXh0KCktPmNyKCksIHJlY3QpOwotICAgIHByb2dyZXNzQmFyV2lkZ2V0LnByb2dyZXNzKCkucmVu
ZGVyKHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGNhbGN1bGF0
ZVByb2dyZXNzUmVjdChyZW5kZXJPYmplY3QsIHJlY3QpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLVJlbmRlclRoZW1lOjpJbm5lclNwaW5CdXR0b25MYXlvdXQgUmVuZGVyVGhlbWVHdGs6Omlu
bmVyU3BpbkJ1dHRvbkxheW91dChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCkgY29u
c3QKLXsKLSAgICByZXR1cm4gcmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4
dERpcmVjdGlvbjo6UlRMID8gSW5uZXJTcGluQnV0dG9uTGF5b3V0OjpIb3Jpem9udGFsVXBMZWZ0
IDogSW5uZXJTcGluQnV0dG9uTGF5b3V0OjpIb3Jpem9udGFsVXBSaWdodDsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZUd0azo6YWRqdXN0SW5uZXJTcGluQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0
eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKLXsKLSAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgo
c3BpbkJ1dHRvblNpemUoKS53aWR0aCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLnNldEhlaWdodChM
ZW5ndGgoc3BpbkJ1dHRvblNpemUoKS5oZWlnaHQoKSwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5k
ZXJUaGVtZUd0azo6cGFpbnRJbm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIGF1dG8mIHNwaW5CdXR0b25XaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVt
ZVNwaW5CdXR0b24mPihSZW5kZXJUaGVtZVdpZGdldDo6Z2V0T3JDcmVhdGUoUmVuZGVyVGhlbWVX
aWRnZXQ6OlR5cGU6OlNwaW5CdXR0b24pKTsKLSAgICBhdXRvIHNwaW5CdXR0b25TdGF0ZSA9IHRo
ZW1lUGFydFN0YXRlRmxhZ3MoKnRoaXMsIFNwaW5CdXR0b24sIHJlbmRlck9iamVjdCk7Ci0gICAg
c3BpbkJ1dHRvbldpZGdldC5zcGluQnV0dG9uKCkuc2V0U3RhdGUoc3BpbkJ1dHRvblN0YXRlKTsK
LSAgICBzcGluQnV0dG9uV2lkZ2V0LmVudHJ5KCkuc2V0U3RhdGUoc3BpbkJ1dHRvblN0YXRlKTsK
LSAgICBhdXRvJiB1cCA9IHNwaW5CdXR0b25XaWRnZXQudXAoKTsKLSAgICB1cC5zZXRTdGF0ZSh0
aGVtZVBhcnRTdGF0ZUZsYWdzKCp0aGlzLCBTcGluQnV0dG9uVXBCdXR0b24sIHJlbmRlck9iamVj
dCkpOwotICAgIGF1dG8mIGRvd24gPSBzcGluQnV0dG9uV2lkZ2V0LmRvd24oKTsKLSAgICBkb3du
LnNldFN0YXRlKHRoZW1lUGFydFN0YXRlRmxhZ3MoKnRoaXMsIFNwaW5CdXR0b25Eb3duQnV0dG9u
LCByZW5kZXJPYmplY3QpKTsKLQotICAgIEludFJlY3QgaWNvblJlY3QgPSByZWN0OwotICAgIGlj
b25SZWN0LnNldFdpZHRoKGljb25SZWN0LndpZHRoKCkgLyAyKTsKLSAgICBpZiAocmVuZGVyT2Jq
ZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICB1
cC5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgaWNv
blJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgZG93bi5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQo
KS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgaWNvblJlY3QpOwotICAgIGljb25SZWN0Lm1vdmUo
aWNvblJlY3Qud2lkdGgoKSwgMCk7Ci0gICAgaWYgKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCkKLSAgICAgICAgZG93bi5yZW5kZXIocGFpbnRJ
bmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgaWNvblJlY3QpOwotICAgIGVs
c2UKLSAgICAgICAgdXAucmVuZGVyKHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIGljb25SZWN0KTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogU2Vjb25kcyBS
ZW5kZXJUaGVtZUd0azo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QKIHsKLSAgICBHdGtTZXR0
aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKLQogICAgIGdib29s
ZWFuIHNob3VsZEJsaW5rOwogICAgIGdpbnQgdGltZTsKLQotICAgIGdfb2JqZWN0X2dldChzZXR0
aW5ncywgImd0ay1jdXJzb3ItYmxpbmsiLCAmc2hvdWxkQmxpbmssICJndGstY3Vyc29yLWJsaW5r
LXRpbWUiLCAmdGltZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAoIXNob3VsZEJsaW5rKQotICAgICAg
ICByZXR1cm4gMF9zOwotCi0gICAgcmV0dXJuIDUwMF91cyAqIHRpbWU7Ci19Ci0KLWVudW0gU3R5
bGVDb2xvclR5cGUgeyBTdHlsZUNvbG9yQmFja2dyb3VuZCwgU3R5bGVDb2xvckZvcmVncm91bmQg
fTsKLQotc3RhdGljIENvbG9yIHN0eWxlQ29sb3IoUmVuZGVyVGhlbWVQYXJ0IHRoZW1lUGFydCwg
R3RrU3RhdGVGbGFncyBzdGF0ZSwgU3R5bGVDb2xvclR5cGUgY29sb3JUeXBlKQotewotICAgIFJl
bmRlclRoZW1lR2FkZ2V0KiBnYWRnZXQgPSBudWxscHRyOwotICAgIHN3aXRjaCAodGhlbWVQYXJ0
KSB7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IEZBTExUSFJPVUdIOwotICAgIGNhc2UgRW50cnk6Ci0gICAgICAgIGdhZGdldCA9ICZzdGF0aWNf
Y2FzdDxSZW5kZXJUaGVtZUVudHJ5Jj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJl
bmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpFbnRyeSkpLmVudHJ5KCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRW50cnlTZWxlY3Rpb246Ci0gICAgICAgIGdhZGdldCA9IHN0YXRpY19jYXN0PFJl
bmRlclRoZW1lRW50cnkmPihSZW5kZXJUaGVtZVdpZGdldDo6Z2V0T3JDcmVhdGUoUmVuZGVyVGhl
bWVXaWRnZXQ6OlR5cGU6OlNlbGVjdGVkRW50cnkpKS5zZWxlY3Rpb24oKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBMaXN0Qm94OgotICAgICAgICBnYWRnZXQgPSAmc3RhdGljX2Nhc3Q8UmVu
ZGVyVGhlbWVMaXN0VmlldyY+KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5kZXJU
aGVtZVdpZGdldDo6VHlwZTo6TGlzdFZpZXcpKS50cmVldmlldygpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEJ1dHRvbjoKLSAgICAgICAgZ2FkZ2V0ID0gJnN0YXRpY19jYXN0PFJlbmRlclRo
ZW1lQnV0dG9uJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1lV2lk
Z2V0OjpUeXBlOjpCdXR0b24pKS5idXR0b24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
aW5kb3c6Ci0gICAgICAgIGdhZGdldCA9ICZzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVdpbmRvdyY+
KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6
V2luZG93KSkud2luZG93KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEFTU0VSVChn
YWRnZXQpOwotICAgIGdhZGdldC0+c2V0U3RhdGUoc3RhdGUpOwotICAgIHJldHVybiBjb2xvclR5
cGUgPT0gU3R5bGVDb2xvckJhY2tncm91bmQgPyBnYWRnZXQtPmJhY2tncm91bmRDb2xvcigpIDog
Z2FkZ2V0LT5jb2xvcigpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1BY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+
KSBjb25zdAotewotICAgIHJldHVybiBzdHlsZUNvbG9yKEVudHJ5U2VsZWN0aW9uLCBzdGF0aWNf
Y2FzdDxHdGtTdGF0ZUZsYWdzPihHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCB8IEdUS19TVEFURV9G
TEFHX0ZPQ1VTRUQpLCBTdHlsZUNvbG9yQmFja2dyb3VuZCk7CisgICAgZ19vYmplY3RfZ2V0KGd0
a19zZXR0aW5nc19nZXRfZGVmYXVsdCgpLCAiZ3RrLWN1cnNvci1ibGluayIsICZzaG91bGRCbGlu
aywgImd0ay1jdXJzb3ItYmxpbmstdGltZSIsICZ0aW1lLCBudWxscHRyKTsKKyAgICByZXR1cm4g
c2hvdWxkQmxpbmsgPyA1MDBfdXMgKiB0aW1lIDogMF9zOwogfQogCi1Db2xvciBSZW5kZXJUaGVt
ZUd0azo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8
U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0eWxlQ29sb3IoRW50
cnlTZWxlY3Rpb24sIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCBTdHlsZUNvbG9yQmFja2dyb3Vu
ZCk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHN0eWxlQ29sb3IoRW50cnlTZWxlY3Rpb24sIHN0YXRpY19jYXN0PEd0a1N0YXRl
RmxhZ3M+KEdUS19TVEFURV9GTEFHX1NFTEVDVEVEIHwgR1RLX1NUQVRFX0ZMQUdfRk9DVVNFRCks
IFN0eWxlQ29sb3JGb3JlZ3JvdW5kKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRm
b3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6
Ok9wdGlvbnM+KSBjb25zdAotewotICAgIHJldHVybiBzdHlsZUNvbG9yKEVudHJ5U2VsZWN0aW9u
LCBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCwgU3R5bGVDb2xvckZvcmVncm91bmQpOwotfQotCi1D
b2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc3R5bGVDb2xvcihMaXN0Qm94LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihHVEtf
U1RBVEVfRkxBR19TRUxFQ1RFRCB8IEdUS19TVEFURV9GTEFHX0ZPQ1VTRUQpLCBTdHlsZUNvbG9y
QmFja2dyb3VuZCk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZl
TGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0eWxlQ29sb3IoTGlzdEJveCwgR1RLX1NUQVRF
X0ZMQUdfU0VMRUNURUQsIFN0eWxlQ29sb3JCYWNrZ3JvdW5kKTsKLX0KLQotQ29sb3IgUmVuZGVy
VGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihP
cHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0eWxl
Q29sb3IoTGlzdEJveCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oR1RLX1NUQVRFX0ZMQUdf
U0VMRUNURUQgfCBHVEtfU1RBVEVfRkxBR19GT0NVU0VEKSwgU3R5bGVDb2xvckZvcmVncm91bmQp
OwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25z
dAotewotICAgIHJldHVybiBzdHlsZUNvbG9yKExpc3RCb3gsIEdUS19TVEFURV9GTEFHX1NFTEVD
VEVELCBTdHlsZUNvbG9yRm9yZWdyb3VuZCk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpk
aXNhYmxlZFRleHRDb2xvcihjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJikgY29uc3QKLXsKLSAg
ICByZXR1cm4gc3R5bGVDb2xvcihFbnRyeSwgR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkUsIFN0
eWxlQ29sb3JGb3JlZ3JvdW5kKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnN5c3RlbUNv
bG9yKENTU1ZhbHVlSUQgY3NzVmFsdWVJZCwgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+
IG9wdGlvbnMpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7Ci0gICAgY2FzZSBD
U1NWYWx1ZUJ1dHRvbnRleHQ6Ci0gICAgICAgIHJldHVybiBzdHlsZUNvbG9yKEJ1dHRvbiwgR1RL
X1NUQVRFX0ZMQUdfQUNUSVZFLCBTdHlsZUNvbG9yRm9yZWdyb3VuZCk7Ci0gICAgY2FzZSBDU1NW
YWx1ZUNhcHRpb250ZXh0OgotICAgICAgICByZXR1cm4gc3R5bGVDb2xvcihFbnRyeSwgR1RLX1NU
QVRFX0ZMQUdfQUNUSVZFLCBTdHlsZUNvbG9yRm9yZWdyb3VuZCk7Ci0gICAgY2FzZSBDU1NWYWx1
ZVRleHQ6Ci0gICAgICAgIHJldHVybiBzdHlsZUNvbG9yKEVudHJ5LCBHVEtfU1RBVEVfRkxBR19B
Q1RJVkUsIFN0eWxlQ29sb3JGb3JlZ3JvdW5kKTsKLSAgICBjYXNlIENTU1ZhbHVlR3JheXRleHQ6
Ci0gICAgICAgIHJldHVybiBzdHlsZUNvbG9yKEVudHJ5LCBHVEtfU1RBVEVfRkxBR19JTlNFTlNJ
VElWRSwgU3R5bGVDb2xvckZvcmVncm91bmQpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJ
ZCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQ29sb3JzRGlk
Q2hhbmdlKCkKLXsKLSAgICBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsK
LX0KLQotI2lmIEVOQUJMRShWSURFTykKLVN0cmluZyBSZW5kZXJUaGVtZUd0azo6ZXh0cmFNZWRp
YUNvbnRyb2xzU3R5bGVTaGVldCgpCi17Ci0gICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xz
R3RrVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNHdGtVc2VyQWdlbnRT
dHlsZVNoZWV0KSk7Ci19Ci0KLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi1TdHJpbmcgUmVu
ZGVyVGhlbWVHdGs6OmV4dHJhRnVsbFNjcmVlblN0eWxlU2hlZXQoKQotewotICAgIHJldHVybiBT
dHJpbmcoKTsKLX0KLSNlbmRpZgotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhQnV0
dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgY2hhciogaWNvbk5hbWUp
Ci17Ci0gICAgYXV0byYgaWNvbldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lSWNvbiY+
KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6
SWNvbikpOwotICAgIGF1dG8mIGljb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUljb25HYWRn
ZXQmPihpY29uV2lkZ2V0Lmljb24oKSk7Ci0gICAgaWNvbi5zZXRTdGF0ZSh0aGVtZVBhcnRTdGF0
ZUZsYWdzKCp0aGlzLCBNZWRpYUJ1dHRvbiwgcmVuZGVyT2JqZWN0KSk7Ci0gICAgaWNvbi5zZXRJ
Y29uU2l6ZShSZW5kZXJUaGVtZUljb25HYWRnZXQ6Okljb25TaXplR3RrOjpNZW51KTsKLSAgICBp
Y29uLnNldEljb25OYW1lKGljb25OYW1lKTsKLSAgICByZXR1cm4gIWljb24ucmVuZGVyKGdyYXBo
aWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci19Ci0KLWJvb2wgUmVu
ZGVyVGhlbWVHdGs6Omhhc093bkRpc2FibGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCBw
YXJ0KSBjb25zdAotewotICAgIHJldHVybiAocGFydCAhPSBNZWRpYU11dGVCdXR0b25QYXJ0KTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJl
bmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQoKSwgcmVjdCwgInZpZXctZnVsbHNjcmVlbi1z
eW1ib2xpYyIpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhTXV0ZUJ1dHRv
bihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgTm9kZSogbm9kZSA9IHJlbmRlck9i
amVjdC5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBO
b2RlKiBtZWRpYU5vZGUgPSBub2RlLT5zaGFkb3dIb3N0KCk7Ci0gICAgaWYgKCFpczxIVE1MTWVk
aWFFbGVtZW50PihtZWRpYU5vZGUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEhUTUxN
ZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KG1l
ZGlhTm9kZSk7Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWlu
dEluZm8uY29udGV4dCgpLCByZWN0LCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyAiYXVkaW8tdm9s
dW1lLW11dGVkLXN5bWJvbGljIiA6ICJhdWRpby12b2x1bWUtaGlnaC1zeW1ib2xpYyIpOwotfQot
Ci1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhUGxheUJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgTm9kZSogbm9kZSA9IHJlbmRlck9iamVjdC5ub2RlKCk7Ci0g
ICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW5vZGVIYXNQc2V1
ZG8oKm5vZGUsICItd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIikpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0
LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0LCBub2RlSGFzQ2xhc3Mobm9kZSwgInBhdXNlZCIp
ID8gIm1lZGlhLXBsYXliYWNrLXN0YXJ0LXN5bWJvbGljIiA6ICJtZWRpYS1wbGF5YmFjay1wYXVz
ZS1zeW1ib2xpYyIpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0Jh
Y2tCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5m
byYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludE1l
ZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQoKSwgcmVjdCwgIm1lZGlh
LXNlZWstYmFja3dhcmQtc3ltYm9saWMiKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVNlZWtGb3J3YXJkQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0
KCksIHJlY3QsICJtZWRpYS1zZWVrLWZvcndhcmQtc3ltYm9saWMiKTsKLX0KLQotI2lmIEVOQUJM
RShWSURFT19UUkFDSykKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFUb2dnbGVDbG9z
ZWRDYXB0aW9uc0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJu
IHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0
LCAibWVkaWEtdmlldy1zdWJ0aXRsZXMtc3ltYm9saWMiKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMg
RmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkgYm9yZGVyUmFkaWlGcm9tU3R5bGUoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKQotewotICAgIHJldHVybiBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSgKLSAg
ICAgICAgSW50U2l6ZShzdHlsZS5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGguaW50VmFsdWUo
KSwgc3R5bGUuYm9yZGVyVG9wTGVmdFJhZGl1cygpLmhlaWdodC5pbnRWYWx1ZSgpKSwKLSAgICAg
ICAgSW50U2l6ZShzdHlsZS5ib3JkZXJUb3BSaWdodFJhZGl1cygpLndpZHRoLmludFZhbHVlKCks
IHN0eWxlLmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkuaGVpZ2h0LmludFZhbHVlKCkpLAotICAgICAg
ICBJbnRTaXplKHN0eWxlLmJvcmRlckJvdHRvbUxlZnRSYWRpdXMoKS53aWR0aC5pbnRWYWx1ZSgp
LCBzdHlsZS5ib3JkZXJCb3R0b21MZWZ0UmFkaXVzKCkuaGVpZ2h0LmludFZhbHVlKCkpLAotICAg
ICAgICBJbnRTaXplKHN0eWxlLmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGguaW50VmFs
dWUoKSwgc3R5bGUuYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQuaW50VmFsdWUoKSkp
OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhY2soY29uc3Qg
UmVuZGVyT2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVj
dCYgcikKLXsKLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudChvKTsK
LSAgICBpZiAoIW1lZGlhRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGNvbnRleHQu
c2F2ZSgpOwotICAgIGNvbnRleHQuc2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOwotCi0gICAgZmxv
YXQgbWVkaWFEdXJhdGlvbiA9IG1lZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsKLSAgICBmbG9hdCB0
b3RhbFRyYWNrV2lkdGggPSByLndpZHRoKCk7Ci0gICAgYXV0byYgc3R5bGUgPSBvLnN0eWxlKCk7
Ci0gICAgUmVmUHRyPFRpbWVSYW5nZXM+IHRpbWVSYW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZl
cmVkKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgdGltZVJhbmdlcy0+
bGVuZ3RoKCk7ICsraW5kZXgpIHsKLSAgICAgICAgZmxvYXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5z
dGFydChpbmRleCkucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgIGZsb2F0IGVuZCA9IHRp
bWVSYW5nZXMtPmVuZChpbmRleCkucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgIGZsb2F0
IHN0YXJ0UmF0aW8gPSBzdGFydCAvIG1lZGlhRHVyYXRpb247Ci0gICAgICAgIGZsb2F0IGxlbmd0
aFJhdGlvID0gKGVuZCAtIHN0YXJ0KSAvIG1lZGlhRHVyYXRpb247Ci0gICAgICAgIGlmICghbGVu
Z3RoUmF0aW8pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBJbnRSZWN0IHJhbmdl
UmVjdChyKTsKLSAgICAgICAgcmFuZ2VSZWN0LnNldFdpZHRoKGxlbmd0aFJhdGlvICogdG90YWxU
cmFja1dpZHRoKTsKLSAgICAgICAgaWYgKGluZGV4KQotICAgICAgICAgICAgcmFuZ2VSZWN0Lm1v
dmUoc3RhcnRSYXRpbyAqIHRvdGFsVHJhY2tXaWR0aCwgMCk7Ci0gICAgICAgIGNvbnRleHQuZmls
bFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3QocmFuZ2VSZWN0LCBib3JkZXJSYWRpaUZyb21T
dHlsZShzdHlsZSkpLCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
cikpOwotICAgIH0KLQotICAgIGNvbnRleHQucmVzdG9yZSgpOwotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKGNvbnN0IFJl
bmRlck9iamVjdCYgbywgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHIpCi17Ci0gICAgYXV0byYgc3R5bGUgPSBvLnN0eWxlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRl
eHQoKS5maWxsUm91bmRlZFJlY3QoRmxvYXRSb3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21T
dHlsZShzdHlsZSkpLCBzdHlsZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xv
cikpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZWRpYVZvbHVtZVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBh
dXRvIG1lZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudChyZW5kZXJPYmplY3QpOwotICAg
IGlmICghbWVkaWFFbGVtZW50KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZsb2F0IHZv
bHVtZSA9IG1lZGlhRWxlbWVudC0+bXV0ZWQoKSA/IDAuMGYgOiBtZWRpYUVsZW1lbnQtPnZvbHVt
ZSgpOwotICAgIGlmICghdm9sdW1lKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgY29udGV4dC5z
YXZlKCk7Ci0gICAgY29udGV4dC5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7Ci0KLSAgICBpbnQg
cmVjdEhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgZmxvYXQgdHJhY2tIZWlnaHQgPSByZWN0
SGVpZ2h0ICogdm9sdW1lOwotICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyT2JqZWN0LnN0eWxlKCk7
Ci0gICAgSW50UmVjdCB2b2x1bWVSZWN0KHJlY3QpOwotICAgIHZvbHVtZVJlY3QubW92ZSgwLCBy
ZWN0SGVpZ2h0IC0gdHJhY2tIZWlnaHQpOwotICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwo
dHJhY2tIZWlnaHQpKTsKLQotICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRl
ZFJlY3Qodm9sdW1lUmVjdCwgYm9yZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUudmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpKTsKLSAgICBjb250ZXh0LnJlc3Rv
cmUoKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVZvbHVtZVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAg
ICByZXR1cm4gcGFpbnRNZWRpYVNsaWRlclRodW1iKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCBy
ZWN0KTsKLX0KLQotU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpmb3JtYXRNZWRpYUNvbnRyb2xzQ3Vy
cmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdAotewotICAg
IHJldHVybiBmb3JtYXRNZWRpYUNvbnRyb2xzVGltZShjdXJyZW50VGltZSkgKyAiIC8gIiArIGZv
cm1hdE1lZGlhQ29udHJvbHNUaW1lKGR1cmF0aW9uKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNZWRpYUN1cnJlbnRUaW1lKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgot
Ci12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgc3R5bGUuc2V0Qm94U2hhZG93
KG51bGxwdHIpOwotfQotCi0vLyBUaGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJl
bmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAotc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2
aXR5QmxvY2tzID0gNTsKLXN0YXRpYyBjb25zdCBpbnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMg
PSAxMDsKLXN0YXRpYyBjb25zdCBTZWNvbmRzIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgeyAx
MjVfbXMgfTsKLVNlY29uZHMgUmVuZGVyVGhlbWVHdGs6OmFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MmKSBjb25zdAotewotICAgIHJldHVybiBwcm9n
cmVzc0FuaW1hdGlvbkludGVydmFsOwotfQotCi1TZWNvbmRzIFJlbmRlclRoZW1lR3RrOjphbmlt
YXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKLXsKLSAg
ICByZXR1cm4gcHJvZ3Jlc3NBbmltYXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJh
bWVzICogMjsgLy8gIjIiIGZvciBiYWNrIGFuZCBmb3J0aDsKLX0KLQotSW50UmVjdCBSZW5kZXJU
aGVtZUd0azo6Y2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBJbnRSZWN0JiBmdWxsQmFyUmVjdCkKLXsKLSAgICBJbnRSZWN0IHByb2dy
ZXNzUmVjdChmdWxsQmFyUmVjdCk7Ci0gICAgY29uc3QgYXV0byYgcmVuZGVyUHJvZ3Jlc3MgPSBk
b3duY2FzdDxSZW5kZXJQcm9ncmVzcz4ocmVuZGVyT2JqZWN0KTsKLSAgICBpZiAocmVuZGVyUHJv
Z3Jlc3MuaXNEZXRlcm1pbmF0ZSgpKSB7Ci0gICAgICAgIGludCBwcm9ncmVzc1dpZHRoID0gcHJv
Z3Jlc3NSZWN0LndpZHRoKCkgKiByZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpOwotICAgICAgICBp
ZiAocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRM
KQotICAgICAgICAgICAgcHJvZ3Jlc3NSZWN0LnNldFgocHJvZ3Jlc3NSZWN0LngoKSArIHByb2dy
ZXNzUmVjdC53aWR0aCgpIC0gcHJvZ3Jlc3NXaWR0aCk7Ci0gICAgICAgIHByb2dyZXNzUmVjdC5z
ZXRXaWR0aChwcm9ncmVzc1dpZHRoKTsKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzUmVjdDsKLSAg
ICB9Ci0KLSAgICBkb3VibGUgYW5pbWF0aW9uUHJvZ3Jlc3MgPSByZW5kZXJQcm9ncmVzcy5hbmlt
YXRpb25Qcm9ncmVzcygpOwotCi0gICAgLy8gTmV2ZXIgbGV0IHRoZSBwcm9ncmVzcyByZWN0IHNo
cmluayBzbWFsbGVyIHRoYW4gMiBwaXhlbHMuCi0gICAgaW50IG5ld1dpZHRoID0gc3RkOjptYXgo
MiwgcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLyBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzKTsKLSAgICBp
bnQgbW92YWJsZVdpZHRoID0gcHJvZ3Jlc3NSZWN0LndpZHRoKCkgLSBuZXdXaWR0aDsKLSAgICBw
cm9ncmVzc1JlY3Quc2V0V2lkdGgobmV3V2lkdGgpOwotCi0gICAgLy8gV2Ugd2FudCB0aGUgZmly
c3QgMC41IHVuaXRzIG9mIHRoZSBhbmltYXRpb24gcHJvZ3Jlc3MgdG8gcmVwcmVzZW50IHRoZQot
ICAgIC8vIGZvcndhcmQgbW90aW9uIGFuZCB0aGUgc2Vjb25kIDAuNSB1bml0cyB0byByZXByZXNl
bnQgdGhlIGJhY2t3YXJkIG1vdGlvbiwKLSAgICAvLyB0aHVzIHdlIG11bHRpcGx5IGJ5IHR3byBo
ZXJlIHRvIGdldCB0aGUgZnVsbCBzd2VlcCBvZiB0aGUgcHJvZ3Jlc3MgYmFyIHdpdGgKLSAgICAv
LyBlYWNoIGRpcmVjdGlvbi4KLSAgICBpZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPCAwLjUpCi0gICAg
ICAgIHByb2dyZXNzUmVjdC5zZXRYKHByb2dyZXNzUmVjdC54KCkgKyAoYW5pbWF0aW9uUHJvZ3Jl
c3MgKiAyICogbW92YWJsZVdpZHRoKSk7Ci0gICAgZWxzZQotICAgICAgICBwcm9ncmVzc1JlY3Qu
c2V0WChwcm9ncmVzc1JlY3QueCgpICsgKCgxLjAgLSBhbmltYXRpb25Qcm9ncmVzcykgKiAyICog
bW92YWJsZVdpZHRoKSk7Ci0gICAgcmV0dXJuIHByb2dyZXNzUmVjdDsKLX0KLQotU3RyaW5nIFJl
bmRlclRoZW1lR3RrOjpmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxp
c3QsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxl
c0FsbG93ZWQpIGNvbnN0Ci17Ci0gICAgaWYgKHdpZHRoIDw9IDApCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIGlmIChmaWxlTGlzdC0+bGVuZ3RoKCkgPiAxKQotICAgICAgICByZXR1
cm4gU3RyaW5nVHJ1bmNhdG9yOjpyaWdodFRydW5jYXRlKG11bHRpcGxlRmlsZVVwbG9hZFRleHQo
ZmlsZUxpc3QtPmxlbmd0aCgpKSwgd2lkdGgsIGZvbnQpOwotCi0gICAgU3RyaW5nIHN0cmluZzsK
LSAgICBpZiAoZmlsZUxpc3QtPmxlbmd0aCgpKQotICAgICAgICBzdHJpbmcgPSBGaWxlU3lzdGVt
OjpwYXRoR2V0RmlsZU5hbWUoZmlsZUxpc3QtPml0ZW0oMCktPnBhdGgoKSk7Ci0gICAgZWxzZSBp
ZiAobXVsdGlwbGVGaWxlc0FsbG93ZWQpCi0gICAgICAgIHN0cmluZyA9IGZpbGVCdXR0b25Ob0Zp
bGVzU2VsZWN0ZWRMYWJlbCgpOwotICAgIGVsc2UKLSAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRv
bk5vRmlsZVNlbGVjdGVkTGFiZWwoKTsKLQotICAgIHJldHVybiBTdHJpbmdUcnVuY2F0b3I6OmNl
bnRlclRydW5jYXRlKHN0cmluZywgd2lkdGgsIGZvbnQpOwotfQotCi0jaWYgRU5BQkxFKFZJREVP
KQotU3RyaW5nIFJlbmRlclRoZW1lR3RrOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKLXsKLSAgICBT
dHJpbmdCdWlsZGVyIHNjcmlwdEJ1aWxkZXI7Ci0gICAgc2NyaXB0QnVpbGRlci5hcHBlbmRDaGFy
YWN0ZXJzKG1lZGlhQ29udHJvbHNMb2NhbGl6ZWRTdHJpbmdzSmF2YVNjcmlwdCwgc2l6ZW9mKG1l
ZGlhQ29udHJvbHNMb2NhbGl6ZWRTdHJpbmdzSmF2YVNjcmlwdCkpOwotICAgIHNjcmlwdEJ1aWxk
ZXIuYXBwZW5kQ2hhcmFjdGVycyhtZWRpYUNvbnRyb2xzQmFzZUphdmFTY3JpcHQsIHNpemVvZiht
ZWRpYUNvbnRyb2xzQmFzZUphdmFTY3JpcHQpKTsKLSAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZENo
YXJhY3RlcnMobWVkaWFDb250cm9sc0d0a0phdmFTY3JpcHQsIHNpemVvZihtZWRpYUNvbnRyb2xz
R3RrSmF2YVNjcmlwdCkpOwotICAgIHJldHVybiBzY3JpcHRCdWlsZGVyLnRvU3RyaW5nKCk7Ci19
Ci0jZW5kaWYgLy8gRU5BQkxFKFZJREVPKQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsuaAppbmRleCA4N2MzYWFkNThiYS4u
YWEwYjM5NTdhNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5o
CkBAIC0xLDEyICsxLDUgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0
IHByb2plY3QuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4KLSAqIENvcHly
aWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEw
IElnYWxpYSBTLkwuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwIElnYWxpYSBTLkwuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDE3MCArMjAsMTYgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlJl
bmRlclRoZW1lQWR3YWl0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJlbmRl
clRoZW1lR3RrIGZpbmFsIDogcHVibGljIFJlbmRlclRoZW1lIHsKLXB1YmxpYzoKLSAgICBmcmll
bmQgTmV2ZXJEZXN0cm95ZWQ8UmVuZGVyVGhlbWVHdGs+OwotCi0jaWYgRU5BQkxFKERBVEFMSVNU
X0VMRU1FTlQpCi0gICAgLy8gUmV0dXJucyBzaXplIG9mIG9uZSBzbGlkZXIgdGljayBtYXJrIGZv
ciBhIGhvcml6b250YWwgdHJhY2suCi0gICAgLy8gRm9yIHZlcnRpY2FsIHRyYWNrcyB3ZSByb3Rh
dGUgaXQgYW5kIHVzZSBpdC4gaS5lLiBXaWR0aCBpcyBhbHdheXMgbGVuZ3RoIGFsb25nIHRoZSB0
cmFjay4KLSAgICBJbnRTaXplIHNsaWRlclRpY2tTaXplKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ly8gUmV0dXJucyB0aGUgZGlzdGFuY2Ugb2Ygc2xpZGVyIHRpY2sgb3JpZ2luIGZyb20gdGhlIHNs
aWRlciB0cmFjayBjZW50ZXIuCi0gICAgaW50IHNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50
ZXIoKSBjb25zdCBvdmVycmlkZTsKLSNlbmRpZgotCitjbGFzcyBSZW5kZXJUaGVtZUd0ayBmaW5h
bCA6IHB1YmxpYyBSZW5kZXJUaGVtZUFkd2FpdGEgewogcHJpdmF0ZToKLSAgICAvLyBTeXN0ZW0g
Zm9udHMuCi0gICAgdm9pZCB1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFs
dWVJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwotCi1wdWJsaWM6
Ci0gICAgLy8gQSBtZXRob2QgYXNraW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5
IGNhcmUgYWJvdXQgcmVkcmF3aW5nIHdoZW4gaG92ZXJlZC4KLSAgICBib29sIHN1cHBvcnRzSG92
ZXIoY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0K
LSAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUg
Zm9jdXMgcmluZy4KLSAgICBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxl
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRy
b2wgY2hhbmdlcyBpdHMgdGludCB3aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KLSAg
ICBib29sIGNvbnRyb2xTdXBwb3J0c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgLy8gQSBnZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wg
dGludGluZyBpcyBzdXBwb3J0ZWQgYXQgYWxsLgotICAgIGJvb2wgc3VwcG9ydHNDb250cm9sVGlu
dHMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIGFkanVzdFJl
cGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotCi0g
ICAgLy8gQSBtZXRob2QgdG8gb2J0YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVh
ZiIgY29udHJvbC4gIFRoaXMgd2lsbCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQotICAgIC8v
IHBvc2l0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50
LiBDaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zIGFyZSBleGFtcGxlcyBvZgotICAgIC8vIGNv
bnRyb2xzIHRoYXQgbmVlZCB0byBkbyB0aGlzLgotICAgIGludCBiYXNlbGluZVBvc2l0aW9uKGNv
bnN0IFJlbmRlckJveCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgLy8gVGhlIHBsYXRmb3JtIHNl
bGVjdGlvbiBjb2xvci4KLSAgICBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92ZXJyaWRlOwot
ICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9u
U2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCBvdmVycmlkZTsKLSAgICBDb2xvciBwbGF0
Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6
T3B0aW9ucz4pIGNvbnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxl
Y3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25z
dCBvdmVycmlkZTsKLQotICAgIC8vIExpc3QgQm94IHNlbGVjdGlvbiBjb2xvcgotICAgIENvbG9y
IHBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8
U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3Jt
QWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xv
cjo6T3B0aW9ucz4pIGNvbnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVM
aXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRp
b25zPikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBj
b25zdCBvdmVycmlkZTsKLQotICAgIENvbG9yIGRpc2FibGVkVGV4dENvbG9yKGNvbnN0IENvbG9y
JiwgY29uc3QgQ29sb3ImKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJUaGVt
ZUd0aygpID0gZGVmYXVsdDsKIAorICAgIHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2Ny
aXB0aW9uKENTU1ZhbHVlSUQsIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlk
ZTsKICAgICBTZWNvbmRzIGNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0IG92ZXJyaWRlOwotCi0g
ICAgdm9pZCBwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpIG92ZXJyaWRlOwotCi0gICAgLy8gU3lz
dGVtIGNvbG9ycy4KLSAgICBDb2xvciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlELCBPcHRpb25TZXQ8
U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBwb3BzTWVu
dUJ5U3BhY2VPclJldHVybigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotI2lm
IEVOQUJMRShWSURFTykKLSAgICBTdHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgp
IG92ZXJyaWRlOwotICAgIFN0cmluZyBmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxv
YXQgY3VycmVudFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IHN1cHBvcnRzQ2xvc2VkQ2FwdGlvbmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLSAgICBTdHJpbmcgbWVkaWFDb250cm9sc1NjcmlwdCgpIG92ZXJyaWRlOwotCi0jaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIFN0cmluZyBleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0
KCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSNlbmRpZgotCi0gICAgYm9vbCBzaG91bGRIYXZlQ2Fwc0xv
Y2tJbmRpY2F0b3IoY29uc3QgSFRNTElucHV0RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwotCi1w
cml2YXRlOgotICAgIHZpcnR1YWwgflJlbmRlclRoZW1lR3RrKCk7Ci0KLSAgICBib29sIHBhaW50
Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50
UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJikg
Y29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFk
anVzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOwotICAgIGJvb2wgcGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBhZGp1c3RUZXh0
RmllbGRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsK
LSAgICBib29sIHBhaW50VGV4dEZpZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRUZXh0QXJl
YShjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3Qm
KSBvdmVycmlkZTsKLQotICAgIExlbmd0aEJveCBwb3B1cEludGVybmFsUGFkZGluZ0JveChjb25z
dCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgLy8gVGhlIE1hYyBwb3J0IGRp
ZmZlcmVudGlhdGVzIGJldHdlZW4gdGhlICJtZW51IGxpc3QiIGFuZCB0aGUgIm1lbnUgbGlzdCBi
dXR0b24uIgotICAgIC8vIFRoZSBmb3JtZXIgaXMgdXNlZCB3aGVuIGEgbWVudSBsaXN0IGJ1dHRv
biBoYXMgYmVlbiBzdHlsZWQuIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUKLSAgICAvLyBBcXVhIHRo
ZW1lZCBjb250cm9scyB3aGVuZXZlciBwb3NzaWJsZS4gV2UgYWx3YXlzIHdhbnQgdG8gdXNlIEdU
SysgdGhlbWluZywgc28KLSAgICAvLyB3ZSBkb24ndCBtYWludGFpbiB0aGlzIGRpZmZlcmVudGlh
dGlvbi4KLSAgICB2b2lkIGFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBF
bGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0
eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIGJv
b2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBj
b25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLSAgICBib29sIHBhaW50TWVudUxpc3RCdXR0b25E
ZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9h
dFJlY3QmKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVj
b3JhdGlvblBhcnRTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVy
cmlkZTsKLSAgICBib29sIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29u
c3QgUmVuZGVyQm94JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJp
ZGU7Ci0KLSAgICB2b2lkIGFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFJlbmRl
clN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRT
ZWFyY2hGaWVsZFJlc3VsdHNCdXR0b24oY29uc3QgUmVuZGVyQm94JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVs
ZENhbmNlbEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5k
ZXJCb3gmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSNp
ZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLSAgICB2b2lkIHBhaW50TGlzdEJ1dHRvbkZvcklu
cHV0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVj
dCYpOwotICAgIHZvaWQgYWRqdXN0TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3Qg
RWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotI2VuZGlmCi0KLSAgICBib29sIHBhaW50U2xpZGVy
VHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGJvb2wgcGFpbnRTbGlk
ZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRS
ZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFJlbmRlclN0
eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBhZGp1c3RT
bGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgYm9vbCBoYXNPd25EaXNhYmxlZFN0YXRlSGFu
ZGxpbmdGb3IoQ29udHJvbFBhcnQpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRNZWRp
YUZ1bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRNZWRpYU11dGVCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIGJvb2wg
cGFpbnRNZWRpYVNlZWtCYWNrQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICBib29sIHBhaW50TWVkaWFTZWVr
Rm9yd2FyZEJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25z
dCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwotICAgIGJvb2wgcGFpbnRNZWRpYVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYs
IGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICBib29sIHBh
aW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBwYWludE1lZGlhVm9s
dW1lU2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1lKGNv
bnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVy
cmlkZTsKLSNpZiBFTkFCTEUoVklERU9fVFJBQ0spCi0gICAgYm9vbCBwYWludE1lZGlhVG9nZ2xl
Q2xvc2VkQ2FwdGlvbnNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIFNlY29u
ZHMgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYp
IGNvbnN0IG92ZXJyaWRlOwotICAgIFNlY29uZHMgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVz
c0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgYWRqdXN0UHJv
Z3Jlc3NCYXJTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBJbnRSZWN0IHByb2dyZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBwYWludFByb2dy
ZXNzQmFyKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJl
Y3QmKSBvdmVycmlkZTsKLQotICAgIElubmVyU3BpbkJ1dHRvbkxheW91dCBpbm5lclNwaW5CdXR0
b25MYXlvdXQoY29uc3QgUmVuZGVyT2JqZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBh
ZGp1c3RJbm5lclNwaW5CdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZTsKLSAgICBib29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLQot
ICAgIFN0cmluZyBmaWxlTGlzdE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZv
bnRDYXNjYWRlJiwgaW50IHdpZHRoLCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIHN0YXRpYyB2b2lkIHNldFRleHRJbnB1dEJvcmRlcnMoUmVuZGVyU3R5
bGUmKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBib29sIHBhaW50TWVkaWFCdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IGNoYXIqIGljb25OYW1lKTsKLSNlbmRpZgotCi0gICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRl
UHJvZ3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggN2ZhNGRjMDAwNGIuLjEzZjNkMjE1
YjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTAyLTI0ICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBTdG9wIHVzaW5n
IGd0ayBmb3JlaWduIGRyYXdpbmcgQVBJIHRvIHN0eWxlIGZvcm0gY29udHJvbHMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODEyOQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL2d0ay9XZWJQYWdlR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dGhlbWVE
aWRDaGFuZ2UpOiBOb3RpZnkgUmVuZGVyVGhlbWUgYWJvdXQgdGhlIHRoZW1lIGNoYW5nZSB0byBj
bGVhciB0aGUgY29sb3JzIGNhY2hlLgorCiAyMDIwLTAyLTIwICBQZW5nIExpdSAgPHBlbmcubGl1
NkBhcHBsZS5jb20+CiAKICAgICAgICAgW01lZGlhIGluIEdQVSBwcm9jZXNzXSBTeW5jaHJvbml6
ZSB0aGUgcHJvcGVydGllcyBvZiB2aWRlbyBsYXllcnMgaW4gdGhlIEdQVSBwcm9jZXNzIHdpdGgg
dGhlIGhvc3RpbmcgbGF5ZXIgaW4gdGhlIHdlYiBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKaW5kZXggOGU4NmVkM2Ix
MmEuLjE1Mzk5MDFlNmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9QYWdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJvYXJkSGVscGVyLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlclRoZW1lLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQWdlbnQuaD4K
QEAgLTE2NCw2ICsxNjUsNyBAQCB2b2lkIFdlYlBhZ2U6OnRoZW1lRGlkQ2hhbmdlKFN0cmluZyYm
IHRoZW1lTmFtZSkKIAogICAgIG1fdGhlbWVOYW1lID0gV1RGTW92ZSh0aGVtZU5hbWUpOwogICAg
IGdfb2JqZWN0X3NldChndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKSwgImd0ay10aGVtZS1uYW1l
IiwgbV90aGVtZU5hbWUudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7CisgICAgUmVuZGVyVGhlbWU6
OnNpbmdsZXRvbigpLnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCk7CiAgICAgUGFnZTo6dXBkYXRl
U3R5bGVGb3JBbGxQYWdlc0FmdGVyR2xvYmFsQ2hhbmdlSW5FbnZpcm9ubWVudCgpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391525</attachid>
            <date>2020-02-24 04:45:04 -0800</date>
            <delta_ts>2020-02-24 07:58:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-gtk-theme.diff</filename>
            <type>text/plain</type>
            <size>221415</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2Mjc4NmVmM2RkMy4uNWNi
MmY1YjA0YzkgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAyMC0wMi0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dUS10gU3RvcCB1c2luZyBndGsgZm9yZWlnbiBkcmF3aW5nIEFQ
SSB0byBzdHlsZSBmb3JtIGNvbnRyb2xzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDgxMjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSB0ZXN0IGNhc2UgZm9yIGRhdGFsaXN0IGVsZW1lbnQuCisK
KyAgICAgICAgKiBNYW51YWxUZXN0cy9ndGsvdGhlbWUuaHRtbDoKKwogMjAyMC0wMi0yMCAgQ2Fy
bG9zIEFsYmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
R1RLXVtXUEVdIE5vdCBzZXQgY2NhY2hlIGNvbXBpbGVyIHByZWZpeCBpZiBjY2FjaGUgaXRzIGFs
cmVhZHkgdGhlIGNvbXBpbGVyIGJpbmFyeSBpbiBwYXRoLgpkaWZmIC0tZ2l0IGEvTWFudWFsVGVz
dHMvZ3RrL3RoZW1lLmh0bWwgYi9NYW51YWxUZXN0cy9ndGsvdGhlbWUuaHRtbAppbmRleCA2NDM4
NjVhMTg0OC4uYzE0MTIzOWI3OGYgMTAwNjQ0Ci0tLSBhL01hbnVhbFRlc3RzL2d0ay90aGVtZS5o
dG1sCisrKyBiL01hbnVhbFRlc3RzL2d0ay90aGVtZS5odG1sCkBAIC0xNDcsNiArMTQ3LDE2IEBA
CiAgICAgICA8L2h0bWw+Ij4KICAgPC9pZnJhbWU+CiAKKyAgPGgxPkRhdGFsaXN0PC9oMT4KKyAg
PGlucHV0IGxpc3Q9InBvcnRzIiBuYW1lPSJwb3J0Ij4KKyAgPGRhdGFsaXN0IGlkPSJwb3J0cyI+
CisgICAgPG9wdGlvbiB2YWx1ZT0iV2ViS2l0R1RLIj4KKyAgICA8b3B0aW9uIHZhbHVlPSJXUEVX
ZWJLaXQiPgorICAgIDxvcHRpb24gdmFsdWU9IlBsYXlTdGF0aW9uIj4KKyAgICA8b3B0aW9uIHZh
bHVlPSJtYWNPUyI+CisgICAgPG9wdGlvbiB2YWx1ZT0iaU9TIj4KKyAgPC9kYXRhbGlzdD4KKwog
ICA8aDE+TWVkaWEgY29udHJvbHM8L2gxPgogICA8dmlkZW8gY29udHJvbHM+PC92aWRlbz4KICAg
PC9ib2R5PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0No
YW5nZUxvZwppbmRleCA0MDdhMzhhYjAwNy4uZWQzZjA1Y2IzYTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMjAtMDItMjQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFN0b3AgdXNpbmcgZ3RrIGZvcmVpZ24gZHJhd2luZyBBUEkgdG8g
c3R5bGUgZm9ybSBjb250cm9scworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA4MTI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRW5hYmxlIFVTRV9ORVdfVEhFTUUgZm9yIHRoZSBHVEsgcG9ydC4KKworICAg
ICAgICAqIHd0Zi9QbGF0Zm9ybVVzZS5oOgorCiAyMDIwLTAyLTIzICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gU2hyaW5rIFN0cnVjdHVyZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm1Vc2UuaCBiL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtVXNlLmgKaW5kZXggYzQ3ZGMxNmExYTQuLjAwMTEwMjExMzg2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybVVzZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
VXNlLmgKQEAgLTI5MSw3ICsyOTEsNyBAQAogI2RlZmluZSBVU0VfQ0ZORVRXT1JLX0NPTlRFTlRf
RU5DT0RJTkdfU05JRkZJTkdfT1ZFUlJJREUgMQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShNQUMp
IHx8IFBMQVRGT1JNKFdQRSkKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFdQRSkgfHwg
UExBVEZPUk0oR1RLKQogLyogRklYTUU6IFRoaXMgcmVhbGx5IG5lZWRzIGEgZGVzY3JpcHRpdmUg
bmFtZSwgdGhpcyAibmV3IHRoZW1lIiB3YXMgYWRkZWQgaW4gMjAwOC4gKi8KICNkZWZpbmUgVVNF
X05FV19USEVNRSAxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MDE0YWI4OTk5ZC4uYzdjMmNiZjcz
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTYgQEAKKzIwMjAtMDItMjQgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFN0b3AgdXNp
bmcgZ3RrIGZvcmVpZ24gZHJhd2luZyBBUEkgdG8gc3R5bGUgZm9ybSBjb250cm9scworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4MTI5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgY2F1c2VzIGxheW91
dCBpc3N1ZXMgaW4gc29tZSB3ZWJzaXRlcywgaXQgZG9lc24ndCByZWFsbHkgd29yayB3aXRoIGFs
bCBHVEsgdGhlbWVzIGFuZCBpdCB3b24ndCBiZSBwb3NzaWJsZQorICAgICAgICB3aXRoIEdUSzQg
YmVjYXVzZSBmb3JlaWduIGRyYXdpbmcgQVBJcyBoYXZlIGJlZW4gcmVtb3ZlZC4gSW5zdGVhZCwg
d2UgY2FuIHVzZSB0aGUgbmV3IGN1c3RvbSBzdHlsZSB1c2VkIGJ5IFdQRQorICAgICAgICBwb3J0
LCB3aGljaCBpcyBiYXNlZCBvbiBhZHdhaXRhLCBidXQgc2ltcGxpZmllZCB0byBhdm9pZCB0aGUg
aHVnZSBtaW5pbXVtIGNvbnRyb2wgc2l6ZXMsIHRoZSB1c2FnZSBvZiBncmFkaWVudHMKKyAgICAg
ICAgYW5kIHRyYW5zcGFyZW5jaWVzLCBldGMuIFdlIGNhbiBzdGlsbCB1c2UgdGhlIEdUSyBBUEkg
dG8gZ2V0IHRoZSBzZWxlY3Rpb24gY29sb3JzLCB0byBrZWVwIHNvbWUgY29uc2lzdGVuY3kgd2l0
aAorICAgICAgICB0aGUgYWN0dWFsIEdUSyB0aGVtZSwgYnV0IHRoYXQgd29uJ3QgYmUgcG9zc2li
bGUgd2l0aCBHVEs0IGVpdGhlci4gVGhpcyBhbHNvIG1lYW5zIHdlIHdvbid0IGJlIHJlbmRlcmlu
ZworICAgICAgICBkaXJlY3RseSB0byB0aGUgY2Fpcm8gY29udGV4dCBhbnltb3JlICh3aGljaCB3
YXMgcmVxdWlyZWQgYnkgR1RLIGZvcmVpZ24gZHJhd2luZyksIHNvIHdlIGNhbiB1c2UgdGhpbmdz
IGxpa2UKKyAgICAgICAgdGhyZWFkZWQgcmVuZGVyaW5nIGluIHRoZSBHVEsgcG9ydCBub3cuIFRo
aXMgcGF0Y2ggcmVuYW1lcyBTY3JvbGxiYXJUaGVtZVdQRSwgUmVuZGVyVGhlbWVXUEUgYW5kIFRo
ZW1lV1BFIGFzCisgICAgICAgIFNjcm9sbGJhclRoZW1lQWR3YWl0YSwgUmVuZGVyVGhlbWVBZHdh
aXRhIGFuZCBUaGVtZUFkd2FpdGEgYW5kIGFkZHMgVGhlbWVHdGsuIEdUSyBtZWRpYSBjb250cm9s
cyBDU1MgYW5kCisgICAgICAgIEphdmFTY3JpcHQgZmlsZXMgaGF2ZSBiZWVuIHJlbW92ZWQgaW4g
ZmF2b3Igb2YgdXNpbmcgdGhlIGFkd2FpdGEgb25lcy4KKworICAgICAgICAqIE1vZHVsZXMvbWVk
aWFjb250cm9scy9tZWRpYUNvbnRyb2xzR3RrLmpzOiBSZW1vdmVkLgorICAgICAgICAqIFBsYXRm
b3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAqIFNv
dXJjZXNHVEsudHh0OgorICAgICAgICAqIFNvdXJjZXNXUEUudHh0OgorICAgICAgICAqIGNzcy9t
ZWRpYUNvbnRyb2xzR3RrLmNzczogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hZHdhaXRh
L1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93cGUvU2Nyb2xsYmFyVGhlbWVXUEUuY3BwLgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVBZHdhaXRhOjp1c2VzT3ZlcmxheVNjcm9sbGJhcnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVBZHdhaXRhOjpzY3JvbGxiYXJUaGlja25lc3MpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVBZHdhaXRhOjptaW5pbXVtVGh1bWJMZW5n
dGgpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVBZHdhaXRhOjpoYXNCdXR0b25z
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQWR3YWl0YTo6aGFzVGh1bWIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVBZHdhaXRhOjpiYWNrQnV0dG9uUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUFkd2FpdGE6OmZvcndhcmRCdXR0b25S
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQWR3YWl0YTo6dHJhY2tSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQWR3YWl0YTo6cGFpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVBZHdhaXRhOjpoYW5kbGVNb3VzZVByZXNzRXZl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvU2Nyb2xsYmFyVGhlbWVXUEUuaC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5jcHA6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvVGhlbWVXUEUuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6VGhlbWU6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUFkd2FpdGE6OmFj
dGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpU
aGVtZUFkd2FpdGE6OmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpUaGVtZUFkd2FpdGE6OmluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQWR3YWl0YTo6aW5hY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVBZHdh
aXRhOjpmb2N1c0NvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1lQWR3YWl0YTo6cGFpbnRG
b2N1cyk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUFkd2FpdGE6OnBhaW50QXJyb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6VGhlbWVBZHdhaXRhOjpjb250cm9sU2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpUaGVtZUFkd2FpdGE6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRoZW1l
QWR3YWl0YTo6cGFpbnRDaGVja2JveCk6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUFkd2FpdGE6
OnBhaW50UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVBZHdhaXRhOjpwYWludEJ1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUFkd2FpdGE6OnBhaW50U3BpbkJ1dHRvbik6Cisg
ICAgICAgICogcGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuaDogUmVuYW1lZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9UaGVtZVdQRS5oLgorICAgICAgICAoV2ViQ29yZTo6
VGhlbWVBZHdhaXRhOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpkcmF3Rm9jdXNSaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUdhZGdldC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1l
R2FkZ2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lV2lk
Z2V0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVXaWRn
ZXQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvU2Nyb2xsYmFyVGhlbWVHdGsu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9UaGVtZUd0ay5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VGhlbWU6OnNpbmdsZXRvbik6CisgICAgICAgIChXZWJDb3JlOjpU
aGVtZUd0azo6ZW5zdXJlUGxhdGZvcm1Db2xvcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGhlbWVHdGs6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlRo
ZW1lR3RrOjphY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6VGhlbWVHdGs6OmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpUaGVtZUd0azo6aW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhlbWVHdGs6OmluYWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGhlbWVH
dGsuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9TY3JvbGxiYXJU
aGVtZVdQRS5oLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1JlbmRlclRoZW1lV1BFLmNw
cC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjpzaW5nbGV0b24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpzdXBwb3J0c0ZvY3VzUmluZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6OnNob3VsZEhhdmVDYXBzTG9ja0lu
ZGljYXRvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6OnBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6
OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZv
cmVncm91bmRDb2xvciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2Fp
dGE6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6OnBsYXRmb3JtSW5hY3RpdmVM
aXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6
cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpwbGF0Zm9ybUZvY3VzUmluZ0Nv
bG9yIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZv
cm1Db2xvcnNEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRh
OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
QWR3YWl0YTo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUFkd2FpdGE6Om1lZGlhQ29udHJvbHNTY3JpcHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50VGV4dEFyZWEpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludFNlYXJjaEZpZWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6cG9wdXBJbnRlcm5hbFBhZGRpbmdCb3ggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludE1lbnVMaXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6cGFpbnRNZW51TGlzdEJ1dHRvbkRl
Y29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0YTo6YW5pbWF0
aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUFkd2FpdGE6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpwcm9ncmVzc0JhclJl
Y3RGb3JCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRh
OjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQWR3YWl0
YTo6cGFpbnRTbGlkZXJUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2Fp
dGE6OmFkanVzdFNsaWRlclRodW1iU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZUFkd2FpdGE6OnBhaW50U2xpZGVyVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVBZHdhaXRhOjpwYWludE1lZGlhU2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdhaXRhOjpzbGlkZXJUaWNrU2l6ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUFkd2FpdGE6OnNsaWRlclRpY2tPZmZzZXRG
cm9tVHJhY2tDZW50ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVBZHdh
aXRhOjphZGp1c3RMaXN0QnV0dG9uU3R5bGUgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZUFkd2FpdGEuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dwZS9SZW5kZXJUaGVtZVdQRS5oLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUd0
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6dXBkYXRlQ2FjaGVkU3lz
dGVtRm9udERlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
R3RrOjpjYXJldEJsaW5rSW50ZXJ2YWwgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJUaGVtZUd0ay5oOgorCiAyMDIwLTAyLTI0ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRA
aWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXVtXUEVdIEFkZCBHc3RHTE1lbW9yeUVH
TCBzdXBwb3J0IGZvciB0aGUgdmlkZW8tcGxhbmUtZGlzcGxheQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNvbnRyb2xzL21lZGlhQ29udHJvbHNHdGsuanMgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY29udHJvbHMvbWVkaWFDb250cm9sc0d0ay5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlOGM1ODhkYjIuLjAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjb250cm9scy9tZWRpYUNvbnRyb2xzR3RrLmpz
CisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLWZ1bmN0aW9uIGNyZWF0ZUNvbnRyb2xz
KHJvb3QsIHZpZGVvLCBob3N0KQotewotICAgIHJldHVybiBuZXcgQ29udHJvbGxlckd0ayhyb290
LCB2aWRlbywgaG9zdCk7Ci19OwotCi1mdW5jdGlvbiBDb250cm9sbGVyR3RrKHJvb3QsIHZpZGVv
LCBob3N0KQotewotICAgIENvbnRyb2xsZXIuY2FsbCh0aGlzLCByb290LCB2aWRlbywgaG9zdCk7
Ci19OwotCi1mdW5jdGlvbiBjb250YWlucyhsaXN0LCBvYmopCi17Ci0gICAgdmFyIGkgPSBsaXN0
Lmxlbmd0aDsKLSAgICB3aGlsZSAoaS0tKQotICAgICAgICBpZiAobGlzdFtpXSA9PT0gb2JqKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotfTsKLQotQ29udHJv
bGxlckd0ay5wcm90b3R5cGUgPSB7Ci0KLSAgICBjcmVhdGVDb250cm9sczogZnVuY3Rpb24oKQot
ICAgIHsKLSAgICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuY3JlYXRlQ29udHJvbHMuYXBwbHko
dGhpcyk7Ci0KLSAgICAgICAgdGhpcy5jb250cm9scy5jdXJyZW50VGltZS5jbGFzc0xpc3QuYWRk
KHRoaXMuQ2xhc3NOYW1lcy5oaWRkZW4pOwotICAgICAgICB0aGlzLmNvbnRyb2xzLnJlbWFpbmlu
Z1RpbWUuY2xhc3NMaXN0LmFkZCh0aGlzLkNsYXNzTmFtZXMuaGlkZGVuKTsKLQotICAgICAgICB0
aGlzLmNvbnRyb2xzLnZvbHVtZUJveC5jbGFzc0xpc3QuYWRkKHRoaXMuQ2xhc3NOYW1lcy5oaWRp
bmcpOwotCi0gICAgICAgIHRoaXMubGlzdGVuRm9yKHRoaXMuY29udHJvbHMubXV0ZUJveCwgJ21v
dXNlb3V0JywgdGhpcy5oYW5kbGVWb2x1bWVCb3hNb3VzZU91dCk7Ci0gICAgICAgIHRoaXMubGlz
dGVuRm9yKHRoaXMuY29udHJvbHMubXV0ZUJ1dHRvbiwgJ21vdXNlb3ZlcicsIHRoaXMuaGFuZGxl
TXV0ZUJ1dHRvbk1vdXNlT3Zlcik7Ci0gICAgICAgIHRoaXMubGlzdGVuRm9yKHRoaXMuY29udHJv
bHMudm9sdW1lQm94LCAnbW91c2VvdmVyJywgdGhpcy5oYW5kbGVNdXRlQnV0dG9uTW91c2VPdmVy
KTsKLSAgICAgICAgdGhpcy5saXN0ZW5Gb3IodGhpcy5jb250cm9scy52b2x1bWUsICdtb3VzZW92
ZXInLCB0aGlzLmhhbmRsZU11dGVCdXR0b25Nb3VzZU92ZXIpOwotICAgICAgICB0aGlzLmxpc3Rl
bkZvcih0aGlzLmNvbnRyb2xzLmNhcHRpb25CdXR0b24sICdtb3VzZW92ZXInLCB0aGlzLmhhbmRs
ZUNhcHRpb25CdXR0b25Nb3VzZU92ZXIpOwotICAgICAgICB0aGlzLmxpc3RlbkZvcih0aGlzLmNv
bnRyb2xzLmNhcHRpb25CdXR0b24sICdtb3VzZW91dCcsIHRoaXMuaGFuZGxlQ2FwdGlvbkJ1dHRv
bk1vdXNlT3V0KTsKLQotICAgICAgICB2YXIgZW5jbG9zdXJlID0gdGhpcy5jb250cm9scy5lbmNs
b3N1cmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKLSAgICAgICAgZW5jbG9zdXJl
LnNldEF0dHJpYnV0ZSgncHNldWRvJywgJy13ZWJraXQtbWVkaWEtY29udHJvbHMtZW5jbG9zdXJl
Jyk7Ci0gICAgfSwKLQotICAgIGNvbmZpZ3VyZUlubGluZUNvbnRyb2xzOiBmdW5jdGlvbigpCi0g
ICAgewotICAgICAgICB0aGlzLmNvbnRyb2xzLnBhbmVsLmFwcGVuZENoaWxkKHRoaXMuY29udHJv
bHMucGxheUJ1dHRvbik7Ci0gICAgICAgIHRoaXMuY29udHJvbHMucGFuZWwuYXBwZW5kQ2hpbGQo
dGhpcy5jb250cm9scy50aW1lbGluZSk7Ci0gICAgICAgIHRoaXMuY29udHJvbHMucGFuZWwuYXBw
ZW5kQ2hpbGQodGhpcy5jb250cm9scy5jdXJyZW50VGltZSk7Ci0gICAgICAgIHRoaXMuY29udHJv
bHMucGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5jb250cm9scy5yZW1haW5pbmdUaW1lKTsKLSAgICAg
ICAgdGhpcy5jb250cm9scy5wYW5lbC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRyb2xzLmNhcHRpb25C
dXR0b24pOwotICAgICAgICB0aGlzLmNvbnRyb2xzLnBhbmVsLmFwcGVuZENoaWxkKHRoaXMuY29u
dHJvbHMuZnVsbHNjcmVlbkJ1dHRvbik7Ci0gICAgICAgIHRoaXMuY29udHJvbHMucGFuZWwuYXBw
ZW5kQ2hpbGQodGhpcy5jb250cm9scy5tdXRlQm94KTsKLSAgICAgICAgdGhpcy5jb250cm9scy5t
dXRlQm94LmFwcGVuZENoaWxkKHRoaXMuY29udHJvbHMubXV0ZUJ1dHRvbik7Ci0gICAgICAgIHRo
aXMuY29udHJvbHMubXV0ZUJveC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRyb2xzLnZvbHVtZUJveCk7
Ci0gICAgICAgIHRoaXMuY29udHJvbHMudm9sdW1lQm94LmFwcGVuZENoaWxkKHRoaXMuY29udHJv
bHMudm9sdW1lKTsKLSAgICAgICAgdGhpcy5jb250cm9scy5lbmNsb3N1cmUuYXBwZW5kQ2hpbGQo
dGhpcy5jb250cm9scy5wYW5lbCk7Ci0gICAgfSwKLQotICAgIHNob3VsZEhhdmVDb250cm9sczog
ZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLmlzQXVkaW8oKSAmJiAhdGhpcy5o
b3N0LmFsbG93c0lubGluZU1lZGlhUGxheWJhY2spCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgICAgICByZXR1cm4gdGhpcy52aWRlby5jb250cm9scyB8fCB0aGlzLmlzRnVsbFNjcmVl
bigpOwotICAgIH0sCi0KLSAgICByZWNvbm5lY3RDb250cm9sczogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuZGlzY29ubmVjdENvbnRyb2xzLmFwcGx5KHRo
aXMsIGFyZ3VtZW50cyk7Ci0KLSAgICAgICAgdGhpcy5jb25maWd1cmVJbmxpbmVDb250cm9scygp
OwotCi0gICAgICAgIGlmICh0aGlzLnNob3VsZEhhdmVDb250cm9scygpKQotICAgICAgICAgICAg
dGhpcy5hZGRDb250cm9scygpOwotICAgIH0sCi0KLSAgICBzZXRTdGF0dXNIaWRkZW46IGZ1bmN0
aW9uKGhpZGRlbikKLSAgICB7Ci0gICAgfSwKLQotICAgIHVwZGF0ZVRpbWU6IGZ1bmN0aW9uKGZv
cmNlVXBkYXRlKQotICAgIHsKLSAgICAgICAgaWYgKCFmb3JjZVVwZGF0ZSAmJiB0aGlzLmNvbnRy
b2xzQXJlSGlkZGVuKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGN1cnJl
bnRUaW1lID0gdGhpcy52aWRlby5jdXJyZW50VGltZTsKLSAgICAgICAgdmFyIGR1cmF0aW9uID0g
dGhpcy52aWRlby5kdXJhdGlvbjsKLQotICAgICAgICB0aGlzLmNvbnRyb2xzLmN1cnJlbnRUaW1l
LmlubmVyVGV4dCA9IHRoaXMuZm9ybWF0VGltZShjdXJyZW50VGltZSk7Ci0gICAgICAgIHRoaXMu
Y29udHJvbHMudGltZWxpbmUudmFsdWUgPSBjdXJyZW50VGltZTsKLSAgICAgICAgaWYgKGR1cmF0
aW9uID09PSBJbmZpbml0eSB8fCBkdXJhdGlvbiA9PT0gTmFOKQotICAgICAgICAgICAgdGhpcy5j
b250cm9scy5yZW1haW5pbmdUaW1lLmNsYXNzTGlzdC5hZGQodGhpcy5DbGFzc05hbWVzLmhpZGRl
bik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGhpcy5jb250cm9scy5jdXJyZW50VGlt
ZS5pbm5lclRleHQgKz0gIiAvICIgKyB0aGlzLmZvcm1hdFRpbWUoZHVyYXRpb24pOwotICAgICAg
ICAgICAgdGhpcy5jb250cm9scy5yZW1haW5pbmdUaW1lLmlubmVyVGV4dCA9IHRoaXMuZm9ybWF0
VGltZShkdXJhdGlvbik7Ci0gICAgICAgICAgICBpZiAodGhpcy5jb250cm9scy5jdXJyZW50VGlt
ZS5jbGFzc0xpc3QuY29udGFpbnModGhpcy5DbGFzc05hbWVzLmhpZGRlbikpCi0gICAgICAgICAg
ICAgICAgdGhpcy5jb250cm9scy5yZW1haW5pbmdUaW1lLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5D
bGFzc05hbWVzLmhpZGRlbik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY3VycmVudFRpbWUg
PiAwKQotICAgICAgICAgICAgdGhpcy5zaG93Q3VycmVudFRpbWUoKTsKLSAgICB9LAotCi0gICAg
c2hvd0N1cnJlbnRUaW1lOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmNvbnRyb2xz
LmN1cnJlbnRUaW1lLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5DbGFzc05hbWVzLmhpZGRlbik7Ci0g
ICAgICAgIHRoaXMuY29udHJvbHMucmVtYWluaW5nVGltZS5jbGFzc0xpc3QuYWRkKHRoaXMuQ2xh
c3NOYW1lcy5oaWRkZW4pOwotICAgIH0sCi0KLSAgICBoYW5kbGVQbGF5OiBmdW5jdGlvbihldmVu
dCkKLSAgICB7Ci0gICAgICAgIENvbnRyb2xsZXIucHJvdG90eXBlLmhhbmRsZVBsYXkuYXBwbHko
dGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAgdGhpcy5zaG93Q3VycmVudFRpbWUoKTsKLSAgICAg
ICAgaWYgKCF0aGlzLmlzTGl2ZSkKLSAgICAgICAgICAgIHRoaXMuc2hvd0N1cnJlbnRUaW1lKCk7
Ci0gICAgfSwKLQotICAgIGhhbmRsZVRpbWVVcGRhdGU6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsK
LSAgICAgICAgdGhpcy51cGRhdGVUaW1lKCk7Ci0gICAgfSwKLQotICAgIGhhbmRsZU11dGVCdXR0
b25Nb3VzZU92ZXI6IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKHRoaXMudmlk
ZW8ub2Zmc2V0VG9wICsgdGhpcy5jb250cm9scy5lbmNsb3N1cmUub2Zmc2V0VG9wIDwgMTA1KSB7
Ci0gICAgICAgICAgICB0aGlzLmNvbnRyb2xzLnZvbHVtZUJveC5jbGFzc0xpc3QuYWRkKHRoaXMu
Q2xhc3NOYW1lcy5kb3duKTsKLSAgICAgICAgICAgIHRoaXMuY29udHJvbHMucGFuZWwuY2xhc3NM
aXN0LmFkZCh0aGlzLkNsYXNzTmFtZXMuZG93bik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICB0aGlzLmNvbnRyb2xzLnZvbHVtZUJveC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuQ2xhc3NO
YW1lcy5kb3duKTsKLSAgICAgICAgICAgIHRoaXMuY29udHJvbHMucGFuZWwuY2xhc3NMaXN0LnJl
bW92ZSh0aGlzLkNsYXNzTmFtZXMuZG93bik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhpcy5jb250
cm9scy52b2x1bWVCb3guY2xhc3NMaXN0LnJlbW92ZSh0aGlzLkNsYXNzTmFtZXMuaGlkaW5nKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIGhhbmRsZVZvbHVtZUJveE1vdXNl
T3V0OiBmdW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIHRoaXMuY29udHJvbHMudm9sdW1l
Qm94LmNsYXNzTGlzdC5hZGQodGhpcy5DbGFzc05hbWVzLmhpZGluZyk7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0sCi0KLSAgICByZW1vdmVDb250cm9sczogZnVuY3Rpb24oKQotICAgIHsK
LSAgICAgICAgaWYgKHRoaXMuY29udHJvbHMuZW5jbG9zdXJlLnBhcmVudE5vZGUpCi0gICAgICAg
ICAgICB0aGlzLmNvbnRyb2xzLmVuY2xvc3VyZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMu
Y29udHJvbHMuZW5jbG9zdXJlKTsKLSAgICAgICAgdGhpcy5kZXN0cm95Q2FwdGlvbk1lbnUoKTsK
LSAgICB9LAotCi0gICAgYWRkQ29udHJvbHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHRo
aXMuYmFzZS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRyb2xzLmVuY2xvc3VyZSk7Ci0gICAgfSwKLQot
ICAgIHVwZGF0ZVJlYWR5U3RhdGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlz
Lmhvc3Quc3VwcG9ydHNGdWxsc2NyZWVuICYmIHRoaXMudmlkZW8udmlkZW9UcmFja3MubGVuZ3Ro
KQotICAgICAgICAgICAgdGhpcy5jb250cm9scy5mdWxsc2NyZWVuQnV0dG9uLmNsYXNzTGlzdC5y
ZW1vdmUodGhpcy5DbGFzc05hbWVzLmhpZGRlbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHRoaXMuY29udHJvbHMuZnVsbHNjcmVlbkJ1dHRvbi5jbGFzc0xpc3QuYWRkKHRoaXMuQ2xhc3NO
YW1lcy5oaWRkZW4pOwotICAgICAgICB0aGlzLnVwZGF0ZVZvbHVtZSgpOwotICAgIH0sCi0KLSAg
ICB1cGRhdGVEdXJhdGlvbjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgQ29udHJvbGxlci5w
cm90b3R5cGUudXBkYXRlRHVyYXRpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICAgICAg
aWYgKHRoaXMuaXNMaXZlKQotICAgICAgICAgICAgdGhpcy5jb250cm9scy50aW1lbGluZS5tYXgg
PSAwOwotICAgIH0sCi0KLSAgICBzZXRJc0xpdmU6IGZ1bmN0aW9uKGxpdmUpCi0gICAgewotICAg
ICAgICBDb250cm9sbGVyLnByb3RvdHlwZS5zZXRJc0xpdmUuYXBwbHkodGhpcywgYXJndW1lbnRz
KTsKLSAgICAgICAgdGhpcy5jb250cm9scy50aW1lbGluZS5kaXNhYmxlZCA9IHRoaXMuaXNMaXZl
OwotICAgIH0sCi0KLSAgICB1cGRhdGVQbGF5aW5nOiBmdW5jdGlvbigpCi0gICAgewotICAgICAg
ICBDb250cm9sbGVyLnByb3RvdHlwZS51cGRhdGVQbGF5aW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50
cyk7Ci0gICAgICAgIGlmICghdGhpcy5jYW5QbGF5KCkpCi0gICAgICAgICAgICB0aGlzLnNob3dD
b250cm9scygpOwotICAgIH0sCi0KLSAgICBoYW5kbGVDYXB0aW9uQnV0dG9uQ2xpY2tlZDogZnVu
Y3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB0aGlzLmhhbmRsZUNhcHRpb25CdXR0b25TaG93
TWVudShldmVudCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSwKLQotICAgIGJ1aWxkQ2Fw
dGlvbk1lbnU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIENvbnRyb2xsZXIucHJvdG90eXBl
LmJ1aWxkQ2FwdGlvbk1lbnUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLQotICAgICAgICB0aGlz
Lmxpc3RlbkZvcih0aGlzLmNhcHRpb25NZW51LCAnbW91c2VvdXQnLCB0aGlzLmhhbmRsZUNhcHRp
b25Nb3VzZU91dCk7Ci0gICAgICAgIHRoaXMubGlzdGVuRm9yKHRoaXMuY2FwdGlvbk1lbnUsICd0
cmFuc2l0aW9uZW5kJywgdGhpcy5jYXB0aW9uTWVudVRyYW5zaXRpb25FbmQpOwotCi0gICAgICAg
IHRoaXMuY2FwdGlvbk1lbnUuY2FwdGlvbk1lbnVUcmVlRWxlbWVudHMgPSB0aGlzLmNhcHRpb25N
ZW51LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci0KLSAgICAgICAgLy8gQ2FwdGlvbiBtZW51
IGhhcyB0byBiZSBjZW50ZXJlZCB0byB0aGUgY2FwdGlvbiBidXR0b24uCi0gICAgICAgIHZhciBj
YXB0aW9uQnV0dG9uQ2VudGVyID0gIHRoaXMuY29udHJvbHMucGFuZWwub2Zmc2V0TGVmdCArIHRo
aXMuY29udHJvbHMuY2FwdGlvbkJ1dHRvbi5vZmZzZXRMZWZ0ICsKLSAgICAgICAgICAgIHRoaXMu
Y29udHJvbHMuY2FwdGlvbkJ1dHRvbi5vZmZzZXRXaWR0aCAvIDI7Ci0gICAgICAgIHZhciBjYXB0
aW9uTWVudUxlZnQgPSAoY2FwdGlvbkJ1dHRvbkNlbnRlciAtIHRoaXMuY2FwdGlvbk1lbnUub2Zm
c2V0V2lkdGggLyAyKTsKLSAgICAgICAgaWYgKGNhcHRpb25NZW51TGVmdCArIHRoaXMuY2FwdGlv
bk1lbnUub2Zmc2V0V2lkdGggPiB0aGlzLmNvbnRyb2xzLnBhbmVsLm9mZnNldExlZnQgKyB0aGlz
LmNvbnRyb2xzLnBhbmVsLm9mZnNldFdpZHRoKQotICAgICAgICAgICAgdGhpcy5jYXB0aW9uTWVu
dS5jbGFzc0xpc3QuYWRkKHRoaXMuQ2xhc3NOYW1lcy5vdXQpOwotICAgICAgICB0aGlzLmNhcHRp
b25NZW51LnN0eWxlLmxlZnQgPSBjYXB0aW9uTWVudUxlZnQgKyAncHgnOwotICAgICAgICAvLyBB
cyBoZWlnaHQgaXMgbm90IGluIHRoZSBjc3MsIGl0IG5lZWRzIHRvIGJlIHNwZWNpZmllZCB0byBh
bmltYXRlIGl0LgotICAgICAgICB0aGlzLmNhcHRpb25NZW51LmhlaWdodCA9IHRoaXMuY2FwdGlv
bk1lbnUub2Zmc2V0SGVpZ2h0OwotICAgICAgICB0aGlzLmNhcHRpb25NZW51LnN0eWxlLmhlaWdo
dCA9IDA7Ci0gICAgfSwKLQotICAgIGRlc3Ryb3lDYXB0aW9uTWVudTogZnVuY3Rpb24oKQotICAg
IHsKLSAgICAgICAgdGhpcy5oaWRlQ2FwdGlvbk1lbnUoKTsKLSAgICB9LAotCi0gICAgc2hvd0Nh
cHRpb25NZW51OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmNhcHRpb25NZW51LnN0
eWxlLmhlaWdodCA9IHRoaXMuY2FwdGlvbk1lbnUuaGVpZ2h0ICsgJ3B4JzsKLSAgICB9LAotCi0g
ICAgaGlkZUNhcHRpb25NZW51OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLmNhcHRp
b25NZW51LnN0eWxlLmhlaWdodCA9IDA7Ci0gICAgfSwKLQotICAgIGNhcHRpb25NZW51VHJhbnNp
dGlvbkVuZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5jYXB0aW9u
TWVudS5vZmZzZXRIZWlnaHQgPT09IDApCi0gICAgICAgICAgICBDb250cm9sbGVyLnByb3RvdHlw
ZS5kZXN0cm95Q2FwdGlvbk1lbnUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKLSAgICB9LAotCi0g
ICAgaGFuZGxlQ2FwdGlvbkJ1dHRvbk1vdXNlT3ZlcjogZnVuY3Rpb24oZXZlbnQpCi0gICAgewot
ICAgICAgICB0aGlzLmhhbmRsZUNhcHRpb25CdXR0b25TaG93TWVudShldmVudCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBoYW5kbGVDYXB0aW9uQnV0dG9uU2hvd01lbnU6
IGZ1bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLmNhcHRpb25NZW51KQot
ICAgICAgICAgICAgdGhpcy5idWlsZENhcHRpb25NZW51KCk7Ci0gICAgICAgIGlmICghY29udGFp
bnModGhpcy5jYXB0aW9uTWVudS5jYXB0aW9uTWVudVRyZWVFbGVtZW50cywgZXZlbnQucmVsYXRl
ZFRhcmdldCkpCi0gICAgICAgICAgICB0aGlzLnNob3dDYXB0aW9uTWVudSgpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9LAotCi0gICAgaGFuZGxlQ2FwdGlvbkJ1dHRvbk1vdXNlT3V0OiBm
dW5jdGlvbihldmVudCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLmNhcHRpb25NZW51ICYmICFj
b250YWlucyh0aGlzLmNhcHRpb25NZW51LmNhcHRpb25NZW51VHJlZUVsZW1lbnRzLCBldmVudC5y
ZWxhdGVkVGFyZ2V0KSkKLSAgICAgICAgICAgIHRoaXMuaGlkZUNhcHRpb25NZW51KCk7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0sCi0KLSAgICBoYW5kbGVDYXB0aW9uTW91c2VPdXQ6IGZ1
bmN0aW9uKGV2ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgIT0g
dGhpcy5jb250cm9scy5jYXB0aW9uQnV0dG9uICYmCi0gICAgICAgICAgICAhY29udGFpbnModGhp
cy5jYXB0aW9uTWVudS5jYXB0aW9uTWVudVRyZWVFbGVtZW50cywgZXZlbnQucmVsYXRlZFRhcmdl
dCkpCi0gICAgICAgICAgICB0aGlzLmhpZGVDYXB0aW9uTWVudSgpOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9LAotfTsKLQotT2JqZWN0LmNyZWF0ZShDb250cm9sbGVyLnByb3RvdHlwZSku
ZXh0ZW5kKENvbnRyb2xsZXJHdGsucHJvdG90eXBlKTsKLU9iamVjdC5kZWZpbmVQcm9wZXJ0eShD
b250cm9sbGVyR3RrLnByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgeyBlbnVtZXJhYmxlOmZhbHNl
LCB2YWx1ZTpDb250cm9sbGVyR3RrIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAy
ZmI5ZTM5NWI2My4uNzc4MWQwYzU4ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0x
OCw2ICsxOCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9S
SUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvYXRrIgogICAgICIke1dFQkNP
UkVfRElSfS9lZGl0aW5nL2F0ayIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9ndGsiCisgICAg
IiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2Fkd2FpdGEiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3Bs
YXRmb3JtL2dlbmVyaWMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2d0ayIKICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZWdsIgpAQCAtNjQsMTYgKzY1LDE3IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogKQogCiBsaXN0
KEFQUEVORCBXZWJDb3JlX1VTRVJfQUdFTlRfU1RZTEVfU0hFRVRTCi0gICAgJHtXRUJDT1JFX0RJ
Un0vY3NzL21lZGlhQ29udHJvbHNHdGsuY3NzCisgICAgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9t
ZWRpYWNvbnRyb2xzL21lZGlhQ29udHJvbHNBZHdhaXRhLmNzcworICAgICR7V0VCQ09SRV9ESVJ9
L2Nzcy90aGVtZUFkd2FpdGEuY3NzCiApCiAKIHNldChXZWJDb3JlX1VTRVJfQUdFTlRfU0NSSVBU
UwogICAgICR7V0VCQ09SRV9ESVJ9L2VuLmxwcm9qL21lZGlhQ29udHJvbHNMb2NhbGl6ZWRTdHJp
bmdzLmpzCisgICAgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYWNvbnRyb2xzL21lZGlhQ29u
dHJvbHNBZHdhaXRhLmpzCiAgICAgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYWNvbnRyb2xz
L21lZGlhQ29udHJvbHNCYXNlLmpzCi0gICAgJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYWNv
bnRyb2xzL21lZGlhQ29udHJvbHNHdGsuanMKICkKIAotc2V0KFdlYkNvcmVfVVNFUl9BR0VOVF9T
Q1JJUFRTX0RFUEVOREVOQ0lFUyAke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhl
bWVHdGsuY3BwKQorc2V0KFdlYkNvcmVfVVNFUl9BR0VOVF9TQ1JJUFRTX0RFUEVOREVOQ0lFUyAk
e1dFQkNPUkVfRElSfS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNwcCkKIAogbGlzdChB
UFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKICAgICAke0FUS19MSUJSQVJJRVN9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtV1BFLmNtYWtlCmluZGV4IDFkMjM0MjdhNWJiLi4yMDJlYmFjYmJmZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XUEUuY21ha2UKQEAgLTE4LDYgKzE4LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9VTklG
SUVEX1NPVVJDRV9MSVNUX0ZJTEVTCiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNM
VURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvYXRrIgor
ICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9hZHdhaXRhIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9ncmFwaGljcy9lZ2wiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL2Vwb3h5IgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgi
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IGJjZDhkOWYyNzczLi4xN2I1MTNiMjJiOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlc0dUSy50eHQKQEAgLTY1LDYgKzY1LDkgQEAgcGFnZS9zY3JvbGxpbmcvZ2VuZXJpYy9T
Y3JvbGxpbmdUaHJlYWRHZW5lcmljLmNwcAogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0aW9uS2luZXRp
Yy5jcHAKIHBsYXRmb3JtL1VzZXJBZ2VudFF1aXJrcy5jcHAKIAorcGxhdGZvcm0vYWR3YWl0YS9T
Y3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwCitwbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5j
cHAKKwogcGxhdGZvcm0vZ2VuZXJpYy9TY3JvbGxBbmltYXRvckdlbmVyaWMuY3BwCiAKIHBsYXRm
b3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAgQG5vLXVuaWZ5CkBAIC0xMTIsMTAgKzExNSw4IEBA
IHBsYXRmb3JtL2d0ay9QbGF0Zm9ybU1vdXNlRXZlbnRHdGsuY3BwCiBwbGF0Zm9ybS9ndGsvUGxh
dGZvcm1QYXN0ZWJvYXJkR3RrLmNwcAogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtU2NyZWVuR3RrLmNw
cAogcGxhdGZvcm0vZ3RrL1BsYXRmb3JtV2hlZWxFdmVudEd0ay5jcHAKLXBsYXRmb3JtL2d0ay9S
ZW5kZXJUaGVtZUdhZGdldC5jcHAKLXBsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZVdpZGdldC5jcHAK
LXBsYXRmb3JtL2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAKIHBsYXRmb3JtL2d0ay9TZWxlY3Rp
b25EYXRhLmNwcAorcGxhdGZvcm0vZ3RrL1RoZW1lR3RrLmNwcAogcGxhdGZvcm0vZ3RrL1dpZGdl
dEd0ay5jcHAKIAogcGxhdGZvcm0vdGV4dC9IeXBoZW5hdGlvbi5jcHAKQEAgLTEyOSw0ICsxMzAs
NSBAQCBwbGF0Zm9ybS91bml4L0xvZ2dpbmdVbml4LmNwcAogCiBwbGF0Zm9ybS94ZGcvTUlNRVR5
cGVSZWdpc3RyeVhkZy5jcHAKIAorcmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHAKIHJl
bmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXNXUEUudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQKaW5kZXggOTdlY2Rh
YzQ5MjIuLmViZmUyMjY5Y2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BF
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzV1BFLnR4dApAQCAtNjIsNiArNjIsOSBA
QCBwYWdlL3Njcm9sbGluZy9nZW5lcmljL1Njcm9sbGluZ1RocmVhZEdlbmVyaWMuY3BwCiBwbGF0
Zm9ybS9TY3JvbGxBbmltYXRpb25LaW5ldGljLmNwcAogcGxhdGZvcm0vVXNlckFnZW50UXVpcmtz
LmNwcAogCitwbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHAKK3BsYXRm
b3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmNwcAorCiBwbGF0Zm9ybS9nZW5lcmljL1Njcm9sbEFu
aW1hdG9yR2VuZXJpYy5jcHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNwcApAQCAt
OTEsOCArOTQsNyBAQCBwbGF0Zm9ybS90ZXh0L0xvY2FsZUlDVS5jcHAKIHBsYXRmb3JtL3VuaXgv
TG9nZ2luZ1VuaXguY3BwCiAKIHBsYXRmb3JtL3dwZS9QbGF0Zm9ybVNjcmVlbldQRS5jcHAKLXBs
YXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5jcHAKLXBsYXRmb3JtL3dwZS9TY3JvbGxiYXJUaGVt
ZVdQRS5jcHAKLXBsYXRmb3JtL3dwZS9UaGVtZVdQRS5jcHAKIAogcGxhdGZvcm0veGRnL01JTUVU
eXBlUmVnaXN0cnlYZGcuY3BwCisKK3JlbmRlcmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0d0ay5jc3MgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvbWVkaWFDb250cm9sc0d0ay5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGE2ODg0NzhmYjQxLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvbWVkaWFDb250cm9sc0d0ay5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0MDIgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qIFRoZXNl
IGFyZSBiYXNlZCBvbiB0aGUgQ2hyb21pdW0gbWVkaWEgY29udHJvbHMgKi8KLQotdmlkZW86Oi13
ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwgKjphY3RpdmUsCi12aWRlbzo6LXdlYmtpdC1tZWRp
YS1jb250cm9scy1wYW5lbCAqOmZvY3VzLAotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
cGFuZWwgKjphY3RpdmUsCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCAqOmZv
Y3VzIHsKLSAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQocmdiYSgwLCAwLCAw
LCAuMDUpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIC4wNSkpICFpbXBvcnRhbnQ7Ci19Ci0KLWF1ZGlv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsLmRvd24gKjphY3RpdmUsCi1hdWRpbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy1wYW5lbC5kb3duICo6Zm9jdXMgewotICAgIGJhY2tncm91bmQt
aW1hZ2U6IGxpbmVhci1ncmFkaWVudChyZ2JhKDI1NSwgMjU1LCAyNTUsIC4wNSksIHJnYmEoMCwg
MCwgMCwgLjA1KSkgIWltcG9ydGFudDsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtcGFuZWwuaGlkZGVuLAotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwuaGlk
ZGVuIHsKLSAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Ci19Ci0KLWJvZHk6LXdlYmtpdC1m
dWxsLXBhZ2UtbWVkaWEgewotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigwLCAwLCAwKTsKLX0K
LQotYXVkaW8gewotICAgIHdpZHRoOiAzMDBweDsKLSAgICBoZWlnaHQ6IDMwcHg7Ci19Ci0KLWF1
ZGlvOi13ZWJraXQtZnVsbC1wYWdlLW1lZGlhLCB2aWRlbzotd2Via2l0LWZ1bGwtcGFnZS1tZWRp
YSB7Ci0gICAgbWF4LWhlaWdodDogMTAwJTsKLSAgICBtYXgtd2lkdGg6IDEwMCU7Ci19Ci0KLWF1
ZGlvOi13ZWJraXQtZnVsbC1wYWdlLW1lZGlhOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVs
LAotdmlkZW86LXdlYmtpdC1mdWxsLXBhZ2UtbWVkaWE6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
cGFuZWwgewotICAgIGJvdHRvbTogMHB4OwotfQotCi06Oi13ZWJraXQtbWVkaWEtY29udHJvbHMg
ewotICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKLSAgICBq
dXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwotICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Ci19Ci0K
LWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWVuY2xvc3VyZSwgdmlkZW86Oi13ZWJraXQt
bWVkaWEtY29udHJvbHMtZW5jbG9zdXJlIHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBtYXgtd2lk
dGg6IDgwMHB4OwotICAgIGhlaWdodDogMzBweDsKLSAgICBib3R0b206IDA7Ci0gICAgdGV4dC1p
bmRlbnQ6IDA7Ci0gICAgcGFkZGluZzogMDsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owot
ICAgIG92ZXJmbG93OiB2aXNpYmxlOwotfQotCi12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9s
cy1lbmNsb3N1cmUgewotICAgIHBhZGRpbmc6IDVweDsKLSAgICBoZWlnaHQ6IDQwcHg7Ci19Ci0K
LWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsLCB2aWRlbzo6LXdlYmtpdC1tZWRp
YS1jb250cm9scy1wYW5lbCB7Ci0gICAgZGlzcGxheTogZmxleDsKLSAgICBmbGV4LWRpcmVjdGlv
bjogcm93OwotICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7Ci0gICAganVzdGlmeS1jb250ZW50OiBm
bGV4LXN0YXJ0OwotICAgIGJvdHRvbTogYXV0bzsKLSAgICBoZWlnaHQ6IDMwcHg7Ci0gICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiYSgyMCwgMjAsIDIwLCAwLjgpOwotICAgIGJvcmRlci1yYWRpdXM6
IDVweDsKLSAgICBvdmVyZmxvdzogdmlzaWJsZTsKLSAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAu
MjVzIGxpbmVhcjsKLX0KLQotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwgewot
ICAgIG9wYWNpdHk6IDA7Ci19Ci0KLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVs
LAotdmlkZW86LXdlYmtpdC1mdWxsLXBhZ2UtbWVkaWE6Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
cGFuZWwubm8tdmlkZW8sCi12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbDpob3Zl
ciwKLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsLnNob3csCi12aWRlbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy1wYW5lbC5wYXVzZWQgewotICAgIG9wYWNpdHk6IDE7Ci19Ci0K
LXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsIGRpdi5tdXRlLWJveCwKLWF1ZGlv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXBhbmVsIGRpdi5tdXRlLWJveCB7Ci0gICAgZGlzcGxh
eTogZmxleDsKLSAgICBmbGV4OiBub25lOwotICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci0g
ICAgd2lkdGg6IDMwcHg7Ci0gICAgaGVpZ2h0OiAzMHB4OwotICAgIG1hcmdpbjogMCA5cHggMCAt
N3B4OwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCBkaXYubXV0ZS1i
b3guaGlkZGVuLAotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGFuZWwgZGl2Lm11dGUt
Ym94LmhpZGRlbiB7Ci0gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwotfQotCi1hdWRpbzo6
LXdlYmtpdC1tZWRpYS1jb250cm9scy1tdXRlLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtbXV0ZS1idXR0b24gewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtbXV0
ZS1idXR0b247Ci0gICAgZGlzcGxheTogZmxleDsKLSAgICBmbGV4OiBub25lOwotICAgIGJvcmRl
cjogbm9uZTsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIHdpZHRoOiAzMHB4Owot
ICAgIGhlaWdodDogMzBweDsKLSAgICBsaW5lLWhlaWdodDogMzBweDsKLSAgICBvdXRsaW5lOiBu
b25lOwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wbGF5LWJ1dHRvbiwgdmlk
ZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcGxheS1idXR0b24gewotICAgIC13ZWJraXQtYXBw
ZWFyYW5jZTogbWVkaWEtcGxheS1idXR0b247Ci0gICAgZGlzcGxheTogZmxleDsKLSAgICBmbGV4
OiBub25lOwotICAgIGJvcmRlcjogbm9uZTsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Owot
ICAgIHdpZHRoOiAzMHB4OwotICAgIGhlaWdodDogMzBweDsKLSAgICBsaW5lLWhlaWdodDogMzBw
eDsKLSAgICBtYXJnaW46IDAgOXB4OwotICAgIG91dGxpbmU6IG5vbmU7Ci19Ci0KLS8qIFBhdXNl
ZCBjbGFzc2VzIGZvciBhdWRpby92aWRlbyBjb250cm9scyBzaG91bGQgYmUgZGVmaW5lZCB0byBt
YWtlIGEgZGlmZmVyZW5jZSBpbiBzdHlsZSBmcm9tIG5vdCBoYXZpbmcgdGhpcyBjbGFzcy4gT3Ro
ZXJ3aXNlIGEgcmVwYWludCB3b3VsZCBub3QgaGFwcGVuLiAqLwotYXVkaW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtcGxheS1idXR0b24ucGF1c2VkLAotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtcGxheS1idXR0b24ucGF1c2VkIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci19Ci0K
LWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5LCB2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jdXJyZW50LXRpbWUtZGlzcGxheSwKLWF1ZGlvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUtcmVtYWluaW5nLWRpc3BsYXksIHZpZGVvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUtcmVtYWluaW5nLWRpc3BsYXkgewotICAgIC13ZWJraXQt
YXBwZWFyYW5jZTogbWVkaWEtY3VycmVudC10aW1lLWRpc3BsYXk7Ci0gICAgLXdlYmtpdC11c2Vy
LXNlbGVjdDogbm9uZTsKLSAgICBmbGV4OiBub25lOwotICAgIGRpc3BsYXk6IGJsb2NrOwotICAg
IGJvcmRlcjogbm9uZTsKLSAgICBjdXJzb3I6IGRlZmF1bHQ7Ci0KLSAgICBoZWlnaHQ6IDMwcHg7
Ci0gICAgbWFyZ2luOiAwIDE1cHggMCAwOwotCi0gICAgbGluZS1oZWlnaHQ6IDMwcHg7Ci0gICAg
Zm9udC1mYW1pbHk6IC13ZWJraXQtc21hbGwtY29udHJvbDsKLSAgICBmb250LXNpemU6IDEzcHg7
Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICBmb250LXN0eWxlOiBub3JtYWw7Ci0gICAg
Y29sb3I6IHdoaXRlOwotCi0gICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsKLSAgICB3b3JkLXNw
YWNpbmc6IG5vcm1hbDsKLSAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKLSAgICB0ZXh0LWluZGVu
dDogMDsKLSAgICB0ZXh0LXNoYWRvdzogbm9uZTsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7
Ci19Ci0KLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5
LmhpZGRlbiwKLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNw
bGF5LmhpZGRlbiwKLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRpbWUtcmVtYWluaW5n
LWRpc3BsYXkuaGlkZGVuLAotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1h
aW5pbmctZGlzcGxheS5oaWRkZW4gewotICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKLX0K
LQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZWxpbmUsIHZpZGVvOjotd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXRpbWVsaW5lIHsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlh
LXNsaWRlciAhaW1wb3J0YW50OwotICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDsKLSAgICBm
bGV4OiAxIDEgYXV0byAhaW1wb3J0YW50OwotICAgIGhlaWdodDogOHB4ICFpbXBvcnRhbnQ7Ci0g
ICAgbWFyZ2luOiAwIDE1cHggMCAxcHggIWltcG9ydGFudDsKLSAgICBwYWRkaW5nOiAwICFpbXBv
cnRhbnQ7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsKLSAg
ICBtaW4td2lkdGg6IDI1cHggIWltcG9ydGFudDsKLSAgICBib3JkZXItcmFkaXVzOiA0cHggIWlt
cG9ydGFudDsKLSAgICBjb2xvcjogcmdiYSgyMzAsIDIzMCwgMjMwLCAwLjM1KSAhaW1wb3J0YW50
OwotICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVk
aWEtY29udHJvbHMtdGltZWxpbmVbZGlzYWJsZWRdLCB2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy10aW1lbGluZVtkaXNhYmxlZF0gewotICAgIG9wYWNpdHk6IDAuMyAhaW1wb3J0YW50Owot
fQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZS5oaWRkZW4sCi12aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZS5oaWRkZW4gewotICAgIGRpc3BsYXk6
IG5vbmUgIWltcG9ydGFudDsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9s
dW1lLXNsaWRlci1jb250YWluZXIsIHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVt
ZS1zbGlkZXItY29udGFpbmVyIHsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXZvbHVt
ZS1zbGlkZXItY29udGFpbmVyOwotICAgIGRpc3BsYXk6IGZsZXg7Ci0gICAgb3ZlcmZsb3c6IGhp
ZGRlbjsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgcGFkZGluZzogMDsKLSAgICBoZWln
aHQ6IDEwMHB4OwotICAgIHdpZHRoOiAzMHB4OwotICAgIGJvdHRvbTogMzBweDsKLSAgICB6LWlu
ZGV4OiAyOwotICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjAsIDIwLCAyMCwgMC44KTsKLSAg
ICByaWdodDogOXB4OwotICAgIGJvcmRlci1yYWRpdXM6IDVweCA1cHggMHB4IDBweDsKLSAgICB0
cmFuc2l0aW9uOiBoZWlnaHQgMC4xMHMgbGluZWFyOwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRp
YS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lci5oaWRpbmcsCi12aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lci5oaWRpbmcgewotICAgIGhl
aWdodDogMDsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRl
ci1jb250YWluZXIuZG93biwKLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1z
bGlkZXItY29udGFpbmVyLmRvd24gewotICAgIGJvdHRvbTogLTEwMHB4OwotICAgIGJvcmRlci1y
YWRpdXM6IDBweCAwcHggNXB4IDVweDsKLSAgICB0cmFuc2l0aW9uOiBoZWlnaHQgMC4xMHMgbGlu
ZWFyLCBib3R0b20gMC4xMHMgbGluZWFyOwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1wYW5lbCAuaGlkaW5nLmRvd24sCi12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1w
YW5lbCAuaGlkaW5nLmRvd24gewotICAgIGJvdHRvbTogMDsKLX0KLQotYXVkaW86Oi13ZWJraXQt
bWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlciwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdm9sdW1lLXNsaWRlciB7Ci0gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZWRpYS12b2x1bWUt
c2xpZGVyICFpbXBvcnRhbnQ7Ci0gICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50OwotICAgIGFs
aWduLWl0ZW1zOiBjZW50ZXIgIWltcG9ydGFudDsKLSAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1u
ICFpbXBvcnRhbnQ7Ci0gICAgYm94LXNpemluZzogYm9yZGVyLWJveCAhaW1wb3J0YW50OwotICAg
IGhlaWdodDogODBweCAhaW1wb3J0YW50OwotICAgIHdpZHRoOiA4cHggIWltcG9ydGFudDsKLSAg
ICBtYXJnaW46IDEwcHggYXV0byAhaW1wb3J0YW50OwotICAgIGJvcmRlci1yYWRpdXM6IDRweCAh
aW1wb3J0YW50OwotICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7
Ci0gICAgY29sb3I6IHJnYmEoMjMwLCAyMzAsIDIzMCwgMC4zNSkgIWltcG9ydGFudDsKLSAgICBv
dXRsaW5lOiBub25lICFpbXBvcnRhbnQ7Ci19Ci0KLWF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRy
b2xzLXZvbHVtZS1zbGlkZXItY29udGFpbmVyIGlucHV0W3R5cGU9InJhbmdlIl06Oi13ZWJraXQt
bWVkaWEtc2xpZGVyLWNvbnRhaW5lciA+IGRpdiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgaW5wdXRbdHlwZT0icmFuZ2UiXTo6LXdlYmtpdC1t
ZWRpYS1zbGlkZXItY29udGFpbmVyID4gZGl2IHsKLSAgICBtYXJnaW46IC03cHggMDsKLX0KLQot
YXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdm9sdW1lLXNsaWRlci1jb250YWluZXIgaW5w
dXRbdHlwZT0icmFuZ2UiXTo6LXdlYmtpdC1tZWRpYS1zbGlkZXItdGh1bWIsIHZpZGVvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXItY29udGFpbmVyIGlucHV0W3R5cGU9InJh
bmdlIl06Oi13ZWJraXQtbWVkaWEtc2xpZGVyLXRodW1iIHsKLSAgICAtd2Via2l0LWFwcGVhcmFu
Y2U6IG1lZGlhLXZvbHVtZS1zbGlkZXJ0aHVtYjsKLSAgICB3aWR0aDogMTJweDsKLSAgICBoZWln
aHQ6IDEycHg7Ci0gICAgYm9yZGVyLXJhZGl1czogM3B4OwotICAgIGNvbG9yOiB3aGl0ZTsKLSAg
ICBtYXJnaW46IDA7Ci19Ci0KLWlucHV0W3R5cGU9InJhbmdlIl06Oi13ZWJraXQtbWVkaWEtc2xp
ZGVyLWNvbnRhaW5lciB7Ci0gICAgZGlzcGxheTogZmxleDsKLSAgICBhbGlnbi1pdGVtczogY2Vu
dGVyOwotICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7IC8qIFRoaXMgcHJvcGVydHkgaXMgdXBkYXRl
ZCBieSBDKysgY29kZS4gKi8KLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIGhlaWdo
dDogMTAwJTsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIz
MCwgMjMwLCAyMzAsIDAuMzUpOwotICAgIGJvcmRlci1yYWRpdXM6IDRweDsKLSAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKLX0KLQotLyogVGhlIG5lZ2F0aXZlIHJpZ2h0IG1hcmdp
biBjYXVzZXMgdGhlIHRyYWNrIHRvIG92ZXJmbG93IGl0cyBjb250YWluZXIuICovCi1pbnB1dFt0
eXBlPSJyYW5nZSJdOjotd2Via2l0LW1lZGlhLXNsaWRlci1jb250YWluZXIgPiBkaXYgewotICAg
IG1hcmdpbi1yaWdodDogLTE0cHg7Ci19Ci0KLWlucHV0W3R5cGU9InJhbmdlIl06Oi13ZWJraXQt
bWVkaWEtc2xpZGVyLXRodW1iIHsKLSAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lZGlhLXNsaWRl
cnRodW1iOwotICAgIHdpZHRoOiAxMnB4OwotICAgIGhlaWdodDogMTJweDsKLSAgICBib3JkZXIt
cmFkaXVzOiAzcHg7Ci0gICAgY29sb3I6IHdoaXRlOwotICAgIG1hcmdpbi1sZWZ0OiAtN3B4Owot
ICAgIG1hcmdpbi1yaWdodDogLTdweDsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJv
bHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24sIHZpZGVvOjotd2Via2l0LW1lZGlhLWNv
bnRyb2xzLXRvZ2dsZS1jbG9zZWQtY2FwdGlvbnMtYnV0dG9uIHsKLSAgICAtd2Via2l0LWFwcGVh
cmFuY2U6IG1lZGlhLXRvZ2dsZS1jbG9zZWQtY2FwdGlvbnMtYnV0dG9uOwotICAgIGRpc3BsYXk6
IGZsZXg7Ci0gICAgZmxleDogbm9uZTsKLSAgICBib3JkZXI6IG5vbmU7Ci0gICAgYm94LXNpemlu
ZzogYm9yZGVyLWJveDsKLSAgICB3aWR0aDogMzBweDsKLSAgICBoZWlnaHQ6IDMwcHg7Ci0gICAg
bGluZS1oZWlnaHQ6IDMwcHg7Ci0gICAgbWFyZ2luOiAwIDlweCAwIC03cHg7Ci0gICAgb3V0bGlu
ZTogbm9uZTsKLX0KLQotYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdG9nZ2xlLWNsb3Nl
ZC1jYXB0aW9ucy1idXR0b24uaGlkZGVuLAotdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
dG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24uaGlkZGVuIHsKLSAgICBkaXNwbGF5OiBub25l
ICFpbXBvcnRhbnQ7Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1j
YXB0aW9ucy1jb250YWluZXIgewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtY2xvc2Vk
LWNhcHRpb25zLWNvbnRhaW5lcjsKLSAgICBkaXNwbGF5OiBmbGV4OwotICAgIHBvc2l0aW9uOiBh
YnNvbHV0ZTsKLSAgICBib3R0b206IDM1cHg7Ci0gICAgei1pbmRleDogMjsKLSAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiByZ2JhKDIwLCAyMCwgMjAsIDAuOCk7Ci0gICAgYm9yZGVyLXJhZGl1czogNXB4
IDVweCAwcHggMHB4OwotICAgIG92ZXJmbG93OiBoaWRkZW47Ci0gICAgbWF4LXdpZHRoOiAtd2Vi
a2l0LWNhbGMoMTAwJSAtIDQ4cHgpOyAvKiByaWdodCArIDEwcHggKi8KLSAgICBtYXgtaGVpZ2h0
OiAtd2Via2l0LWNhbGMoMTAwJSAtIDM1cHgpOyAvKiBib3R0b20gKyAxMHB4ICovCi0gICAgY3Vy
c29yOiBkZWZhdWx0OwotICAgIGZvbnQtZmFtaWx5OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7Ci0g
ICAgZm9udC1zaXplOiAxMHB0OwotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgZm9udC1z
dHlsZTogbm9ybWFsOwotICAgIGNvbG9yOiB3aGl0ZTsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0
OiBub25lOwotICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjEwcyBsaW5lYXI7Ci19Ci0KLXZpZGVv
Ojotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1jYXB0aW9ucy1jb250YWluZXIub3V0IHsK
LSAgICBib3JkZXItcmFkaXVzOiA1cHg7Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRy
b2xzLWNsb3NlZC1jYXB0aW9ucy1jb250YWluZXIuaGlkZGVuIHsKLSAgICBkaXNwbGF5OiBub25l
ICFpbXBvcnRhbnQ7Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1j
YXB0aW9ucy1jb250YWluZXIgaDMgewotICAgIHBhZGRpbmctdG9wOiA4cHg7Ci0gICAgbWFyZ2lu
OiAwOwotICAgIHBhZGRpbmctbGVmdDogMTdweDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4Owot
ICAgIGZvbnQtc2l6ZTogMTBwdDsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBmb250LXN0
eWxlOiBub3JtYWw7Ci19Ci0KLXZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1j
YXB0aW9ucy1jb250YWluZXIgdWwgewotICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKLSAgICBt
YXJnaW46IDAgMCA0cHggMDsKLSAgICBwYWRkaW5nOiA0cHggMCAwIDA7Ci19Ci0KLXZpZGVvOjot
d2Via2l0LW1lZGlhLWNvbnRyb2xzLWNsb3NlZC1jYXB0aW9ucy1jb250YWluZXIgbGkgewotICAg
IHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgICBjb2xvcjogd2hpdGU7Ci0gICAgbWFyZ2luOiAwOwot
ICAgIHBhZGRpbmctbGVmdDogMTdweDsKLSAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4OwotICAgIHBh
ZGRpbmctdG9wOiAwLjE1ZW07Ci0gICAgcGFkZGluZy1ib3R0b206IDAuMmVtOwotICAgIGJveC1z
aXppbmc6IGJvcmRlci1ib3g7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgICB3aGl0ZS1zcGFj
ZTogbm93cmFwOwotICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwotICAgIG91dGxpbmU6IG5v
bmU7Ci19Ci12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1jbG9zZWQtY2FwdGlvbnMtY29u
dGFpbmVyIGxpLnNlbGVjdGVkIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzMCwgMjMw
LCAyMzAsIDAuMTUpOwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2Ny
ZWVuLWJ1dHRvbiwgdmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtZnVsbHNjcmVlbi1idXR0
b24gewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVkaWEtZW50ZXItZnVsbHNjcmVlbi1idXR0
b247Ci0gICAgZGlzcGxheTogZmxleDsKLSAgICBmbGV4OiBub25lOwotICAgIGJvcmRlcjogbm9u
ZTsKLSAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwotICAgIHdpZHRoOiAzMHB4OwotICAgIGhl
aWdodDogMzBweDsKLSAgICBsaW5lLWhlaWdodDogMzBweDsKLSAgICBtYXJnaW46IDAgOXB4IDAg
LTdweDsKLSAgICBvdXRsaW5lOiBub25lOwotfQotCi1hdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1mdWxsc2NyZWVuLWJ1dHRvbi5oaWRkZW4sCi12aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1mdWxsc2NyZWVuLWJ1dHRvbi5oaWRkZW4gewotICAgIGRpc3BsYXk6IG5vbmUgIWltcG9y
dGFudDsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9TY3JvbGxi
YXJUaGVtZVdQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJh
clRoZW1lQWR3YWl0YS5jcHAKc2ltaWxhcml0eSBpbmRleCA3OSUKcmVuYW1lIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd3BlL1Njcm9sbGJhclRoZW1lV1BFLmNwcApyZW5hbWUgdG8gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuY3BwCmlu
ZGV4IGEzOTYyNDE5ZjRkLi40MTYzZTVhYjQ4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd3BlL1Njcm9sbGJhclRoZW1lV1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJT
Y3JvbGxiYXJUaGVtZVdQRS5oIgorI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQWR3YWl0YS5oIgog
CiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGbG9hdFJvdW5kZWRSZWN0LmgiCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKKyNpbmNsdWRlICJUaGVt
ZUFkd2FpdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OSw0MiArNTAsNTIgQEAg
c3RhdGljIGNvbnN0IENvbG9yIHRodW1iSG92ZXJlZENvbG9yID0gbWFrZVJHQig4NiwgOTEsIDky
KTsKIHN0YXRpYyBjb25zdCBDb2xvciB0aHVtYlByZXNzZWRDb2xvciA9IG1ha2VSR0IoMjcsIDEw
NiwgMjAzKTsKIHN0YXRpYyBjb25zdCBDb2xvciB0aHVtYkNvbG9yID0gbWFrZVJHQigxMjYsIDEy
OSwgMTMwKTsKIAotaW50IFNjcm9sbGJhclRoZW1lV1BFOjpzY3JvbGxiYXJUaGlja25lc3MoU2Ny
b2xsYmFyQ29udHJvbFNpemUsIFNjcm9sbGJhckV4cGFuc2lvblN0YXRlKQorYm9vbCBTY3JvbGxi
YXJUaGVtZUFkd2FpdGE6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpIGNvbnN0Cit7CisjaWYgUExB
VEZPUk0oR1RLKQorICAgIHN0YXRpYyBib29sIHNob3VsZFV1c2VPdmVybGF5U2Nyb2xsYmFycyA9
IGdfc3RyY21wMChnX2dldGVudigiR1RLX09WRVJMQVlfU0NST0xMSU5HIiksICIwIik7CisgICAg
cmV0dXJuIHNob3VsZFV1c2VPdmVybGF5U2Nyb2xsYmFyczsKKyNlbHNlCisgICAgcmV0dXJuIHRy
dWU7CisjZW5kaWYKK30KKworaW50IFNjcm9sbGJhclRoZW1lQWR3YWl0YTo6c2Nyb2xsYmFyVGhp
Y2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXplLCBTY3JvbGxiYXJFeHBhbnNpb25TdGF0ZSkKIHsK
ICAgICByZXR1cm4gc2Nyb2xsYmFyU2l6ZTsKIH0KIAotaW50IFNjcm9sbGJhclRoZW1lV1BFOjpt
aW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyJikKK2ludCBTY3JvbGxiYXJUaGVtZUFkd2FpdGE6
Om1pbmltdW1UaHVtYkxlbmd0aChTY3JvbGxiYXImKQogewogICAgIHJldHVybiAwOwogfQogCi1i
b29sIFNjcm9sbGJhclRoZW1lV1BFOjpoYXNCdXR0b25zKFNjcm9sbGJhciYpCitib29sIFNjcm9s
bGJhclRoZW1lQWR3YWl0YTo6aGFzQnV0dG9ucyhTY3JvbGxiYXImKQogewogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVtZVdQRTo6aGFzVGh1bWIoU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIpCitib29sIFNjcm9sbGJhclRoZW1lQWR3YWl0YTo6aGFzVGh1bWIoU2Nyb2xsYmFy
JiBzY3JvbGxiYXIpCiB7CiAgICAgcmV0dXJuIHRodW1iTGVuZ3RoKHNjcm9sbGJhcikgPiAwOwog
fQogCi1JbnRSZWN0IFNjcm9sbGJhclRoZW1lV1BFOjpiYWNrQnV0dG9uUmVjdChTY3JvbGxiYXIm
LCBTY3JvbGxiYXJQYXJ0LCBib29sKQorSW50UmVjdCBTY3JvbGxiYXJUaGVtZUFkd2FpdGE6OmJh
Y2tCdXR0b25SZWN0KFNjcm9sbGJhciYsIFNjcm9sbGJhclBhcnQsIGJvb2wpCiB7CiAgICAgcmV0
dXJuIHsgfTsKIH0KIAotSW50UmVjdCBTY3JvbGxiYXJUaGVtZVdQRTo6Zm9yd2FyZEJ1dHRvblJl
Y3QoU2Nyb2xsYmFyJiwgU2Nyb2xsYmFyUGFydCwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFyVGhl
bWVBZHdhaXRhOjpmb3J3YXJkQnV0dG9uUmVjdChTY3JvbGxiYXImLCBTY3JvbGxiYXJQYXJ0LCBi
b29sKQogewogICAgIHJldHVybiB7IH07CiB9CiAKLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVXUEU6
OnRyYWNrUmVjdChTY3JvbGxiYXImIHNjcm9sbGJhciwgYm9vbCkKK0ludFJlY3QgU2Nyb2xsYmFy
VGhlbWVBZHdhaXRhOjp0cmFja1JlY3QoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIGJvb2wpCiB7CiAg
ICAgcmV0dXJuIHNjcm9sbGJhci5mcmFtZVJlY3QoKTsKIH0KIAotYm9vbCBTY3JvbGxiYXJUaGVt
ZVdQRTo6cGFpbnQoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQorYm9vbCBTY3JvbGxiYXJUaGVt
ZUFkd2FpdGE6OnBhaW50KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkKIHsKICAgICBpZiAoZ3Jh
cGhpY3NDb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtOTYsNyArMTA3LDExIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVXUEU6OnBhaW50KFNjcm9sbGJh
ciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAgICAgaWYgKCFyZWN0
LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgZG91
YmxlIG9wYWNpdHkgPSBzY3JvbGxiYXIuaG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQgPyBzY3JvbGxi
YXIub3BhY2l0eSgpIDogc2Nyb2xsYmFyT3BhY2l0eTsKKyAgICBkb3VibGUgb3BhY2l0eTsKKyAg
ICBpZiAodXNlc092ZXJsYXlTY3JvbGxiYXJzKCkpCisgICAgICAgIG9wYWNpdHkgPSBzY3JvbGxi
YXIuaG92ZXJlZFBhcnQoKSA9PSBOb1BhcnQgPyBzY3JvbGxiYXIub3BhY2l0eSgpIDogc2Nyb2xs
YmFyT3BhY2l0eTsKKyAgICBlbHNlCisgICAgICAgIG9wYWNpdHkgPSAxOwogICAgIGlmICghb3Bh
Y2l0eSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTEwNiw3ICsxMjEsNyBAQCBib29sIFNj
cm9sbGJhclRoZW1lV1BFOjpwYWludChTY3JvbGxiYXImIHNjcm9sbGJhciwgR3JhcGhpY3NDb250
ZXh0JiBncmFwaGljc0NvbgogICAgICAgICBncmFwaGljc0NvbnRleHQuYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihvcGFjaXR5KTsKICAgICB9CiAKLSAgICBpZiAoc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0
KCkgIT0gTm9QYXJ0KSB7CisgICAgaWYgKHNjcm9sbGJhci5ob3ZlcmVkUGFydCgpICE9IE5vUGFy
dCB8fCAhdXNlc092ZXJsYXlTY3JvbGxiYXJzKCkpIHsKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LmZpbGxSZWN0KHJlY3QsIHNjcm9sbGJhckJhY2tncm91bmRDb2xvcik7CiAKICAgICAgICAgSW50
UmVjdCBmcmFtZSA9IHJlY3Q7CkBAIC0xMjIsNyArMTM3LDcgQEAgYm9vbCBTY3JvbGxiYXJUaGVt
ZVdQRTo6cGFpbnQoU2Nyb2xsYmFyJiBzY3JvbGxiYXIsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhp
Y3NDb24KICAgICBpbnQgdGh1bWJQb3MgPSB0aHVtYlBvc2l0aW9uKHNjcm9sbGJhcik7CiAgICAg
aW50IHRodW1iTGVuID0gdGh1bWJMZW5ndGgoc2Nyb2xsYmFyKTsKICAgICBJbnRSZWN0IHRodW1i
ID0gcmVjdDsKLSAgICBpZiAoc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB7Cisg
ICAgaWYgKHNjcm9sbGJhci5ob3ZlcmVkUGFydCgpID09IE5vUGFydCAmJiB1c2VzT3ZlcmxheVNj
cm9sbGJhcnMoKSkgewogICAgICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWxTY3JvbGxiYXIpIHsKICAgICAgICAgICAgIGlmIChzY3JvbGxiYXIuc2Nyb2xsYWJsZUFy
ZWEoKS5zaG91bGRQbGFjZUJsb2NrRGlyZWN0aW9uU2Nyb2xsYmFyT25MZWZ0KCkpCiAgICAgICAg
ICAgICAgICAgdGh1bWIubW92ZShob3ZlcmVkU2Nyb2xsYmFyQm9yZGVyU2l6ZSwgdGh1bWJQb3Mg
KyB0aHVtYkJvcmRlclNpemUpOwpAQCAtMTUyLDcgKzE2Nyw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhl
bWVXUEU6OnBhaW50KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBo
aWNzQ29uCiAKICAgICBGbG9hdFNpemUgY29ybmVyKDQsIDQpOwogICAgIFBhdGggcGF0aDsKLSAg
ICBpZiAoc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgPT0gTm9QYXJ0KSB7CisgICAgaWYgKHNjcm9s
bGJhci5ob3ZlcmVkUGFydCgpID09IE5vUGFydCAmJiB1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSkg
ewogICAgICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHRodW1iLCBjb3JuZXIpOwogICAgICAgICB0
aHVtYi5pbmZsYXRlKC0xKTsKICAgICAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdCh0aHVtYiwgY29y
bmVyKTsKQEAgLTE2NCwxMCArMTc5LDEwIEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVXUEU6OnBhaW50
KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAKICAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHRodW1iLCBjb3JuZXIpOwogICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRGaWxsUnVsZShXaW5kUnVsZTo6Tm9uWmVybyk7Ci0gICAgaWYgKHNjcm9sbGJhci5ob3Zl
cmVkUGFydCgpID09IE5vUGFydCkKKyAgICBpZiAoc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgPT0g
Tm9QYXJ0ICYmIHVzZXNPdmVybGF5U2Nyb2xsYmFycygpKQogICAgICAgICBncmFwaGljc0NvbnRl
eHQuc2V0RmlsbENvbG9yKG92ZXJsYXlUaHVtYkNvbG9yKTsKICAgICBlbHNlIGlmIChzY3JvbGxi
YXIucHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5z
ZXRGaWxsQ29sb3IodGh1bWJQcmVzc2VkQ29sb3IpOworICAgICAgICBncmFwaGljc0NvbnRleHQu
c2V0RmlsbENvbG9yKHN0YXRpY19jYXN0PFRoZW1lQWR3YWl0YSY+KFRoZW1lOjpzaW5nbGV0b24o
KSkuYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwogICAgIGVsc2UgaWYgKHNjcm9s
bGJhci5ob3ZlcmVkUGFydCgpID09IFRodW1iUGFydCkKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LnNldEZpbGxDb2xvcih0aHVtYkhvdmVyZWRDb2xvcik7CiAgICAgZWxzZQpAQCAtMTgwLDcgKzE5
NSw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVXUEU6OnBhaW50KFNjcm9sbGJhciYgc2Nyb2xsYmFy
LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVNj
cm9sbGJhckJ1dHRvblByZXNzQWN0aW9uIFNjcm9sbGJhclRoZW1lV1BFOjpoYW5kbGVNb3VzZVBy
ZXNzRXZlbnQoU2Nyb2xsYmFyJiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgU2Ny
b2xsYmFyUGFydCBwcmVzc2VkUGFydCkKK1Njcm9sbGJhckJ1dHRvblByZXNzQWN0aW9uIFNjcm9s
bGJhclRoZW1lQWR3YWl0YTo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KFNjcm9sbGJhciYsIGNvbnN0
IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQpCiB7
CiAgICAgc3dpdGNoIChwcmVzc2VkUGFydCkgewogICAgIGNhc2UgQmFja1RyYWNrUGFydDoKQEAg
LTIwNyw3ICsyMjIsNyBAQCBTY3JvbGxiYXJCdXR0b25QcmVzc0FjdGlvbiBTY3JvbGxiYXJUaGVt
ZVdQRTo6aGFuZGxlTW91c2VQcmVzc0V2ZW50KFNjcm9sbGJhciYsCiAKIFNjcm9sbGJhclRoZW1l
JiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKQogewotICAgIHN0YXRpYyBTY3JvbGxiYXJU
aGVtZVdQRSB0aGVtZTsKKyAgICBzdGF0aWMgU2Nyb2xsYmFyVGhlbWVBZHdhaXRhIHRoZW1lOwog
ICAgIHJldHVybiB0aGVtZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd3BlL1Njcm9sbGJhclRoZW1lV1BFLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdh
aXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0YS5oCnNpbWlsYXJpdHkgaW5kZXggODYlCnJlbmFtZSBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9TY3JvbGxiYXJUaGVtZVdQRS5oCnJlbmFt
ZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Njcm9sbGJhclRoZW1lQWR3YWl0
YS5oCmluZGV4IGFlOWQ2NTkxMWJkLi4yNjYxZGU5ZTliMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3BlL1Njcm9sbGJhclRoZW1lV1BFLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYWR3YWl0YS9TY3JvbGxiYXJUaGVtZUFkd2FpdGEuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCwgMjAyMCBJZ2FsaWEgUy5MLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOSwxMyArMjksMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTY3Jv
bGxiYXJUaGVtZVdQRSBmaW5hbCA6IHB1YmxpYyBTY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZSB7Citj
bGFzcyBTY3JvbGxiYXJUaGVtZUFkd2FpdGEgZmluYWwgOiBwdWJsaWMgU2Nyb2xsYmFyVGhlbWVD
b21wb3NpdGUgewogcHVibGljOgotICAgIFNjcm9sbGJhclRoZW1lV1BFKCkgPSBkZWZhdWx0Owot
ICAgIHZpcnR1YWwgflNjcm9sbGJhclRoZW1lV1BFKCkgPSBkZWZhdWx0OworICAgIFNjcm9sbGJh
clRoZW1lQWR3YWl0YSgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIH5TY3JvbGxiYXJUaGVtZUFk
d2FpdGEoKSA9IGRlZmF1bHQ7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCB1c2VzT3ZlcmxheVNjcm9s
bGJhcnMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCB1c2VzT3Zl
cmxheVNjcm9sbGJhcnMoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGludmFsaWRhdGVPbk1v
dXNlRW50ZXJFeGl0KCkgb3ZlcnJpZGUgeyByZXR1cm4gdXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7
IH0KIAogICAgIGJvb2wgcGFpbnQoU2Nyb2xsYmFyJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
SW50UmVjdCYpIG92ZXJyaWRlOwogICAgIFNjcm9sbGJhckJ1dHRvblByZXNzQWN0aW9uIGhhbmRs
ZU1vdXNlUHJlc3NFdmVudChTY3JvbGxiYXImLCBjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmLCBT
Y3JvbGxiYXJQYXJ0KSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dwZS9UaGVtZVdQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1Ro
ZW1lQWR3YWl0YS5jcHAKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd3BlL1RoZW1lV1BFLmNwcApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuY3BwCmluZGV4IGMzMzBiMmQ5NTY4Li42MWQ2
MDRhODRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1RoZW1lV1BF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hZHdhaXRhL1RoZW1lQWR3YWl0YS5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJUaGVtZVdQRS5oIgorI2luY2x1ZGUgIlRoZW1lQWR3YWl0YS5oIgog
CiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb250cm9sU3RhdGVzLmgiCkBAIC00MSw3
ICs0MSw3IEBAIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBhcnJvd1NpemUgPSAxNjsKIHN0YXRpYyBj
b25zdCBDb2xvciBhcnJvd0NvbG9yID0gbWFrZVJHQig0NiwgNTIsIDU0KTsKIHN0YXRpYyBjb25z
dCBpbnQgYnV0dG9uRm9jdXNPZmZzZXQgPSAtMzsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBidXR0
b25QYWRkaW5nID0gNTsKLXN0YXRpYyBjb25zdCBpbnQgYnV0dG9uQm9yZGVyU2l6ZSA9IDE7IC8v
IEtlZXAgaW4gc3luYyB3aXRoIG1lbnVMaXN0QnV0dG9uQm9yZGVyU2l6ZSBpbiBSZW5kZXJUaGVt
ZVdQRS4KK3N0YXRpYyBjb25zdCBpbnQgYnV0dG9uQm9yZGVyU2l6ZSA9IDE7IC8vIEtlZXAgaW4g
c3luYyB3aXRoIG1lbnVMaXN0QnV0dG9uQm9yZGVyU2l6ZSBpbiBSZW5kZXJUaGVtZUFkd2FpdGEu
CiBzdGF0aWMgY29uc3QgQ29sb3IgYnV0dG9uQm9yZGVyQ29sb3IgPSBtYWtlUkdCKDIwNSwgMTk5
LCAxOTQpOwogc3RhdGljIGNvbnN0IENvbG9yIGJ1dHRvbkJhY2tncm91bmRDb2xvciA9IG1ha2VS
R0IoMjQ0LCAyNDIsIDI0MSk7CiBzdGF0aWMgY29uc3QgQ29sb3IgYnV0dG9uQmFja2dyb3VuZFBy
ZXNzZWRDb2xvciA9IG1ha2VSR0IoMjE0LCAyMDksIDIwNSk7CkBAIC01OSwxOCArNTksNDAgQEAg
c3RhdGljIGNvbnN0IENvbG9yIHNwaW5CdXR0b25CYWNrZ3JvdW5kQ29sb3IgPSBtYWtlUkdCKDI1
MiwgMjUyLCAyNTIpOwogc3RhdGljIGNvbnN0IENvbG9yIHNwaW5CdXR0b25CYWNrZ3JvdW5kSG92
ZXJlZENvbG9yID0gbWFrZVJHQkEoNDYsIDUyLCA1NCwgNTApOwogc3RhdGljIGNvbnN0IENvbG9y
IHNwaW5CdXR0b25CYWNrZ3JvdW5kUHJlc3NlZENvbG9yID0gbWFrZVJHQkEoNDYsIDUyLCA1NCwg
NzApOwogCisjaWYgIVBMQVRGT1JNKEdUSykKIFRoZW1lJiBUaGVtZTo6c2luZ2xldG9uKCkKIHsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8VGhlbWVXUEU+IHRoZW1lOworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxUaGVtZUFkd2FpdGE+IHRoZW1lOwogICAgIHJldHVybiB0aGVtZTsKIH0K
KyNlbmRpZgogCi1Db2xvciBUaGVtZVdQRTo6Zm9jdXNDb2xvcigpCitDb2xvciBUaGVtZUFkd2Fp
dGE6OmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1ha2VSR0IoMjU1LCAyNTUsIDI1NSk7Cit9CisKK0NvbG9yIFRoZW1lQWR3YWl0YTo6YWN0aXZl
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFrZVJHQig1
MiwgMTMyLCAyMjgpOworfQorCitDb2xvciBUaGVtZUFkd2FpdGE6OmluYWN0aXZlU2VsZWN0aW9u
Rm9yZWdyb3VuZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWFrZVJHQigyNTIsIDI1Miwg
MjUyKTsKK30KKworQ29sb3IgVGhlbWVBZHdhaXRhOjppbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRD
b2xvcigpOworfQorCitDb2xvciBUaGVtZUFkd2FpdGE6OmZvY3VzQ29sb3IoKQogewogICAgIHJl
dHVybiBmb2N1c1JpbmdDb2xvcjsKIH0KIAotdm9pZCBUaGVtZVdQRTo6cGFpbnRGb2N1cyhHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBpbnQg
b2Zmc2V0KQordm9pZCBUaGVtZUFkd2FpdGE6OnBhaW50Rm9jdXMoR3JhcGhpY3NDb250ZXh0JiBn
cmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgaW50IG9mZnNldCkKIHsKICAg
ICBGbG9hdFJlY3QgZm9jdXNSZWN0ID0gcmVjdDsKICAgICBmb2N1c1JlY3QuaW5mbGF0ZShvZmZz
ZXQpOwpAQCAtNzksNyArMTAxLDcgQEAgdm9pZCBUaGVtZVdQRTo6cGFpbnRGb2N1cyhHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWMKICAgICBwYWlu
dEZvY3VzKGdyYXBoaWNzQ29udGV4dCwgcGF0aCwgZm9jdXNSaW5nQ29sb3IpOwogfQogCi12b2lk
IFRoZW1lV1BFOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBQYXRoJiBwYXRoLCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIFRoZW1lQWR3YWl0YTo6
cGFpbnRGb2N1cyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgUGF0aCYg
cGF0aCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2
ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCkBAIC05Nyw3ICsxMTksNyBAQCB2b2lk
IFRoZW1lV1BFOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBQYXRoJiBwYXRoLCBjbwogICAgIGdyYXBoaWNzQ29udGV4dC5lbmRUcmFuc3BhcmVuY3lM
YXllcigpOwogfQogCi12b2lkIFRoZW1lV1BFOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGNvbnN0IENv
bG9yJiBjb2xvcikKK3ZvaWQgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4
dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMsIGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKICAgICBGbG9hdFNpemUgY29ybmVyKDIsIDIpOwogICAgIFBhdGgg
cGF0aDsKQEAgLTEwNiw3ICsxMjgsNyBAQCB2b2lkIFRoZW1lV1BFOjpwYWludEZvY3VzKEdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRSZQogICAgIHBh
aW50Rm9jdXMoZ3JhcGhpY3NDb250ZXh0LCBwYXRoLCBjb2xvcik7CiB9CiAKLXZvaWQgVGhlbWVX
UEU6OnBhaW50QXJyb3coR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIEFycm93RGly
ZWN0aW9uIGRpcmVjdGlvbikKK3ZvaWQgVGhlbWVBZHdhaXRhOjpwYWludEFycm93KEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBBcnJvd0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAg
ICAgUGF0aCBwYXRoOwogICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CkBAIC0xMjcsNyArMTQ5LDcg
QEAgdm9pZCBUaGVtZVdQRTo6cGFpbnRBcnJvdyhHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgQXJyb3dEaXJlY3Rpb24gZGlyZWMKICAgICBncmFwaGljc0NvbnRleHQuZmlsbFBhdGgo
cGF0aCk7CiB9CiAKLUxlbmd0aFNpemUgVGhlbWVXUEU6OmNvbnRyb2xTaXplKENvbnRyb2xQYXJ0
IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkZSwgY29uc3QgTGVuZ3RoU2l6ZSYg
em9vbWVkU2l6ZSwgZmxvYXQgem9vbUZhY3RvcikgY29uc3QKK0xlbmd0aFNpemUgVGhlbWVBZHdh
aXRhOjpjb250cm9sU2l6ZShDb250cm9sUGFydCBwYXJ0LCBjb25zdCBGb250Q2FzY2FkZSYgZm9u
dENhc2NhZGUsIGNvbnN0IExlbmd0aFNpemUmIHpvb21lZFNpemUsIGZsb2F0IHpvb21GYWN0b3Ip
IGNvbnN0CiB7CiAgICAgaWYgKCF6b29tZWRTaXplLndpZHRoLmlzSW50cmluc2ljT3JBdXRvKCkg
JiYgIXpvb21lZFNpemUuaGVpZ2h0LmlzSW50cmluc2ljT3JBdXRvKCkpCiAgICAgICAgIHJldHVy
biBUaGVtZTo6Y29udHJvbFNpemUocGFydCwgZm9udENhc2NhZGUsIHpvb21lZFNpemUsIHpvb21G
YWN0b3IpOwpAQCAtMTUxLDcgKzE3Myw3IEBAIExlbmd0aFNpemUgVGhlbWVXUEU6OmNvbnRyb2xT
aXplKENvbnRyb2xQYXJ0IHBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Q2FzY2FkCiAgICAg
cmV0dXJuIFRoZW1lOjpjb250cm9sU2l6ZShwYXJ0LCBmb250Q2FzY2FkZSwgem9vbWVkU2l6ZSwg
em9vbUZhY3Rvcik7CiB9CiAKLXZvaWQgVGhlbWVXUEU6OnBhaW50KENvbnRyb2xQYXJ0IHBhcnQs
IENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0IHpvb21GYWN0b3IsIFNjcm9sbFZpZXcqLCBmbG9h
dCwgZmxvYXQsIGJvb2wsIGJvb2wpCit2b2lkIFRoZW1lQWR3YWl0YTo6cGFpbnQoQ29udHJvbFBh
cnQgcGFydCwgQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQgem9vbUZhY3RvciwgU2Nyb2xsVmll
dyosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKICAg
ICBjYXNlIENoZWNrYm94UGFydDoKQEAgLTE3NCw3ICsxOTYsNyBAQCB2b2lkIFRoZW1lV1BFOjpw
YWludChDb250cm9sUGFydCBwYXJ0LCBDb250cm9sU3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29u
dGV4dCYgYwogICAgIH0KIH0KIAotdm9pZCBUaGVtZVdQRTo6cGFpbnRDaGVja2JveChDb250cm9s
U3RhdGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHpvb21lZFJlY3QsIGZsb2F0KQordm9pZCBUaGVtZUFkd2FpdGE6OnBhaW50Q2hl
Y2tib3goQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9hdCkKIHsKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIApAQCAtMjI4
LDcgKzI1MCw3IEBAIHZvaWQgVGhlbWVXUEU6OnBhaW50Q2hlY2tib3goQ29udHJvbFN0YXRlcyYg
c3RhdGVzLCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29uCiAgICAgICAgIHBhaW50Rm9jdXMo
Z3JhcGhpY3NDb250ZXh0LCB6b29tZWRSZWN0LCB0b2dnbGVGb2N1c09mZnNldCk7CiB9CiAKLXZv
aWQgVGhlbWVXUEU6OnBhaW50UmFkaW8oQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRSZWN0LCBmbG9h
dCkKK3ZvaWQgVGhlbWVBZHdhaXRhOjpwYWludFJhZGlvKENvbnRyb2xTdGF0ZXMmIHN0YXRlcywg
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVk
UmVjdCwgZmxvYXQpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KGdyYXBoaWNzQ29udGV4dCk7CiAgICAgRmxvYXRSZWN0IGZpZWxkUmVjdCA9IHpvb21lZFJlY3Q7
CkBAIC0yNjYsNyArMjg4LDcgQEAgdm9pZCBUaGVtZVdQRTo6cGFpbnRSYWRpbyhDb250cm9sU3Rh
dGVzJiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXgKICAgICAgICAgcGFp
bnRGb2N1cyhncmFwaGljc0NvbnRleHQsIHpvb21lZFJlY3QsIHRvZ2dsZUZvY3VzT2Zmc2V0KTsK
IH0KIAotdm9pZCBUaGVtZVdQRTo6cGFpbnRCdXR0b24oQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBH
cmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiB6b29tZWRS
ZWN0LCBmbG9hdCkKK3ZvaWQgVGhlbWVBZHdhaXRhOjpwYWludEJ1dHRvbihDb250cm9sU3RhdGVz
JiBzdGF0ZXMsIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIHpvb21lZFJlY3QsIGZsb2F0KQogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCkBAIC0yOTcsNyArMzE5LDcgQEAgdm9pZCBU
aGVtZVdQRTo6cGFpbnRCdXR0b24oQ29udHJvbFN0YXRlcyYgc3RhdGVzLCBHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGUKICAgICAgICAgcGFpbnRGb2N1cyhncmFwaGljc0NvbnRleHQsIHpv
b21lZFJlY3QsIGJ1dHRvbkZvY3VzT2Zmc2V0KTsKIH0KIAotdm9pZCBUaGVtZVdQRTo6cGFpbnRT
cGluQnV0dG9uKENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxvYXQpCit2b2lkIFRoZW1l
QWR3YWl0YTo6cGFpbnRTcGluQnV0dG9uKENvbnRyb2xTdGF0ZXMmIHN0YXRlcywgR3JhcGhpY3ND
b250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgem9vbWVkUmVjdCwgZmxv
YXQpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNz
Q29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9UaGVt
ZVdQRS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9UaGVtZUFkd2FpdGEuaApz
aW1pbGFyaXR5IGluZGV4IDg2JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
cGUvVGhlbWVXUEUuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYWR3YWl0YS9U
aGVtZUFkd2FpdGEuaAppbmRleCA2NGRlMGM1NDhiMy4uZmViMDdlODcxMmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9UaGVtZVdQRS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Fkd2FpdGEvVGhlbWVBZHdhaXRhLmgKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUs
IDIwMjAgSWdhbGlhIFMuTC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIs
NyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBhdGg7CiAKLWNsYXNzIFRo
ZW1lV1BFIGZpbmFsIDogcHVibGljIFRoZW1lIHsKK2NsYXNzIFRoZW1lQWR3YWl0YSA6IHB1Ymxp
YyBUaGVtZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIENvbG9yIGZvY3VzQ29sb3IoKTsKICAgICBz
dGF0aWMgdm9pZCBwYWludEZvY3VzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGludCBvZmZzZXQpOwpAQCAtNDEsOSArNDEsMTQgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3Mg
QXJyb3dEaXJlY3Rpb24geyBVcCwgRG93biB9OwogICAgIHN0YXRpYyB2b2lkIHBhaW50QXJyb3co
R3JhcGhpY3NDb250ZXh0JiwgQXJyb3dEaXJlY3Rpb24pOwogCisgICAgdmlydHVhbCBDb2xvciBh
Y3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9y
IGFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0OworICAgIHZpcnR1YWwgQ29s
b3IgaW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IENvbG9yIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Q7CisgICAgdmly
dHVhbCB2b2lkIHBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCkgeyB9OworCiBwcml2YXRlOgogICAg
IExlbmd0aFNpemUgY29udHJvbFNpemUoQ29udHJvbFBhcnQsIGNvbnN0IEZvbnRDYXNjYWRlJiwg
Y29uc3QgTGVuZ3RoU2l6ZSYsIGZsb2F0KSBjb25zdCBmaW5hbDsKLQogICAgIHZvaWQgcGFpbnQo
Q29udHJvbFBhcnQsIENvbnRyb2xTdGF0ZXMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmLCBmbG9hdCwgU2Nyb2xsVmlldyosIGZsb2F0LCBmbG9hdCwgYm9vbCwgYm9vbCkgZmlu
YWw7CiAKICAgICB2b2lkIHBhaW50Q2hlY2tib3goQ29udHJvbFN0YXRlcyYsIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmluZGV4
IGNkOGYxZGIzNTllLi5hZDMzMjY1NDE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0yNzks
MzQgKzI3OSw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsQ3VycmVudENhaXJvUGF0aChQbGF0
Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjCiAgICAgY2Fpcm9fcmVzdG9yZShj
cik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RGb2N1c1JpbmdDb2xvcihDb2xvciYg
Y29sb3IpCi17Ci0jaWYgIVBMQVRGT1JNKEdUSykKLSAgICAvLyBGb3JjZSB0aGUgYWxwaGEgdG8g
NTAlLiBUaGlzIG1hdGNoZXMgd2hhdCB0aGUgTWFjIGRvZXMgd2l0aCBvdXRsaW5lIHJpbmdzLgot
ICAgIGNvbG9yID0gQ29sb3IobWFrZVJHQkEoY29sb3IucmVkKCksIGNvbG9yLmdyZWVuKCksIGNv
bG9yLmJsdWUoKSwgMTI3KSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShjb2xvcik7Ci0jZW5k
aWYKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkanVzdEZvY3VzUmluZ0xpbmVXaWR0aChmbG9h
dCYgd2lkdGgpCi17Ci0jaWYgUExBVEZPUk0oR1RLKQotICAgIHdpZHRoID0gMjsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIFN0cm9r
ZVN0eWxlIGZvY3VzUmluZ1N0cm9rZVN0eWxlKCkKLXsKLSNpZiBQTEFURk9STShHVEspCi0gICAg
cmV0dXJuIERvdHRlZFN0cm9rZTsKLSNlbHNlCi0gICAgcmV0dXJuIFNvbGlkU3Ryb2tlOwotI2Vu
ZGlmCi19Ci0KIHN0YXRpYyB2b2lkIGRyYXdHbHlwaHNUb0NvbnRleHQoY2Fpcm9fdCogY29udGV4
dCwgY2Fpcm9fc2NhbGVkX2ZvbnRfdCogc2NhbGVkRm9udCwgZG91YmxlIHN5bnRoZXRpY0JvbGRP
ZmZzZXQsIGNvbnN0IFZlY3RvcjxjYWlyb19nbHlwaF90PiYgZ2x5cGhzLCBGb250U21vb3RoaW5n
TW9kZSBmb250U21vb3RoaW5nTW9kZSkKIHsKICAgICBjYWlyb19tYXRyaXhfdCBvcmlnaW5hbFRy
YW5zZm9ybTsKQEAgLTExNTEsOSArMTEyMyw5IEBAIHZvaWQgZHJhd0ZvY3VzUmluZyhQbGF0Zm9y
bUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBmbG9hCiB7
CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkcmF3IHBhdGhzIHRoYXQgZGVzY3JpYmUgYSByZWN0
YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5lcnMKICAgICAvLyBzbyBhcyB0byBiZSBjb25zaXN0ZW50
IHdpdGggaG93IHdlIGRyYXcgcmVjdGFuZ3VsYXIgZm9jdXMgcmluZ3MuCi0gICAgQ29sb3Igcmlu
Z0NvbG9yID0gY29sb3I7Ci0gICAgYWRqdXN0Rm9jdXNSaW5nQ29sb3IocmluZ0NvbG9yKTsKLSAg
ICBhZGp1c3RGb2N1c1JpbmdMaW5lV2lkdGgod2lkdGgpOworCisgICAgLy8gRm9yY2UgdGhlIGFs
cGhhIHRvIDUwJS4gVGhpcyBtYXRjaGVzIHdoYXQgdGhlIE1hYyBkb2VzIHdpdGggb3V0bGluZSBy
aW5ncy4KKyAgICBDb2xvciByaW5nQ29sb3IgPSBtYWtlUkdCQShjb2xvci5yZWQoKSwgY29sb3Iu
Z3JlZW4oKSwgY29sb3IuYmx1ZSgpLCAxMjcpOwogCiAgICAgY2Fpcm9fdCogY3IgPSBwbGF0Zm9y
bUNvbnRleHQuY3IoKTsKICAgICBjYWlyb19zYXZlKGNyKTsKQEAgLTExNjIsNyArMTEzNCw2IEBA
IHZvaWQgZHJhd0ZvY3VzUmluZyhQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0
LCBjb25zdCBQYXRoJiBwYXRoLCBmbG9hCiAgICAgYXBwZW5kV2ViQ29yZVBhdGhUb0NhaXJvQ29u
dGV4dChjciwgcGF0aCk7CiAgICAgc2V0U291cmNlUkdCQUZyb21Db2xvcihjciwgcmluZ0NvbG9y
KTsKICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjciwgd2lkdGgpOwotICAgIENhaXJvOjpTdGF0
ZTo6c2V0U3Ryb2tlU3R5bGUocGxhdGZvcm1Db250ZXh0LCBmb2N1c1JpbmdTdHJva2VTdHlsZSgp
KTsKICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IsIENBSVJPX09QRVJBVE9SX09WRVIpOwogICAg
IGNhaXJvX3N0cm9rZV9wcmVzZXJ2ZShjcik7CiAKQEAgLTExODAsMTAgKzExNTEsNiBAQCB2b2lk
IGRyYXdGb2N1c1JpbmcoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgY29u
c3QgUGF0aCYgcGF0aCwgZmxvYQogdm9pZCBkcmF3Rm9jdXNSaW5nKFBsYXRmb3JtQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0cywgZmxv
YXQgd2lkdGgsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBQYXRoIHBhdGg7Ci0jaWYgUExB
VEZPUk0oR1RLKQotICAgIGZvciAoY29uc3QgYXV0byYgcmVjdCA6IHJlY3RzKQotICAgICAgICBw
YXRoLmFkZFJlY3QocmVjdCk7Ci0jZWxzZQogICAgIHVuc2lnbmVkIHJlY3RDb3VudCA9IHJlY3Rz
LnNpemUoKTsKICAgICBpbnQgcmFkaXVzID0gKHdpZHRoIC0gMSkgLyAyOwogICAgIFBhdGggc3Vi
UGF0aDsKQEAgLTExOTMsNyArMTE2MCw2IEBAIHZvaWQgZHJhd0ZvY3VzUmluZyhQbGF0Zm9ybUNv
bnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBWZWN0b3I8RmxvYXRSZWN0CiAgICAg
ICAgIHN1YlBhdGguYWRkUm91bmRlZFJlY3QocmVjdHNbaV0sIEZsb2F0U2l6ZShyYWRpdXMsIHJh
ZGl1cykpOwogICAgICAgICBwYXRoLmFkZFBhdGgoc3ViUGF0aCwgQWZmaW5lVHJhbnNmb3JtKCkp
OwogICAgIH0KLSNlbmRpZgogCiAgICAgZHJhd0ZvY3VzUmluZyhwbGF0Zm9ybUNvbnRleHQsIHBh
dGgsIHdpZHRoLCBjb2xvcik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXgg
OGY5YTZkNWM3MGYuLmExMDQ2NTZjYjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
CkBAIC01MSw4ICs1MSw4IEBACiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KICNlbmRpZgogCi0j
aWYgUExBVEZPUk0oV1BFKQotI2luY2x1ZGUgIlRoZW1lV1BFLmgiCisjaWYgUExBVEZPUk0oV1BF
KSB8fCBQTEFURk9STShHVEspCisjaW5jbHVkZSAiVGhlbWVBZHdhaXRhLmgiCiAjZW5kaWYKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjkyLDggKzI5Miw4IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFBhdGgmIHBhdGgsIGZsb2F0IHdpZHRoLCBmbG9hdCBv
ZmZzZXQsCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0j
aWYgUExBVEZPUk0oV1BFKQotICAgIFRoZW1lV1BFOjpwYWludEZvY3VzKCp0aGlzLCBwYXRoLCBj
b2xvcik7CisjaWYgUExBVEZPUk0oV1BFKSB8fCBQTEFURk9STShHVEspCisgICAgVGhlbWVBZHdh
aXRhOjpwYWludEZvY3VzKCp0aGlzLCBwYXRoLCBjb2xvcik7CiAgICAgVU5VU0VEX1BBUkFNKHdp
ZHRoKTsKICAgICBVTlVTRURfUEFSQU0ob2Zmc2V0KTsKICAgICByZXR1cm47CkBAIC0zMTQsOCAr
MzE0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29uc3QgVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzLCBmbG9hdCB3aWR0aCwKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSNpZiBQTEFURk9STShXUEUpCi0gICAgVGhlbWVXUEU6
OnBhaW50Rm9jdXMoKnRoaXMsIHJlY3RzLCBjb2xvcik7CisjaWYgUExBVEZPUk0oV1BFKSB8fCBQ
TEFURk9STShHVEspCisgICAgVGhlbWVBZHdhaXRhOjpwYWludEZvY3VzKCp0aGlzLCByZWN0cywg
Y29sb3IpOwogICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7CiAgICAgVU5VU0VEX1BBUkFNKG9mZnNl
dCk7CiAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR2FkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5k
ZXJUaGVtZUdhZGdldC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZTA3NThh
NmVkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHYWRnZXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlJlbmRlclRo
ZW1lR2FkZ2V0LmgiCi0KLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKLSNpbmNsdWRlICJHUmVmUHRy
R3RrLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRo
ZW1lR2FkZ2V0PiBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGNvbnN0IFJlbmRlclRoZW1lR2Fk
Z2V0OjpJbmZvJiBpbmZvLCBSZW5kZXJUaGVtZUdhZGdldCogcGFyZW50LCBjb25zdCBWZWN0b3I8
UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdzLCB1bnNpZ25lZCBwb3NpdGlvbikKLXsK
LSAgICBzd2l0Y2ggKGluZm8udHlwZSkgewotICAgIGNhc2UgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5
cGU6OkdlbmVyaWM6Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lR2FkZ2V0
PihpbmZvLCBwYXJlbnQsIHNpYmxpbmdzLCBwb3NpdGlvbik7Ci0gICAgY2FzZSBSZW5kZXJUaGVt
ZUdhZGdldDo6VHlwZTo6VGV4dEZpZWxkOgotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5k
ZXJUaGVtZVRleHRGaWVsZEdhZGdldD4oaW5mbywgcGFyZW50LCBzaWJsaW5ncywgcG9zaXRpb24p
OwotICAgIGNhc2UgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OlJhZGlvOgotICAgIGNhc2UgUmVu
ZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkNoZWNrOgotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxS
ZW5kZXJUaGVtZVRvZ2dsZUdhZGdldD4oaW5mbywgcGFyZW50LCBzaWJsaW5ncywgcG9zaXRpb24p
OwotICAgIGNhc2UgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkFycm93OgotICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZUFycm93R2FkZ2V0PihpbmZvLCBwYXJlbnQsIHNpYmxp
bmdzLCBwb3NpdGlvbik7Ci0gICAgY2FzZSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6SWNvbjoK
LSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVuZGVyVGhlbWVJY29uR2FkZ2V0PihpbmZvLCBw
YXJlbnQsIHNpYmxpbmdzLCBwb3NpdGlvbik7Ci0gICAgY2FzZSBSZW5kZXJUaGVtZUdhZGdldDo6
VHlwZTo6U2Nyb2xsYmFyOgotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZVNj
cm9sbGJhckdhZGdldD4oaW5mbywgcGFyZW50LCBzaWJsaW5ncywgcG9zaXRpb24pOwotICAgIGNh
c2UgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkJ1dHRvbjoKLSAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWU8UmVuZGVyVGhlbWVCdXR0b25HYWRnZXQ+KGluZm8sIHBhcmVudCwgc2libGluZ3MsIHBv
c2l0aW9uKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotc3RhdGljIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjcmVhdGVTdHls
ZUNvbnRleHQoR3RrV2lkZ2V0UGF0aCogcGF0aCwgR3RrU3R5bGVDb250ZXh0KiBwYXJlbnQpCi17
Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3RrX3N0
eWxlX2NvbnRleHRfbmV3KCkpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKGNvbnRl
eHQuZ2V0KCksIHBhdGgpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXJlbnQoY29udGV4
dC5nZXQoKSwgcGFyZW50KTsKLSAgICByZXR1cm4gY29udGV4dDsKLX0KLQotc3RhdGljIHZvaWQg
YXBwZW5kRWxlbWVudFRvUGF0aChHdGtXaWRnZXRQYXRoKiBwYXRoLCBjb25zdCBSZW5kZXJUaGVt
ZUdhZGdldDo6SW5mbyYgaW5mbykKLXsKLSAgICAvLyBTY3JvbGxiYXJzIG5lZWQgdG8gdXNlIGl0
cyBHVHlwZSB0byBiZSBhYmxlIHRvIGdldCBub24tQ1NTIHN0eWxlIHByb3BlcnRpZXMuCi0gICAg
Z3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGgsIGluZm8udHlwZSA9PSBSZW5kZXJUaGVt
ZUdhZGdldDo6VHlwZTo6U2Nyb2xsYmFyID8gR1RLX1RZUEVfU0NST0xMQkFSIDogR19UWVBFX05P
TkUpOwotICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLCAtMSwg
aW5mby5uYW1lKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8qIGNsYXNzTmFtZSA6IGluZm8uY2xhc3NM
aXN0KQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aCwgLTEsIGNs
YXNzTmFtZSk7Ci19Ci0KLVJlbmRlclRoZW1lR2FkZ2V0OjpSZW5kZXJUaGVtZUdhZGdldChjb25z
dCBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyYgaW5mbywgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVu
dCwgY29uc3QgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBzaWJsaW5ncywgdW5zaWdu
ZWQgcG9zaXRpb24pCi17Ci0gICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBwYXRoID0gcGFyZW50
ID8gYWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9jb3B5KGd0a19zdHlsZV9jb250ZXh0X2dldF9w
YXRoKHBhcmVudC0+Y29udGV4dCgpKSkpIDogYWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9uZXco
KSk7Ci0gICAgaWYgKCFzaWJsaW5ncy5pc0VtcHR5KCkpIHsKLSAgICAgICAgR1JlZlB0cjxHdGtX
aWRnZXRQYXRoPiBzaWJsaW5nc1BhdGggPSBhZG9wdEdSZWYoZ3RrX3dpZGdldF9wYXRoX25ldygp
KTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzaWJsaW5nSW5mbyA6IHNpYmxpbmdzKQotICAg
ICAgICAgICAgYXBwZW5kRWxlbWVudFRvUGF0aChzaWJsaW5nc1BhdGguZ2V0KCksIHNpYmxpbmdJ
bmZvKTsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF93aXRoX3NpYmxpbmdzKHBhdGgu
Z2V0KCksIHNpYmxpbmdzUGF0aC5nZXQoKSwgcG9zaXRpb24pOwotICAgIH0gZWxzZQotICAgICAg
ICBhcHBlbmRFbGVtZW50VG9QYXRoKHBhdGguZ2V0KCksIGluZm8pOwotICAgIG1fY29udGV4dCA9
IGNyZWF0ZVN0eWxlQ29udGV4dChwYXRoLmdldCgpLCBwYXJlbnQgPyBwYXJlbnQtPmNvbnRleHQo
KSA6IG51bGxwdHIpOwotfQotCi1SZW5kZXJUaGVtZUdhZGdldDo6flJlbmRlclRoZW1lR2FkZ2V0
KCkgPSBkZWZhdWx0OwotCi1HdGtCb3JkZXIgUmVuZGVyVGhlbWVHYWRnZXQ6Om1hcmdpbkJveCgp
IGNvbnN0Ci17Ci0gICAgR3RrQm9yZGVyIHJldHVyblZhbHVlOwotICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9tYXJnaW4obV9jb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3Rh
dGUobV9jb250ZXh0LmdldCgpKSwgJnJldHVyblZhbHVlKTsKLSAgICByZXR1cm4gcmV0dXJuVmFs
dWU7Ci19Ci0KLUd0a0JvcmRlciBSZW5kZXJUaGVtZUdhZGdldDo6Ym9yZGVyQm94KCkgY29uc3QK
LXsKLSAgICBHdGtCb3JkZXIgcmV0dXJuVmFsdWU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0
X2JvcmRlcihtX2NvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShtX2Nv
bnRleHQuZ2V0KCkpLCAmcmV0dXJuVmFsdWUpOwotICAgIHJldHVybiByZXR1cm5WYWx1ZTsKLX0K
LQotR3RrQm9yZGVyIFJlbmRlclRoZW1lR2FkZ2V0OjpwYWRkaW5nQm94KCkgY29uc3QKLXsKLSAg
ICBHdGtCb3JkZXIgcmV0dXJuVmFsdWU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRp
bmcobV9jb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUobV9jb250ZXh0
LmdldCgpKSwgJnJldHVyblZhbHVlKTsKLSAgICByZXR1cm4gcmV0dXJuVmFsdWU7Ci19Ci0KLUd0
a0JvcmRlciBSZW5kZXJUaGVtZUdhZGdldDo6Y29udGVudHNCb3goKSBjb25zdAotewotICAgIGF1
dG8gbWFyZ2luID0gbWFyZ2luQm94KCk7Ci0gICAgYXV0byBib3JkZXIgPSBib3JkZXJCb3goKTsK
LSAgICBhdXRvIHBhZGRpbmcgPSBwYWRkaW5nQm94KCk7Ci0gICAgcGFkZGluZy5sZWZ0ICs9IG1h
cmdpbi5sZWZ0ICsgYm9yZGVyLmxlZnQ7Ci0gICAgcGFkZGluZy5yaWdodCArPSBtYXJnaW4ucmln
aHQgKyBib3JkZXIucmlnaHQ7Ci0gICAgcGFkZGluZy50b3AgKz0gbWFyZ2luLnRvcCArIGJvcmRl
ci50b3A7Ci0gICAgcGFkZGluZy5ib3R0b20gKz0gbWFyZ2luLmJvdHRvbSArIGJvcmRlci5ib3R0
b207Ci0gICAgcmV0dXJuIHBhZGRpbmc7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR2FkZ2V0Ojpj
b2xvcigpIGNvbnN0Ci17Ci0gICAgR2RrUkdCQSByZXR1cm5WYWx1ZTsKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9nZXRfY29sb3IobV9jb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9nZXRf
c3RhdGUobV9jb250ZXh0LmdldCgpKSwgJnJldHVyblZhbHVlKTsKLSAgICByZXR1cm4gcmV0dXJu
VmFsdWU7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR2FkZ2V0OjpiYWNrZ3JvdW5kQ29sb3IoKSBj
b25zdAotewotICAgIEdka1JHQkEgcmV0dXJuVmFsdWU7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X2JhY2tncm91bmRfY29sb3IobV9jb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9n
ZXRfc3RhdGUobV9jb250ZXh0LmdldCgpKSwgJnJldHVyblZhbHVlKTsKLSAgICByZXR1cm4gcmV0
dXJuVmFsdWU7Ci19Ci0KLWRvdWJsZSBSZW5kZXJUaGVtZUdhZGdldDo6b3BhY2l0eSgpIGNvbnN0
Ci17Ci0gICAgZG91YmxlIHJldHVyblZhbHVlOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldCht
X2NvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShtX2NvbnRleHQuZ2V0
KCkpLCAib3BhY2l0eSIsICZyZXR1cm5WYWx1ZSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuIHJldHVy
blZhbHVlOwotfQotCi1HdGtTdGF0ZUZsYWdzIFJlbmRlclRoZW1lR2FkZ2V0OjpzdGF0ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShtX2NvbnRleHQu
Z2V0KCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR2FkZ2V0OjpzZXRTdGF0ZShHdGtTdGF0ZUZs
YWdzIHN0YXRlKQotewotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShtX2NvbnRleHQu
Z2V0KCksIHN0YXRlKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJUaGVtZUdhZGdldDo6bWluaW11bVNp
emUoKSBjb25zdAotewotICAgIGludCB3aWR0aCwgaGVpZ2h0OwotICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldChtX2NvbnRleHQuZ2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShtX2Nv
bnRleHQuZ2V0KCkpLCAibWluLXdpZHRoIiwgJndpZHRoLCAibWluLWhlaWdodCIsICZoZWlnaHQs
IG51bGxwdHIpOwotICAgIHJldHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQotCi1JbnRT
aXplIFJlbmRlclRoZW1lR2FkZ2V0OjpwcmVmZXJyZWRTaXplKCkgY29uc3QKLXsKLSAgICBhdXRv
IG1hcmdpbiA9IG1hcmdpbkJveCgpOwotICAgIGF1dG8gYm9yZGVyID0gYm9yZGVyQm94KCk7Ci0g
ICAgYXV0byBwYWRkaW5nID0gcGFkZGluZ0JveCgpOwotICAgIGF1dG8gbWluU2l6ZSA9IG1pbmlt
dW1TaXplKCk7Ci0gICAgbWluU2l6ZS5leHBhbmQobWFyZ2luLmxlZnQgKyBtYXJnaW4ucmlnaHQg
KyBib3JkZXIubGVmdCArIGJvcmRlci5yaWdodCArIHBhZGRpbmcubGVmdCArIHBhZGRpbmcucmln
aHQsCi0gICAgICAgIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgYm9yZGVyLnRvcCArIGJv
cmRlci5ib3R0b20gKyBwYWRkaW5nLnRvcCArIHBhZGRpbmcuYm90dG9tKTsKLSAgICByZXR1cm4g
bWluU2l6ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUdhZGdldDo6cmVuZGVyKGNhaXJvX3QqIGNy
LCBjb25zdCBGbG9hdFJlY3QmIHBhaW50UmVjdCwgRmxvYXRSZWN0KiBjb250ZW50c1JlY3QpCi17
Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBwYWludFJlY3Q7Ci0KLSAgICBhdXRvIG1hcmdpbiA9IG1h
cmdpbkJveCgpOwotICAgIHJlY3QubW92ZShtYXJnaW4ubGVmdCwgbWFyZ2luLnRvcCk7Ci0gICAg
cmVjdC5jb250cmFjdChtYXJnaW4ubGVmdCArIG1hcmdpbi5yaWdodCwgbWFyZ2luLnRvcCArIG1h
cmdpbi5ib3R0b20pOwotCi0gICAgYXV0byBtaW5TaXplID0gbWluaW11bVNpemUoKTsKLSAgICBy
ZWN0LnNldFdpZHRoKHN0ZDo6bWF4PGZsb2F0PihyZWN0LndpZHRoKCksIG1pblNpemUud2lkdGgo
KSkpOwotICAgIHJlY3Quc2V0SGVpZ2h0KHN0ZDo6bWF4PGZsb2F0PihyZWN0LmhlaWdodCgpLCBt
aW5TaXplLmhlaWdodCgpKSk7Ci0KLSAgICBndGtfcmVuZGVyX2JhY2tncm91bmQobV9jb250ZXh0
LmdldCgpLCBjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUobV9jb250ZXh0LmdldCgpLCBjciwgcmVjdC54KCks
IHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgaWYgKGNvbnRl
bnRzUmVjdCkgewotICAgICAgICBhdXRvIGJvcmRlciA9IGJvcmRlckJveCgpOwotICAgICAgICBh
dXRvIHBhZGRpbmcgPSBwYWRkaW5nQm94KCk7Ci0gICAgICAgICpjb250ZW50c1JlY3QgPSByZWN0
OwotICAgICAgICBjb250ZW50c1JlY3QtPm1vdmUoYm9yZGVyLmxlZnQgKyBwYWRkaW5nLmxlZnQs
IGJvcmRlci50b3AgKyBwYWRkaW5nLnRvcCk7Ci0gICAgICAgIGNvbnRlbnRzUmVjdC0+Y29udHJh
Y3QoYm9yZGVyLmxlZnQgKyBib3JkZXIucmlnaHQgKyBwYWRkaW5nLmxlZnQgKyBwYWRkaW5nLnJp
Z2h0LCBib3JkZXIudG9wICsgYm9yZGVyLmJvdHRvbSArIHBhZGRpbmcudG9wICsgcGFkZGluZy5i
b3R0b20pOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFJlbmRlclRoZW1l
R2FkZ2V0OjpyZW5kZXJGb2N1cyhjYWlyb190KiBjciwgY29uc3QgRmxvYXRSZWN0JiBmb2N1c1Jl
Y3QpCi17Ci0gICAgRmxvYXRSZWN0IHJlY3QgPSBmb2N1c1JlY3Q7Ci0gICAgYXV0byBtYXJnaW4g
PSBtYXJnaW5Cb3goKTsKLSAgICByZWN0Lm1vdmUobWFyZ2luLmxlZnQsIG1hcmdpbi50b3ApOwot
ICAgIHJlY3QuY29udHJhY3QobWFyZ2luLmxlZnQgKyBtYXJnaW4ucmlnaHQsIG1hcmdpbi50b3Ag
KyBtYXJnaW4uYm90dG9tKTsKLSAgICBndGtfcmVuZGVyX2ZvY3VzKG1fY29udGV4dC5nZXQoKSwg
Y3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLX0K
LQotUmVuZGVyVGhlbWVCb3hHYWRnZXQ6OlJlbmRlclRoZW1lQm94R2FkZ2V0KGNvbnN0IFJlbmRl
clRoZW1lR2FkZ2V0OjpJbmZvJiBpbmZvLCBHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgY29u
c3QgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBjaGlsZHJlbiwgUmVuZGVyVGhlbWVH
YWRnZXQqIHBhcmVudCkKLSAgICA6IFJlbmRlclRoZW1lR2FkZ2V0KGluZm8sIHBhcmVudCwgVmVj
dG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPigpLCAwKQotICAgICwgbV9vcmllbnRhdGlvbihv
cmllbnRhdGlvbikKLXsKLSAgICBtX2NoaWxkcmVuLnJlc2VydmVDYXBhY2l0eShjaGlsZHJlbi5z
aXplKCkpOwotICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGNo
aWxkSW5mbyA6IGNoaWxkcmVuKQotICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChS
ZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGNoaWxkSW5mbywgdGhpcywgY2hpbGRyZW4sIGluZGV4
KyspKTsKLX0KLQotSW50U2l6ZSBSZW5kZXJUaGVtZUJveEdhZGdldDo6cHJlZmVycmVkU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgSW50U2l6ZSBjaGlsZHJlblNpemU7Ci0gICAgZm9yIChjb25zdCBhdXRv
JiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAgSW50U2l6ZSBjaGlsZFNpemUgPSBjaGls
ZC0+cHJlZmVycmVkU2l6ZSgpOwotICAgICAgICBzd2l0Y2ggKG1fb3JpZW50YXRpb24pIHsKLSAg
ICAgICAgY2FzZSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDoKLSAgICAgICAgICAgIGNoaWxk
cmVuU2l6ZS5zZXRXaWR0aChjaGlsZHJlblNpemUud2lkdGgoKSArIGNoaWxkU2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgICAgIGNoaWxkcmVuU2l6ZS5zZXRIZWlnaHQoc3RkOjptYXgoY2hpbGRyZW5T
aXplLmhlaWdodCgpLCBjaGlsZFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEdUS19PUklFTlRBVElPTl9WRVJUSUNBTDoKLSAgICAgICAgICAgIGNoaWxk
cmVuU2l6ZS5zZXRXaWR0aChzdGQ6Om1heChjaGlsZHJlblNpemUud2lkdGgoKSwgY2hpbGRTaXpl
LndpZHRoKCkpKTsKLSAgICAgICAgICAgIGNoaWxkcmVuU2l6ZS5zZXRIZWlnaHQoY2hpbGRyZW5T
aXplLmhlaWdodCgpICsgY2hpbGRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBSZW5kZXJUaGVtZUdhZGdldDo6cHJlZmVycmVk
U2l6ZSgpLmV4cGFuZGVkVG8oY2hpbGRyZW5TaXplKTsKLX0KLQotUmVuZGVyVGhlbWVUZXh0Rmll
bGRHYWRnZXQ6OlJlbmRlclRoZW1lVGV4dEZpZWxkR2FkZ2V0KGNvbnN0IFJlbmRlclRoZW1lR2Fk
Z2V0OjpJbmZvJiBpbmZvLCBSZW5kZXJUaGVtZUdhZGdldCogcGFyZW50LCBjb25zdCBWZWN0b3I8
UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdzLCB1bnNpZ25lZCBwb3NpdGlvbikKLSAg
ICA6IFJlbmRlclRoZW1lR2FkZ2V0KGluZm8sIHBhcmVudCwgc2libGluZ3MsIHBvc2l0aW9uKQot
ewotfQotCi1JbnRTaXplIFJlbmRlclRoZW1lVGV4dEZpZWxkR2FkZ2V0OjptaW5pbXVtU2l6ZSgp
IGNvbnN0Ci17Ci0gICAgLy8gV2UgYWxsb3cgdGV4dCBmaWVsZHMgc21hbGxlciB0aGFuIHRoZSBt
aW4gc2l6ZSBzZXQgb24gdGhlbWVzLgotICAgIHJldHVybiBJbnRTaXplKCk7Ci19Ci0KLVJlbmRl
clRoZW1lVG9nZ2xlR2FkZ2V0OjpSZW5kZXJUaGVtZVRvZ2dsZUdhZGdldChjb25zdCBSZW5kZXJU
aGVtZUdhZGdldDo6SW5mbyYgaW5mbywgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVudCwgY29uc3Qg
VmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBzaWJsaW5ncywgdW5zaWduZWQgcG9zaXRp
b24pCi0gICAgOiBSZW5kZXJUaGVtZUdhZGdldChpbmZvLCBwYXJlbnQsIHNpYmxpbmdzLCBwb3Np
dGlvbikKLSAgICAsIG1fdHlwZShpbmZvLnR5cGUpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBS
ZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6UmFkaW8gfHwgbV90eXBlID09IFJlbmRlclRoZW1lR2Fk
Z2V0OjpUeXBlOjpDaGVjayk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVUb2dnbGVHYWRnZXQ6OnJl
bmRlcihjYWlyb190KiBjciwgY29uc3QgRmxvYXRSZWN0JiBwYWludFJlY3QsIEZsb2F0UmVjdCop
Ci17Ci0gICAgRmxvYXRSZWN0IGNvbnRlbnRzUmVjdDsKLSAgICBSZW5kZXJUaGVtZUdhZGdldDo6
cmVuZGVyKGNyLCBwYWludFJlY3QsICZjb250ZW50c1JlY3QpOwotICAgIGlmIChtX3R5cGUgPT0g
UmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OlJhZGlvKQotICAgICAgICBndGtfcmVuZGVyX29wdGlv
bihtX2NvbnRleHQuZ2V0KCksIGNyLCBjb250ZW50c1JlY3QueCgpLCBjb250ZW50c1JlY3QueSgp
LCBjb250ZW50c1JlY3Qud2lkdGgoKSwgY29udGVudHNSZWN0LmhlaWdodCgpKTsKLSAgICBlbHNl
Ci0gICAgICAgIGd0a19yZW5kZXJfY2hlY2sobV9jb250ZXh0LmdldCgpLCBjciwgY29udGVudHNS
ZWN0LngoKSwgY29udGVudHNSZWN0LnkoKSwgY29udGVudHNSZWN0LndpZHRoKCksIGNvbnRlbnRz
UmVjdC5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJlbmRlclRoZW1lQXJyb3dH
YWRnZXQ6OlJlbmRlclRoZW1lQXJyb3dHYWRnZXQoY29uc3QgUmVuZGVyVGhlbWVHYWRnZXQ6Oklu
Zm8mIGluZm8sIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQsIGNvbnN0IFZlY3RvcjxSZW5kZXJU
aGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVkIHBvc2l0aW9uKQotICAgIDogUmVu
ZGVyVGhlbWVHYWRnZXQoaW5mbywgcGFyZW50LCBzaWJsaW5ncywgcG9zaXRpb24pCi17Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVBcnJvd0dhZGdldDo6cmVuZGVyKGNhaXJvX3QqIGNyLCBjb25zdCBG
bG9hdFJlY3QmIHBhaW50UmVjdCwgRmxvYXRSZWN0KikKLXsKLSAgICBGbG9hdFJlY3QgY29udGVu
dHNSZWN0OwotICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpyZW5kZXIoY3IsIHBhaW50UmVjdCwgJmNv
bnRlbnRzUmVjdCk7Ci0gICAgSW50U2l6ZSBtaW5TaXplID0gbWluaW11bVNpemUoKTsKLSAgICBp
bnQgYXJyb3dTaXplID0gc3RkOjptaW4obWluU2l6ZS53aWR0aCgpLCBtaW5TaXplLmhlaWdodCgp
KTsKLSAgICBGbG9hdFBvaW50IGFycm93UG9zaXRpb24oY29udGVudHNSZWN0LngoKSwgY29udGVu
dHNSZWN0LnkoKSArIChjb250ZW50c1JlY3QuaGVpZ2h0KCkgLSBhcnJvd1NpemUpIC8gMik7Ci0g
ICAgaWYgKGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShtX2NvbnRleHQuZ2V0KCkpICYgR1RL
X1NUQVRFX0ZMQUdfRElSX0xUUikKLSAgICAgICAgYXJyb3dQb3NpdGlvbi5tb3ZlKGNvbnRlbnRz
UmVjdC53aWR0aCgpIC0gYXJyb3dTaXplLCAwKTsKLSAgICBndGtfcmVuZGVyX2Fycm93KG1fY29u
dGV4dC5nZXQoKSwgY3IsIEdfUEkgLyAyLCBhcnJvd1Bvc2l0aW9uLngoKSwgYXJyb3dQb3NpdGlv
bi55KCksIGFycm93U2l6ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLVJlbmRlclRoZW1lSWNv
bkdhZGdldDo6UmVuZGVyVGhlbWVJY29uR2FkZ2V0KGNvbnN0IFJlbmRlclRoZW1lR2FkZ2V0OjpJ
bmZvJiBpbmZvLCBSZW5kZXJUaGVtZUdhZGdldCogcGFyZW50LCBjb25zdCBWZWN0b3I8UmVuZGVy
VGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdzLCB1bnNpZ25lZCBwb3NpdGlvbikKLSAgICA6IFJl
bmRlclRoZW1lR2FkZ2V0KGluZm8sIHBhcmVudCwgc2libGluZ3MsIHBvc2l0aW9uKQotewotfQot
Ci1HdGtJY29uU2l6ZSBSZW5kZXJUaGVtZUljb25HYWRnZXQ6Omd0a0ljb25TaXplRm9yUGl4ZWxT
aXplKHVuc2lnbmVkIHBpeGVsU2l6ZSkgY29uc3QKLXsKLSAgICBpZiAocGl4ZWxTaXplIDwgSWNv
blNpemVHdGs6OlNtYWxsVG9vbGJhcikKLSAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfTUVO
VTsKLSAgICBpZiAocGl4ZWxTaXplID49IEljb25TaXplR3RrOjpTbWFsbFRvb2xiYXIgJiYgcGl4
ZWxTaXplIDwgSWNvblNpemVHdGs6OkJ1dHRvbikKLSAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJ
WkVfU01BTExfVE9PTEJBUjsKLSAgICBpZiAocGl4ZWxTaXplID49IEljb25TaXplR3RrOjpCdXR0
b24gJiYgcGl4ZWxTaXplIDwgSWNvblNpemVHdGs6OkxhcmdlVG9vbGJhcikKLSAgICAgICAgcmV0
dXJuIEdUS19JQ09OX1NJWkVfQlVUVE9OOwotICAgIGlmIChwaXhlbFNpemUgPj0gSWNvblNpemVH
dGs6OkxhcmdlVG9vbGJhciAmJiBwaXhlbFNpemUgPCBJY29uU2l6ZUd0azo6RHJhZ0FuZERyb3Ap
Ci0gICAgICAgIHJldHVybiBHVEtfSUNPTl9TSVpFX0xBUkdFX1RPT0xCQVI7Ci0gICAgaWYgKHBp
eGVsU2l6ZSA+PSBJY29uU2l6ZUd0azo6RHJhZ0FuZERyb3AgJiYgcGl4ZWxTaXplIDwgSWNvblNp
emVHdGs6OkRpYWxvZykKLSAgICAgICAgcmV0dXJuIEdUS19JQ09OX1NJWkVfRE5EOwotCi0gICAg
cmV0dXJuIEdUS19JQ09OX1NJWkVfRElBTE9HOwotfQotCi1ib29sIFJlbmRlclRoZW1lSWNvbkdh
ZGdldDo6cmVuZGVyKGNhaXJvX3QqIGNyLCBjb25zdCBGbG9hdFJlY3QmIHBhaW50UmVjdCwgRmxv
YXRSZWN0KikKLXsKLSAgICBBU1NFUlQoIW1faWNvbk5hbWUuaXNOdWxsKCkpOwotICAgIEdSZWZQ
dHI8R0ljb24+IGljb24gPSBhZG9wdEdSZWYoZ190aGVtZWRfaWNvbl9uZXcobV9pY29uTmFtZS5k
YXRhKCkpKTsKLSAgICB1bnNpZ25lZCBsb29rdXBGbGFncyA9IEdUS19JQ09OX0xPT0tVUF9VU0Vf
QlVJTFRJTiB8IEdUS19JQ09OX0xPT0tVUF9GT1JDRV9TSVpFIHwgR1RLX0lDT05fTE9PS1VQX0ZP
UkNFX1NWRzsKLSAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IGd0a19zdHlsZV9jb250
ZXh0X2dldF9kaXJlY3Rpb24obV9jb250ZXh0LmdldCgpKTsKLSAgICBpZiAoZGlyZWN0aW9uICYg
R1RLX1RFWFRfRElSX0xUUikKLSAgICAgICAgbG9va3VwRmxhZ3MgfD0gR1RLX0lDT05fTE9PS1VQ
X0RJUl9MVFI7Ci0gICAgZWxzZSBpZiAoZGlyZWN0aW9uICYgR1RLX1RFWFRfRElSX1JUTCkKLSAg
ICAgICAgbG9va3VwRmxhZ3MgfD0gR1RLX0lDT05fTE9PS1VQX0RJUl9SVEw7Ci0gICAgaW50IGlj
b25XaWR0aCwgaWNvbkhlaWdodDsKLSAgICBpZiAoIWd0a19pY29uX3NpemVfbG9va3VwKGd0a0lj
b25TaXplRm9yUGl4ZWxTaXplKG1faWNvblNpemUpLCAmaWNvbldpZHRoLCAmaWNvbkhlaWdodCkp
Ci0gICAgICAgIGljb25XaWR0aCA9IGljb25IZWlnaHQgPSBtX2ljb25TaXplOwotICAgIEdSZWZQ
dHI8R3RrSWNvbkluZm8+IGljb25JbmZvID0gYWRvcHRHUmVmKGd0a19pY29uX3RoZW1lX2xvb2t1
cF9ieV9naWNvbihndGtfaWNvbl90aGVtZV9nZXRfZGVmYXVsdCgpLCBpY29uLmdldCgpLAotICAg
ICAgICBzdGQ6Om1pbihpY29uV2lkdGgsIGljb25IZWlnaHQpLCBzdGF0aWNfY2FzdDxHdGtJY29u
TG9va3VwRmxhZ3M+KGxvb2t1cEZsYWdzKSkpOwotICAgIGlmICghaWNvbkluZm8pCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBpY29uUGl4YnVmID0gYWRv
cHRHUmVmKGd0a19pY29uX2luZm9fbG9hZF9zeW1ib2xpY19mb3JfY29udGV4dChpY29uSW5mby5n
ZXQoKSwgbV9jb250ZXh0LmdldCgpLCBudWxscHRyLCBudWxscHRyKSk7Ci0gICAgaWYgKCFpY29u
UGl4YnVmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGbG9hdFNpemUgcGl4YnVmU2l6
ZShnZGtfcGl4YnVmX2dldF93aWR0aChpY29uUGl4YnVmLmdldCgpKSwgZ2RrX3BpeGJ1Zl9nZXRf
aGVpZ2h0KGljb25QaXhidWYuZ2V0KCkpKTsKLSAgICBGbG9hdFJlY3QgY29udGVudHNSZWN0Owot
ICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpyZW5kZXIoY3IsIHBhaW50UmVjdCwgJmNvbnRlbnRzUmVj
dCk7Ci0gICAgaWYgKHBpeGJ1ZlNpemUud2lkdGgoKSA+IGNvbnRlbnRzUmVjdC53aWR0aCgpIHx8
IHBpeGJ1ZlNpemUuaGVpZ2h0KCkgPiBjb250ZW50c1JlY3QuaGVpZ2h0KCkpIHsKLSAgICAgICAg
aWNvbldpZHRoID0gaWNvbkhlaWdodCA9IHN0ZDo6bWluKGNvbnRlbnRzUmVjdC53aWR0aCgpLCBj
b250ZW50c1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICBwaXhidWZTaXplID0gRmxvYXRTaXplKGlj
b25XaWR0aCwgaWNvbkhlaWdodCk7Ci0gICAgICAgIGljb25QaXhidWYgPSBhZG9wdEdSZWYoZ2Rr
X3BpeGJ1Zl9zY2FsZV9zaW1wbGUoaWNvblBpeGJ1Zi5nZXQoKSwgcGl4YnVmU2l6ZS53aWR0aCgp
LCBwaXhidWZTaXplLmhlaWdodCgpLCBHREtfSU5URVJQX0JJTElORUFSKSk7Ci0gICAgfQotCi0g
ICAgZ3RrX3JlbmRlcl9pY29uKG1fY29udGV4dC5nZXQoKSwgY3IsIGljb25QaXhidWYuZ2V0KCks
IGNvbnRlbnRzUmVjdC54KCkgKyAoY29udGVudHNSZWN0LndpZHRoKCkgLSBwaXhidWZTaXplLndp
ZHRoKCkpIC8gMiwKLSAgICAgICAgY29udGVudHNSZWN0LnkoKSArIChjb250ZW50c1JlY3QuaGVp
Z2h0KCkgLSBwaXhidWZTaXplLmhlaWdodCgpKSAvIDIpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1JbnRTaXplIFJlbmRlclRoZW1lSWNvbkdhZGdldDo6bWluaW11bVNpemUoKSBjb25zdAotewot
ICAgIGlmIChtX2ljb25TaXplIDwgSWNvblNpemVHdGs6Ok1lbnUpCi0gICAgICAgIHJldHVybiBJ
bnRTaXplKG1faWNvblNpemUsIG1faWNvblNpemUpOwotCi0gICAgaW50IGljb25XaWR0aCwgaWNv
bkhlaWdodDsKLSAgICBpZiAoZ3RrX2ljb25fc2l6ZV9sb29rdXAoZ3RrSWNvblNpemVGb3JQaXhl
bFNpemUobV9pY29uU2l6ZSksICZpY29uV2lkdGgsICZpY29uSGVpZ2h0KSkKLSAgICAgICAgcmV0
dXJuIEludFNpemUoaWNvbldpZHRoLCBpY29uSGVpZ2h0KTsKLQotICAgIHJldHVybiBJbnRTaXpl
KG1faWNvblNpemUsIG1faWNvblNpemUpOwotfQotCi1SZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdl
dDo6UmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQoY29uc3QgUmVuZGVyVGhlbWVHYWRnZXQ6Oklu
Zm8mIGluZm8sIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQsIGNvbnN0IFZlY3RvcjxSZW5kZXJU
aGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVkIHBvc2l0aW9uKQotICAgIDogUmVu
ZGVyVGhlbWVHYWRnZXQoaW5mbywgcGFyZW50LCBzaWJsaW5ncywgcG9zaXRpb24pCi17Ci0gICAg
Z2Jvb2xlYW4gaGFzQmFja3dhcmQsIGhhc0ZvcndhcmQsIGhhc1NlY29uZGFyeUJhY2t3YXJkLCBo
YXNTZWNvbmRhcnlGb3J3YXJkOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShtX2Nv
bnRleHQuZ2V0KCksICJoYXMtYmFja3dhcmQtc3RlcHBlciIsICZoYXNCYWNrd2FyZCwgImhhcy1m
b3J3YXJkLXN0ZXBwZXIiLCAmaGFzRm9yd2FyZCwKLSAgICAgICAgImhhcy1zZWNvbmRhcnktYmFj
a3dhcmQtc3RlcHBlciIsICZoYXNTZWNvbmRhcnlCYWNrd2FyZCwgImhhcy1zZWNvbmRhcnktZm9y
d2FyZC1zdGVwcGVyIiwgJmhhc1NlY29uZGFyeUZvcndhcmQsIG51bGxwdHIpOwotICAgIGlmICho
YXNCYWNrd2FyZCkKLSAgICAgICAgbV9zdGVwcGVycy5hZGQoU3RlcHBlcnM6OkJhY2t3YXJkKTsK
LSAgICBpZiAoaGFzRm9yd2FyZCkKLSAgICAgICAgbV9zdGVwcGVycy5hZGQoU3RlcHBlcnM6OkZv
cndhcmQpOwotICAgIGlmIChoYXNTZWNvbmRhcnlCYWNrd2FyZCkKLSAgICAgICAgbV9zdGVwcGVy
cy5hZGQoU3RlcHBlcnM6OlNlY29uZGFyeUJhY2t3YXJkKTsKLSAgICBpZiAoaGFzU2Vjb25kYXJ5
Rm9yd2FyZCkKLSAgICAgICAgbV9zdGVwcGVycy5hZGQoU3RlcHBlcnM6OlNlY29uZGFyeUZvcndh
cmQpOwotfQotCi12b2lkIFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpyZW5kZXJTdGVwcGVy
KGNhaXJvX3QqIGNyLCBjb25zdCBGbG9hdFJlY3QmIHBhaW50UmVjdCwgUmVuZGVyVGhlbWVHYWRn
ZXQqIHN0ZXBwZXJHYWRnZXQsIEd0a09yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTdGVwcGVycyBz
dGVwcGVyKQotewotICAgIEZsb2F0UmVjdCBjb250ZW50c1JlY3Q7Ci0gICAgc3RlcHBlckdhZGdl
dC0+cmVuZGVyKGNyLCBwYWludFJlY3QsICZjb250ZW50c1JlY3QpOwotICAgIGRvdWJsZSBhbmds
ZTsKLSAgICBzd2l0Y2ggKHN0ZXBwZXIpIHsKLSAgICBjYXNlIFN0ZXBwZXJzOjpCYWNrd2FyZDoK
LSAgICBjYXNlIFN0ZXBwZXJzOjpTZWNvbmRhcnlCYWNrd2FyZDoKLSAgICAgICAgYW5nbGUgPSBv
cmllbnRhdGlvbiA9PSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgPyAwIDogMyAqIChHX1BJIC8g
Mik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU3RlcHBlcnM6OkZvcndhcmQ6Ci0gICAgY2Fz
ZSBTdGVwcGVyczo6U2Vjb25kYXJ5Rm9yd2FyZDoKLSAgICAgICAgYW5nbGUgPSBvcmllbnRhdGlv
biA9PSBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgPyBHX1BJIC8gMiA6IEdfUEk7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLQotICAgIGludCBzdGVwcGVyU2l6ZSA9IHN0ZDo6bWF4KGNvbnRlbnRz
UmVjdC53aWR0aCgpLCBjb250ZW50c1JlY3QuaGVpZ2h0KCkpOwotICAgIGd0a19yZW5kZXJfYXJy
b3coc3RlcHBlckdhZGdldC0+Y29udGV4dCgpLCBjciwgYW5nbGUsIGNvbnRlbnRzUmVjdC54KCkg
KyAoY29udGVudHNSZWN0LndpZHRoKCkgLSBzdGVwcGVyU2l6ZSkgLyAyLAotICAgICAgICBjb250
ZW50c1JlY3QueSgpICsgKGNvbnRlbnRzUmVjdC5oZWlnaHQoKSAtIHN0ZXBwZXJTaXplKSAvIDIs
IHN0ZXBwZXJTaXplKTsKLX0KLQotUmVuZGVyVGhlbWVCdXR0b25HYWRnZXQ6OlJlbmRlclRoZW1l
QnV0dG9uR2FkZ2V0KGNvbnN0IEluZm8mIGluZm8sIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQs
IGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVk
IHBvc2l0aW9uKQotICAgIDogUmVuZGVyVGhlbWVHYWRnZXQoaW5mbywgcGFyZW50LCBzaWJsaW5n
cywgcG9zaXRpb24pCi17Ci19Ci0KLUludFNpemUgUmVuZGVyVGhlbWVCdXR0b25HYWRnZXQ6Om1p
bmltdW1TaXplKCkgY29uc3QKLXsKLSAgICAvLyBBbGxvdyBidXR0b25zIHRvIGJlIHNtYWxsZXIg
dGhhbiB0aGUgbWluaW11bSBzaXplCi0gICAgcmV0dXJuIEludFNpemUoKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1JlbmRlclRoZW1lR2FkZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHYWRnZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MxOGY4OWQ2ZWIu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUdhZGdldC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUg
IkludFNpemUuaCIKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL09wdGlvblNl
dC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci1jbGFzcyBGbG9hdFJlY3Q7Ci0KLWNsYXNzIFJlbmRlclRoZW1lR2FkZ2V0IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZW5kZXJUaGVt
ZUdhZGdldCk7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgR2VuZXJp
YywKLSAgICAgICAgVGV4dEZpZWxkLAotICAgICAgICBDaGVjaywKLSAgICAgICAgUmFkaW8sCi0g
ICAgICAgIEFycm93LAotICAgICAgICBJY29uLAotICAgICAgICBTY3JvbGxiYXIsCi0gICAgICAg
IEJ1dHRvbgotICAgIH07Ci0KLSAgICBzdHJ1Y3QgSW5mbyB7Ci0gICAgICAgIFR5cGUgdHlwZTsK
LSAgICAgICAgY29uc3QgY2hhciogbmFtZTsKLSAgICAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBj
bGFzc0xpc3Q7Ci0gICAgfTsKLQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhl
bWVHYWRnZXQ+IGNyZWF0ZShjb25zdCBJbmZvJiwgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVudCA9
IG51bGxwdHIsIGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3Mg
PSBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+KCksIHVuc2lnbmVkIHBvc2l0aW9uID0g
MCk7Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQoY29uc3QgSW5mbyYsIFJlbmRlclRoZW1lR2FkZ2V0
KiBwYXJlbnQsIGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3Ms
IHVuc2lnbmVkIHBvc2l0aW9uKTsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUdhZGdldCgpOwot
Ci0gICAgdmlydHVhbCBJbnRTaXplIHByZWZlcnJlZFNpemUoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGJvb2wgcmVuZGVyKGNhaXJvX3QqLCBjb25zdCBGbG9hdFJlY3QmLCBGbG9hdFJlY3QqID0gbnVs
bHB0cik7Ci0gICAgdmlydHVhbCBJbnRTaXplIG1pbmltdW1TaXplKCkgY29uc3Q7Ci0KLSAgICB2
b2lkIHJlbmRlckZvY3VzKGNhaXJvX3QqLCBjb25zdCBGbG9hdFJlY3QmKTsKLQotICAgIEd0a0Jv
cmRlciBjb250ZW50c0JveCgpIGNvbnN0OwotICAgIENvbG9yIGNvbG9yKCkgY29uc3Q7Ci0gICAg
Q29sb3IgYmFja2dyb3VuZENvbG9yKCkgY29uc3Q7Ci0gICAgZG91YmxlIG9wYWNpdHkoKSBjb25z
dDsKLQotICAgIEd0a1N0eWxlQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dC5nZXQoKTsgfQotCi0gICAgR3RrU3RhdGVGbGFncyBzdGF0ZSgpIGNvbnN0OwotICAgIHZv
aWQgc2V0U3RhdGUoR3RrU3RhdGVGbGFncyk7Ci0KLXByb3RlY3RlZDoKLSAgICBHdGtCb3JkZXIg
bWFyZ2luQm94KCkgY29uc3Q7Ci0gICAgR3RrQm9yZGVyIGJvcmRlckJveCgpIGNvbnN0OwotICAg
IEd0a0JvcmRlciBwYWRkaW5nQm94KCkgY29uc3Q7Ci0KLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29u
dGV4dD4gbV9jb250ZXh0OwotfTsKLQotY2xhc3MgUmVuZGVyVGhlbWVCb3hHYWRnZXQgZmluYWwg
OiBwdWJsaWMgUmVuZGVyVGhlbWVHYWRnZXQgewotcHVibGljOgotICAgIFJlbmRlclRoZW1lQm94
R2FkZ2V0KGNvbnN0IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvJiwgR3RrT3JpZW50YXRpb24sIGNv
bnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gY2hpbGRyZW4sIFJlbmRlclRoZW1l
R2FkZ2V0KiBwYXJlbnQgPSBudWxscHRyKTsKLQotICAgIEludFNpemUgcHJlZmVycmVkU2l6ZSgp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgUmVuZGVyVGhlbWVHYWRnZXQqIGNoaWxkKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XS5nZXQoKTsgfQotCi1wcml2
YXRlOgotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+PiBtX2No
aWxkcmVuOwotICAgIEd0a09yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBHVEtfT1JJRU5UQVRJ
T05fSE9SSVpPTlRBTCB9OwotfTsKLQotY2xhc3MgUmVuZGVyVGhlbWVUZXh0RmllbGRHYWRnZXQg
ZmluYWwgOiBwdWJsaWMgUmVuZGVyVGhlbWVHYWRnZXQgewotcHVibGljOgotICAgIFJlbmRlclRo
ZW1lVGV4dEZpZWxkR2FkZ2V0KGNvbnN0IEluZm8mLCBSZW5kZXJUaGVtZUdhZGdldCogcGFyZW50
LCBjb25zdCBWZWN0b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdzLCB1bnNpZ25l
ZCBwb3NpdGlvbik7Ci0KLSAgICBJbnRTaXplIG1pbmltdW1TaXplKCkgY29uc3Qgb3ZlcnJpZGU7
Ci19OwotCi1jbGFzcyBSZW5kZXJUaGVtZVRvZ2dsZUdhZGdldCBmaW5hbCA6IHB1YmxpYyBSZW5k
ZXJUaGVtZUdhZGdldCB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyVGhlbWVUb2dnbGVHYWRnZXQoY29u
c3QgSW5mbyYsIFJlbmRlclRoZW1lR2FkZ2V0KiBwYXJlbnQsIGNvbnN0IFZlY3RvcjxSZW5kZXJU
aGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVuc2lnbmVkIHBvc2l0aW9uKTsKLQotICAgIGJv
b2wgcmVuZGVyKGNhaXJvX3QqLCBjb25zdCBGbG9hdFJlY3QmLCBGbG9hdFJlY3QqID0gbnVsbHB0
cikgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGUgbV90
eXBlOwotfTsKLQotY2xhc3MgUmVuZGVyVGhlbWVBcnJvd0dhZGdldCBmaW5hbCA6IHB1YmxpYyBS
ZW5kZXJUaGVtZUdhZGdldCB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyVGhlbWVBcnJvd0dhZGdldChj
b25zdCBJbmZvJiwgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVudCwgY29uc3QgVmVjdG9yPFJlbmRl
clRoZW1lR2FkZ2V0OjpJbmZvPiBzaWJsaW5ncywgdW5zaWduZWQgcG9zaXRpb24pOwotCi0gICAg
Ym9vbCByZW5kZXIoY2Fpcm9fdCosIGNvbnN0IEZsb2F0UmVjdCYsIEZsb2F0UmVjdCogPSBudWxs
cHRyKSBvdmVycmlkZTsKLX07Ci0KLWNsYXNzIFJlbmRlclRoZW1lSWNvbkdhZGdldCBmaW5hbCA6
IHB1YmxpYyBSZW5kZXJUaGVtZUdhZGdldCB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyVGhlbWVJY29u
R2FkZ2V0KGNvbnN0IEluZm8mLCBSZW5kZXJUaGVtZUdhZGdldCogcGFyZW50LCBjb25zdCBWZWN0
b3I8UmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8+IHNpYmxpbmdzLCB1bnNpZ25lZCBwb3NpdGlvbik7
Ci0KLSAgICBib29sIHJlbmRlcihjYWlyb190KiwgY29uc3QgRmxvYXRSZWN0JiwgRmxvYXRSZWN0
KiA9IG51bGxwdHIpIG92ZXJyaWRlOwotICAgIEludFNpemUgbWluaW11bVNpemUoKSBjb25zdCBv
dmVycmlkZTsKLQotICAgIHZvaWQgc2V0SWNvbk5hbWUoY29uc3QgY2hhciogaWNvbk5hbWUpIHsg
bV9pY29uTmFtZSA9IGljb25OYW1lOyB9Ci0gICAgdm9pZCBzZXRJY29uU2l6ZSh1bnNpZ25lZCBp
Y29uU2l6ZSkgeyBtX2ljb25TaXplID0gaWNvblNpemU7IH0KLQotICAgIC8vIERlZmluZWQgaW4g
R1RLKyAoZ3RrL2d0a2ljb25mYWN0b3J5LmMpLgotICAgIGVudW0gSWNvblNpemVHdGsgewotICAg
ICAgICBNZW51ID0gMTYsCi0gICAgICAgIFNtYWxsVG9vbGJhciA9IDE4LAotICAgICAgICBCdXR0
b24gPSAyMCwKLSAgICAgICAgTGFyZ2VUb29sYmFyID0gMjQsCi0gICAgICAgIERyYWdBbmREcm9w
ID0gMzIsCi0gICAgICAgIERpYWxvZyA9IDQ4Ci0gICAgfTsKLQotcHJpdmF0ZToKLSAgICBHdGtJ
Y29uU2l6ZSBndGtJY29uU2l6ZUZvclBpeGVsU2l6ZSh1bnNpZ25lZCkgY29uc3Q7Ci0KLSAgICBD
U3RyaW5nIG1faWNvbk5hbWU7Ci0gICAgdW5zaWduZWQgbV9pY29uU2l6ZSB7IDAgfTsKLX07Ci0K
LWNsYXNzIFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0IGZpbmFsIDogcHVibGljIFJlbmRlclRo
ZW1lR2FkZ2V0IHsKLXB1YmxpYzoKLSAgICBSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldChjb25z
dCBJbmZvJiwgUmVuZGVyVGhlbWVHYWRnZXQqIHBhcmVudCwgY29uc3QgVmVjdG9yPFJlbmRlclRo
ZW1lR2FkZ2V0OjpJbmZvPiBzaWJsaW5ncywgdW5zaWduZWQgcG9zaXRpb24pOwotCi0gICAgZW51
bSBjbGFzcyBTdGVwcGVycyB7Ci0gICAgICAgIEJhY2t3YXJkID0gMSA8PCAwLAotICAgICAgICBG
b3J3YXJkID0gMSA8PCAxLAotICAgICAgICBTZWNvbmRhcnlCYWNrd2FyZCA9IDEgPDwgMiwKLSAg
ICAgICAgU2Vjb25kYXJ5Rm9yd2FyZCA9IDEgPDwgMwotICAgIH07Ci0gICAgT3B0aW9uU2V0PFN0
ZXBwZXJzPiBzdGVwcGVycygpIGNvbnN0IHsgcmV0dXJuIG1fc3RlcHBlcnM7IH07Ci0KLSAgICB2
b2lkIHJlbmRlclN0ZXBwZXIoY2Fpcm9fdCosIGNvbnN0IEZsb2F0UmVjdCYsIFJlbmRlclRoZW1l
R2FkZ2V0KiwgR3RrT3JpZW50YXRpb24sIFN0ZXBwZXJzKTsKLQotcHJpdmF0ZToKLSAgICBPcHRp
b25TZXQ8U3RlcHBlcnM+IG1fc3RlcHBlcnM7Ci19OwotCi1jbGFzcyBSZW5kZXJUaGVtZUJ1dHRv
bkdhZGdldCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZUdhZGdldCB7Ci1wdWJsaWM6Ci0gICAg
UmVuZGVyVGhlbWVCdXR0b25HYWRnZXQoY29uc3QgSW5mbyYsIFJlbmRlclRoZW1lR2FkZ2V0KiBw
YXJlbnQsIGNvbnN0IFZlY3RvcjxSZW5kZXJUaGVtZUdhZGdldDo6SW5mbz4gc2libGluZ3MsIHVu
c2lnbmVkIHBvc2l0aW9uKTsKLQotICAgIEludFNpemUgbWluaW11bVNpemUoKSBjb25zdCBvdmVy
cmlkZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZVdpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVXaWRnZXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjYTZlZDkxOGE1MC4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lV2lkZ2V0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMw
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJSZW5kZXJUaGVtZVdpZGdldC5oIgotCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgSGFzaE1hcDx1bnNpZ25lZCwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1l
V2lkZ2V0Pj4mIHdpZGdldE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hN
YXA8dW5zaWduZWQsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZVdpZGdldD4+PiBtYXA7Ci0g
ICAgcmV0dXJuIG1hcDsKLX0KLQotUmVuZGVyVGhlbWVXaWRnZXQmIFJlbmRlclRoZW1lV2lkZ2V0
OjpnZXRPckNyZWF0ZShUeXBlIHdpZGdldFR5cGUpCi17Ci0gICAgYXV0byBhZGRSZXN1bHQgPSB3
aWRnZXRNYXAoKS5lbnN1cmUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdpZGdldFR5cGUpLCBbd2lk
Z2V0VHlwZV0oKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVXaWRnZXQ+IHsKLSAgICAg
ICAgc3dpdGNoICh3aWRnZXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgUmVuZGVyVGhlbWVXaWRnZXQ6
OlR5cGU6OlZlcnRpY2FsU2Nyb2xsYmFyUmlnaHQ6Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxSZW5kZXJUaGVtZVNjcm9sbGJhcj4oR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCBSZW5k
ZXJUaGVtZVNjcm9sbGJhcjo6TW9kZTo6RnVsbCk7Ci0gICAgICAgIGNhc2UgUmVuZGVyVGhlbWVX
aWRnZXQ6OlR5cGU6OlZlcnRpY2FsU2Nyb2xsYmFyTGVmdDoKLSAgICAgICAgICAgIHJldHVybiBt
YWtlVW5pcXVlPFJlbmRlclRoZW1lU2Nyb2xsYmFyPihHVEtfT1JJRU5UQVRJT05fVkVSVElDQUws
IFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpNb2RlOjpGdWxsLCBSZW5kZXJUaGVtZVNjcm9sbGJhcjo6
VmVydGljYWxQb3NpdGlvbjo6TGVmdCk7Ci0gICAgICAgIGNhc2UgUmVuZGVyVGhlbWVXaWRnZXQ6
OlR5cGU6Okhvcml6b250YWxTY3JvbGxiYXI6Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxSZW5kZXJUaGVtZVNjcm9sbGJhcj4oR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIFJlbmRl
clRoZW1lU2Nyb2xsYmFyOjpNb2RlOjpGdWxsKTsKLSAgICAgICAgY2FzZSBSZW5kZXJUaGVtZVdp
ZGdldDo6VHlwZTo6VmVydGljYWxTY3JvbGxJbmRpY2F0b3JSaWdodDoKLSAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lU2Nyb2xsYmFyPihHVEtfT1JJRU5UQVRJT05fVkVS
VElDQUwsIFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpNb2RlOjpJbmRpY2F0b3IpOwotICAgICAgICBj
YXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNhbFNjcm9sbEluZGljYXRvckxlZnQ6
Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZVNjcm9sbGJhcj4oR1RL
X09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCBSZW5kZXJUaGVtZVNjcm9sbGJhcjo6TW9kZTo6SW5kaWNh
dG9yLCBSZW5kZXJUaGVtZVNjcm9sbGJhcjo6VmVydGljYWxQb3NpdGlvbjo6TGVmdCk7Ci0gICAg
ICAgIGNhc2UgUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6Okhvcml6b250YWxTY3JvbGxJbmRpY2F0
b3I6Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZVNjcm9sbGJhcj4o
R1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIFJlbmRlclRoZW1lU2Nyb2xsYmFyOjpNb2RlOjpJ
bmRpY2F0b3IpOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpDaGVja0J1
dHRvbjoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lVG9nZ2xlQnV0
dG9uPihSZW5kZXJUaGVtZVRvZ2dsZUJ1dHRvbjo6VHlwZTo6Q2hlY2spOwotICAgICAgICBjYXNl
IFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpSYWRpb0J1dHRvbjoKLSAgICAgICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPFJlbmRlclRoZW1lVG9nZ2xlQnV0dG9uPihSZW5kZXJUaGVtZVRvZ2dsZUJ1
dHRvbjo6VHlwZTo6UmFkaW8pOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBl
OjpCdXR0b246Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZUJ1dHRv
bj4oUmVuZGVyVGhlbWVCdXR0b246OkRlZmF1bHQ6Ok5vKTsKLSAgICAgICAgY2FzZSBSZW5kZXJU
aGVtZVdpZGdldDo6VHlwZTo6QnV0dG9uRGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlPFJlbmRlclRoZW1lQnV0dG9uPihSZW5kZXJUaGVtZUJ1dHRvbjo6RGVmYXVsdDo6WWVz
KTsKLSAgICAgICAgY2FzZSBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6Q29tYm9Cb3g6Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZUNvbWJvQm94PigpOwotICAgICAg
ICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpFbnRyeToKLSAgICAgICAgICAgIHJldHVy
biBtYWtlVW5pcXVlPFJlbmRlclRoZW1lRW50cnk+KCk7Ci0gICAgICAgIGNhc2UgUmVuZGVyVGhl
bWVXaWRnZXQ6OlR5cGU6OlNlbGVjdGVkRW50cnk6Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVu
aXF1ZTxSZW5kZXJUaGVtZUVudHJ5PihSZW5kZXJUaGVtZUVudHJ5OjpTZWxlY3RlZDo6WWVzKTsK
LSAgICAgICAgY2FzZSBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6U2VhcmNoRW50cnk6Ci0gICAg
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZVNlYXJjaEVudHJ5PigpOwotICAg
ICAgICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpTcGluQnV0dG9uOgotICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVuZGVyVGhlbWVTcGluQnV0dG9uPigpOwotICAgICAgICBj
YXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNhbFNsaWRlcjoKLSAgICAgICAgICAg
IHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lU2xpZGVyPihHVEtfT1JJRU5UQVRJT05fVkVS
VElDQUwpOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpIb3Jpem9udGFs
U2xpZGVyOgotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVuZGVyVGhlbWVTbGlkZXI+
KEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMKTsKLSAgICAgICAgY2FzZSBSZW5kZXJUaGVtZVdp
ZGdldDo6VHlwZTo6UHJvZ3Jlc3NCYXI6Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxS
ZW5kZXJUaGVtZVByb2dyZXNzQmFyPihSZW5kZXJUaGVtZVByb2dyZXNzQmFyOjpNb2RlOjpEZXRl
cm1pbmF0ZSk7Ci0gICAgICAgIGNhc2UgUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OkluZGV0ZXJt
aW5hdGVQcm9ncmVzc0JhcjoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRo
ZW1lUHJvZ3Jlc3NCYXI+KFJlbmRlclRoZW1lUHJvZ3Jlc3NCYXI6Ok1vZGU6OkluZGV0ZXJtaW5h
dGUpOwotICAgICAgICBjYXNlIFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpMaXN0VmlldzoKLSAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlbmRlclRoZW1lTGlzdFZpZXc+KCk7Ci0gICAg
ICAgIGNhc2UgUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6Okljb246Ci0gICAgICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZUljb24+KCk7Ci0gICAgICAgIGNhc2UgUmVuZGVyVGhl
bWVXaWRnZXQ6OlR5cGU6OldpbmRvdzoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJl
bmRlclRoZW1lV2luZG93PigpOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9KTsKLSAgICByZXR1cm4gKmFkZFJl
c3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVXaWRnZXQ6OmNsZWFy
Q2FjaGUoKQotewotICAgIHdpZGdldE1hcCgpLmNsZWFyKCk7Ci19Ci0KLVJlbmRlclRoZW1lV2lk
Z2V0Ojp+UmVuZGVyVGhlbWVXaWRnZXQoKSA9IGRlZmF1bHQ7Ci0KLVJlbmRlclRoZW1lU2Nyb2xs
YmFyOjpSZW5kZXJUaGVtZVNjcm9sbGJhcihHdGtPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgTW9k
ZSBtb2RlLCBWZXJ0aWNhbFBvc2l0aW9uIHZlcnRpY2FsUG9zaXRpb24pCi17Ci0gICAgUmVuZGVy
VGhlbWVHYWRnZXQ6OkluZm8gaW5mbyA9IHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OlNjcm9s
bGJhciwgInNjcm9sbGJhciIsIHsgfSB9OwotICAgIGlmIChvcmllbnRhdGlvbiA9PSBHVEtfT1JJ
RU5UQVRJT05fVkVSVElDQUwpIHsKLSAgICAgICAgaW5mby5jbGFzc0xpc3QuYXBwZW5kKCJ2ZXJ0
aWNhbCIpOwotICAgICAgICBpbmZvLmNsYXNzTGlzdC5hcHBlbmQodmVydGljYWxQb3NpdGlvbiA9
PSBWZXJ0aWNhbFBvc2l0aW9uOjpSaWdodCA/ICJyaWdodCIgOiAibGVmdCIpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgiaG9yaXpvbnRhbCIpOwotICAgICAg
ICBpbmZvLmNsYXNzTGlzdC5hcHBlbmQoImJvdHRvbSIpOwotICAgIH0KLSAgICBzdGF0aWMgYm9v
bCB1c2VzT3ZlcmxheVNjcm9sbGJhcnMgPSBnX3N0cmNtcDAoZ19nZXRlbnYoIkdUS19PVkVSTEFZ
X1NDUk9MTElORyIpLCAiMCIpOwotICAgIGlmICh1c2VzT3ZlcmxheVNjcm9sbGJhcnMpCi0gICAg
ICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgib3ZlcmxheS1pbmRpY2F0b3IiKTsKLSAgICBpZiAo
bW9kZSA9PSBNb2RlOjpGdWxsKQotICAgICAgICBpbmZvLmNsYXNzTGlzdC5hcHBlbmQoImhvdmVy
aW5nIik7Ci0gICAgbV9zY3JvbGxiYXIgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8p
OwotCi0gICAgVmVjdG9yPFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvPiBjaGlsZHJlbjsKLSAgICBh
dXRvIHN0ZXBwZXJzID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQqPiht
X3Njcm9sbGJhci5nZXQoKSktPnN0ZXBwZXJzKCk7Ci0gICAgaWYgKHN0ZXBwZXJzLmNvbnRhaW5z
KFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6QmFja3dhcmQpKSB7Ci0gICAg
ICAgIG1fc3RlcHBlcnNQb3NpdGlvblswXSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgY2hp
bGRyZW4uYXBwZW5kKHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJidXR0b24i
LCB7ICJ1cCIgfSB9KTsKLSAgICB9Ci0gICAgaWYgKHN0ZXBwZXJzLmNvbnRhaW5zKFJlbmRlclRo
ZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6U2Vjb25kYXJ5Rm9yd2FyZCkpIHsKLSAgICAg
ICAgbV9zdGVwcGVyc1Bvc2l0aW9uWzFdID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICBjaGls
ZHJlbi5hcHBlbmQoeyBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2VuZXJpYywgImJ1dHRvbiIs
IHsgImRvd24iIH0gfSk7Ci0gICAgfQotICAgIG1fdHJvdWdoUG9zaXRpb24gPSBjaGlsZHJlbi5z
aXplKCk7Ci0gICAgY2hpbGRyZW4uYXBwZW5kKHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6Okdl
bmVyaWMsICJ0cm91Z2giLCB7IH0gfSk7Ci0gICAgaWYgKHN0ZXBwZXJzLmNvbnRhaW5zKFJlbmRl
clRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6U2Vjb25kYXJ5QmFja3dhcmQpKSB7Ci0g
ICAgICAgIG1fc3RlcHBlcnNQb3NpdGlvblsyXSA9IGNoaWxkcmVuLnNpemUoKTsKLSAgICAgICAg
Y2hpbGRyZW4uYXBwZW5kKHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJidXR0
b24iLCB7ICJ1cCIgfSB9KTsKLSAgICB9Ci0gICAgaWYgKHN0ZXBwZXJzLmNvbnRhaW5zKFJlbmRl
clRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6Rm9yd2FyZCkpIHsKLSAgICAgICAgbV9z
dGVwcGVyc1Bvc2l0aW9uWzNdID0gY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICBjaGlsZHJlbi5h
cHBlbmQoeyBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2VuZXJpYywgImJ1dHRvbiIsIHsgImRv
d24iIH0gfSk7Ci0gICAgfQotICAgIGluZm8udHlwZSA9IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBl
OjpHZW5lcmljOwotICAgIGluZm8ubmFtZSA9ICJjb250ZW50cyI7Ci0gICAgaW5mby5jbGFzc0xp
c3QuY2xlYXIoKTsKLSAgICBtX2NvbnRlbnRzID0gbWFrZVVuaXF1ZTxSZW5kZXJUaGVtZUJveEdh
ZGdldD4oaW5mbywgR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCBjaGlsZHJlbiwgbV9zY3JvbGxi
YXIuZ2V0KCkpOwotICAgIGluZm8ubmFtZSA9ICJzbGlkZXIiOwotICAgIG1fc2xpZGVyID0gUmVu
ZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvLCBtX2NvbnRlbnRzLT5jaGlsZChtX3Ryb3VnaFBv
c2l0aW9uKSk7Ci19Ci0KLVJlbmRlclRoZW1lR2FkZ2V0KiBSZW5kZXJUaGVtZVNjcm9sbGJhcjo6
c3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnMgc2Nyb2xsYmFyU3Rl
cHBlcikKLXsKLSAgICBpZiAoIXN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0
Kj4obV9zY3JvbGxiYXIuZ2V0KCkpLT5zdGVwcGVycygpLmNvbnRhaW5zKHNjcm9sbGJhclN0ZXBw
ZXIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHN3aXRjaCAoc2Nyb2xsYmFyU3Rl
cHBlcikgewotICAgIGNhc2UgUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpC
YWNrd2FyZDoKLSAgICAgICAgcmV0dXJuIG1fY29udGVudHMtPmNoaWxkKG1fc3RlcHBlcnNQb3Np
dGlvblswXSk7Ci0gICAgY2FzZSBSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnM6
OlNlY29uZGFyeUZvcndhcmQ6Ci0gICAgICAgIHJldHVybiBtX2NvbnRlbnRzLT5jaGlsZChtX3N0
ZXBwZXJzUG9zaXRpb25bMV0pOwotICAgIGNhc2UgUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6
OlN0ZXBwZXJzOjpTZWNvbmRhcnlCYWNrd2FyZDoKLSAgICAgICAgcmV0dXJuIG1fY29udGVudHMt
PmNoaWxkKG1fc3RlcHBlcnNQb3NpdGlvblsyXSk7Ci0gICAgY2FzZSBSZW5kZXJUaGVtZVNjcm9s
bGJhckdhZGdldDo6U3RlcHBlcnM6OkZvcndhcmQ6Ci0gICAgICAgIHJldHVybiBtX2NvbnRlbnRz
LT5jaGlsZChtX3N0ZXBwZXJzUG9zaXRpb25bM10pOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZW5kZXJUaGVtZVRvZ2ds
ZUJ1dHRvbjo6UmVuZGVyVGhlbWVUb2dnbGVCdXR0b24oVHlwZSB0b2dnbGVUeXBlKQotewotICAg
IFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvIGluZm8gPSB7IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBl
OjpHZW5lcmljLCB0b2dnbGVUeXBlID09IFR5cGU6OkNoZWNrID8gImNoZWNrYnV0dG9uIiA6ICJy
YWRpb2J1dHRvbiIsIHsgInRleHQtYnV0dG9uIiB9IH07Ci0gICAgbV9idXR0b24gPSBSZW5kZXJU
aGVtZUdhZGdldDo6Y3JlYXRlKGluZm8pOwotICAgIGlmICh0b2dnbGVUeXBlID09IFR5cGU6OkNo
ZWNrKSB7Ci0gICAgICAgIGluZm8udHlwZSA9IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpDaGVj
azsKLSAgICAgICAgaW5mby5uYW1lID0gImNoZWNrIjsKLSAgICB9IGVsc2UgewotICAgICAgICBp
bmZvLnR5cGUgPSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6UmFkaW87Ci0gICAgICAgIGluZm8u
bmFtZSA9ICJyYWRpbyI7Ci0gICAgfQotICAgIGluZm8uY2xhc3NMaXN0LmNsZWFyKCk7Ci0gICAg
bV90b2dnbGUgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIG1fYnV0dG9uLmdldCgp
KTsKLX0KLQotUmVuZGVyVGhlbWVCdXR0b246OlJlbmRlclRoZW1lQnV0dG9uKERlZmF1bHQgaXNE
ZWZhdWx0KQotewotICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvIGluZm8gPSB7IFJlbmRlclRo
ZW1lR2FkZ2V0OjpUeXBlOjpCdXR0b24sICJidXR0b24iLCB7ICJ0ZXh0LWJ1dHRvbiIgfSB9Owot
ICAgIGlmIChpc0RlZmF1bHQgPT0gRGVmYXVsdDo6WWVzKQotICAgICAgICBpbmZvLmNsYXNzTGlz
dC5hcHBlbmQoImRlZmF1bHQiKTsKLSAgICBtX2J1dHRvbiA9IFJlbmRlclRoZW1lR2FkZ2V0Ojpj
cmVhdGUoaW5mbyk7Ci19Ci0KLVJlbmRlclRoZW1lQ29tYm9Cb3g6OlJlbmRlclRoZW1lQ29tYm9C
b3goKQotewotICAgIFJlbmRlclRoZW1lR2FkZ2V0OjpJbmZvIGluZm8gPSB7IFJlbmRlclRoZW1l
R2FkZ2V0OjpUeXBlOjpHZW5lcmljLCAiY29tYm9ib3giLCB7IH0gfTsKLSAgICBtX2NvbWJvQm94
ID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvKTsKLSAgICBWZWN0b3I8UmVuZGVyVGhl
bWVHYWRnZXQ6OkluZm8+IGNoaWxkcmVuID0gewotICAgICAgICB7IFJlbmRlclRoZW1lR2FkZ2V0
OjpUeXBlOjpHZW5lcmljLCAiYnV0dG9uIiwgeyAiY29tYm8iIH0gfQotICAgIH07Ci0gICAgaW5m
by5uYW1lID0gImJveCI7Ci0gICAgaW5mby5jbGFzc0xpc3QgPSB7ICJob3Jpem9udGFsIiwgImxp
bmtlZCIgfTsKLSAgICBtX2JveCA9IG1ha2VVbmlxdWU8UmVuZGVyVGhlbWVCb3hHYWRnZXQ+KGlu
Zm8sIEdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCBjaGlsZHJlbiwgbV9jb21ib0JveC5nZXQo
KSk7Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQqIGJ1dHRvbiA9IG1fYm94LT5jaGlsZCgwKTsKLSAg
ICBpbmZvLmNsYXNzTGlzdC5yZW1vdmVMYXN0KCk7Ci0gICAgbV9idXR0b25Cb3ggPSBSZW5kZXJU
aGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIGJ1dHRvbik7Ci0gICAgaW5mby50eXBlID0gUmVuZGVy
VGhlbWVHYWRnZXQ6OlR5cGU6OkFycm93OwotICAgIGluZm8ubmFtZSA9ICJhcnJvdyI7Ci0gICAg
aW5mby5jbGFzc0xpc3QgPSB7IH07Ci0gICAgbV9hcnJvdyA9IFJlbmRlclRoZW1lR2FkZ2V0Ojpj
cmVhdGUoaW5mbywgbV9idXR0b25Cb3guZ2V0KCkpOwotfQotCi1SZW5kZXJUaGVtZUVudHJ5OjpS
ZW5kZXJUaGVtZUVudHJ5KFNlbGVjdGVkIGlzU2VsZWN0ZWQpCi17Ci0gICAgUmVuZGVyVGhlbWVH
YWRnZXQ6OkluZm8gaW5mbyA9IHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OlRleHRGaWVsZCwg
ImVudHJ5IiwgeyB9IH07Ci0gICAgbV9lbnRyeSA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUo
aW5mbyk7Ci0gICAgaWYgKGlzU2VsZWN0ZWQgPT0gU2VsZWN0ZWQ6OlllcykgewotICAgICAgICBp
bmZvLnR5cGUgPSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2VuZXJpYzsKLSAgICAgICAgaW5m
by5uYW1lID0gInNlbGVjdGlvbiI7Ci0gICAgICAgIG1fc2VsZWN0aW9uID0gUmVuZGVyVGhlbWVH
YWRnZXQ6OmNyZWF0ZShpbmZvLCBtX2VudHJ5LmdldCgpKTsKLSAgICB9Ci19Ci0KLVJlbmRlclRo
ZW1lU2VhcmNoRW50cnk6OlJlbmRlclRoZW1lU2VhcmNoRW50cnkoKQotewotICAgIFJlbmRlclRo
ZW1lR2FkZ2V0OjpJbmZvIGluZm8gPSB7IFJlbmRlclRoZW1lR2FkZ2V0OjpUeXBlOjpJY29uLCAi
aW1hZ2UiLCB7ICJsZWZ0IiB9IH07Ci0gICAgbV9sZWZ0SWNvbiA9IFJlbmRlclRoZW1lR2FkZ2V0
OjpjcmVhdGUoaW5mbywgbV9lbnRyeS5nZXQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhl
bWVJY29uR2FkZ2V0Kj4obV9sZWZ0SWNvbi5nZXQoKSktPnNldEljb25OYW1lKCJlZGl0LWZpbmQt
c3ltYm9saWMiKTsKLSAgICBpbmZvLmNsYXNzTGlzdC5jbGVhcigpOwotICAgIGluZm8uY2xhc3NM
aXN0LmFwcGVuZCgicmlnaHQiKTsKLSAgICBtX3JpZ2h0SWNvbiA9IFJlbmRlclRoZW1lR2FkZ2V0
OjpjcmVhdGUoaW5mbywgbV9lbnRyeS5nZXQoKSk7Ci0gICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhl
bWVJY29uR2FkZ2V0Kj4obV9yaWdodEljb24uZ2V0KCkpLT5zZXRJY29uTmFtZSgiZWRpdC1jbGVh
ci1zeW1ib2xpYyIpOwotfQotCi1SZW5kZXJUaGVtZVNwaW5CdXR0b246OlJlbmRlclRoZW1lU3Bp
bkJ1dHRvbigpCi17Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQ6OkluZm8gaW5mbyA9IHsgUmVuZGVy
VGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJzcGluYnV0dG9uIiwgeyAiaG9yaXpvbnRhbCIg
fSB9OwotICAgIG1fc3BpbkJ1dHRvbiA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbyk7
Ci0gICAgaW5mby50eXBlID0gUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OlRleHRGaWVsZDsKLSAg
ICBpbmZvLm5hbWUgPSAiZW50cnkiOwotICAgIGluZm8uY2xhc3NMaXN0LmNsZWFyKCk7Ci0gICAg
bV9lbnRyeSA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgbV9zcGluQnV0dG9uLmdl
dCgpKTsKLSAgICBpbmZvLnR5cGUgPSBSZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6SWNvbjsKLSAg
ICBpbmZvLm5hbWUgPSAiYnV0dG9uIjsKLSAgICBpbmZvLmNsYXNzTGlzdC5hcHBlbmQoInVwIik7
Ci0gICAgbV91cCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgbV9zcGluQnV0dG9u
LmdldCgpKTsKLSAgICBhdXRvKiB1cEljb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUljb25H
YWRnZXQqPihtX3VwLmdldCgpKTsKLSAgICB1cEljb24tPnNldEljb25TaXplKFJlbmRlclRoZW1l
SWNvbkdhZGdldDo6SWNvblNpemVHdGs6Ok1lbnUpOwotICAgIHVwSWNvbi0+c2V0SWNvbk5hbWUo
Imxpc3QtYWRkLXN5bWJvbGljIik7Ci0gICAgaW5mby5jbGFzc0xpc3RbMF0gPSAiZG93biI7Ci0g
ICAgbV9kb3duID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvLCBtX3NwaW5CdXR0b24u
Z2V0KCkpOwotICAgIGF1dG8qIGRvd25JY29uID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVJY29u
R2FkZ2V0Kj4obV9kb3duLmdldCgpKTsKLSAgICBkb3duSWNvbi0+c2V0SWNvblNpemUoUmVuZGVy
VGhlbWVJY29uR2FkZ2V0OjpJY29uU2l6ZUd0azo6TWVudSk7Ci0gICAgZG93bkljb24tPnNldElj
b25OYW1lKCJsaXN0LXJlbW92ZS1zeW1ib2xpYyIpOwotfQotCi1SZW5kZXJUaGVtZVNsaWRlcjo6
UmVuZGVyVGhlbWVTbGlkZXIoR3RrT3JpZW50YXRpb24gb3JpZW50YXRpb24pCi17Ci0gICAgUmVu
ZGVyVGhlbWVHYWRnZXQ6OkluZm8gaW5mbyA9IHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6Okdl
bmVyaWMsICJzY2FsZSIsIHsgfSB9OwotICAgIGlmIChvcmllbnRhdGlvbiA9PSBHVEtfT1JJRU5U
QVRJT05fVkVSVElDQUwpCi0gICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgidmVydGljYWwi
KTsKLSAgICBlbHNlCi0gICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgiaG9yaXpvbnRhbCIp
OwotICAgIG1fc2NhbGUgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8pOwotICAgIGlu
Zm8ubmFtZSA9ICJjb250ZW50cyI7Ci0gICAgaW5mby5jbGFzc0xpc3QuY2xlYXIoKTsKLSAgICBt
X2NvbnRlbnRzID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvLCBtX3NjYWxlLmdldCgp
KTsKLSAgICBpbmZvLm5hbWUgPSAidHJvdWdoIjsKLSAgICBtX3Ryb3VnaCA9IFJlbmRlclRoZW1l
R2FkZ2V0OjpjcmVhdGUoaW5mbywgbV9jb250ZW50cy5nZXQoKSk7Ci0gICAgaW5mby5uYW1lID0g
InNsaWRlciI7Ci0gICAgbV9zbGlkZXIgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8s
IG1fdHJvdWdoLmdldCgpKTsKLSAgICBpbmZvLm5hbWUgPSAiaGlnaGxpZ2h0IjsKLSAgICBtX2hp
Z2hsaWdodCA9IFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoaW5mbywgbV90cm91Z2guZ2V0KCkp
OwotfQotCi1SZW5kZXJUaGVtZVByb2dyZXNzQmFyOjpSZW5kZXJUaGVtZVByb2dyZXNzQmFyKE1v
ZGUgbW9kZSkKLXsKLSAgICBSZW5kZXJUaGVtZUdhZGdldDo6SW5mbyBpbmZvID0geyBSZW5kZXJU
aGVtZUdhZGdldDo6VHlwZTo6R2VuZXJpYywgInByb2dyZXNzYmFyIiwgeyAiaG9yaXpvbnRhbCIg
fSB9OwotICAgIG1fcHJvZ3Jlc3NCYXIgPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8p
OwotICAgIGluZm8ubmFtZSA9ICJ0cm91Z2giOwotICAgIGluZm8uY2xhc3NMaXN0LmNsZWFyKCk7
Ci0gICAgbV90cm91Z2ggPSBSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKGluZm8sIG1fcHJvZ3Jl
c3NCYXIuZ2V0KCkpOwotICAgIGluZm8ubmFtZSA9ICJwcm9ncmVzcyI7Ci0gICAgaWYgKG1vZGUg
PT0gTW9kZTo6RGV0ZXJtaW5hdGUpCi0gICAgICAgIGluZm8uY2xhc3NMaXN0LmFwcGVuZCgicHVs
c2UiKTsKLSAgICBtX3Byb2dyZXNzID0gUmVuZGVyVGhlbWVHYWRnZXQ6OmNyZWF0ZShpbmZvLCBt
X3Ryb3VnaC5nZXQoKSk7Ci19Ci0KLVJlbmRlclRoZW1lTGlzdFZpZXc6OlJlbmRlclRoZW1lTGlz
dFZpZXcoKQotICAgIDogbV90cmVldmlldyhSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKHsgUmVu
ZGVyVGhlbWVHYWRnZXQ6OlR5cGU6OkdlbmVyaWMsICJ0cmVldmlldyIsIHsgInZpZXciIH0gfSkp
Ci17Ci19Ci0KLVJlbmRlclRoZW1lSWNvbjo6UmVuZGVyVGhlbWVJY29uKCkKLSAgICA6IG1faWNv
bihSZW5kZXJUaGVtZUdhZGdldDo6Y3JlYXRlKHsgUmVuZGVyVGhlbWVHYWRnZXQ6OlR5cGU6Oklj
b24sICJpbWFnZSIsIHsgfSB9KSkKLXsKLX0KLQotUmVuZGVyVGhlbWVXaW5kb3c6OlJlbmRlclRo
ZW1lV2luZG93KCkKLSAgICA6IG1fd2luZG93KFJlbmRlclRoZW1lR2FkZ2V0OjpjcmVhdGUoeyBS
ZW5kZXJUaGVtZUdhZGdldDo6VHlwZTo6R2VuZXJpYywgIndpbmRvdyIsIHsgImJhY2tncm91bmQi
IH0gfSkpCi17Ci19Ci0KLX0gLy8gbmFtZXBzYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZVdpZGdldC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lV2lkZ2V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDQzM2UwMDQ4ZjFlLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUmVuZGVyVGhlbWVXaWRnZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0NyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVHYWRnZXQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJUaGVtZVdpZGdldCB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVuZGVyVGhlbWVXaWRn
ZXQpOwotcHVibGljOgotICAgIGVudW0gY2xhc3MgVHlwZSB7Ci0gICAgICAgIFZlcnRpY2FsU2Ny
b2xsYmFyUmlnaHQgPSAxLAotICAgICAgICBWZXJ0aWNhbFNjcm9sbGJhckxlZnQsCi0gICAgICAg
IEhvcml6b250YWxTY3JvbGxiYXIsCi0gICAgICAgIFZlcnRpY2FsU2Nyb2xsSW5kaWNhdG9yUmln
aHQsCi0gICAgICAgIFZlcnRpY2FsU2Nyb2xsSW5kaWNhdG9yTGVmdCwKLSAgICAgICAgSG9yaXpv
bnRhbFNjcm9sbEluZGljYXRvciwKLSAgICAgICAgQ2hlY2tCdXR0b24sCi0gICAgICAgIFJhZGlv
QnV0dG9uLAotICAgICAgICBCdXR0b24sCi0gICAgICAgIEJ1dHRvbkRlZmF1bHQsCi0gICAgICAg
IENvbWJvQm94LAotICAgICAgICBFbnRyeSwKLSAgICAgICAgU2VsZWN0ZWRFbnRyeSwKLSAgICAg
ICAgU2VhcmNoRW50cnksCi0gICAgICAgIFNwaW5CdXR0b24sCi0gICAgICAgIFZlcnRpY2FsU2xp
ZGVyLAotICAgICAgICBIb3Jpem9udGFsU2xpZGVyLAotICAgICAgICBQcm9ncmVzc0JhciwKLSAg
ICAgICAgSW5kZXRlcm1pbmF0ZVByb2dyZXNzQmFyLAotICAgICAgICBMaXN0VmlldywKLSAgICAg
ICAgSWNvbiwKLSAgICAgICAgV2luZG93LAotICAgIH07Ci0gICAgc3RhdGljIFJlbmRlclRoZW1l
V2lkZ2V0JiBnZXRPckNyZWF0ZShUeXBlKTsKLSAgICBzdGF0aWMgdm9pZCBjbGVhckNhY2hlKCk7
Ci0KLSAgICBSZW5kZXJUaGVtZVdpZGdldCgpID0gZGVmYXVsdDsKLSAgICB2aXJ0dWFsIH5SZW5k
ZXJUaGVtZVdpZGdldCgpOwotfTsKLQotY2xhc3MgUmVuZGVyVGhlbWVTY3JvbGxiYXIgZmluYWwg
OiBwdWJsaWMgUmVuZGVyVGhlbWVXaWRnZXQgewotcHVibGljOgotICAgIGVudW0gY2xhc3MgTW9k
ZSB7IEZ1bGwsIEluZGljYXRvciB9OwotICAgIGVudW0gY2xhc3MgVmVydGljYWxQb3NpdGlvbiB7
IFJpZ2h0LCBMZWZ0IH07Ci0gICAgUmVuZGVyVGhlbWVTY3JvbGxiYXIoR3RrT3JpZW50YXRpb24s
IE1vZGUsIFZlcnRpY2FsUG9zaXRpb24gPSBWZXJ0aWNhbFBvc2l0aW9uOjpSaWdodCk7Ci0gICAg
flJlbmRlclRoZW1lU2Nyb2xsYmFyKCkgPSBkZWZhdWx0OwotCi0gICAgUmVuZGVyVGhlbWVHYWRn
ZXQmIHNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuICptX3Njcm9sbGJhcjsgfQotICAgIFJlbmRl
clRoZW1lR2FkZ2V0JiBjb250ZW50cygpIGNvbnN0IHsgcmV0dXJuICptX2NvbnRlbnRzOyB9Ci0g
ICAgUmVuZGVyVGhlbWVHYWRnZXQmIHNsaWRlcigpIGNvbnN0IHsgcmV0dXJuICptX3NsaWRlcjsg
fQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiB0cm91Z2goKSBjb25zdCB7IHJldHVybiAqbV9jb250
ZW50cy0+Y2hpbGQobV90cm91Z2hQb3NpdGlvbik7IH0KLSAgICBSZW5kZXJUaGVtZUdhZGdldCog
c3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnMpOwotCi1wcml2YXRl
OgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV9zY3JvbGxiYXI7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1lQm94R2FkZ2V0PiBtX2NvbnRlbnRzOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV9zbGlkZXI7Ci0gICAgdW5zaWdu
ZWQgbV90cm91Z2hQb3NpdGlvbjsKLSAgICB1bnNpZ25lZCBtX3N0ZXBwZXJzUG9zaXRpb25bNF07
Ci19OwotCi1jbGFzcyBSZW5kZXJUaGVtZVRvZ2dsZUJ1dHRvbiBmaW5hbCA6IHB1YmxpYyBSZW5k
ZXJUaGVtZVdpZGdldCB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIHsgQ2hlY2ssIFJh
ZGlvIH07Ci0gICAgZXhwbGljaXQgUmVuZGVyVGhlbWVUb2dnbGVCdXR0b24oVHlwZSk7Ci0gICAg
flJlbmRlclRoZW1lVG9nZ2xlQnV0dG9uKCkgPSBkZWZhdWx0OwotCi0gICAgUmVuZGVyVGhlbWVH
YWRnZXQmIGJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuICptX2J1dHRvbjsgfQotICAgIFJlbmRlclRo
ZW1lR2FkZ2V0JiB0b2dnbGUoKSBjb25zdCB7IHJldHVybiAqbV90b2dnbGU7IH0KLQotcHJpdmF0
ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IG1fYnV0dG9uOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV90b2dnbGU7Ci19OwotCi1jbGFz
cyBSZW5kZXJUaGVtZUJ1dHRvbiBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZVdpZGdldCB7Ci1w
dWJsaWM6Ci0gICAgZW51bSBjbGFzcyBEZWZhdWx0IHsgTm8sIFllcyB9OwotICAgIGV4cGxpY2l0
IFJlbmRlclRoZW1lQnV0dG9uKERlZmF1bHQpOwotICAgIH5SZW5kZXJUaGVtZUJ1dHRvbigpID0g
ZGVmYXVsdDsKLQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiBidXR0b24oKSBjb25zdCB7IHJldHVy
biAqbV9idXR0b247IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhl
bWVHYWRnZXQ+IG1fYnV0dG9uOwotfTsKLQotY2xhc3MgUmVuZGVyVGhlbWVDb21ib0JveCBmaW5h
bCA6IHB1YmxpYyBSZW5kZXJUaGVtZVdpZGdldCB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyVGhlbWVD
b21ib0JveCgpOwotICAgIH5SZW5kZXJUaGVtZUNvbWJvQm94KCkgPSBkZWZhdWx0OwotCi0gICAg
UmVuZGVyVGhlbWVHYWRnZXQmIGNvbWJvQm94KCkgY29uc3QgeyByZXR1cm4gKm1fY29tYm9Cb3g7
IH0KLSAgICBSZW5kZXJUaGVtZUdhZGdldCYgYm94KCkgY29uc3QgeyByZXR1cm4gKm1fYm94OyB9
Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIGJ1dHRvbigpIGNvbnN0IHsgcmV0dXJuICptX2JveC0+
Y2hpbGQoMCk7IH0KLSAgICBSZW5kZXJUaGVtZUdhZGdldCYgYnV0dG9uQm94KCkgY29uc3QgeyBy
ZXR1cm4gKm1fYnV0dG9uQm94OyB9Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIGFycm93KCkgY29u
c3QgeyByZXR1cm4gKm1fYXJyb3c7IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyVGhlbWVHYWRnZXQ+IG1fY29tYm9Cb3g7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clRoZW1lQm94R2FkZ2V0PiBtX2JveDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVH
YWRnZXQ+IG1fYnV0dG9uQm94OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdl
dD4gbV9hcnJvdzsKLX07Ci0KLWNsYXNzIFJlbmRlclRoZW1lRW50cnkgOiBwdWJsaWMgUmVuZGVy
VGhlbWVXaWRnZXQgewotcHVibGljOgotICAgIGVudW0gY2xhc3MgU2VsZWN0ZWQgeyBObywgWWVz
IH07Ci0gICAgZXhwbGljaXQgUmVuZGVyVGhlbWVFbnRyeShTZWxlY3RlZCA9IFNlbGVjdGVkOjpO
byk7Ci0gICAgflJlbmRlclRoZW1lRW50cnkoKSA9IGRlZmF1bHQ7Ci0KLSAgICBSZW5kZXJUaGVt
ZUdhZGdldCYgZW50cnkoKSBjb25zdCB7IHJldHVybiAqbV9lbnRyeTsgfQotICAgIFJlbmRlclRo
ZW1lR2FkZ2V0KiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5nZXQoKTsg
fQotCi1wcm90ZWN0ZWQ6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0PiBt
X2VudHJ5OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV9zZWxlY3Rp
b247Ci19OwotCi1jbGFzcyBSZW5kZXJUaGVtZVNlYXJjaEVudHJ5IGZpbmFsIDogcHVibGljIFJl
bmRlclRoZW1lRW50cnkgewotcHVibGljOgotICAgIFJlbmRlclRoZW1lU2VhcmNoRW50cnkoKTsK
LSAgICB+UmVuZGVyVGhlbWVTZWFyY2hFbnRyeSgpID0gZGVmYXVsdDsKLQotICAgIFJlbmRlclRo
ZW1lR2FkZ2V0JiBsZWZ0SWNvbigpIGNvbnN0IHsgcmV0dXJuICptX2xlZnRJY29uOyB9Ci0gICAg
UmVuZGVyVGhlbWVHYWRnZXQmIHJpZ2h0SWNvbigpIGNvbnN0IHsgcmV0dXJuICptX3JpZ2h0SWNv
bjsgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4g
bV9sZWZ0SWNvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IG1fcmln
aHRJY29uOwotfTsKLQotY2xhc3MgUmVuZGVyVGhlbWVTcGluQnV0dG9uIGZpbmFsIDogcHVibGlj
IFJlbmRlclRoZW1lV2lkZ2V0IHsKLXB1YmxpYzoKLSAgICBSZW5kZXJUaGVtZVNwaW5CdXR0b24o
KTsKLSAgICB+UmVuZGVyVGhlbWVTcGluQnV0dG9uKCkgPSBkZWZhdWx0OwotCi0gICAgUmVuZGVy
VGhlbWVHYWRnZXQmIHNwaW5CdXR0b24oKSBjb25zdCB7IHJldHVybiAqbV9zcGluQnV0dG9uOyB9
Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIGVudHJ5KCkgY29uc3QgeyByZXR1cm4gKm1fZW50cnk7
IH0KLSAgICBSZW5kZXJUaGVtZUdhZGdldCYgdXAoKSBjb25zdCB7IHJldHVybiAqbV91cDsgfQot
ICAgIFJlbmRlclRoZW1lR2FkZ2V0JiBkb3duKCkgY29uc3QgeyByZXR1cm4gKm1fZG93bjsgfQot
Ci1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV9zcGlu
QnV0dG9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV9lbnRyeTsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IG1fdXA7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0PiBtX2Rvd247Ci19OwotCi1jbGFzcyBSZW5kZXJU
aGVtZVNsaWRlciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZVdpZGdldCB7Ci1wdWJsaWM6Ci0g
ICAgZXhwbGljaXQgUmVuZGVyVGhlbWVTbGlkZXIoR3RrT3JpZW50YXRpb24pOwotICAgIH5SZW5k
ZXJUaGVtZVNsaWRlcigpID0gZGVmYXVsdDsKLQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiBzY2Fs
ZSgpIGNvbnN0IHsgcmV0dXJuICptX3NjYWxlOyB9Ci0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIGNv
bnRlbnRzKCkgY29uc3QgeyByZXR1cm4gKm1fY29udGVudHM7IH0KLSAgICBSZW5kZXJUaGVtZUdh
ZGdldCYgdHJvdWdoKCkgY29uc3QgeyByZXR1cm4gKm1fdHJvdWdoOyB9Ci0gICAgUmVuZGVyVGhl
bWVHYWRnZXQmIHNsaWRlcigpIGNvbnN0IHsgcmV0dXJuICptX3NsaWRlcjsgfQotICAgIFJlbmRl
clRoZW1lR2FkZ2V0JiBoaWdobGlnaHQoKSBjb25zdCB7IHJldHVybiAqbV9oaWdobGlnaHQ7IH0K
LQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IG1fc2Nh
bGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0PiBtX2NvbnRlbnRzOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV90cm91Z2g7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0PiBtX3NsaWRlcjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IG1faGlnaGxpZ2h0OwotfTsKLQotY2xhc3MgUmVuZGVy
VGhlbWVQcm9ncmVzc0JhciBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZVdpZGdldCB7Ci1wdWJs
aWM6Ci0gICAgZW51bSBjbGFzcyBNb2RlIHsgRGV0ZXJtaW5hdGUsIEluZGV0ZXJtaW5hdGUgfTsK
LSAgICBleHBsaWNpdCBSZW5kZXJUaGVtZVByb2dyZXNzQmFyKE1vZGUpOwotICAgIH5SZW5kZXJU
aGVtZVByb2dyZXNzQmFyKCkgPSBkZWZhdWx0OwotCi0gICAgUmVuZGVyVGhlbWVHYWRnZXQmIHBy
b2dyZXNzQmFyKCkgY29uc3QgeyByZXR1cm4gKm1fcHJvZ3Jlc3NCYXI7IH0KLSAgICBSZW5kZXJU
aGVtZUdhZGdldCYgdHJvdWdoKCkgY29uc3QgeyByZXR1cm4gKm1fdHJvdWdoOyB9Ci0gICAgUmVu
ZGVyVGhlbWVHYWRnZXQmIHByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gKm1fcHJvZ3Jlc3M7IH0K
LQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IG1fcHJv
Z3Jlc3NCYXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRoZW1lR2FkZ2V0PiBtX3Ryb3Vn
aDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGhlbWVHYWRnZXQ+IG1fcHJvZ3Jlc3M7Ci19
OwotCi1jbGFzcyBSZW5kZXJUaGVtZUxpc3RWaWV3IGZpbmFsIDogcHVibGljIFJlbmRlclRoZW1l
V2lkZ2V0IHsKLXB1YmxpYzoKLSAgICBSZW5kZXJUaGVtZUxpc3RWaWV3KCk7Ci0gICAgflJlbmRl
clRoZW1lTGlzdFZpZXcoKSA9IGRlZmF1bHQ7Ci0KLSAgICBSZW5kZXJUaGVtZUdhZGdldCYgdHJl
ZXZpZXcoKSBjb25zdCB7IHJldHVybiAqbV90cmVldmlldzsgfQotCi1wcml2YXRlOgotICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV90cmVldmlldzsKLX07Ci0KLWNsYXNz
IFJlbmRlclRoZW1lSWNvbiBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVtZVdpZGdldCB7Ci1wdWJs
aWM6Ci0gICAgUmVuZGVyVGhlbWVJY29uKCk7Ci0gICAgflJlbmRlclRoZW1lSWNvbigpID0gZGVm
YXVsdDsKLQotICAgIFJlbmRlclRoZW1lR2FkZ2V0JiBpY29uKCkgY29uc3QgeyByZXR1cm4gKm1f
aWNvbjsgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdl
dD4gbV9pY29uOwotfTsKLQotY2xhc3MgUmVuZGVyVGhlbWVXaW5kb3cgZmluYWwgOiBwdWJsaWMg
UmVuZGVyVGhlbWVXaWRnZXQgewotcHVibGljOgotICAgIFJlbmRlclRoZW1lV2luZG93KCk7Ci0g
ICAgflJlbmRlclRoZW1lV2luZG93KCkgPSBkZWZhdWx0OwotCi0gICAgUmVuZGVyVGhlbWVHYWRn
ZXQmIHdpbmRvdygpIGNvbnN0IHsgcmV0dXJuICptX3dpbmRvdzsgfQotCi1wcml2YXRlOgotICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUaGVtZUdhZGdldD4gbV93aW5kb3c7Ci0KLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9TY3JvbGxiYXJUaGVtZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
U2Nyb2xsYmFyVGhlbWVHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDhi
MWI5ZjU3OS4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Nj
cm9sbGJhclRoZW1lR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUxNyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNjcm9s
bGJhclRoZW1lR3RrLmgiCi0KLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNp
bmNsdWRlICJSZW5kZXJUaGVtZVdpZGdldC5oIgotI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKLSNp
bmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlIDxjc3RkbGliPgotI2luY2x1ZGUgPGd0ay9n
dGsuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TY3JvbGxiYXJUaGVtZSYgU2Nyb2xsYmFy
VGhlbWU6Om5hdGl2ZVRoZW1lKCkKLXsKLSAgICBzdGF0aWMgU2Nyb2xsYmFyVGhlbWVHdGsgdGhl
bWU7Ci0gICAgcmV0dXJuIHRoZW1lOwotfQotCi1TY3JvbGxiYXJUaGVtZUd0azo6flNjcm9sbGJh
clRoZW1lR3RrKCkgPSBkZWZhdWx0OwotCi1zdGF0aWMgdm9pZCB0aGVtZUNoYW5nZWRDYWxsYmFj
aygpCi17Ci0gICAgU2Nyb2xsYmFyVGhlbWU6OnRoZW1lKCkudGhlbWVDaGFuZ2VkKCk7Ci19Ci0K
LVNjcm9sbGJhclRoZW1lR3RrOjpTY3JvbGxiYXJUaGVtZUd0aygpCi17Ci0gICAgbV91c2VzT3Zl
cmxheVNjcm9sbGJhcnMgPSBnX3N0cmNtcDAoZ19nZXRlbnYoIkdUS19PVkVSTEFZX1NDUk9MTElO
RyIpLCAiMCIpOwotCi0gICAgc3RhdGljIGJvb2wgdGhlbWVNb25pdG9ySW5pdGlhbGl6ZWQgPSBm
YWxzZTsKLSAgICBpZiAoIXRoZW1lTW9uaXRvckluaXRpYWxpemVkKSB7Ci0gICAgICAgIGdfc2ln
bmFsX2Nvbm5lY3QoZ3RrX3NldHRpbmdzX2dldF9kZWZhdWx0KCksICJub3RpZnk6Omd0ay10aGVt
ZS1uYW1lIiwgR19DQUxMQkFDSyh0aGVtZUNoYW5nZWRDYWxsYmFjayksIG51bGxwdHIpOwotICAg
ICAgICB0aGVtZU1vbml0b3JJbml0aWFsaXplZCA9IHRydWU7Ci0gICAgICAgIHVwZGF0ZVRoZW1l
UHJvcGVydGllcygpOwotICAgIH0KLX0KLQotdm9pZCBTY3JvbGxiYXJUaGVtZUd0azo6dGhlbWVD
aGFuZ2VkKCkKLXsKLSAgICBSZW5kZXJUaGVtZVdpZGdldDo6Y2xlYXJDYWNoZSgpOwotICAgIHVw
ZGF0ZVRoZW1lUHJvcGVydGllcygpOwotfQotCi12b2lkIFNjcm9sbGJhclRoZW1lR3RrOjp1cGRh
dGVUaGVtZVByb3BlcnRpZXMoKQotewotICAgIGF1dG8mIHNjcm9sbGJhciA9IHN0YXRpY19jYXN0
PFJlbmRlclRoZW1lU2Nyb2xsYmFyJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJl
bmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNhbFNjcm9sbGJhclJpZ2h0KSk7Ci0gICAgbV9o
YXNCYWNrQnV0dG9uU3RhcnRQYXJ0ID0gc2Nyb2xsYmFyLnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3Jv
bGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpCYWNrd2FyZCk7Ci0gICAgbV9oYXNGb3J3YXJkQnV0dG9u
RW5kUGFydCA9IHNjcm9sbGJhci5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpT
dGVwcGVyczo6Rm9yd2FyZCk7Ci0gICAgbV9oYXNCYWNrQnV0dG9uRW5kUGFydCA9IHNjcm9sbGJh
ci5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6U2Vjb25kYXJ5
QmFja3dhcmQpOwotICAgIG1faGFzRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCA9IHNjcm9sbGJhci5z
dGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6U2Vjb25kYXJ5Rm9y
d2FyZCk7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyVGhlbWVHdGs6Omhhc0J1dHRvbnMoU2Nyb2xsYmFy
JiBzY3JvbGxiYXIpCi17Ci0gICAgcmV0dXJuIHNjcm9sbGJhci5lbmFibGVkKCkgJiYgKG1faGFz
QmFja0J1dHRvblN0YXJ0UGFydCB8fCBtX2hhc0ZvcndhcmRCdXR0b25FbmRQYXJ0IHx8IG1faGFz
QmFja0J1dHRvbkVuZFBhcnQgfHwgbV9oYXNGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0KTsKLX0KLQot
c3RhdGljIEd0a1N0YXRlRmxhZ3Mgc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3MoU2Nyb2xsYmFyJiBz
Y3JvbGxiYXIsIFNjcm9sbGJhclBhcnQgcGFydCwgYm9vbCBwYWludGluZyA9IGZhbHNlKQotewot
ICAgIHVuc2lnbmVkIHN0YXRlRmxhZ3MgPSAwOwotICAgIHN3aXRjaCAocGFydCkgewotICAgIGNh
c2UgQWxsUGFydHM6Ci0gICAgICAgIGlmICghcGFpbnRpbmcgfHwgc2Nyb2xsYmFyLmhvdmVyZWRQ
YXJ0KCkgIT0gTm9QYXJ0KQotICAgICAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxB
R19QUkVMSUdIVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBCYWNrVHJhY2tQYXJ0OgotICAg
IGNhc2UgRm9yd2FyZFRyYWNrUGFydDoKLSAgICAgICAgaWYgKHNjcm9sbGJhci5ob3ZlcmVkUGFy
dCgpID09IEJhY2tUcmFja1BhcnQgfHwgc2Nyb2xsYmFyLmhvdmVyZWRQYXJ0KCkgPT0gRm9yd2Fy
ZFRyYWNrUGFydCkKLSAgICAgICAgICAgIHN0YXRlRmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJF
TElHSFQ7Ci0gICAgICAgIGlmIChzY3JvbGxiYXIucHJlc3NlZFBhcnQoKSA9PSBCYWNrVHJhY2tQ
YXJ0IHx8IHNjcm9sbGJhci5wcmVzc2VkUGFydCgpID09IEZvcndhcmRUcmFja1BhcnQpCi0gICAg
ICAgICAgICBzdGF0ZUZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBCYWNrQnV0dG9uU3RhcnRQYXJ0OgotICAgIGNhc2UgRm9yd2FyZEJ1dHRv
blN0YXJ0UGFydDoKLSAgICBjYXNlIEJhY2tCdXR0b25FbmRQYXJ0OgotICAgIGNhc2UgRm9yd2Fy
ZEJ1dHRvbkVuZFBhcnQ6Ci0gICAgICAgIGlmICgoKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFy
dCB8fCBwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0KSAmJiAhc2Nyb2xsYmFyLmN1cnJlbnRQb3Mo
KSkKLSAgICAgICAgICAgIHx8ICgocGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0
ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQpICYmIHNjcm9sbGJhci5jdXJyZW50UG9zKCkgPT0g
c2Nyb2xsYmFyLm1heGltdW0oKSkpIHsKLSAgICAgICAgICAgIHN0YXRlRmxhZ3MgfD0gR1RLX1NU
QVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBGQUxMVEhST1VHSDsKLSAgICBkZWZhdWx0OgotICAgICAgICBpZiAoc2Nyb2xsYmFyLmhv
dmVyZWRQYXJ0KCkgPT0gcGFydCkKLSAgICAgICAgICAgIHN0YXRlRmxhZ3MgfD0gR1RLX1NUQVRF
X0ZMQUdfUFJFTElHSFQ7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGJhci5wcmVzc2VkUGFydCgpID09
IHBhcnQpCi0gICAgICAgICAgICBzdGF0ZUZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0FDVElWRTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEd0a1N0YXRl
RmxhZ3M+KHN0YXRlRmxhZ3MpOwotfQotCi1zdGF0aWMgUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGUg
d2lkZ2V0VHlwZUZvclNjcm9sbGJhcihTY3JvbGxiYXImIHNjcm9sbGJhciwgR3RrU3RhdGVGbGFn
cyBzY3JvbGxiYXJTdGF0ZSkKLXsKLSAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgaWYgKHNjcm9sbGJhci5zY3JvbGxhYmxlQXJl
YSgpLnNob3VsZFBsYWNlQmxvY2tEaXJlY3Rpb25TY3JvbGxiYXJPbkxlZnQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBzY3JvbGxiYXJTdGF0ZSAmIEdUS19TVEFURV9GTEFHX1BSRUxJR0hUID8gUmVu
ZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OlZlcnRpY2FsU2Nyb2xsYmFyTGVmdCA6IFJlbmRlclRoZW1l
V2lkZ2V0OjpUeXBlOjpWZXJ0aWNhbFNjcm9sbEluZGljYXRvckxlZnQ7Ci0gICAgICAgIHJldHVy
biBzY3JvbGxiYXJTdGF0ZSAmIEdUS19TVEFURV9GTEFHX1BSRUxJR0hUID8gUmVuZGVyVGhlbWVX
aWRnZXQ6OlR5cGU6OlZlcnRpY2FsU2Nyb2xsYmFyUmlnaHQgOiBSZW5kZXJUaGVtZVdpZGdldDo6
VHlwZTo6VmVydGljYWxTY3JvbGxJbmRpY2F0b3JSaWdodDsKLSAgICB9Ci0gICAgcmV0dXJuIHNj
cm9sbGJhclN0YXRlICYgR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQgPyBSZW5kZXJUaGVtZVdpZGdl
dDo6VHlwZTo6SG9yaXpvbnRhbFNjcm9sbGJhciA6IFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpI
b3Jpem9udGFsU2Nyb2xsSW5kaWNhdG9yOwotfQotCi1zdGF0aWMgSW50UmVjdCBjb250ZW50c1Jl
Y3RhbmdsZShTY3JvbGxiYXImIHNjcm9sbGJhciwgUmVuZGVyVGhlbWVTY3JvbGxiYXImIHNjcm9s
bGJhcldpZGdldCkKLXsKLSAgICBHdGtCb3JkZXIgc2Nyb2xsYmFyQ29udGVudHNCb3ggPSBzY3Jv
bGxiYXJXaWRnZXQuc2Nyb2xsYmFyKCkuY29udGVudHNCb3goKTsKLSAgICBHdGtCb3JkZXIgY29u
dGVudHNDb250ZW50c0JveCA9IHNjcm9sbGJhcldpZGdldC5jb250ZW50cygpLmNvbnRlbnRzQm94
KCk7Ci0gICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAgcGFkZGluZy5sZWZ0ID0gc2Nyb2xsYmFy
Q29udGVudHNCb3gubGVmdCArIGNvbnRlbnRzQ29udGVudHNCb3gubGVmdDsKLSAgICBwYWRkaW5n
LnJpZ2h0ID0gc2Nyb2xsYmFyQ29udGVudHNCb3gucmlnaHQgKyBjb250ZW50c0NvbnRlbnRzQm94
LnJpZ2h0OwotICAgIHBhZGRpbmcudG9wID0gc2Nyb2xsYmFyQ29udGVudHNCb3gudG9wICsgY29u
dGVudHNDb250ZW50c0JveC50b3A7Ci0gICAgcGFkZGluZy5ib3R0b20gPSBzY3JvbGxiYXJDb250
ZW50c0JveC5ib3R0b20gKyBjb250ZW50c0NvbnRlbnRzQm94LmJvdHRvbTsKLSAgICBJbnRSZWN0
IGNvbnRlbnRzUmVjdCA9IHNjcm9sbGJhci5mcmFtZVJlY3QoKTsKLSAgICBjb250ZW50c1JlY3Qu
bW92ZShwYWRkaW5nLmxlZnQsIHBhZGRpbmcudG9wKTsKLSAgICBjb250ZW50c1JlY3QuY29udHJh
Y3QocGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdodCwgcGFkZGluZy50b3AgKyBwYWRkaW5nLmJv
dHRvbSk7Ci0gICAgcmV0dXJuIGNvbnRlbnRzUmVjdDsKLX0KLQotSW50UmVjdCBTY3JvbGxiYXJU
aGVtZUd0azo6dHJhY2tSZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBib29sIC8qcGFpbnRpbmcq
LykKLXsKLSAgICBhdXRvIHNjcm9sbGJhclN0YXRlID0gc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Mo
c2Nyb2xsYmFyLCBBbGxQYXJ0cyk7Ci0gICAgYXV0byYgc2Nyb2xsYmFyV2lkZ2V0ID0gc3RhdGlj
X2Nhc3Q8UmVuZGVyVGhlbWVTY3JvbGxiYXImPihSZW5kZXJUaGVtZVdpZGdldDo6Z2V0T3JDcmVh
dGUod2lkZ2V0VHlwZUZvclNjcm9sbGJhcihzY3JvbGxiYXIsIHNjcm9sbGJhclN0YXRlKSkpOwot
ICAgIHNjcm9sbGJhcldpZGdldC5zY3JvbGxiYXIoKS5zZXRTdGF0ZShzY3JvbGxiYXJTdGF0ZSk7
Ci0KLSAgICBJbnRSZWN0IHJlY3QgPSBjb250ZW50c1JlY3RhbmdsZShzY3JvbGxiYXIsIHNjcm9s
bGJhcldpZGdldCk7Ci0gICAgaWYgKGF1dG8qIGJhY2t3YXJkU3RlcHBlciA9IHNjcm9sbGJhcldp
ZGdldC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6QmFja3dh
cmQpKSB7Ci0gICAgICAgIGJhY2t3YXJkU3RlcHBlci0+c2V0U3RhdGUoc2Nyb2xsYmFyUGFydFN0
YXRlRmxhZ3Moc2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0KSk7Ci0gICAgICAgIEludFNp
emUgc3RlcHBlclNpemUgPSBiYWNrd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKTsKLSAgICAg
ICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0g
ICAgICAgICAgICByZWN0Lm1vdmUoMCwgc3RlcHBlclNpemUuaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgcmVjdC5jb250cmFjdCgwLCBzdGVwcGVyU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICByZWN0Lm1vdmUoc3RlcHBlclNpemUud2lkdGgoKSwgMCk7Ci0gICAg
ICAgICAgICByZWN0LmNvbnRyYWN0KHN0ZXBwZXJTaXplLndpZHRoKCksIDApOwotICAgICAgICB9
Ci0gICAgfQotICAgIGlmIChhdXRvKiBzZWNvbmRhcnlGb3J3YXJkU3RlcHBlciA9IHNjcm9sbGJh
cldpZGdldC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6U2Vj
b25kYXJ5Rm9yd2FyZCkpIHsKLSAgICAgICAgc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXItPnNldFN0
YXRlKHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvblN0YXJ0
UGFydCkpOwotICAgICAgICBJbnRTaXplIHN0ZXBwZXJTaXplID0gc2Vjb25kYXJ5Rm9yd2FyZFN0
ZXBwZXItPnByZWZlcnJlZFNpemUoKTsKLSAgICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICByZWN0Lm1vdmUoMCwgc3Rl
cHBlclNpemUuaGVpZ2h0KCkpOwotICAgICAgICAgICAgcmVjdC5jb250cmFjdCgwLCBzdGVwcGVy
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZWN0Lm1vdmUo
c3RlcHBlclNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgICAgICByZWN0LmNvbnRyYWN0KHN0ZXBw
ZXJTaXplLndpZHRoKCksIDApOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChhdXRvKiBzZWNv
bmRhcnlCYWNrd2FyZFN0ZXBwZXIgPSBzY3JvbGxiYXJXaWRnZXQuc3RlcHBlcihSZW5kZXJUaGVt
ZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFyeUJhY2t3YXJkKSkgewotICAgICAg
ICBzZWNvbmRhcnlCYWNrd2FyZFN0ZXBwZXItPnNldFN0YXRlKHNjcm9sbGJhclBhcnRTdGF0ZUZs
YWdzKHNjcm9sbGJhciwgQmFja0J1dHRvbkVuZFBhcnQpKTsKLSAgICAgICAgaWYgKHNjcm9sbGJh
ci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgcmVjdC5j
b250cmFjdCgwLCBzZWNvbmRhcnlCYWNrd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKS5oZWln
aHQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlY3QuY29udHJhY3Qoc2Vjb25kYXJ5
QmFja3dhcmRTdGVwcGVyLT5wcmVmZXJyZWRTaXplKCkud2lkdGgoKSwgMCk7Ci0gICAgfQotICAg
IGlmIChhdXRvKiBmb3J3YXJkU3RlcHBlciA9IHNjcm9sbGJhcldpZGdldC5zdGVwcGVyKFJlbmRl
clRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6Rm9yd2FyZCkpIHsKLSAgICAgICAgZm9y
d2FyZFN0ZXBwZXItPnNldFN0YXRlKHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwg
Rm9yd2FyZEJ1dHRvbkVuZFBhcnQpKTsKLSAgICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlv
bigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgcmVjdC5jb250cmFjdCgwLCBm
b3J3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmVjdC5jb250cmFjdChmb3J3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgp
LndpZHRoKCksIDApOwotICAgIH0KLQotICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9
PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhci5oZWlnaHQoKSA8
IHJlY3QuaGVpZ2h0KCkgPyBJbnRSZWN0KCkgOiByZWN0OwotCi0gICAgcmV0dXJuIHNjcm9sbGJh
ci53aWR0aCgpIDwgcmVjdC53aWR0aCgpID8gSW50UmVjdCgpIDogcmVjdDsKLX0KLQotYm9vbCBT
Y3JvbGxiYXJUaGVtZUd0azo6aGFzVGh1bWIoU2Nyb2xsYmFyJiBzY3JvbGxiYXIpCi17Ci0gICAg
Ly8gVGhpcyBtZXRob2QgaXMganVzdCBjYWxsZWQgYXMgYSBwYWludC10aW1lIG9wdGltaXphdGlv
biB0byBzZWUgaWYKLSAgICAvLyBwYWludGluZyB0aGUgdGh1bWIgY2FuIGJlIHNraXBwZWQuIFdl
IGRvbid0IGhhdmUgdG8gYmUgZXhhY3QgaGVyZS4KLSAgICByZXR1cm4gdGh1bWJMZW5ndGgoc2Ny
b2xsYmFyKSA+IDA7Ci19Ci0KLUludFJlY3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmJhY2tCdXR0b25S
ZWN0KFNjcm9sbGJhciYgc2Nyb2xsYmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgLypwYWlu
dGluZyovKQotewotICAgIEFTU0VSVChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFy
dCA9PSBCYWNrQnV0dG9uRW5kUGFydCk7Ci0gICAgaWYgKChwYXJ0ID09IEJhY2tCdXR0b25FbmRQ
YXJ0ICYmICFtX2hhc0JhY2tCdXR0b25FbmRQYXJ0KSB8fCAocGFydCA9PSBCYWNrQnV0dG9uU3Rh
cnRQYXJ0ICYmICFtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQpKQotICAgICAgICByZXR1cm4gSW50
UmVjdCgpOwotCi0gICAgYXV0byBzY3JvbGxiYXJTdGF0ZSA9IHNjcm9sbGJhclBhcnRTdGF0ZUZs
YWdzKHNjcm9sbGJhciwgQWxsUGFydHMpOwotICAgIGF1dG8mIHNjcm9sbGJhcldpZGdldCA9IHN0
YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFyJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9y
Q3JlYXRlKHdpZGdldFR5cGVGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyLCBzY3JvbGxiYXJTdGF0ZSkp
KTsKLSAgICBzY3JvbGxiYXJXaWRnZXQuc2Nyb2xsYmFyKCkuc2V0U3RhdGUoc2Nyb2xsYmFyU3Rh
dGUpOwotCi0gICAgSW50UmVjdCByZWN0ID0gY29udGVudHNSZWN0YW5nbGUoc2Nyb2xsYmFyLCBz
Y3JvbGxiYXJXaWRnZXQpOwotICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQpIHsK
LSAgICAgICAgYXV0byogYmFja3dhcmRTdGVwcGVyID0gc2Nyb2xsYmFyV2lkZ2V0LnN0ZXBwZXIo
UmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpCYWNrd2FyZCk7Ci0gICAgICAg
IEFTU0VSVChiYWNrd2FyZFN0ZXBwZXIpOwotICAgICAgICBiYWNrd2FyZFN0ZXBwZXItPnNldFN0
YXRlKHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgQmFja0J1dHRvblN0YXJ0UGFy
dCkpOwotICAgICAgICByZXR1cm4gSW50UmVjdChyZWN0LmxvY2F0aW9uKCksIGJhY2t3YXJkU3Rl
cHBlci0+cHJlZmVycmVkU2l6ZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAoYXV0byogc2Vjb25kYXJ5
Rm9yd2FyZFN0ZXBwZXIgPSBzY3JvbGxiYXJXaWRnZXQuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9s
bGJhckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFyeUZvcndhcmQpKSB7Ci0gICAgICAgIHNlY29u
ZGFyeUZvcndhcmRTdGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVGbGFncyhzY3Jv
bGxiYXIsIEZvcndhcmRCdXR0b25TdGFydFBhcnQpKTsKLSAgICAgICAgSW50U2l6ZSBwcmVmZXJy
ZWRTaXplID0gc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKTsKLSAgICAg
ICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0g
ICAgICAgICAgICByZWN0Lm1vdmUoMCwgcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAg
ICAgICByZWN0LmNvbnRyYWN0KDAsIHByZWZlcnJlZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgcmVjdC5tb3ZlKHByZWZlcnJlZFNpemUud2lkdGgoKSwgMCk7
Ci0gICAgICAgICAgICByZWN0LmNvbnRyYWN0KDAsIHByZWZlcnJlZFNpemUud2lkdGgoKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYXV0byogc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVy
ID0gc2Nyb2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0
ZXBwZXJzOjpTZWNvbmRhcnlCYWNrd2FyZCkpIHsKLSAgICAgICAgc2Vjb25kYXJ5QmFja3dhcmRT
dGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVGbGFncyhzY3JvbGxiYXIsIEJhY2tC
dXR0b25FbmRQYXJ0KSk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJlY3QuY29udHJhY3QoMCwgc2Vjb25kYXJ5
QmFja3dhcmRTdGVwcGVyLT5wcmVmZXJyZWRTaXplKCkuaGVpZ2h0KCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZWN0LmNvbnRyYWN0KHNlY29uZGFyeUJhY2t3YXJkU3RlcHBlci0+cHJl
ZmVycmVkU2l6ZSgpLndpZHRoKCksIDApOwotICAgIH0KLQotICAgIGF1dG8qIGZvcndhcmRTdGVw
cGVyID0gc2Nyb2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6
OlN0ZXBwZXJzOjpGb3J3YXJkKTsKLSAgICBBU1NFUlQoZm9yd2FyZFN0ZXBwZXIpOwotICAgIGZv
cndhcmRTdGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVGbGFncyhzY3JvbGxiYXIs
IEZvcndhcmRCdXR0b25FbmRQYXJ0KSk7Ci0gICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gZm9y
d2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKTsKLSAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0
aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIHJlY3QubW92ZSgwLCByZWN0Lmhl
aWdodCgpIC0gcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSk7Ci0gICAgZWxzZQotICAgICAgICByZWN0
Lm1vdmUocmVjdC53aWR0aCgpIC0gcHJlZmVycmVkU2l6ZS53aWR0aCgpLCAwKTsKLQotICAgIHJl
dHVybiBJbnRSZWN0KHJlY3QubG9jYXRpb24oKSwgcHJlZmVycmVkU2l6ZSk7Ci19Ci0KLUludFJl
Y3QgU2Nyb2xsYmFyVGhlbWVHdGs6OmZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciYgc2Nyb2xs
YmFyLCBTY3JvbGxiYXJQYXJ0IHBhcnQsIGJvb2wgLypwYWludGluZyovKQotewotICAgIEFTU0VS
VChwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9u
RW5kUGFydCk7Ci0gICAgaWYgKChwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgJiYgIW1f
aGFzRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkgfHwgKHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBh
cnQgJiYgIW1faGFzRm9yd2FyZEJ1dHRvbkVuZFBhcnQpKQotICAgICAgICByZXR1cm4gSW50UmVj
dCgpOwotCi0gICAgYXV0byBzY3JvbGxiYXJTdGF0ZSA9IHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdz
KHNjcm9sbGJhciwgQWxsUGFydHMpOwotICAgIGF1dG8mIHNjcm9sbGJhcldpZGdldCA9IHN0YXRp
Y19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFyJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3Jl
YXRlKHdpZGdldFR5cGVGb3JTY3JvbGxiYXIoc2Nyb2xsYmFyLCBzY3JvbGxiYXJTdGF0ZSkpKTsK
LSAgICBzY3JvbGxiYXJXaWRnZXQuc2Nyb2xsYmFyKCkuc2V0U3RhdGUoc2Nyb2xsYmFyU3RhdGUp
OwotCi0gICAgSW50UmVjdCByZWN0ID0gY29udGVudHNSZWN0YW5nbGUoc2Nyb2xsYmFyLCBzY3Jv
bGxiYXJXaWRnZXQpOwotICAgIGlmIChhdXRvKiBiYWNrd2FyZFN0ZXBwZXIgPSBzY3JvbGxiYXJX
aWRnZXQuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6U3RlcHBlcnM6OkJhY2t3
YXJkKSkgewotICAgICAgICBiYWNrd2FyZFN0ZXBwZXItPnNldFN0YXRlKHNjcm9sbGJhclBhcnRT
dGF0ZUZsYWdzKHNjcm9sbGJhciwgQmFja0J1dHRvblN0YXJ0UGFydCkpOwotICAgICAgICBJbnRT
aXplIHByZWZlcnJlZFNpemUgPSBiYWNrd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKTsKLSAg
ICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7
Ci0gICAgICAgICAgICByZWN0Lm1vdmUoMCwgcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSk7Ci0gICAg
ICAgICAgICByZWN0LmNvbnRyYWN0KDAsIHByZWZlcnJlZFNpemUuaGVpZ2h0KCkpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcmVjdC5tb3ZlKHByZWZlcnJlZFNpemUud2lkdGgoKSwg
MCk7Ci0gICAgICAgICAgICByZWN0LmNvbnRyYWN0KHByZWZlcnJlZFNpemUud2lkdGgoKSwgMCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYXV0byogc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBw
ZXIgPSBzY3JvbGxiYXJXaWRnZXQuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJhckdhZGdldDo6
U3RlcHBlcnM6OlNlY29uZGFyeUZvcndhcmQpKSB7Ci0gICAgICAgIHNlY29uZGFyeUZvcndhcmRT
dGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVGbGFncyhzY3JvbGxiYXIsIEZvcndh
cmRCdXR0b25TdGFydFBhcnQpKTsKLSAgICAgICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gc2Vj
b25kYXJ5Rm9yd2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKTsKLSAgICAgICAgaWYgKHBhcnQg
PT0gRm9yd2FyZEJ1dHRvblN0YXJ0UGFydCkKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KHJl
Y3QubG9jYXRpb24oKSwgcHJlZmVycmVkU2l6ZSk7Ci0KLSAgICAgICAgaWYgKHNjcm9sbGJhci5v
cmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICByZWN0Lm1v
dmUoMCwgcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICByZWN0LmNvbnRyYWN0
KDAsIHByZWZlcnJlZFNpemUuaGVpZ2h0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgcmVjdC5tb3ZlKHByZWZlcnJlZFNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgICAgICByZWN0
LmNvbnRyYWN0KHByZWZlcnJlZFNpemUud2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBhdXRvKiBmb3J3YXJkU3RlcHBlciA9IHNjcm9sbGJhcldpZGdldC5zdGVwcGVyKFJlbmRl
clRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6Rm9yd2FyZCk7Ci0gICAgQVNTRVJUKGZv
cndhcmRTdGVwcGVyKTsKLSAgICBmb3J3YXJkU3RlcHBlci0+c2V0U3RhdGUoc2Nyb2xsYmFyUGFy
dFN0YXRlRmxhZ3Moc2Nyb2xsYmFyLCBGb3J3YXJkQnV0dG9uRW5kUGFydCkpOwotICAgIEludFNp
emUgcHJlZmVycmVkU2l6ZSA9IGZvcndhcmRTdGVwcGVyLT5wcmVmZXJyZWRTaXplKCk7Ci0gICAg
aWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAg
ICByZWN0Lm1vdmUoMCwgcmVjdC5oZWlnaHQoKSAtIHByZWZlcnJlZFNpemUuaGVpZ2h0KCkpOwot
ICAgIGVsc2UKLSAgICAgICAgcmVjdC5tb3ZlKHJlY3Qud2lkdGgoKSAtIHByZWZlcnJlZFNpemUu
d2lkdGgoKSwgMCk7Ci0KLSAgICByZXR1cm4gSW50UmVjdChyZWN0LmxvY2F0aW9uKCksIHByZWZl
cnJlZFNpemUpOwotfQotCi1ib29sIFNjcm9sbGJhclRoZW1lR3RrOjpwYWludChTY3JvbGxiYXIm
IHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJl
Y3QmIGRhbWFnZVJlY3QpCi17Ci0gICAgaWYgKGdyYXBoaWNzQ29udGV4dC5wYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghc2Nyb2xsYmFyLmVuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBkb3VibGUgb3BhY2l0eSA9IHNjcm9s
bGJhci5ob3ZlcmVkUGFydCgpID09IE5vUGFydCA/IHNjcm9sbGJhci5vcGFjaXR5KCkgOiAxOwot
ICAgIGlmICghb3BhY2l0eSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBJbnRSZWN0IHJl
Y3QgPSBzY3JvbGxiYXIuZnJhbWVSZWN0KCk7Ci0gICAgaWYgKCFyZWN0LmludGVyc2VjdHMoZGFt
YWdlUmVjdCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byBzY3JvbGxiYXJTdGF0
ZSA9IHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgQWxsUGFydHMsIHRydWUpOwot
ICAgIGF1dG8mIHNjcm9sbGJhcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xs
YmFyJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKHdpZGdldFR5cGVGb3JTY3JvbGxi
YXIoc2Nyb2xsYmFyLCBzY3JvbGxiYXJTdGF0ZSkpKTsKLSAgICBhdXRvJiBzY3JvbGxiYXJHYWRn
ZXQgPSBzY3JvbGxiYXJXaWRnZXQuc2Nyb2xsYmFyKCk7Ci0gICAgc2Nyb2xsYmFyR2FkZ2V0LnNl
dFN0YXRlKHNjcm9sbGJhclN0YXRlKTsKLSAgICBpZiAobV91c2VzT3ZlcmxheVNjcm9sbGJhcnMp
Ci0gICAgICAgIG9wYWNpdHkgKj0gc2Nyb2xsYmFyR2FkZ2V0Lm9wYWNpdHkoKTsKLSAgICBpZiAo
IW9wYWNpdHkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byYgdHJvdWdoID0gc2Ny
b2xsYmFyV2lkZ2V0LnRyb3VnaCgpOwotICAgIHRyb3VnaC5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0
U3RhdGVGbGFncyhzY3JvbGxiYXIsIEJhY2tUcmFja1BhcnQpKTsKLQotICAgIGF1dG8qIGJhY2t3
YXJkU3RlcHBlciA9IHNjcm9sbGJhcldpZGdldC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFy
R2FkZ2V0OjpTdGVwcGVyczo6QmFja3dhcmQpOwotICAgIGlmIChiYWNrd2FyZFN0ZXBwZXIpCi0g
ICAgICAgIGJhY2t3YXJkU3RlcHBlci0+c2V0U3RhdGUoc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Mo
c2Nyb2xsYmFyLCBCYWNrQnV0dG9uU3RhcnRQYXJ0KSk7Ci0gICAgYXV0byogc2Vjb25kYXJ5Rm9y
d2FyZFN0ZXBwZXIgPSBzY3JvbGxiYXJXaWRnZXQuc3RlcHBlcihSZW5kZXJUaGVtZVNjcm9sbGJh
ckdhZGdldDo6U3RlcHBlcnM6OlNlY29uZGFyeUZvcndhcmQpOwotICAgIGlmIChzZWNvbmRhcnlG
b3J3YXJkU3RlcHBlcikKLSAgICAgICAgc2Vjb25kYXJ5Rm9yd2FyZFN0ZXBwZXItPnNldFN0YXRl
KHNjcm9sbGJhclBhcnRTdGF0ZUZsYWdzKHNjcm9sbGJhciwgRm9yd2FyZEJ1dHRvblN0YXJ0UGFy
dCkpOwotICAgIGF1dG8qIHNlY29uZGFyeUJhY2t3YXJkU3RlcHBlciA9IHNjcm9sbGJhcldpZGdl
dC5zdGVwcGVyKFJlbmRlclRoZW1lU2Nyb2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6U2Vjb25kYXJ5
QmFja3dhcmQpOwotICAgIGlmIChzZWNvbmRhcnlCYWNrd2FyZFN0ZXBwZXIpCi0gICAgICAgIHNl
Y29uZGFyeUJhY2t3YXJkU3RlcHBlci0+c2V0U3RhdGUoc2Nyb2xsYmFyUGFydFN0YXRlRmxhZ3Mo
c2Nyb2xsYmFyLCBCYWNrQnV0dG9uRW5kUGFydCkpOwotICAgIGF1dG8qIGZvcndhcmRTdGVwcGVy
ID0gc2Nyb2xsYmFyV2lkZ2V0LnN0ZXBwZXIoUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0
ZXBwZXJzOjpGb3J3YXJkKTsKLSAgICBpZiAoZm9yd2FyZFN0ZXBwZXIpCi0gICAgICAgIGZvcndh
cmRTdGVwcGVyLT5zZXRTdGF0ZShzY3JvbGxiYXJQYXJ0U3RhdGVGbGFncyhzY3JvbGxiYXIsIEZv
cndhcmRCdXR0b25FbmRQYXJ0KSk7Ci0KLSAgICBJbnRTaXplIHByZWZlcnJlZFNpemUgPSBzY3Jv
bGxiYXJXaWRnZXQuY29udGVudHMoKS5wcmVmZXJyZWRTaXplKCk7Ci0gICAgaW50IHRodW1iU2l6
ZSA9IHRodW1iTGVuZ3RoKHNjcm9sbGJhcik7Ci0gICAgaWYgKHRodW1iU2l6ZSkgewotICAgICAg
ICBzY3JvbGxiYXJXaWRnZXQuc2xpZGVyKCkuc2V0U3RhdGUoc2Nyb2xsYmFyUGFydFN0YXRlRmxh
Z3Moc2Nyb2xsYmFyLCBUaHVtYlBhcnQpKTsKLSAgICAgICAgcHJlZmVycmVkU2l6ZSA9IHByZWZl
cnJlZFNpemUuZXhwYW5kZWRUbyhzY3JvbGxiYXJXaWRnZXQuc2xpZGVyKCkucHJlZmVycmVkU2l6
ZSgpKTsKLSAgICB9Ci0gICAgcHJlZmVycmVkU2l6ZSArPSBzY3JvbGxiYXJHYWRnZXQucHJlZmVy
cmVkU2l6ZSgpIC0gc2Nyb2xsYmFyR2FkZ2V0Lm1pbmltdW1TaXplKCk7Ci0KLSAgICBGbG9hdFJl
Y3QgY29udGVudHNSZWN0KHJlY3QpOwotICAgIC8vIFdoZW4gdXNpbmcgb3ZlcmxheSBzY3JvbGxi
YXJzIHdlIGFsd2F5cyBjbGFpbSB0aGUgc2l6ZSBvZiB0aGUgc2Nyb2xsYmFyIHdoZW4gaG92ZXJl
ZCwgc28gd2hlbgotICAgIC8vIGRyYXdpbmcgdGhlIGluZGljYXRvciB3ZSBuZWVkIHRvIGFkanVz
dCB0aGUgcmVjdGFuZ2xlIHRvIGl0cyBhY3R1YWwgc2l6ZSBpbiBpbmRpY2F0b3IgbW9kZS4KLSAg
ICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpIHsKLSAg
ICAgICAgaWYgKHJlY3Qud2lkdGgoKSAhPSBwcmVmZXJyZWRTaXplLndpZHRoKCkpIHsKLSAgICAg
ICAgICAgIGlmICghc2Nyb2xsYmFyLnNjcm9sbGFibGVBcmVhKCkuc2hvdWxkUGxhY2VCbG9ja0Rp
cmVjdGlvblNjcm9sbGJhck9uTGVmdCgpKQotICAgICAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5t
b3ZlKHN0ZDo6YWJzKHJlY3Qud2lkdGgoKSAtIHByZWZlcnJlZFNpemUud2lkdGgoKSksIDApOwot
ICAgICAgICAgICAgY29udGVudHNSZWN0LnNldFdpZHRoKHByZWZlcnJlZFNpemUud2lkdGgoKSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocmVjdC5oZWlnaHQoKSAhPSBw
cmVmZXJyZWRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgICAgICBjb250ZW50c1JlY3QubW92ZSgw
LCBzdGQ6OmFicyhyZWN0LmhlaWdodCgpIC0gcHJlZmVycmVkU2l6ZS5oZWlnaHQoKSkpOwotICAg
ICAgICAgICAgY29udGVudHNSZWN0LnNldEhlaWdodChwcmVmZXJyZWRTaXplLmhlaWdodCgpKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChvcGFjaXR5ICE9IDEpIHsKLSAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnNhdmUoKTsKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoZGFtYWdl
UmVjdCk7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC5iZWdpblRyYW5zcGFyZW5jeUxheWVyKG9w
YWNpdHkpOwotICAgIH0KLQotICAgIHNjcm9sbGJhckdhZGdldC5yZW5kZXIoZ3JhcGhpY3NDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBjb250ZW50c1JlY3QsICZjb250ZW50c1JlY3Qp
OwotICAgIHNjcm9sbGJhcldpZGdldC5jb250ZW50cygpLnJlbmRlcihncmFwaGljc0NvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGNvbnRlbnRzUmVjdCwgJmNvbnRlbnRzUmVjdCk7Ci0K
LSAgICBpZiAoYmFja3dhcmRTdGVwcGVyKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBidXR0b25SZWN0
ID0gY29udGVudHNSZWN0OwotICAgICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0g
VmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBidXR0b25SZWN0LnNldEhlaWdodChiYWNr
d2FyZFN0ZXBwZXItPnByZWZlcnJlZFNpemUoKS5oZWlnaHQoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGJ1dHRvblJlY3Quc2V0V2lkdGgoYmFja3dhcmRTdGVwcGVyLT5wcmVmZXJyZWRT
aXplKCkud2lkdGgoKSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2Nyb2xsYmFy
R2FkZ2V0Jj4oc2Nyb2xsYmFyR2FkZ2V0KS5yZW5kZXJTdGVwcGVyKGdyYXBoaWNzQ29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdCwgYmFja3dhcmRTdGVwcGVyLAotICAg
ICAgICAgICAgc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIgPyBH
VEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgUmVu
ZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpCYWNrd2FyZCk7Ci0gICAgICAgIGlm
IChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAg
ICAgICAgY29udGVudHNSZWN0Lm1vdmUoMCwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAg
ICAgICBjb250ZW50c1JlY3QuY29udHJhY3QoMCwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb250ZW50c1JlY3QubW92ZShidXR0b25SZWN0Lndp
ZHRoKCksIDApOwotICAgICAgICAgICAgY29udGVudHNSZWN0LmNvbnRyYWN0KGJ1dHRvblJlY3Qu
d2lkdGgoKSwgMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHNlY29uZGFyeUZvcndhcmRT
dGVwcGVyKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBidXR0b25SZWN0ID0gY29udGVudHNSZWN0Owot
ICAgICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIp
Ci0gICAgICAgICAgICBidXR0b25SZWN0LnNldEhlaWdodChzZWNvbmRhcnlGb3J3YXJkU3RlcHBl
ci0+cHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
YnV0dG9uUmVjdC5zZXRXaWR0aChzZWNvbmRhcnlGb3J3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6
ZSgpLndpZHRoKCkpOwotICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNjcm9sbGJhckdh
ZGdldCY+KHNjcm9sbGJhckdhZGdldCkucmVuZGVyU3RlcHBlcihncmFwaGljc0NvbnRleHQucGxh
dGZvcm1Db250ZXh0KCktPmNyKCksIGJ1dHRvblJlY3QsIHNlY29uZGFyeUZvcndhcmRTdGVwcGVy
LAotICAgICAgICAgICAgc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxi
YXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRB
TCwgUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJzOjpTZWNvbmRhcnlGb3J3YXJk
KTsKLSAgICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xs
YmFyKSB7Ci0gICAgICAgICAgICBjb250ZW50c1JlY3QubW92ZSgwLCBidXR0b25SZWN0LmhlaWdo
dCgpKTsKLSAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5jb250cmFjdCgwLCBidXR0b25SZWN0Lmhl
aWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5tb3Zl
KGJ1dHRvblJlY3Qud2lkdGgoKSwgMCk7Ci0gICAgICAgICAgICBjb250ZW50c1JlY3QuY29udHJh
Y3QoYnV0dG9uUmVjdC53aWR0aCgpLCAwKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoc2Vj
b25kYXJ5QmFja3dhcmRTdGVwcGVyKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBidXR0b25SZWN0ID0g
Y29udGVudHNSZWN0OwotICAgICAgICBpZiAoc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWxTY3JvbGxiYXIpIHsKLSAgICAgICAgICAgIGJ1dHRvblJlY3Quc2V0SGVpZ2h0KHNlY29u
ZGFyeUJhY2t3YXJkU3RlcHBlci0+cHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpKTsKLSAgICAgICAg
ICAgIGJ1dHRvblJlY3QubW92ZSgwLCBjb250ZW50c1JlY3QuaGVpZ2h0KCkgLSBidXR0b25SZWN0
LmhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1dHRvblJlY3Quc2V0
V2lkdGgoc2Vjb25kYXJ5QmFja3dhcmRTdGVwcGVyLT5wcmVmZXJyZWRTaXplKCkud2lkdGgoKSk7
Ci0gICAgICAgICAgICBidXR0b25SZWN0Lm1vdmUoY29udGVudHNSZWN0LndpZHRoKCkgLSBidXR0
b25SZWN0LndpZHRoKCksIDApOwotICAgICAgICB9Ci0gICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lU2Nyb2xsYmFyR2FkZ2V0Jj4oc2Nyb2xsYmFyR2FkZ2V0KS5yZW5kZXJTdGVwcGVyKGdy
YXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdCwgc2Vjb25k
YXJ5QmFja3dhcmRTdGVwcGVyLAotICAgICAgICAgICAgc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkg
PT0gVmVydGljYWxTY3JvbGxiYXIgPyBHVEtfT1JJRU5UQVRJT05fVkVSVElDQUwgOiBHVEtfT1JJ
RU5UQVRJT05fSE9SSVpPTlRBTCwgUmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQ6OlN0ZXBwZXJz
OjpTZWNvbmRhcnlCYWNrd2FyZCk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24o
KSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5jb250cmFj
dCgwLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29u
dGVudHNSZWN0LmNvbnRyYWN0KGJ1dHRvblJlY3Qud2lkdGgoKSwgMCk7Ci0gICAgfQotICAgIGlm
IChmb3J3YXJkU3RlcHBlcikgewotICAgICAgICBGbG9hdFJlY3QgYnV0dG9uUmVjdCA9IGNvbnRl
bnRzUmVjdDsKLSAgICAgICAgaWYgKHNjcm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2Fs
U2Nyb2xsYmFyKSB7Ci0gICAgICAgICAgICBidXR0b25SZWN0LnNldEhlaWdodChmb3J3YXJkU3Rl
cHBlci0+cHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGJ1dHRvblJlY3Qu
bW92ZSgwLCBjb250ZW50c1JlY3QuaGVpZ2h0KCkgLSBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJ1dHRvblJlY3Quc2V0V2lkdGgoZm9yd2FyZFN0
ZXBwZXItPnByZWZlcnJlZFNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgICAgIGJ1dHRvblJlY3Qu
bW92ZShjb250ZW50c1JlY3Qud2lkdGgoKSAtIGJ1dHRvblJlY3Qud2lkdGgoKSwgMCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVTY3JvbGxiYXJHYWRnZXQmPihz
Y3JvbGxiYXJHYWRnZXQpLnJlbmRlclN0ZXBwZXIoZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29u
dGV4dCgpLT5jcigpLCBidXR0b25SZWN0LCBmb3J3YXJkU3RlcHBlciwKLSAgICAgICAgICAgIHNj
cm9sbGJhci5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyID8gR1RLX09SSUVOVEFU
SU9OX1ZFUlRJQ0FMIDogR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwsIFJlbmRlclRoZW1lU2Ny
b2xsYmFyR2FkZ2V0OjpTdGVwcGVyczo6Rm9yd2FyZCk7Ci0gICAgICAgIGlmIChzY3JvbGxiYXIu
b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIGNvbnRlbnRz
UmVjdC5jb250cmFjdCgwLCBidXR0b25SZWN0LmhlaWdodCgpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgY29udGVudHNSZWN0LmNvbnRyYWN0KGJ1dHRvblJlY3Qud2lkdGgoKSwgMCk7Ci0g
ICAgfQotCi0gICAgdHJvdWdoLnJlbmRlcihncmFwaGljc0NvbnRleHQucGxhdGZvcm1Db250ZXh0
KCktPmNyKCksIGNvbnRlbnRzUmVjdCwgJmNvbnRlbnRzUmVjdCk7Ci0KLSAgICBpZiAodGh1bWJT
aXplKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXIub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNj
cm9sbGJhcikgewotICAgICAgICAgICAgY29udGVudHNSZWN0Lm1vdmUoMCwgdGh1bWJQb3NpdGlv
bihzY3JvbGxiYXIpKTsKLSAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5zZXRXaWR0aChzY3JvbGxi
YXJXaWRnZXQuc2xpZGVyKCkucHJlZmVycmVkU2l6ZSgpLndpZHRoKCkpOwotICAgICAgICAgICAg
Y29udGVudHNSZWN0LnNldEhlaWdodCh0aHVtYlNpemUpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgY29udGVudHNSZWN0Lm1vdmUodGh1bWJQb3NpdGlvbihzY3JvbGxiYXIpLCAwKTsK
LSAgICAgICAgICAgIGNvbnRlbnRzUmVjdC5zZXRXaWR0aCh0aHVtYlNpemUpOwotICAgICAgICAg
ICAgY29udGVudHNSZWN0LnNldEhlaWdodChzY3JvbGxiYXJXaWRnZXQuc2xpZGVyKCkucHJlZmVy
cmVkU2l6ZSgpLmhlaWdodCgpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY29udGVudHNSZWN0
LmludGVyc2VjdHMoZGFtYWdlUmVjdCkpCi0gICAgICAgICAgICBzY3JvbGxiYXJXaWRnZXQuc2xp
ZGVyKCkucmVuZGVyKGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgY29u
dGVudHNSZWN0KTsKLSAgICB9Ci0KLSAgICBpZiAob3BhY2l0eSAhPSAxKSB7Ci0gICAgICAgIGdy
YXBoaWNzQ29udGV4dC5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwotICAgICAgICBncmFwaGljc0Nv
bnRleHQucmVzdG9yZSgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1TY3JvbGxi
YXJCdXR0b25QcmVzc0FjdGlvbiBTY3JvbGxiYXJUaGVtZUd0azo6aGFuZGxlTW91c2VQcmVzc0V2
ZW50KFNjcm9sbGJhciYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZlbnQsIFNjcm9sbGJh
clBhcnQgcHJlc3NlZFBhcnQpCi17Ci0gICAgZ2Jvb2xlYW4gd2FycFNsaWRlciA9IEZBTFNFOwot
ICAgIHN3aXRjaCAocHJlc3NlZFBhcnQpIHsKLSAgICBjYXNlIEJhY2tUcmFja1BhcnQ6Ci0gICAg
Y2FzZSBGb3J3YXJkVHJhY2tQYXJ0OgotICAgICAgICBnX29iamVjdF9nZXQoZ3RrX3NldHRpbmdz
X2dldF9kZWZhdWx0KCksCi0gICAgICAgICAgICAiZ3RrLXByaW1hcnktYnV0dG9uLXdhcnBzLXNs
aWRlciIsCi0gICAgICAgICAgICAmd2FycFNsaWRlciwgbnVsbHB0cik7Ci0gICAgICAgIC8vIFRo
ZSBzaGlmdCBrZXkgb3IgbWlkZGxlL3JpZ2h0IGJ1dHRvbiByZXZlcnNlcyB0aGUgc2Vuc2UuCi0g
ICAgICAgIGlmIChldmVudC5zaGlmdEtleSgpIHx8IGV2ZW50LmJ1dHRvbigpICE9IExlZnRCdXR0
b24pCi0gICAgICAgICAgICB3YXJwU2xpZGVyID0gIXdhcnBTbGlkZXI7Ci0gICAgICAgIHJldHVy
biB3YXJwU2xpZGVyID8KLSAgICAgICAgICAgIFNjcm9sbGJhckJ1dHRvblByZXNzQWN0aW9uOjpD
ZW50ZXJPblRodW1iOgotICAgICAgICAgICAgU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb246OlNj
cm9sbDsKLSAgICBjYXNlIFRodW1iUGFydDoKLSAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbigpICE9
IFJpZ2h0QnV0dG9uKQotICAgICAgICAgICAgcmV0dXJuIFNjcm9sbGJhckJ1dHRvblByZXNzQWN0
aW9uOjpTdGFydERyYWc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQmFja0J1dHRvblN0YXJ0
UGFydDoKLSAgICBjYXNlIEZvcndhcmRCdXR0b25TdGFydFBhcnQ6Ci0gICAgY2FzZSBCYWNrQnV0
dG9uRW5kUGFydDoKLSAgICBjYXNlIEZvcndhcmRCdXR0b25FbmRQYXJ0OgotICAgICAgICByZXR1
cm4gU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb246OlNjcm9sbDsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rp
b246Ok5vbmU7Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZUd0azo6c2Nyb2xsYmFyVGhpY2tuZXNz
KFNjcm9sbGJhckNvbnRyb2xTaXplLCBTY3JvbGxiYXJFeHBhbnNpb25TdGF0ZSkKLXsKLSAgICBh
dXRvJiBzY3JvbGxiYXJXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNjcm9sbGJhciY+
KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6
VmVydGljYWxTY3JvbGxiYXJSaWdodCkpOwotICAgIHNjcm9sbGJhcldpZGdldC5zY3JvbGxiYXIo
KS5zZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19QUkVMSUdIVCk7Ci0gICAgSW50U2l6ZSBjb250ZW50
c1ByZWZlcnJlZFNpemUgPSBzY3JvbGxiYXJXaWRnZXQuY29udGVudHMoKS5wcmVmZXJyZWRTaXpl
KCk7Ci0gICAgY29udGVudHNQcmVmZXJyZWRTaXplID0gY29udGVudHNQcmVmZXJyZWRTaXplLmV4
cGFuZGVkVG8oc2Nyb2xsYmFyV2lkZ2V0LnNsaWRlcigpLnByZWZlcnJlZFNpemUoKSk7Ci0gICAg
SW50U2l6ZSBwcmVmZXJyZWRTaXplID0gY29udGVudHNQcmVmZXJyZWRTaXplICsgc2Nyb2xsYmFy
V2lkZ2V0LnNjcm9sbGJhcigpLnByZWZlcnJlZFNpemUoKSAtIHNjcm9sbGJhcldpZGdldC5zY3Jv
bGxiYXIoKS5taW5pbXVtU2l6ZSgpOwotICAgIHJldHVybiBwcmVmZXJyZWRTaXplLndpZHRoKCk7
Ci19Ci0KLWludCBTY3JvbGxiYXJUaGVtZUd0azo6bWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJh
ciYgc2Nyb2xsYmFyKQotewotICAgIGF1dG8mIHNjcm9sbGJhcldpZGdldCA9IHN0YXRpY19jYXN0
PFJlbmRlclRoZW1lU2Nyb2xsYmFyJj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJl
bmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0aWNhbFNjcm9sbGJhclJpZ2h0KSk7Ci0gICAgc2Ny
b2xsYmFyV2lkZ2V0LnNjcm9sbGJhcigpLnNldFN0YXRlKEdUS19TVEFURV9GTEFHX1BSRUxJR0hU
KTsKLSAgICBJbnRTaXplIG1pblNpemUgPSBzY3JvbGxiYXJXaWRnZXQuc2xpZGVyKCkubWluaW11
bVNpemUoKTsKLSAgICByZXR1cm4gc2Nyb2xsYmFyLm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxT
Y3JvbGxiYXIgPyBtaW5TaXplLmhlaWdodCgpIDogbWluU2l6ZS53aWR0aCgpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvU2Nyb2xsYmFyVGhlbWVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9TY3Jv
bGxiYXJUaGVtZUd0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWFiNjNmZTY1
My4uMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Njcm9sbGJh
clRoZW1lR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBTY3JvbGxiYXI7Ci0KLWNsYXNzIFNjcm9sbGJhclRoZW1lR3RrIGZpbmFsIDogcHVibGlj
IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5TY3JvbGxi
YXJUaGVtZUd0aygpOwotCi0gICAgYm9vbCBoYXNCdXR0b25zKFNjcm9sbGJhciYpIG92ZXJyaWRl
OwotICAgIGJvb2wgaGFzVGh1bWIoU2Nyb2xsYmFyJikgb3ZlcnJpZGU7Ci0gICAgSW50UmVjdCBi
YWNrQnV0dG9uUmVjdChTY3JvbGxiYXImLCBTY3JvbGxiYXJQYXJ0LCBib29sKSBvdmVycmlkZTsK
LSAgICBJbnRSZWN0IGZvcndhcmRCdXR0b25SZWN0KFNjcm9sbGJhciYsIFNjcm9sbGJhclBhcnQs
IGJvb2wpIG92ZXJyaWRlOwotICAgIEludFJlY3QgdHJhY2tSZWN0KFNjcm9sbGJhciYsIGJvb2wp
IG92ZXJyaWRlOwotCi0gICAgU2Nyb2xsYmFyVGhlbWVHdGsoKTsKLQotICAgIGJvb2wgcGFpbnQo
U2Nyb2xsYmFyJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCkg
b3ZlcnJpZGU7Ci0gICAgU2Nyb2xsYmFyQnV0dG9uUHJlc3NBY3Rpb24gaGFuZGxlTW91c2VQcmVz
c0V2ZW50KFNjcm9sbGJhciYsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIFNjcm9sbGJhclBh
cnQpIG92ZXJyaWRlOwotICAgIGludCBzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJv
bFNpemUsIFNjcm9sbGJhckV4cGFuc2lvblN0YXRlID0gU2Nyb2xsYmFyRXhwYW5zaW9uU3RhdGU6
OkV4cGFuZGVkKSBvdmVycmlkZTsKLSAgICBpbnQgbWluaW11bVRodW1iTGVuZ3RoKFNjcm9sbGJh
ciYpIG92ZXJyaWRlOwotCi0gICAgLy8gVE9ETzogVGhlc2UgYXJlIHRoZSBkZWZhdWx0IEdUSysg
dmFsdWVzLiBBdCBzb21lIHBvaW50IHdlIHNob3VsZCBwdWxsIHRoZXNlIGZyb20gdGhlIHRoZW1l
IGl0c2VsZi4KLSAgICBTZWNvbmRzIGluaXRpYWxBdXRvc2Nyb2xsVGltZXJEZWxheSgpIG92ZXJy
aWRlIHsgcmV0dXJuIDIwMF9tczsgfQotICAgIFNlY29uZHMgYXV0b3Njcm9sbFRpbWVyRGVsYXko
KSBvdmVycmlkZSB7IHJldHVybiAyMF9tczsgfQotICAgIHZvaWQgdGhlbWVDaGFuZ2VkKCkgb3Zl
cnJpZGU7Ci0gICAgYm9vbCB1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3VzZXNPdmVybGF5U2Nyb2xsYmFyczsgfQotICAgIC8vIFdoZW4gdXNpbmcgb3Zl
cmxheSBzY3JvbGxiYXJzLCBhbHdheXMgaW52YWxpZGF0ZSB0aGUgd2hvbGUgc2Nyb2xsYmFyIHdo
ZW4gZW50ZXJpbmcvbGVhdmluZy4KLSAgICBib29sIGludmFsaWRhdGVPbk1vdXNlRW50ZXJFeGl0
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbV91c2VzT3ZlcmxheVNjcm9sbGJhcnM7IH0KLQotcHJpdmF0
ZToKLSAgICB2b2lkIHVwZGF0ZVRoZW1lUHJvcGVydGllcygpOwotCi0gICAgYm9vbCBtX2hhc0Zv
cndhcmRCdXR0b25TdGFydFBhcnQgOiAxOwotICAgIGJvb2wgbV9oYXNGb3J3YXJkQnV0dG9uRW5k
UGFydCA6IDE7Ci0gICAgYm9vbCBtX2hhc0JhY2tCdXR0b25TdGFydFBhcnQgOiAxOwotICAgIGJv
b2wgbV9oYXNCYWNrQnV0dG9uRW5kUGFydCA6IDE7Ci0gICAgYm9vbCBtX3VzZXNPdmVybGF5U2Ny
b2xsYmFycyB7IGZhbHNlIH07Ci19OwotCi19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9UaGVtZUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
VGhlbWVHdGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMGVk
YTYwYjRiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9U
aGVtZUd0ay5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRo
ZW1lR3RrLmgiCisKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dV
bmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUaGVtZSYgVGhlbWU6OnNpbmds
ZXRvbigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRoZW1lR3RrPiB0aGVtZTsKKyAg
ICByZXR1cm4gdGhlbWU7Cit9CisKK3ZvaWQgVGhlbWVHdGs6OmVuc3VyZVBsYXRmb3JtQ29sb3Jz
KCkgY29uc3QKK3sKKyAgICBpZiAobV9hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IuaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBHUmVmUHRyPEd0a1dpZGdldFBhdGg+IGVu
dHJ5UGF0aCA9IGFkb3B0R1JlZihndGtfd2lkZ2V0X3BhdGhfbmV3KCkpOworICAgIGd0a193aWRn
ZXRfcGF0aF9hcHBlbmRfdHlwZShlbnRyeVBhdGguZ2V0KCksIEdfVFlQRV9OT05FKTsKKyAgICBn
dGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUoZW50cnlQYXRoLmdldCgpLCAtMSwg
ImVudHJ5Iik7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGVudHJ5Q29udGV4dCA9IGFk
b3B0R1JlZihndGtfc3R5bGVfY29udGV4dF9uZXcoKSk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRf
c2V0X3BhdGgoZW50cnlDb250ZXh0LmdldCgpLCBlbnRyeVBhdGguZ2V0KCkpOworCisgICAgR1Jl
ZlB0cjxHdGtXaWRnZXRQYXRoPiBzZWxlY3Rpb25QYXRoID0gYWRvcHRHUmVmKGd0a193aWRnZXRf
cGF0aF9jb3B5KGd0a19zdHlsZV9jb250ZXh0X2dldF9wYXRoKGVudHJ5Q29udGV4dC5nZXQoKSkp
KTsKKyAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUoc2VsZWN0aW9uUGF0aC5nZXQoKSwg
R19UWVBFX05PTkUpOworICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShz
ZWxlY3Rpb25QYXRoLmdldCgpLCAtMSwgInNlbGVjdGlvbiIpOworICAgIEdSZWZQdHI8R3RrU3R5
bGVDb250ZXh0PiBzZWxlY3Rpb25Db250ZXh0ID0gYWRvcHRHUmVmKGd0a19zdHlsZV9jb250ZXh0
X25ldygpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0aChzZWxlY3Rpb25Db250ZXh0
LmdldCgpLCBzZWxlY3Rpb25QYXRoLmdldCgpKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRf
cGFyZW50KHNlbGVjdGlvbkNvbnRleHQuZ2V0KCksIGVudHJ5Q29udGV4dC5nZXQoKSk7CisKKyAg
ICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoc2VsZWN0aW9uQ29udGV4dC5nZXQoKSwgc3Rh
dGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQgfCBHVEtfU1RB
VEVfRkxBR19GT0NVU0VEKSk7CisKKyAgICBHZGtSR0JBIGNvbG9yOworICAgIGd0a19zdHlsZV9j
b250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKHNlbGVjdGlvbkNvbnRleHQuZ2V0KCksIGd0a19z
dHlsZV9jb250ZXh0X2dldF9zdGF0ZShzZWxlY3Rpb25Db250ZXh0LmdldCgpKSwgJmNvbG9yKTsK
KyAgICBtX2FjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvciA9IGNvbG9yOworCisgICAgZ3Rr
X3N0eWxlX2NvbnRleHRfZ2V0X2NvbG9yKHNlbGVjdGlvbkNvbnRleHQuZ2V0KCksIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdGF0ZShzZWxlY3Rpb25Db250ZXh0LmdldCgpKSwgJmNvbG9yKTsKKyAg
ICBtX2F0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yID0gY29sb3I7CisKKyAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfc3RhdGUoc2VsZWN0aW9uQ29udGV4dC5nZXQoKSwgR1RLX1NUQVRFX0ZM
QUdfU0VMRUNURUQpOworCisgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2JhY2tncm91bmRfY29s
b3Ioc2VsZWN0aW9uQ29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKHNl
bGVjdGlvbkNvbnRleHQuZ2V0KCkpLCAmY29sb3IpOworICAgIG1faW5hY3RpdmVTZWxlY3Rpb25C
YWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKworICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9jb2xv
cihzZWxlY3Rpb25Db250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoc2Vs
ZWN0aW9uQ29udGV4dC5nZXQoKSksICZjb2xvcik7CisgICAgbV9pbmFjdGl2ZVNlbGVjdGlvbkZv
cmVncm91bmRDb2xvciA9IGNvbG9yOworfQorCit2b2lkIFRoZW1lR3RrOjpwbGF0Zm9ybUNvbG9y
c0RpZENoYW5nZSgpCit7CisgICAgbV9hY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IgPSB7
IH07Cit9CisKK0NvbG9yIFRoZW1lR3RrOjphY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
KSBjb25zdAoreworICAgIGVuc3VyZVBsYXRmb3JtQ29sb3JzKCk7CisgICAgcmV0dXJuIG1fYXRp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7Cit9CisKK0NvbG9yIFRoZW1lR3RrOjphY3RpdmVT
ZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAoreworICAgIGVuc3VyZVBsYXRmb3JtQ29s
b3JzKCk7CisgICAgcmV0dXJuIG1fYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yOworfQor
CitDb2xvciBUaGVtZUd0azo6aW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25z
dAoreworICAgIGVuc3VyZVBsYXRmb3JtQ29sb3JzKCk7CisgICAgcmV0dXJuIG1faW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7Cit9CisKK0NvbG9yIFRoZW1lR3RrOjppbmFjdGl2ZVNl
bGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0Cit7CisgICAgZW5zdXJlUGxhdGZvcm1Db2xv
cnMoKTsKKyAgICByZXR1cm4gbV9pbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL1RoZW1lR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGhlbWVH
dGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWNmMjllNGNmMWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvVGhlbWVHdGsu
aApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJUaGVtZUFkd2FpdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaGVtZUd0
ayBmaW5hbCA6IHB1YmxpYyBUaGVtZUFkd2FpdGEgeworcHJpdmF0ZToKKyAgICBDb2xvciBhY3Rp
dmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICBDb2xvciBh
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICBDb2xv
ciBpbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0IG92ZXJyaWRlOworICAg
IENvbG9yIGluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpIG92ZXJyaWRlOworCisgICAgdm9p
ZCBlbnN1cmVQbGF0Zm9ybUNvbG9ycygpIGNvbnN0OworCisgICAgbXV0YWJsZSBDb2xvciBtX2Fj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcjsKKyAgICBtdXRhYmxlIENvbG9yIG1fYXRpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7CisgICAgbXV0YWJsZSBDb2xvciBtX2luYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yOworICAgIG11dGFibGUgQ29sb3IgbV9pbmFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmNwcApzaW1pbGFyaXR5
IGluZGV4IDczJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvUmVuZGVy
VGhlbWVXUEUuY3BwCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVBZHdhaXRhLmNwcAppbmRleCBlODQ5MzA2YzdhZS4uYzA4YTQzN2JlYWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5jcHAKQEAgLTI0LDcgKzI0
LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGhlbWVX
UEUuaCIKKyNpbmNsdWRlICJSZW5kZXJUaGVtZUFkd2FpdGEuaCIKIAogI2luY2x1ZGUgIkNvbG9y
LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgpAQCAtMzIsMTMgKzMyLDEyIEBACiAj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQu
aCIKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlRoZW1lV1BFLmgiCisjaW5jbHVk
ZSAiVGhlbWVBZHdhaXRhLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlVz
ZXJBZ2VudFNjcmlwdHMuaCIKICNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgpAQCAt
NTQsNyArNTMsNyBAQCBzdGF0aWMgY29uc3QgQ29sb3IgdGV4dEZpZWxkQmFja2dyb3VuZERpc2Fi
bGVkQ29sb3IgPSBtYWtlUkdCKDI1MiwgMjUyLCAyNTIpOwogc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG1lbnVMaXN0QnV0dG9uQXJyb3dTaXplID0gMTY7CiBzdGF0aWMgY29uc3QgaW50IG1lbnVMaXN0
QnV0dG9uRm9jdXNPZmZzZXQgPSAtMzsKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtZW51TGlzdEJ1
dHRvblBhZGRpbmcgPSA1Owotc3RhdGljIGNvbnN0IGludCBtZW51TGlzdEJ1dHRvbkJvcmRlclNp
emUgPSAxOyAvLyBLZWVwIGluIHN5bmMgd2l0aCBidXR0b25Cb3JkZXJTaXplIGluIFRoZW1lV1BF
Lgorc3RhdGljIGNvbnN0IGludCBtZW51TGlzdEJ1dHRvbkJvcmRlclNpemUgPSAxOyAvLyBLZWVw
IGluIHN5bmMgd2l0aCBidXR0b25Cb3JkZXJTaXplIGluIFRoZW1lQWR3YWl0YS4KIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0gNTsKIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lQ291bnQgPSA3NTsKIHN0YXRpYyBjb25zdCBT
ZWNvbmRzIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlID0gMzNfbXM7IC8vIDMwZnBzLgpAQCAt
NzgsMTMgKzc3LDE1IEBAIHN0YXRpYyBjb25zdCBDb2xvciBtZWRpYVNsaWRlclRyYWNrQnVmZmVy
ZWRDb2xvciA9IG1ha2VSR0IoMTczLCAxNzMsIDE3Myk7CiBzdGF0aWMgY29uc3QgQ29sb3IgbWVk
aWFTbGlkZXJUcmFja0FjdGl2ZUNvbG9yID0gbWFrZVJHQigyNTIsIDI1MiwgMjUyKTsKICNlbmRp
ZgogCisjaWYgIVBMQVRGT1JNKEdUSykKIFJlbmRlclRoZW1lJiBSZW5kZXJUaGVtZTo6c2luZ2xl
dG9uKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVuZGVyVGhlbWVXUEU+IHRoZW1l
OworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZW5kZXJUaGVtZUFkd2FpdGE+IHRoZW1lOwog
ICAgIHJldHVybiB0aGVtZTsKIH0KKyNlbmRpZgogCi1ib29sIFJlbmRlclRoZW1lV1BFOjpzdXBw
b3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0Citib29sIFJlbmRl
clRoZW1lQWR3YWl0YTo6c3VwcG9ydHNGb2N1c1JpbmcoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KSBjb25zdAogewogICAgIHN3aXRjaCAoc3R5bGUuYXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBQ
dXNoQnV0dG9uUGFydDoKQEAgLTEwNSw2OCArMTA2LDc0IEBAIGJvb2wgUmVuZGVyVGhlbWVXUEU6
OnN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgUmVuZGVyVGhlbWVXUEU6OnVwZGF0ZUNhY2hlZFN5c3Rl
bUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29u
c3QKK2Jvb2wgUmVuZGVyVGhlbWVBZHdhaXRhOjpzaG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3Io
Y29uc3QgSFRNTElucHV0RWxlbWVudCYgZWxlbWVudCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBlbGVtZW50LmlzUGFzc3dvcmRGaWVsZCgpOwogfQogCi1Db2xv
ciBSZW5kZXJUaGVtZVdQRTo6cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcihPcHRpb25TZXQ8U3R5bGVD
b2xvcjo6T3B0aW9ucz4pIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZUFkd2FpdGE6OnBsYXRmb3Jt
QWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRp
b25zPikgY29uc3QKIHsKLSAgICByZXR1cm4gVGhlbWVXUEU6OmZvY3VzQ29sb3IoKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VGhlbWVBZHdhaXRhJj4oVGhlbWU6OnNpbmdsZXRvbigpKS5hY3Rp
dmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVXUEU6
OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNv
bG9yOjpPcHRpb25zPikgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1J
bmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1ha2VSR0IoNTIsIDEzMiwgMjI4KTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VGhlbWVBZHdhaXRhJj4oVGhlbWU6OnNpbmdsZXRvbigpKS5pbmFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZVdQ
RTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5
bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQWR3YWl0
YTo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+KSBjb25zdAogewotICAgIHJldHVybiBwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcihvcHRpb25zKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhl
bWVBZHdhaXRhJj4oVGhlbWU6OnNpbmdsZXRvbigpKS5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoKTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVXUEU6OnBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QK
K0NvbG9yIFJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVn
cm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1ha2VSR0IoMjU1LCAyNTUsIDI1NSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRo
ZW1lQWR3YWl0YSY+KFRoZW1lOjpzaW5nbGV0b24oKSkuaW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoKTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVXUEU6OnBsYXRmb3JtSW5hY3RpdmVT
ZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBj
b25zdAorQ29sb3IgUmVuZGVyVGhlbWVBZHdhaXRhOjpwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25z
dAogewotICAgIHJldHVybiBtYWtlUkdCKDI1MiwgMjUyLCAyNTIpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUaGVtZUFkd2FpdGEmPihUaGVtZTo6c2luZ2xldG9uKCkpLmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcigpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZVdQRTo6cGxhdGZvcm1B
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9y
OjpPcHRpb25zPiBvcHRpb25zKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWVBZHdhaXRhOjpwbGF0
Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5
bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBsYXRmb3JtQWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKG9wdGlvbnMpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
aGVtZUFkd2FpdGEmPihUaGVtZTo6c2luZ2xldG9uKCkpLmluYWN0aXZlU2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKCk7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lV1BFOjpwbGF0Zm9ybUluYWN0aXZl
TGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4gb3B0aW9ucykgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1B
Y3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9y
OjpPcHRpb25zPikgY29uc3QKIHsKLSAgICByZXR1cm4gcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlv
bkJhY2tncm91bmRDb2xvcihvcHRpb25zKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhlbWVB
ZHdhaXRhJj4oVGhlbWU6OnNpbmdsZXRvbigpKS5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKTsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWVXUEU6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0
aW9ucykgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lQWR3YWl0YTo6cGxhdGZvcm1JbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlv
bnM+KSBjb25zdAogewotICAgIHJldHVybiBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcihvcHRpb25zKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGhlbWVBZHdhaXRhJj4o
VGhlbWU6OnNpbmdsZXRvbigpKS5pbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwog
fQogCi1Db2xvciBSZW5kZXJUaGVtZVdQRTo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rp
b25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMp
IGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZUFkd2FpdGE6OnBsYXRmb3JtRm9jdXNSaW5nQ29sb3Io
T3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAogewotICAgIHJldHVybiBwbGF0
Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKG9wdGlvbnMpOworICAgIHJldHVy
biBUaGVtZUFkd2FpdGE6OmZvY3VzQ29sb3IoKTsKIH0KIAotU3RyaW5nIFJlbmRlclRoZW1lV1BF
OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKK3ZvaWQgUmVuZGVyVGhlbWVBZHdhaXRhOjpwbGF0
Zm9ybUNvbG9yc0RpZENoYW5nZSgpCit7CisgICAgc3RhdGljX2Nhc3Q8VGhlbWVBZHdhaXRhJj4o
VGhlbWU6OnNpbmdsZXRvbigpKS5wbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOworICAgIFJlbmRl
clRoZW1lOjpwbGF0Zm9ybUNvbG9yc0RpZENoYW5nZSgpOworfQorCitTdHJpbmcgUmVuZGVyVGhl
bWVBZHdhaXRhOjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKIHsKICAgICByZXR1cm4gU3RyaW5n
KHRoZW1lQWR3YWl0YVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZUFkd2FpdGFVc2Vy
QWdlbnRTdHlsZVNoZWV0KSk7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCi1TdHJpbmcgUmVuZGVy
VGhlbWVXUEU6OmV4dHJhTWVkaWFDb250cm9sc1N0eWxlU2hlZXQoKQorU3RyaW5nIFJlbmRlclRo
ZW1lQWR3YWl0YTo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpCiB7CiAgICAgcmV0dXJu
IFN0cmluZyhtZWRpYUNvbnRyb2xzQWR3YWl0YVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZiht
ZWRpYUNvbnRyb2xzQWR3YWl0YVVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KIAotU3RyaW5nIFJl
bmRlclRoZW1lV1BFOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKK1N0cmluZyBSZW5kZXJUaGVtZUFk
d2FpdGE6Om1lZGlhQ29udHJvbHNTY3JpcHQoKQogewogICAgIFN0cmluZ0J1aWxkZXIgc2NyaXB0
QnVpbGRlcjsKICAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZENoYXJhY3RlcnMobWVkaWFDb250cm9s
c0xvY2FsaXplZFN0cmluZ3NKYXZhU2NyaXB0LCBzaXplb2YobWVkaWFDb250cm9sc0xvY2FsaXpl
ZFN0cmluZ3NKYXZhU2NyaXB0KSk7CkBAIC0xNzYsNyArMTgzLDcgQEAgU3RyaW5nIFJlbmRlclRo
ZW1lV1BFOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKIH0KICNlbmRpZgogCi1ib29sIFJlbmRlclRo
ZW1lV1BFOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wg
UmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIHsKICAgICBhdXRvJiBncmFwaGljc0NvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgp
OwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRl
eHQpOwpAQCAtMjA5LDIwICsyMTYsMzcgQEAgYm9vbCBSZW5kZXJUaGVtZVdQRTo6cGFpbnRUZXh0
RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW4KICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LnNldEZpbGxDb2xvcih0ZXh0RmllbGRCYWNrZ3JvdW5kQ29sb3Ip
OwogICAgIGdyYXBoaWNzQ29udGV4dC5maWxsUGF0aChwYXRoKTsKIAorI2lmIEVOQUJMRShEQVRB
TElTVF9FTEVNRU5UKQorICAgIGlmIChpczxIVE1MSW5wdXRFbGVtZW50PihyZW5kZXJPYmplY3Qu
Z2VuZXJhdGluZ05vZGUoKSkgJiYgZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKihyZW5kZXJP
YmplY3QuZ2VuZXJhdGluZ05vZGUoKSkpLmxpc3QoKSkgeworICAgICAgICBGbG9hdFJlY3QgYXJy
b3dSZWN0ID0gcmVjdDsKKyAgICAgICAgaWYgKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlv
bigpID09IFRleHREaXJlY3Rpb246OkxUUikKKyAgICAgICAgICAgIGFycm93UmVjdC5tb3ZlKGFy
cm93UmVjdC53aWR0aCgpIC0gKG1lbnVMaXN0QnV0dG9uQXJyb3dTaXplICsgdGV4dEZpZWxkQm9y
ZGVyU2l6ZSAqIDIpLCAoYXJyb3dSZWN0LmhlaWdodCgpIC8gMi4pIC0gKG1lbnVMaXN0QnV0dG9u
QXJyb3dTaXplIC8gMi4pKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmllbGRSZWN0Lm1v
dmUodGV4dEZpZWxkQm9yZGVyU2l6ZSAqIDIsIChhcnJvd1JlY3QuaGVpZ2h0KCkgLyAyLikgLSAo
bWVudUxpc3RCdXR0b25BcnJvd1NpemUgLyAyLikpOworICAgICAgICBhcnJvd1JlY3Quc2V0V2lk
dGgobWVudUxpc3RCdXR0b25BcnJvd1NpemUpOworICAgICAgICBhcnJvd1JlY3Quc2V0SGVpZ2h0
KG1lbnVMaXN0QnV0dG9uQXJyb3dTaXplKTsKKyAgICAgICAgeworICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBhcnJvd1N0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKKyAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoYXJyb3dSZWN0LngoKSwgYXJyb3dS
ZWN0LnkoKSk7CisgICAgICAgICAgICBUaGVtZUFkd2FpdGE6OnBhaW50QXJyb3coZ3JhcGhpY3ND
b250ZXh0LCBUaGVtZUFkd2FpdGE6OkFycm93RGlyZWN0aW9uOjpEb3duKTsKKyAgICAgICAgfQor
ICAgIH0KKyNlbmRpZgorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJlbmRlclRoZW1l
V1BFOjpwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQorYm9vbCBSZW5k
ZXJUaGVtZUFkd2FpdGE6OnBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CiB7CiAgICAgcmV0dXJuIHBhaW50VGV4dEZpZWxkKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCBy
ZWN0KTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdQRTo6cGFpbnRTZWFyY2hGaWVsZChjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQWR3YWl0YTo6cGFpbnRTZWFyY2hG
aWVsZChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgcmV0dXJuIHBhaW50VGV4dEZp
ZWxkKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KIAotTGVuZ3RoQm94IFJlbmRl
clRoZW1lV1BFOjpwb3B1cEludGVybmFsUGFkZGluZ0JveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUpIGNvbnN0CitMZW5ndGhCb3ggUmVuZGVyVGhlbWVBZHdhaXRhOjpwb3B1cEludGVybmFsUGFk
ZGluZ0JveChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgaWYgKHN0eWxl
LmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0KQogICAgICAgICByZXR1cm4geyB9OwpAQCAt
MjMzLDcgKzI1Nyw3IEBAIExlbmd0aEJveCBSZW5kZXJUaGVtZVdQRTo6cG9wdXBJbnRlcm5hbFBh
ZGRpbmdCb3goY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zCiAgICAgcmV0dXJuIHsgbWVu
dUxpc3RCdXR0b25QYWRkaW5nLCByaWdodFBhZGRpbmcsIG1lbnVMaXN0QnV0dG9uUGFkZGluZywg
bGVmdFBhZGRpbmcgfTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdQRTo6cGFpbnRNZW51TGlzdChj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK2Jvb2wgUmVuZGVyVGhlbWVBZHdhaXRhOjpwYWlu
dE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGF1dG8mIGdyYXBo
aWNzQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CkBAIC0yNTksMzYgKzI4MywzNiBA
QCBib29sIFJlbmRlclRoZW1lV1BFOjpwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludAogICAgIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBhcnJvd1N0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LnRyYW5zbGF0ZShmaWVsZFJlY3QueCgpLCBmaWVsZFJlY3QueSgpKTsKLSAg
ICAgICAgVGhlbWVXUEU6OnBhaW50QXJyb3coZ3JhcGhpY3NDb250ZXh0LCBUaGVtZVdQRTo6QXJy
b3dEaXJlY3Rpb246OkRvd24pOworICAgICAgICBUaGVtZUFkd2FpdGE6OnBhaW50QXJyb3coZ3Jh
cGhpY3NDb250ZXh0LCBUaGVtZUFkd2FpdGE6OkFycm93RGlyZWN0aW9uOjpEb3duKTsKICAgICB9
CiAKICAgICBpZiAoaXNGb2N1c2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgIFRoZW1lV1BFOjpw
YWludEZvY3VzKGdyYXBoaWNzQ29udGV4dCwgcmVjdCwgbWVudUxpc3RCdXR0b25Gb2N1c09mZnNl
dCk7CisgICAgICAgIFRoZW1lQWR3YWl0YTo6cGFpbnRGb2N1cyhncmFwaGljc0NvbnRleHQsIHJl
Y3QsIG1lbnVMaXN0QnV0dG9uRm9jdXNPZmZzZXQpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIFJlbmRlclRoZW1lV1BFOjpwYWludE1lbnVMaXN0QnV0dG9uRGVjb3JhdGlvbnMoY29u
c3QgUmVuZGVyQm94JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCitib29sIFJlbmRlclRoZW1lQWR3YWl0YTo6cGFpbnRNZW51
TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyT2JqZWN0LCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIHJl
dHVybiBwYWludE1lbnVMaXN0KHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKIH0KIAot
U2Vjb25kcyBSZW5kZXJUaGVtZVdQRTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVz
c0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0CitTZWNvbmRzIFJlbmRlclRoZW1lQWR3YWl0YTo6
YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVSYXRlOwogfQogCi1TZWNv
bmRzIFJlbmRlclRoZW1lV1BFOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzJikgY29uc3QKK1NlY29uZHMgUmVuZGVyVGhlbWVBZHdhaXRhOjphbmltYXRpb25E
dXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKIHsKICAgICByZXR1
cm4gcHJvZ3Jlc3NBbmltYXRpb25GcmFtZVJhdGUgKiBwcm9ncmVzc0FuaW1hdGlvbkZyYW1lQ291
bnQ7CiB9CiAKLUludFJlY3QgUmVuZGVyVGhlbWVXUEU6OnByb2dyZXNzQmFyUmVjdEZvckJvdW5k
cyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpIGNvbnN0CitJbnRS
ZWN0IFJlbmRlclRoZW1lQWR3YWl0YTo6cHJvZ3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmIGJvdW5kcykgY29uc3QKIHsKICAgICByZXR1cm4g
eyBib3VuZHMueCgpLCBib3VuZHMueSgpLCBib3VuZHMud2lkdGgoKSwgcHJvZ3Jlc3NCYXJTaXpl
IH07CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVXUEU6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVu
ZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50UHJvZ3Jlc3NC
YXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmICghcmVuZGVyT2JqZWN0Lmlz
UHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0zNDUsNyArMzY5LDcgQEAgYm9v
bCBSZW5kZXJUaGVtZVdQRTo6cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmIHJl
bmRlck9iamVjdCwgY29uc3QgUGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVy
VGhlbWVXUEU6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9v
bCBSZW5kZXJUaGVtZUFkd2FpdGE6OnBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewogICAgIGF1dG8mIGdyYXBoaWNzQ29udGV4dCA9IHBhaW50SW5mby5jb250ZXh0
KCk7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29u
dGV4dCk7CkBAIC00MTAsMTIgKzQzNCwxMiBAQCBib29sIFJlbmRlclRoZW1lV1BFOjpwYWludFNs
aWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYQogICAg
IGdyYXBoaWNzQ29udGV4dC5maWxsUGF0aChwYXRoKTsKIAogICAgIGlmIChpc0ZvY3VzZWQocmVu
ZGVyT2JqZWN0KSkKLSAgICAgICAgVGhlbWVXUEU6OnBhaW50Rm9jdXMoZ3JhcGhpY3NDb250ZXh0
LCBmaWVsZFJlY3QsIHNsaWRlclRyYWNrRm9jdXNPZmZzZXQpOworICAgICAgICBUaGVtZUFkd2Fp
dGE6OnBhaW50Rm9jdXMoZ3JhcGhpY3NDb250ZXh0LCBmaWVsZFJlY3QsIHNsaWRlclRyYWNrRm9j
dXNPZmZzZXQpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlclRoZW1lV1BF
OjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50
KikgY29uc3QKK3ZvaWQgUmVuZGVyVGhlbWVBZHdhaXRhOjphZGp1c3RTbGlkZXJUaHVtYlNpemUo
UmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgY29uc3QKIHsKICAgICBDb250cm9s
UGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgpOwogICAgIGlmIChwYXJ0ICE9IFNsaWRlclRo
dW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKQEAg
LTQyNSw3ICs0NDksNyBAQCB2b2lkIFJlbmRlclRoZW1lV1BFOjphZGp1c3RTbGlkZXJUaHVtYlNp
emUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KikgYwogICAgIHN0eWxlLnNldEhl
aWdodChMZW5ndGgoc2xpZGVyVGh1bWJTaXplLCBGaXhlZCkpOwogfQogCi1ib29sIFJlbmRlclRo
ZW1lV1BFOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0
LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wg
UmVuZGVyVGhlbWVBZHdhaXRhOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYg
cmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cmVjdCkKIHsKICAgICBhdXRvJiBncmFwaGljc0NvbnRleHQgPSBwYWludEluZm8uY29udGV4dCgp
OwogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRl
eHQpOwpAQCAtNDU5LDcgKzQ4Myw3IEBAIGJvb2wgUmVuZGVyVGhlbWVXUEU6OnBhaW50U2xpZGVy
VGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhCiB9CiAKICNp
ZiBFTkFCTEUoVklERU8pCi1ib29sIFJlbmRlclRoZW1lV1BFOjpwYWludE1lZGlhU2xpZGVyVHJh
Y2soY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUFkd2FpdGE6OnBh
aW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgYXV0
byBtZWRpYUVsZW1lbnQgPSBwYXJlbnRNZWRpYUVsZW1lbnQocmVuZGVyT2JqZWN0KTsKICAgICBp
ZiAoIW1lZGlhRWxlbWVudCkKQEAgLTUwNyw3ICs1MzEsNyBAQCBib29sIFJlbmRlclRoZW1lV1BF
OjpwYWludE1lZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3Qs
IGNvbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZVdQRTo6cGFpbnRN
ZWRpYVZvbHVtZVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKK2Jvb2wgUmVu
ZGVyVGhlbWVBZHdhaXRhOjpwYWludE1lZGlhVm9sdW1lU2xpZGVyVHJhY2soY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewogICAgIGF1dG8gbWVkaWFFbGVtZW50ID0gcGFyZW50TWVkaWFFbGVt
ZW50KHJlbmRlck9iamVjdCk7CiAgICAgaWYgKCFtZWRpYUVsZW1lbnQpCkBAIC01MzgsNCArNTYy
LDI3IEBAIGJvb2wgUmVuZGVyVGhlbWVXUEU6OnBhaW50TWVkaWFWb2x1bWVTbGlkZXJUcmFjayhj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFZJREVP
KQogCisjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCitJbnRTaXplIFJlbmRlclRoZW1lQWR3
YWl0YTo6c2xpZGVyVGlja1NpemUoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRv
IHNldCB0aGlzIHRvIHRoZSBzaXplIG9mIG9uZSB0aWNrIG1hcmsuCisgICAgcmV0dXJuIEludFNp
emUoMCwgMCk7Cit9CisKK2ludCBSZW5kZXJUaGVtZUFkd2FpdGE6OnNsaWRlclRpY2tPZmZzZXRG
cm9tVHJhY2tDZW50ZXIoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIHNldCB0
aGlzIHRvIHRoZSBwb3NpdGlvbiBvZiB0aGUgdGljayBtYXJrcy4KKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBSZW5kZXJUaGVtZUFkd2FpdGE6OmFkanVzdExpc3RCdXR0b25TdHlsZShSZW5kZXJT
dHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25zdAoreworICAgIC8vIEFkZCBhIG1hcmdp
biB0byBwbGFjZSB0aGUgYnV0dG9uIGF0IGVuZCBvZiB0aGUgaW5wdXQgZmllbGQuCisgICAgaWYg
KHN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgc3R5bGUuc2V0TWFyZ2lu
UmlnaHQoTGVuZ3RoKC0yLCBGaXhlZCkpOworICAgIGVsc2UKKyAgICAgICAgc3R5bGUuc2V0TWFy
Z2luTGVmdChMZW5ndGgoLTIsIEZpeGVkKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKERBVEFMSVNU
X0VMRU1FTlQpCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQWR3YWl0YS5oCnNpbWlsYXJpdHkgaW5kZXggNjglCnJlbmFtZSBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9SZW5kZXJUaGVtZVdQRS5oCnJlbmFtZSB0
byBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVBZHdhaXRhLmgKaW5kZXggMjk5
OGZmYjA5YjMuLmUyMWNjMjc1MTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93cGUvUmVuZGVyVGhlbWVXUEUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVBZHdhaXRhLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgSWdhbGlhIFMuTC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNjAgKzI5LDYyIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyVGhlbWVXUEUgZmluYWwgOiBwdWJsaWMgUmVuZGVy
VGhlbWUgeworY2xhc3MgUmVuZGVyVGhlbWVBZHdhaXRhIDogcHVibGljIFJlbmRlclRoZW1lIHsK
IHB1YmxpYzoKLSAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8UmVuZGVyVGhlbWVXUEU+OworICAg
IHZpcnR1YWwgflJlbmRlclRoZW1lQWR3YWl0YSgpID0gZGVmYXVsdDsKIAotICAgIFN0cmluZyBl
eHRyYURlZmF1bHRTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIFN0cmluZyBl
eHRyYURlZmF1bHRTdHlsZVNoZWV0KCkgZmluYWw7CiAjaWYgRU5BQkxFKFZJREVPKQotICAgIFN0
cmluZyBleHRyYU1lZGlhQ29udHJvbHNTdHlsZVNoZWV0KCkgb3ZlcnJpZGU7Ci0gICAgU3RyaW5n
IG1lZGlhQ29udHJvbHNTY3JpcHQoKSBvdmVycmlkZTsKKyAgICBTdHJpbmcgZXh0cmFNZWRpYUNv
bnRyb2xzU3R5bGVTaGVldCgpIGZpbmFsOworICAgIFN0cmluZyBtZWRpYUNvbnRyb2xzU2NyaXB0
KCkgZmluYWw7CiAjZW5kaWYKIAotcHJpdmF0ZToKLSAgICBSZW5kZXJUaGVtZVdQRSgpID0gZGVm
YXVsdDsKLSAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZVdQRSgpID0gZGVmYXVsdDsKLQotICAgIGJv
b2wgc3VwcG9ydHNIb3Zlcihjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLSAgICBib29sIHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxl
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNj
cmlwdGlvbihDU1NWYWx1ZUlELCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJikgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSAgICBDb2xvciBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKE9wdGlvblNldDxTdHlsZUNv
bG9yOjpPcHRpb25zPikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBDb2xvciBwbGF0Zm9ybUFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4p
IGNvbnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25CYWNr
Z3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCBvdmVycmlk
ZTsKLSAgICBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRp
b25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBs
YXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29s
b3I6Ok9wdGlvbnM+KSBjb25zdCBvdmVycmlkZTsKLQotICAgIENvbG9yIHBsYXRmb3JtQWN0aXZl
TGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4pIGNvbnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3JtQWN0aXZlTGlzdEJveFNl
bGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNv
bnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCBvdmVycmlkZTsK
LQotICAgIGJvb2wgcGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBwYWludFRleHRB
cmVhKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmpl
Y3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICBi
b29sIHBvcHNNZW51QnlTcGFjZU9yUmV0dXJuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQotICAgIExlbmd0aEJveCBwb3B1cEludGVybmFsUGFkZGluZ0JveChjb25zdCBSZW5kZXJT
dHlsZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRNZW51TGlzdChjb25zdCBSZW5k
ZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsK
LSAgICBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5kZXJCb3gm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIFNl
Y29uZHMgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVz
cyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIFNlY29uZHMgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9n
cmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwotICAgIEludFJlY3QgcHJv
Z3Jlc3NCYXJSZWN0Rm9yQm91bmRzKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IEludFJlY3Qm
KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotCi0g
ICAgYm9vbCBwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICB2b2lkIGFkanVzdFNsaWRlclRo
dW1iU2l6ZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBib29sIHBhaW50U2xpZGVyVGh1bWIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJ
bmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIGJvb2wgc3VwcG9ydHNIb3Zlcihj
b25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29s
IHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBzaG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgSFRNTElucHV0RWxlbWVudCYp
IGNvbnN0IGZpbmFsOworCisgICAgdm9pZCB1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRp
b24oQ1NTVmFsdWVJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlIHsg
fTsKKworICAgIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9w
dGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7CisgICAgQ29sb3IgcGxh
dGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xv
cjo6T3B0aW9ucz4pIGNvbnN0IGZpbmFsOworICAgIENvbG9yIHBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Qg
ZmluYWw7CisgICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IGZpbmFsOworICAgIENvbG9y
IHBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8
U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IGZpbmFsOworICAgIENvbG9yIHBsYXRmb3JtQWN0
aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6
T3B0aW9ucz4pIGNvbnN0IGZpbmFsOworICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikg
Y29uc3QgZmluYWw7CisgICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCBmaW5h
bDsKKyAgICBDb2xvciBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9y
OjpPcHRpb25zPikgY29uc3QgZmluYWw7CisgICAgdm9pZCBwbGF0Zm9ybUNvbG9yc0RpZENoYW5n
ZSgpIGZpbmFsOworCisgICAgYm9vbCBwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBmaW5hbDsKKyAgICBib29sIHBh
aW50VGV4dEFyZWEoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
RmxvYXRSZWN0JikgZmluYWw7CisgICAgYm9vbCBwYWludFNlYXJjaEZpZWxkKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBmaW5hbDsKKworICAg
IGJvb2wgcG9wc01lbnVCeVNwYWNlT3JSZXR1cm4oKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9CisgICAgTGVuZ3RoQm94IHBvcHVwSW50ZXJuYWxQYWRkaW5nQm94KGNvbnN0IFJlbmRlclN0
eWxlJikgY29uc3QgZmluYWw7CisgICAgYm9vbCBwYWludE1lbnVMaXN0KGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworICAgIGJv
b2wgcGFpbnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlckJveCYsIGNvbnN0
IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpIGZpbmFsOworCisgICAgU2Vjb25kcyBhbmlt
YXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3Qg
ZmluYWw7CisgICAgU2Vjb25kcyBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRl
clByb2dyZXNzJikgY29uc3QgZmluYWw7CisgICAgSW50UmVjdCBwcm9ncmVzc0JhclJlY3RGb3JC
b3VuZHMoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgSW50UmVjdCYpIGNvbnN0IGZpbmFsOwor
ICAgIGJvb2wgcGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgZmluYWw7CisKKyAgICBib29sIHBhaW50U2xpZGVyVHJh
Y2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYp
IGZpbmFsOworICAgIHZvaWQgYWRqdXN0U2xpZGVyVGh1bWJTaXplKFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCopIGNvbnN0IGZpbmFsOworICAgIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JikgZmluYWw7
CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwotICAgIGJvb2wgcGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNrKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICBi
b29sIHBhaW50TWVkaWFTbGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JikgZmluYWw7CisgICAgYm9vbCBwYWludE1lZGlhVm9sdW1l
U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3Qg
SW50UmVjdCYpIGZpbmFsOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkK
KyAgICBJbnRTaXplIHNsaWRlclRpY2tTaXplKCkgY29uc3QgZmluYWw7CisgICAgaW50IHNsaWRl
clRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGFkanVz
dExpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBmaW5h
bDsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXggMWFiYTM1YmNkOGQuLmQ3M2FmNmM2
N2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKQEAg
LTEsOSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4KLSAqIENv
cHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0
IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgS2VubmV0aCBS
b2hkZSBDaHJpc3RpYW5zZW4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI2
LDM4ICsyMiwxMSBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lR3RrLmgiCiAKICNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiRmlsZUxpc3QuaCIKLSNpbmNsdWRlICJGbG9h
dFJvdW5kZWRSZWN0LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAi
R1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIkdVbmlxdWVQdHJHdGsuaCIKLSNpbmNsdWRlICJHcmFk
aWVudC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAiTG9j
YWxpemVkU3RyaW5ncy5oIgotI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCi0jaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhaW50SW5mby5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyUHJvZ3Jlc3MuaCIKLSNpbmNsdWRlICJSZW5kZXJU
aGVtZVdpZGdldC5oIgotI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lR3RrLmgiCi0jaW5jbHVkZSAi
U3RyaW5nVHJ1bmNhdG9yLmgiCi0jaW5jbHVkZSAiVGltZVJhbmdlcy5oIgotI2luY2x1ZGUgIlVz
ZXJBZ2VudFNjcmlwdHMuaCIKLSNpbmNsdWRlICJVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIgotI2lu
Y2x1ZGUgPGNtYXRoPgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxnbGliLmg+Cisj
aW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVk
ZSA8d3RmL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNjcsMTkgKzM2LDYgQEAgUmVuZGVyVGhlbWUmIFJlbmRlclRoZW1lOjpzaW5n
bGV0b24oKQogICAgIHJldHVybiB0aGVtZTsKIH0KIAotc3RhdGljIGRvdWJsZSBnZXRTY3JlZW5E
UEkoKQotewotICAgIC8vIEZJWE1FOiBSZWFsbHkgdGhpcyBzaG91bGQgYmUgdGhlIHdpZGdldCdz
IHNjcmVlbi4KLSAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGdka19zY3JlZW5fZ2V0X2RlZmF1bHQo
KTsKLSAgICBpZiAoIXNjcmVlbikKLSAgICAgICAgcmV0dXJuIDk2OyAvLyBEZWZhdWx0IHRvIDk2
IERQSS4KLQotICAgIGZsb2F0IGRwaSA9IGdka19zY3JlZW5fZ2V0X3Jlc29sdXRpb24oc2NyZWVu
KTsKLSAgICBpZiAoZHBpIDw9IDApCi0gICAgICAgIHJldHVybiA5NjsKLSAgICByZXR1cm4gZHBp
OwotfQotCiB2b2lkIFJlbmRlclRoZW1lR3RrOjp1cGRhdGVDYWNoZWRTeXN0ZW1Gb250RGVzY3Jp
cHRpb24oQ1NTVmFsdWVJRCwgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
KSBjb25zdAogewogICAgIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRf
ZGVmYXVsdCgpOwpAQCAtMTAxLDcgKzU3LDcgQEAgdm9pZCBSZW5kZXJUaGVtZUd0azo6dXBkYXRl
Q2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZvbnRDYXNjYWRlRGUKICAg
ICBpbnQgc2l6ZSA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZ2V0X3NpemUocGFuZ29EZXNjcmlw
dGlvbikgLyBQQU5HT19TQ0FMRTsKICAgICAvLyBJZiB0aGUgc2l6ZSBvZiB0aGUgZm9udCBpcyBp
biBwb2ludHMsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMuCiAgICAgaWYgKCFwYW5n
b19mb250X2Rlc2NyaXB0aW9uX2dldF9zaXplX2lzX2Fic29sdXRlKHBhbmdvRGVzY3JpcHRpb24p
KQotICAgICAgICBzaXplID0gc2l6ZSAqIChnZXRTY3JlZW5EUEkoKSAvIDcyLjApOworICAgICAg
ICBzaXplID0gc2l6ZSAqIChzY3JlZW5EUEkoKSAvIDcyLjApOwogCiAgICAgZm9udERlc2NyaXB0
aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJz
b2x1dGVTaXplKHRydWUpOwpAQCAtMTEwLDEwODUgKzY2LDEyIEBAIHZvaWQgUmVuZGVyVGhlbWVH
dGs6OnVwZGF0ZUNhY2hlZFN5c3RlbUZvbnREZXNjcmlwdGlvbihDU1NWYWx1ZUlELCBGb250Q2Fz
Y2FkZURlCiAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKHBhbmdvRGVzY3JpcHRpb24p
OwogfQogCi0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi1JbnRTaXplIFJlbmRlclRoZW1l
R3RrOjpzbGlkZXJUaWNrU2l6ZSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFdlIG5lZWQgdG8g
c2V0IHRoaXMgdG8gdGhlIHNpemUgb2Ygb25lIHRpY2sgbWFyay4KLSAgICByZXR1cm4gSW50U2l6
ZSgwLCAwKTsKLX0KLQotaW50IFJlbmRlclRoZW1lR3RrOjpzbGlkZXJUaWNrT2Zmc2V0RnJvbVRy
YWNrQ2VudGVyKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBzZXQgdGhpcyB0
byB0aGUgcG9zaXRpb24gb2YgdGhlIHRpY2sgbWFya3MuCi0gICAgcmV0dXJuIDA7Ci19Ci0jZW5k
aWYKLQotZW51bSBSZW5kZXJUaGVtZVBhcnQgewotICAgIEVudHJ5LAotICAgIEVudHJ5U2VsZWN0
aW9uLAotICAgIEVudHJ5SWNvbkxlZnQsCi0gICAgRW50cnlJY29uUmlnaHQsCi0gICAgQnV0dG9u
LAotICAgIENoZWNrQnV0dG9uLAotICAgIFJhZGlvQnV0dG9uLAotICAgIENvbWJvQm94LAotICAg
IENvbWJvQm94QnV0dG9uLAotICAgIENvbWJvQm94QXJyb3csCi0gICAgU2NhbGUsCi0gICAgU2Nh
bGVUcm91Z2gsCi0gICAgU2NhbGVTbGlkZXIsCi0gICAgUHJvZ3Jlc3NCYXIsCi0gICAgUHJvZ3Jl
c3NCYXJUcm91Z2gsCi0gICAgUHJvZ3Jlc3NCYXJQcm9ncmVzcywKLSAgICBMaXN0Qm94LAotICAg
IFNwaW5CdXR0b24sCi0gICAgU3BpbkJ1dHRvblVwQnV0dG9uLAotICAgIFNwaW5CdXR0b25Eb3du
QnV0dG9uLAotI2lmIEVOQUJMRShWSURFTykKLSAgICBNZWRpYUJ1dHRvbiwKLSNlbmRpZgotICAg
IFdpbmRvdywKLX07Ci0KLSNpZiBFTkFCTEUoVklERU8pCi1zdGF0aWMgYm9vbCBub2RlSGFzUHNl
dWRvKE5vZGUmIG5vZGUsIGNvbnN0IGNoYXIqIHBzZXVkbykKLXsKLSAgICByZXR1cm4gaXM8RWxl
bWVudD4obm9kZSkgJiYgZG93bmNhc3Q8RWxlbWVudD4obm9kZSkucHNldWRvKCkgPT0gcHNldWRv
OwotfQotCi1zdGF0aWMgYm9vbCBub2RlSGFzQ2xhc3MoTm9kZSogbm9kZSwgY29uc3QgY2hhciog
Y2xhc3NOYW1lKQotewotICAgIGlmICghaXM8RWxlbWVudD4oKm5vZGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBFbGVtZW50JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5v
ZGUpOwotCi0gICAgaWYgKCFlbGVtZW50Lmhhc0NsYXNzKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiBlbGVtZW50LmNsYXNzTmFtZXMoKS5jb250YWlucyhjbGFzc05hbWUp
OwotfQotI2VuZGlmIC8vIEVOQUJMRShWSURFTykKLQotUmVuZGVyVGhlbWVHdGs6On5SZW5kZXJU
aGVtZUd0aygpID0gZGVmYXVsdDsKLQotc3RhdGljIGJvb2wgc3VwcG9ydHNGb2N1cyhDb250cm9s
UGFydCBhcHBlYXJhbmNlKQotewotICAgIHN3aXRjaCAoYXBwZWFyYW5jZSkgewotICAgIGNhc2Ug
UHVzaEJ1dHRvblBhcnQ6Ci0gICAgY2FzZSBCdXR0b25QYXJ0OgotICAgIGNhc2UgVGV4dEZpZWxk
UGFydDoKLSAgICBjYXNlIFRleHRBcmVhUGFydDoKLSAgICBjYXNlIFNlYXJjaEZpZWxkUGFydDoK
LSAgICBjYXNlIE1lbnVsaXN0UGFydDoKLSAgICBjYXNlIFJhZGlvUGFydDoKLSAgICBjYXNlIENo
ZWNrYm94UGFydDoKLSAgICBjYXNlIFNsaWRlckhvcml6b250YWxQYXJ0OgotICAgIGNhc2UgU2xp
ZGVyVmVydGljYWxQYXJ0OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpzdXBw
b3J0c0ZvY3VzUmluZyhjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHN1cHBvcnRzRm9jdXMoc3R5bGUuYXBwZWFyYW5jZSgpKTsKLX0KLQotYm9vbCBSZW5kZXJU
aGVtZUd0azo6Y29udHJvbFN1cHBvcnRzVGludHMoY29uc3QgUmVuZGVyT2JqZWN0JiBvKSBjb25z
dAotewotICAgIHJldHVybiBpc0VuYWJsZWQobyk7Ci19Ci0KLWludCBSZW5kZXJUaGVtZUd0azo6
YmFzZWxpbmVQb3NpdGlvbihjb25zdCBSZW5kZXJCb3gmIGJveCkgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogVGhpcyBzdHJhdGVneSBpcyBwb3NzaWJseSBpbmNvcnJlY3QgZm9yIHRoZSBHVEsrIHBv
cnQuCi0gICAgaWYgKGJveC5zdHlsZSgpLmFwcGVhcmFuY2UoKSA9PSBDaGVja2JveFBhcnQgfHwg
Ym94LnN0eWxlKCkuYXBwZWFyYW5jZSgpID09IFJhZGlvUGFydCkKLSAgICAgICAgcmV0dXJuIGJv
eC5tYXJnaW5Ub3AoKSArIGJveC5oZWlnaHQoKSAtIDI7Ci0gICAgcmV0dXJuIFJlbmRlclRoZW1l
OjpiYXNlbGluZVBvc2l0aW9uKGJveCk7Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYsIEZsb2F0UmVjdCYpCi17Ci19Ci1zdGF0
aWMgR3RrU3RhdGVGbGFncyB0aGVtZVBhcnRTdGF0ZUZsYWdzKGNvbnN0IFJlbmRlclRoZW1lR3Rr
JiB0aGVtZSwgUmVuZGVyVGhlbWVQYXJ0IHRoZW1lUGFydCwgY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJPYmplY3QpCi17Ci0gICAgdW5zaWduZWQgc3RhdGVGbGFncyA9IDA7Ci0gICAgc3dpdGNo
IChyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkgewotICAgIGNhc2UgVGV4dERpcmVj
dGlvbjo6UlRMOgotICAgICAgICBzdGF0ZUZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0RJUl9SVEw7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGV4dERpcmVjdGlvbjo6TFRSOgotICAgICAgICBz
dGF0ZUZsYWdzIHw9IEdUS19TVEFURV9GTEFHX0RJUl9MVFI7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGlmICghdGhlbWUuaXNFbmFibGVkKHJlbmRlck9iamVjdCkgfHwgKHRoZW1lUGFy
dCA9PSBFbnRyeSAmJiB0aGVtZS5pc1JlYWRPbmx5Q29udHJvbChyZW5kZXJPYmplY3QpKSkKLSAg
ICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKHRoZW1lLmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQotICAgICAgICAg
ICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICAgICAgaWYgKHRo
ZW1lLmlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQotICAgICAgICAgICAgc3RhdGVGbGFncyB8PSBH
VEtfU1RBVEVfRkxBR19GT0NVU0VEOwotICAgIH0KLQotICAgIHN3aXRjaCAodGhlbWVQYXJ0KSB7
Ci0gICAgY2FzZSBDaGVja0J1dHRvbjoKLSAgICBjYXNlIFJhZGlvQnV0dG9uOgotICAgICAgICBp
ZiAodGhlbWUuaXNDaGVja2VkKHJlbmRlck9iamVjdCkpCi0gICAgICAgICAgICBzdGF0ZUZsYWdz
IHw9IEdUS19TVEFURV9GTEFHX0NIRUNLRUQ7Ci0gICAgICAgIGlmICh0aGVtZS5pc0luZGV0ZXJt
aW5hdGUocmVuZGVyT2JqZWN0KSkKLSAgICAgICAgICAgIHN0YXRlRmxhZ3MgfD0gR1RLX1NUQVRF
X0ZMQUdfSU5DT05TSVNURU5UOwotICAgICAgICBpZiAodGhlbWUuaXNQcmVzc2VkKHJlbmRlck9i
amVjdCkpCi0gICAgICAgICAgICBzdGF0ZUZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1NFTEVDVEVE
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJ1dHRvbjoKLSAgICBjYXNlIENvbWJvQm94QnV0
dG9uOgotICAgIGNhc2UgU2NhbGVTbGlkZXI6Ci0gICAgY2FzZSBFbnRyeUljb25MZWZ0OgotICAg
IGNhc2UgRW50cnlJY29uUmlnaHQ6Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIGNhc2UgTWVkaWFC
dXR0b246Ci0jZW5kaWYKLSAgICAgICAgaWYgKHRoZW1lLmlzUHJlc3NlZChyZW5kZXJPYmplY3Qp
KQotICAgICAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxBR19BQ1RJVkU7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgU3BpbkJ1dHRvblVwQnV0dG9uOgotICAgICAgICBpZiAodGhl
bWUuaXNQcmVzc2VkKHJlbmRlck9iamVjdCkgJiYgdGhlbWUuaXNTcGluVXBCdXR0b25QYXJ0UHJl
c3NlZChyZW5kZXJPYmplY3QpKQotICAgICAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVf
RkxBR19BQ1RJVkU7Ci0gICAgICAgIGlmICh0aGVtZS5pc0hvdmVyZWQocmVuZGVyT2JqZWN0KSAm
JiAhdGhlbWUuaXNTcGluVXBCdXR0b25QYXJ0SG92ZXJlZChyZW5kZXJPYmplY3QpKQotICAgICAg
ICAgICAgc3RhdGVGbGFncyAmPSB+R1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgU3BpbkJ1dHRvbkRvd25CdXR0b246Ci0gICAgICAgIGlmICh0aGVtZS5p
c1ByZXNzZWQocmVuZGVyT2JqZWN0KSAmJiAhdGhlbWUuaXNTcGluVXBCdXR0b25QYXJ0UHJlc3Nl
ZChyZW5kZXJPYmplY3QpKQotICAgICAgICAgICAgc3RhdGVGbGFncyB8PSBHVEtfU1RBVEVfRkxB
R19BQ1RJVkU7Ci0gICAgICAgIGlmICh0aGVtZS5pc0hvdmVyZWQocmVuZGVyT2JqZWN0KSAmJiB0
aGVtZS5pc1NwaW5VcEJ1dHRvblBhcnRIb3ZlcmVkKHJlbmRlck9iamVjdCkpCi0gICAgICAgICAg
ICBzdGF0ZUZsYWdzICY9IH5HVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEd0a1N0YXRlRmxhZ3M+KHN0YXRlRmxhZ3MpOwotfQotCi12b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQq
KSBjb25zdAotewotICAgIC8vIFNvbWUgbGF5b3V0IHRlc3RzIGNoZWNrIGV4cGxpY2l0bHkgdGhh
dCBidXR0b25zIGlnbm9yZSBsaW5lLWhlaWdodC4KLSAgICBpZiAoc3R5bGUuYXBwZWFyYW5jZSgp
ID09IFB1c2hCdXR0b25QYXJ0KQotICAgICAgICBzdHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLX0KLQotc3RhdGljIHZvaWQgc2hyaW5rVG9NaW5p
bXVtU2l6ZUFuZENlbnRlclJlY3RhbmdsZShGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUm
IG1pblNpemUpCi17Ci0gICAgaWYgKHJlY3Qud2lkdGgoKSA+IG1pblNpemUud2lkdGgoKSkgewot
ICAgICAgICByZWN0LmluZmxhdGVYKC0ocmVjdC53aWR0aCgpIC0gbWluU2l6ZS53aWR0aCgpKSAv
IDIpOwotICAgICAgICByZWN0LnNldFdpZHRoKG1pblNpemUud2lkdGgoKSk7IC8vIEluIGNhc2Ug
cmVjdC53aWR0aCgpIHdhcyBlcXVhbCB0byBtaW5TaXplLndpZHRoKCkgKyAxLgotICAgIH0KLQot
ICAgIGlmIChyZWN0LmhlaWdodCgpID4gbWluU2l6ZS5oZWlnaHQoKSkgewotICAgICAgICByZWN0
LmluZmxhdGVZKC0ocmVjdC5oZWlnaHQoKSAtIG1pblNpemUuaGVpZ2h0KCkpIC8gMik7Ci0gICAg
ICAgIHJlY3Quc2V0SGVpZ2h0KG1pblNpemUuaGVpZ2h0KCkpOyAvLyBJbiBjYXNlIHJlY3QuaGVp
Z2h0KCkgd2FzIGVxdWFsIHRvIG1pblNpemUuaGVpZ2h0KCkgKyAxLgotICAgIH0KLX0KLQotc3Rh
dGljIHZvaWQgc2V0VG9nZ2xlU2l6ZShSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBSZW5kZXJT
dHlsZSYgc3R5bGUpCi17Ci0gICAgQVNTRVJUKHRoZW1lUGFydCA9PSBDaGVja0J1dHRvbiB8fCB0
aGVtZVBhcnQgPT0gUmFkaW9CdXR0b24pOwotCi0gICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQg
YXJlIGJvdGggc3BlY2lmaWVkLCBzbyB3ZSBzaG91bGRuJ3QgY2hhbmdlIHRoZW0uCi0gICAgaWYg
KCFzdHlsZS53aWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkgJiYgIXN0eWxlLmhlaWdodCgpLmlz
QXV0bygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvJiB0b2dnbGVXaWRnZXQgPSBzdGF0
aWNfY2FzdDxSZW5kZXJUaGVtZVRvZ2dsZUJ1dHRvbiY+KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRP
ckNyZWF0ZSh0aGVtZVBhcnQgPT0gQ2hlY2tCdXR0b24gPyBSZW5kZXJUaGVtZVdpZGdldDo6VHlw
ZTo6Q2hlY2tCdXR0b24gOiBSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6UmFkaW9CdXR0b24pKTsK
LSAgICB0b2dnbGVXaWRnZXQuYnV0dG9uKCkuc2V0U3RhdGUoR1RLX1NUQVRFX0ZMQUdfTk9STUFM
KTsKLSAgICB0b2dnbGVXaWRnZXQudG9nZ2xlKCkuc2V0U3RhdGUoR1RLX1NUQVRFX0ZMQUdfTk9S
TUFMKTsKLSAgICBJbnRTaXplIHByZWZlcnJlZFNpemUgPSB0b2dnbGVXaWRnZXQuYnV0dG9uKCku
cHJlZmVycmVkU2l6ZSgpOwotICAgIHByZWZlcnJlZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFu
ZGVkVG8odG9nZ2xlV2lkZ2V0LnRvZ2dsZSgpLnByZWZlcnJlZFNpemUoKSk7Ci0KLSAgICBpZiAo
c3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpKQotICAgICAgICBzdHlsZS5zZXRXaWR0
aChMZW5ndGgocHJlZmVycmVkU2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotCi0gICAgaWYgKHN0eWxl
LmhlaWdodCgpLmlzQXV0bygpKQotICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHByZWZl
cnJlZFNpemUuaGVpZ2h0KCksIEZpeGVkKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhaW50VG9nZ2xl
KGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgUmVuZGVyVGhlbWVQYXJ0IHRoZW1lUGFydCwg
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiBmdWxsUmVjdCkKLXsKLSAgICBBU1NFUlQodGhlbWVQYXJ0ID09
IENoZWNrQnV0dG9uIHx8IHRoZW1lUGFydCA9PSBSYWRpb0J1dHRvbik7Ci0KLSAgICBhdXRvJiB0
b2dnbGVXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVRvZ2dsZUJ1dHRvbiY+KFJlbmRl
clRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZSh0aGVtZVBhcnQgPT0gQ2hlY2tCdXR0b24gPyBSZW5k
ZXJUaGVtZVdpZGdldDo6VHlwZTo6Q2hlY2tCdXR0b24gOiBSZW5kZXJUaGVtZVdpZGdldDo6VHlw
ZTo6UmFkaW9CdXR0b24pKTsKLSAgICBhdXRvIHRvZ2dsZVN0YXRlID0gdGhlbWVQYXJ0U3RhdGVG
bGFncygqdGhlbWUsIHRoZW1lUGFydCwgcmVuZGVyT2JqZWN0KTsKLSAgICB0b2dnbGVXaWRnZXQu
YnV0dG9uKCkuc2V0U3RhdGUodG9nZ2xlU3RhdGUpOwotICAgIHRvZ2dsZVdpZGdldC50b2dnbGUo
KS5zZXRTdGF0ZSh0b2dnbGVTdGF0ZSk7Ci0KLSAgICBGbG9hdFJlY3QgcmVjdCA9IGZ1bGxSZWN0
OwotICAgIC8vIFNvbWUgdGhlbWVzIGRvIG5vdCByZW5kZXIgbGFyZ2UgdG9nZ2xlIGJ1dHRvbnMg
cHJvcGVybHksIHNvIHdlIHNpbXBseQotICAgIC8vIHNocmluayB0aGUgcmVjdGFuZ2xlIGJhY2sg
ZG93biB0byB0aGUgZGVmYXVsdCBzaXplIGFuZCB0aGVuIGNlbnRlciBpdAotICAgIC8vIGluIHRo
ZSBmdWxsIHRvZ2dsZSBidXR0b24gcmVnaW9uLiBUaGUgcmVhc29uIGZvciBub3Qgc2ltcGx5IGZv
cmNpbmcgdG9nZ2xlCi0gICAgLy8gYnV0dG9ucyB0byBiZSBhIHNtYWxsZXIgc2l6ZSBpcyB0aGF0
IHdlIGRvbid0IHdhbnQgdG8gYnJlYWsgc2l0ZSBsYXlvdXRzLgotICAgIEludFNpemUgcHJlZmVy
cmVkU2l6ZSA9IHRvZ2dsZVdpZGdldC5idXR0b24oKS5wcmVmZXJyZWRTaXplKCk7Ci0gICAgcHJl
ZmVycmVkU2l6ZSA9IHByZWZlcnJlZFNpemUuZXhwYW5kZWRUbyh0b2dnbGVXaWRnZXQudG9nZ2xl
KCkucHJlZmVycmVkU2l6ZSgpKTsKLSAgICBzaHJpbmtUb01pbmltdW1TaXplQW5kQ2VudGVyUmVj
dGFuZ2xlKHJlY3QsIHByZWZlcnJlZFNpemUpOwotICAgIHRvZ2dsZVdpZGdldC5idXR0b24oKS5y
ZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7
Ci0gICAgdG9nZ2xlV2lkZ2V0LnRvZ2dsZSgpLnJlbmRlcihwYWludEluZm8uY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0KTsKLQotICAgIGlmICh0aGVtZS0+aXNGb2N1c2Vk
KHJlbmRlck9iamVjdCkpCi0gICAgICAgIHRvZ2dsZVdpZGdldC5idXR0b24oKS5yZW5kZXJGb2N1
cyhwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0KTsKLX0K
LQotdm9pZCBSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKLXsKLSAgICBzZXRUb2dnbGVTaXplKENoZWNrQnV0dG9uLCBzdHlsZSk7Ci19Ci0K
LWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0JiBy
ZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQotewotICAgIHBhaW50VG9nZ2xlKHRoaXMsIENoZWNrQnV0dG9uLCByZW5kZXJPYmplY3Qs
IHBhaW50SW5mbywgcmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRo
ZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAotewotICAgIHNl
dFRvZ2dsZVNpemUoUmFkaW9CdXR0b24sIHN0eWxlKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRSYWRpbyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcGFpbnRUb2dn
bGUodGhpcywgUmFkaW9CdXR0b24sIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50QnV0dG9uKGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBidXR0b25XaWRnZXQgPSBzdGF0
aWNfY2FzdDxSZW5kZXJUaGVtZUJ1dHRvbiY+KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0
ZShpc0RlZmF1bHQocmVuZGVyT2JqZWN0KSA/IFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpCdXR0
b25EZWZhdWx0IDogUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OkJ1dHRvbikpOwotICAgIGJ1dHRv
bldpZGdldC5idXR0b24oKS5zZXRTdGF0ZSh0aGVtZVBhcnRTdGF0ZUZsYWdzKCp0aGlzLCBCdXR0
b24sIHJlbmRlck9iamVjdCkpOwotICAgIGJ1dHRvbldpZGdldC5idXR0b24oKS5yZW5kZXIocGFp
bnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci0gICAgaWYg
KGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBidXR0b25XaWRnZXQuYnV0dG9uKCku
cmVuZGVyRm9jdXMocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwg
cmVjdCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgQ29sb3IgbWVudUxpc3RDb2xv
cihjb25zdCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGF1dG8mIGNvbWJvV2lkZ2V0ID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGhlbWVDb21ib0JveCY+KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNy
ZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6Q29tYm9Cb3gpKTsKLSAgICBHdGtTdGF0ZUZs
YWdzIHN0YXRlID0gZWxlbWVudC0+aXNEaXNhYmxlZEZvcm1Db250cm9sKCkgPyBHVEtfU1RBVEVf
RkxBR19JTlNFTlNJVElWRSA6IEdUS19TVEFURV9GTEFHX05PUk1BTDsKLSAgICBjb21ib1dpZGdl
dC5jb21ib0JveCgpLnNldFN0YXRlKHN0YXRlKTsKLSAgICBjb21ib1dpZGdldC5idXR0b24oKS5z
ZXRTdGF0ZShzdGF0ZSk7Ci0gICAgcmV0dXJuIGNvbWJvV2lkZ2V0LmJ1dHRvbigpLmNvbG9yKCk7
Ci19Ci0KLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KSBjb25zdAotewotICAgIC8vIFRoZSB0
ZXN0cyBjaGVjayBleHBsaWNpdGx5IHRoYXQgc2VsZWN0IG1lbnUgYnV0dG9ucyBpZ25vcmUgbGlu
ZSBoZWlnaHQuCi0gICAgc3R5bGUuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExp
bmVIZWlnaHQoKSk7Ci0KLSAgICAvLyBXZSBjYW5ub3QgZ2l2ZSBhIHByb3BlciByZW5kZXJpbmcg
d2hlbiBib3JkZXIgcmFkaXVzIGlzIGFjdGl2ZSwgdW5mb3J0dW5hdGVseS4KLSAgICBzdHlsZS5y
ZXNldEJvcmRlclJhZGl1cygpOwotCi0gICAgaWYgKGVsZW1lbnQpCi0gICAgICAgIHN0eWxlLnNl
dENvbG9yKG1lbnVMaXN0Q29sb3IoZWxlbWVudCkpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3Rr
OjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxl
bWVudCogZSkgY29uc3QKLXsKLSAgICBhZGp1c3RNZW51TGlzdFN0eWxlKHN0eWxlLCBlKTsKLX0K
LQotLyoKLSAqIEd0a0NvbWJvQm94IGdhZGdldHMgdHJlZQotICoKLSAqIGNvbWJvYm94Ci0gKiDi
lJzilIDilIAgYm94LmxpbmtlZAotICog4pSCICAg4pWw4pSA4pSAIGJ1dHRvbi5jb21ibwotICog
4pSCICAgICAgIOKVsOKUgOKUgCBib3gKLSAqIOKUgiAgICAgICAgICAg4pSc4pSA4pSAIGNlbGx2
aWV3Ci0gKiDilIIgICAgICAgICAgIOKVsOKUgOKUgCBhcnJvdwotICog4pWw4pSA4pSAIHdpbmRv
dy5wb3B1cAotICovCi1MZW5ndGhCb3ggUmVuZGVyVGhlbWVHdGs6OnBvcHVwSW50ZXJuYWxQYWRk
aW5nQm94KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKLXsKLSAgICBpZiAoc3R5bGUu
YXBwZWFyYW5jZSgpID09IE5vQ29udHJvbFBhcnQpCi0gICAgICAgIHJldHVybiBMZW5ndGhCb3go
MCk7Ci0KLSAgICBhdXRvJiBjb21ib1dpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lQ29t
Ym9Cb3gmPihSZW5kZXJUaGVtZVdpZGdldDo6Z2V0T3JDcmVhdGUoUmVuZGVyVGhlbWVXaWRnZXQ6
OlR5cGU6OkNvbWJvQm94KSk7Ci0gICAgY29tYm9XaWRnZXQuY29tYm9Cb3goKS5zZXRTdGF0ZShH
VEtfU1RBVEVfRkxBR19OT1JNQUwpOwotICAgIGNvbWJvV2lkZ2V0LmJ1dHRvbigpLnNldFN0YXRl
KEdUS19TVEFURV9GTEFHX05PUk1BTCk7Ci0gICAgY29tYm9XaWRnZXQuYXJyb3coKS5zZXRTdGF0
ZShHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwotICAgIEd0a0JvcmRlciBjb21ib0NvbnRlbnRzQm94
ID0gY29tYm9XaWRnZXQuY29tYm9Cb3goKS5jb250ZW50c0JveCgpOwotICAgIEd0a0JvcmRlciBi
b3hDb250ZW50c0JveCA9IGNvbWJvV2lkZ2V0LmJveCgpLmNvbnRlbnRzQm94KCk7Ci0gICAgR3Rr
Qm9yZGVyIGJ1dHRvbkNvbnRlbnRzQm94ID0gY29tYm9XaWRnZXQuYnV0dG9uKCkuY29udGVudHNC
b3goKTsKLSAgICBHdGtCb3JkZXIgYnV0dG9uQm94Q29udGVudHNCb3ggPSBjb21ib1dpZGdldC5i
dXR0b25Cb3goKS5jb250ZW50c0JveCgpOwotICAgIEd0a0JvcmRlciBwYWRkaW5nOwotICAgIHBh
ZGRpbmcubGVmdCA9IGNvbWJvQ29udGVudHNCb3gubGVmdCArIGJveENvbnRlbnRzQm94LmxlZnQg
KyBidXR0b25Db250ZW50c0JveC5sZWZ0ICsgYnV0dG9uQm94Q29udGVudHNCb3gubGVmdDsKLSAg
ICBwYWRkaW5nLnJpZ2h0ID0gY29tYm9Db250ZW50c0JveC5yaWdodCArIGJveENvbnRlbnRzQm94
LnJpZ2h0ICsgYnV0dG9uQ29udGVudHNCb3gucmlnaHQgKyBidXR0b25Cb3hDb250ZW50c0JveC5y
aWdodDsKLSAgICBwYWRkaW5nLnRvcCA9IGNvbWJvQ29udGVudHNCb3gudG9wICsgYm94Q29udGVu
dHNCb3gudG9wICsgYnV0dG9uQ29udGVudHNCb3gudG9wICsgYnV0dG9uQm94Q29udGVudHNCb3gu
dG9wOwotICAgIHBhZGRpbmcuYm90dG9tID0gY29tYm9Db250ZW50c0JveC5ib3R0b20gKyBib3hD
b250ZW50c0JveC5ib3R0b20gKyBidXR0b25Db250ZW50c0JveC5ib3R0b20gKyBidXR0b25Cb3hD
b250ZW50c0JveC5ib3R0b207Ci0KLSAgICBhdXRvIGFycm93U2l6ZSA9IGNvbWJvV2lkZ2V0LmFy
cm93KCkucHJlZmVycmVkU2l6ZSgpOwotICAgIHJldHVybiBMZW5ndGhCb3gocGFkZGluZy50b3As
IHBhZGRpbmcucmlnaHQgKyAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRS
ID8gYXJyb3dTaXplLndpZHRoKCkgOiAwKSwKLSAgICAgICAgcGFkZGluZy5ib3R0b20sIHBhZGRp
bmcubGVmdCArIChzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgPyBhcnJv
d1NpemUud2lkdGgoKSA6IDApKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51
TGlzdChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBw
YWludEluZm8sIGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvJiBjb21ib1dpZGdl
dCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lQ29tYm9Cb3gmPihSZW5kZXJUaGVtZVdpZGdldDo6
Z2V0T3JDcmVhdGUoUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OkNvbWJvQm94KSk7Ci0gICAgYXV0
byBjb21ib1N0YXRlID0gdGhlbWVQYXJ0U3RhdGVGbGFncygqdGhpcywgQ29tYm9Cb3hCdXR0b24s
IHJlbmRlck9iamVjdCk7Ci0gICAgY29tYm9XaWRnZXQuY29tYm9Cb3goKS5zZXRTdGF0ZShjb21i
b1N0YXRlKTsKLSAgICBjb21ib1dpZGdldC5idXR0b24oKS5zZXRTdGF0ZShjb21ib1N0YXRlKTsK
LSAgICBjb21ib1dpZGdldC5hcnJvdygpLnNldFN0YXRlKGNvbWJvU3RhdGUpOwotCi0gICAgY2Fp
cm9fdCogY3IgPSBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwot
ICAgIGNvbWJvV2lkZ2V0LmNvbWJvQm94KCkucmVuZGVyKGNyLCByZWN0KTsKLSAgICBjb21ib1dp
ZGdldC5ib3goKS5yZW5kZXIoY3IsIHJlY3QpOwotICAgIEZsb2F0UmVjdCBjb250ZW50c1JlY3Q7
Ci0gICAgY29tYm9XaWRnZXQuYnV0dG9uKCkucmVuZGVyKGNyLCByZWN0LCAmY29udGVudHNSZWN0
KTsKLSAgICBjb21ib1dpZGdldC5idXR0b25Cb3goKS5yZW5kZXIoY3IsIGNvbnRlbnRzUmVjdCk7
Ci0gICAgY29tYm9XaWRnZXQuYXJyb3coKS5yZW5kZXIoY3IsIGNvbnRlbnRzUmVjdCk7Ci0gICAg
aWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBjb21ib1dpZGdldC5idXR0b24o
KS5yZW5kZXJGb2N1cyhjciwgcmVjdCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJCb3gmIG9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBpbmZvLCBjb25zdCBGbG9hdFJlY3QmIHJl
Y3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVudUxpc3Qob2JqZWN0LCBpbmZvLCByZWN0KTsKLX0K
LQotc3RhdGljIEludFNpemUgc3BpbkJ1dHRvblNpemUoKQotewotICAgIGF1dG8mIHNwaW5CdXR0
b25XaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNwaW5CdXR0b24mPihSZW5kZXJUaGVt
ZVdpZGdldDo6Z2V0T3JDcmVhdGUoUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OlNwaW5CdXR0b24p
KTsKLSAgICBzcGluQnV0dG9uV2lkZ2V0LnNwaW5CdXR0b24oKS5zZXRTdGF0ZShHVEtfU1RBVEVf
RkxBR19OT1JNQUwpOwotICAgIHNwaW5CdXR0b25XaWRnZXQuZW50cnkoKS5zZXRTdGF0ZShHVEtf
U1RBVEVfRkxBR19OT1JNQUwpOwotICAgIHNwaW5CdXR0b25XaWRnZXQudXAoKS5zZXRTdGF0ZShH
VEtfU1RBVEVfRkxBR19OT1JNQUwpOwotICAgIHNwaW5CdXR0b25XaWRnZXQuZG93bigpLnNldFN0
YXRlKEdUS19TVEFURV9GTEFHX05PUk1BTCk7Ci0KLSAgICBJbnRTaXplIHByZWZlcnJlZFNpemUg
PSBzcGluQnV0dG9uV2lkZ2V0LnNwaW5CdXR0b24oKS5wcmVmZXJyZWRTaXplKCk7Ci0gICAgcHJl
ZmVycmVkU2l6ZSA9IHByZWZlcnJlZFNpemUuZXhwYW5kZWRUbyhzcGluQnV0dG9uV2lkZ2V0LmVu
dHJ5KCkucHJlZmVycmVkU2l6ZSgpKTsKLSAgICBJbnRTaXplIHVwUHJlZmVycmVkU2l6ZSA9IHBy
ZWZlcnJlZFNpemUuZXhwYW5kZWRUbyhzcGluQnV0dG9uV2lkZ2V0LnVwKCkucHJlZmVycmVkU2l6
ZSgpKTsKLSAgICBJbnRTaXplIGRvd25QcmVmZXJyZWRTaXplID0gcHJlZmVycmVkU2l6ZS5leHBh
bmRlZFRvKHNwaW5CdXR0b25XaWRnZXQuZG93bigpLnByZWZlcnJlZFNpemUoKSk7Ci0KLSAgICBy
ZXR1cm4gSW50U2l6ZSh1cFByZWZlcnJlZFNpemUud2lkdGgoKSArIGRvd25QcmVmZXJyZWRTaXpl
LndpZHRoKCksIHN0ZDo6bWF4KHVwUHJlZmVycmVkU2l6ZS5oZWlnaHQoKSwgZG93blByZWZlcnJl
ZFNpemUuaGVpZ2h0KCkpKTsKLX0KLQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RUZXh0
RmllbGRTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpIGNv
bnN0Ci17Ci0gICAgaWYgKCFpczxIVE1MSW5wdXRFbGVtZW50PihlbGVtZW50KSB8fCAhc2hvdWxk
SGF2ZVNwaW5CdXR0b24oZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oKmVsZW1lbnQpKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc3R5bGUuc2V0TWluSGVpZ2h0KExlbmd0aChzcGluQnV0dG9u
U2l6ZSgpLmhlaWdodCgpLCBGaXhlZCkpOwotCi0gICAgLy8gVGhlIGRlZmF1bHQgdGhlbWUgZm9y
IHRoZSBHVEsrIHBvcnQgdXNlcyB2ZXJ5IHdpZGUgc3BpbiBidXR0b25zICg2NnB4KSBjb21wYXJl
ZCB0byB3aGF0IG90aGVyCi0gICAgLy8gYnJvd3NlcnMgdXNlICh+MTMgcHgpLiBBbmQgdW5mb3J0
dW5hdGVseSwgbW9zdCBvZiB0aGUgd2ViIGRldmVsb3BlcnMgd29uJ3QgdGVzdCBob3cgdGhlaXIg
c2l0ZQotICAgIC8vIHJlbmRlcnMgb24gV2ViS2l0R1RLLiBUbyBlbnN1cmUgdGhhdCBzcGluIGJ1
dHRvbnMgZG9uJ3QgZW5kIHVwIGNvdmVyaW5nIHRoZSB2YWx1ZXMgb2YgdGhlIGlucHV0Ci0gICAg
Ly8gZmllbGQsIHdlIG92ZXJyaWRlIHRoZSB3aWR0aCBvZiB0aGUgaW5wdXQgZWxlbWVudCBhbmQg
YWx3YXlzIGluY3JlbWVudCBpdCB3aXRoIHRoZSB3aWR0aCBuZWVkZWQKLSAgICAvLyBmb3IgdGhl
IHNwaW5idXR0b24gKHdoZW4gZHJhd2luZyB0aGUgc3BpbmJ1dHRvbikuCi0gICAgaW50IG1pbmlt
dW1XaWR0aCA9IHN0eWxlLndpZHRoKCkuaW50VmFsdWUoKSArIHNwaW5CdXR0b25TaXplKCkud2lk
dGgoKTsKLSAgICBzdHlsZS5zZXRNaW5XaWR0aChMZW5ndGgobWluaW11bVdpZHRoLCBGaXhlZCkp
OwotfQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRGaWVsZChjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKLXsKLSAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4ocmVuZGVyT2Jq
ZWN0Lm5vZGUoKSkgJiYgc2hvdWxkSGF2ZVNwaW5CdXR0b24oZG93bmNhc3Q8SFRNTElucHV0RWxl
bWVudD4oKnJlbmRlck9iamVjdC5ub2RlKCkpKSkgewotICAgICAgICBhdXRvJiBzcGluQnV0dG9u
V2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVTcGluQnV0dG9uJj4oUmVuZGVyVGhlbWVX
aWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpTcGluQnV0dG9uKSk7
Ci0gICAgICAgIGF1dG8gc3BpbkJ1dHRvblN0YXRlID0gdGhlbWVQYXJ0U3RhdGVGbGFncygqdGhp
cywgRW50cnksIHJlbmRlck9iamVjdCk7Ci0gICAgICAgIHNwaW5CdXR0b25XaWRnZXQuc3BpbkJ1
dHRvbigpLnNldFN0YXRlKHNwaW5CdXR0b25TdGF0ZSk7Ci0gICAgICAgIHNwaW5CdXR0b25XaWRn
ZXQuZW50cnkoKS5zZXRTdGF0ZShzcGluQnV0dG9uU3RhdGUpOwotICAgICAgICBzcGluQnV0dG9u
V2lkZ2V0LnNwaW5CdXR0b24oKS5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci0gICAgICAgIHNwaW5CdXR0b25XaWRnZXQuZW50cnkoKS5y
ZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byYgZW50cnlXaWRnZXQgPSBzdGF0aWNfY2FzdDxS
ZW5kZXJUaGVtZUVudHJ5Jj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRo
ZW1lV2lkZ2V0OjpUeXBlOjpFbnRyeSkpOwotICAgICAgICBlbnRyeVdpZGdldC5lbnRyeSgpLnNl
dFN0YXRlKHRoZW1lUGFydFN0YXRlRmxhZ3MoKnRoaXMsIEVudHJ5LCByZW5kZXJPYmplY3QpKTsK
LSAgICAgICAgZW50cnlXaWRnZXQuZW50cnkoKS5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5w
bGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci0KLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxF
TUVOVCkKLSAgICAgICAgaWYgKGlzPEhUTUxJbnB1dEVsZW1lbnQ+KHJlbmRlck9iamVjdC5nZW5l
cmF0aW5nTm9kZSgpKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgaW5wdXQgPSBkb3duY2Fz
dDxIVE1MSW5wdXRFbGVtZW50PigqKHJlbmRlck9iamVjdC5nZW5lcmF0aW5nTm9kZSgpKSk7Ci0g
ICAgICAgICAgICBpZiAoaW5wdXQubGlzdCgpKQotICAgICAgICAgICAgICAgIHBhaW50TGlzdEJ1
dHRvbkZvcklucHV0KHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLSAgICAgICAgfQot
I2VuZGlmCi0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgYWRqdXN0
U2VhcmNoRmllbGRJY29uU3R5bGUoUmVuZGVyVGhlbWVQYXJ0IHRoZW1lUGFydCwgUmVuZGVyU3R5
bGUmIHN0eWxlKQotewotICAgIEFTU0VSVCh0aGVtZVBhcnQgPT0gRW50cnlJY29uTGVmdCB8fCB0
aGVtZVBhcnQgPT0gRW50cnlJY29uUmlnaHQpOwotICAgIGF1dG8mIHNlYXJjaEVudHJ5V2lkZ2V0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVTZWFyY2hFbnRyeSY+KFJlbmRlclRoZW1lV2lkZ2V0
OjpnZXRPckNyZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6U2VhcmNoRW50cnkpKTsKLSAg
ICBzZWFyY2hFbnRyeVdpZGdldC5lbnRyeSgpLnNldFN0YXRlKEdUS19TVEFURV9GTEFHX05PUk1B
TCk7Ci0gICAgc2VhcmNoRW50cnlXaWRnZXQubGVmdEljb24oKS5zZXRTdGF0ZShHVEtfU1RBVEVf
RkxBR19OT1JNQUwpOwotICAgIHNlYXJjaEVudHJ5V2lkZ2V0LnJpZ2h0SWNvbigpLnNldFN0YXRl
KEdUS19TVEFURV9GTEFHX05PUk1BTCk7Ci0KLSAgICAvLyBHZXQgdGhlIGljb24gc2l6ZSBiYXNl
ZCBvbiB0aGUgZm9udCBzaXplLgotICAgIGF1dG8mIGljb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJU
aGVtZUljb25HYWRnZXQmPih0aGVtZVBhcnQgPT0gRW50cnlJY29uTGVmdCA/IHNlYXJjaEVudHJ5
V2lkZ2V0LmxlZnRJY29uKCkgOiBzZWFyY2hFbnRyeVdpZGdldC5yaWdodEljb24oKSk7Ci0gICAg
aWNvbi5zZXRJY29uU2l6ZShzdHlsZS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSk7Ci0gICAgSW50
U2l6ZSBwcmVmZXJyZWRTaXplID0gaWNvbi5wcmVmZXJyZWRTaXplKCk7Ci0gICAgR3RrQm9yZGVy
IGNvbnRlbnRzQm94ID0gc2VhcmNoRW50cnlXaWRnZXQuZW50cnkoKS5jb250ZW50c0JveCgpOwot
ICAgIGlmICh0aGVtZVBhcnQgPT0gRW50cnlJY29uTGVmdCkKLSAgICAgICAgcHJlZmVycmVkU2l6
ZS5leHBhbmQoY29udGVudHNCb3gubGVmdCwgY29udGVudHNCb3gudG9wICsgY29udGVudHNCb3gu
Ym90dG9tKTsKLSAgICBlbHNlCi0gICAgICAgIHByZWZlcnJlZFNpemUuZXhwYW5kKGNvbnRlbnRz
Qm94LnJpZ2h0LCBjb250ZW50c0JveC50b3AgKyBjb250ZW50c0JveC5ib3R0b20pOwotICAgIHN0
eWxlLnNldFdpZHRoKExlbmd0aChwcmVmZXJyZWRTaXplLndpZHRoKCksIEZpeGVkKSk7Ci0gICAg
c3R5bGUuc2V0SGVpZ2h0KExlbmd0aChwcmVmZXJyZWRTaXplLmhlaWdodCgpLCBGaXhlZCkpOwot
fQotCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFRleHRBcmVhKGNvbnN0IFJlbmRlck9iamVj
dCYgbywgY29uc3QgUGFpbnRJbmZvJiBpLCBjb25zdCBGbG9hdFJlY3QmIHIpCi17Ci0gICAgcmV0
dXJuIHBhaW50VGV4dEZpZWxkKG8sIGksIHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjph
ZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IEVsZW1lbnQqIGUpIGNvbnN0Ci17Ci0gICAgYWRqdXN0U2VhcmNoRmllbGRDYW5jZWxCdXR0
b25TdHlsZShzdHlsZSwgZSk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNo
RmllbGRSZXN1bHRzQnV0dG9uKGNvbnN0IFJlbmRlckJveCYgbywgY29uc3QgUGFpbnRJbmZvJiBp
LCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludFNlYXJjaEZpZWxkUmVz
dWx0c0RlY29yYXRpb25QYXJ0KG8sIGksIHJlY3QpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3Rr
OjphZGp1c3RTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKFJlbmRlclN0eWxl
JiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgYWRqdXN0U2VhcmNoRmllbGRJ
Y29uU3R5bGUoRW50cnlJY29uTGVmdCwgc3R5bGUpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3Rr
OjphZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgYWRqdXN0U2VhcmNoRmllbGRJY29uU3R5bGUo
RW50cnlJY29uUmlnaHQsIHN0eWxlKTsKLX0KLQotc3RhdGljIGJvb2wgcGFpbnRTZWFyY2hGaWVs
ZEljb24oUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBj
b25zdCBSZW5kZXJCb3gmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKHRoZW1lUGFydCA9PSBFbnRyeUlj
b25MZWZ0IHx8IHRoZW1lUGFydCA9PSBFbnRyeUljb25SaWdodCk7Ci0gICAgYXV0byYgc2VhcmNo
RW50cnlXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNlYXJjaEVudHJ5Jj4oUmVuZGVy
VGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpTZWFyY2hF
bnRyeSkpOwotICAgIHNlYXJjaEVudHJ5V2lkZ2V0LmVudHJ5KCkuc2V0U3RhdGUodGhlbWVQYXJ0
U3RhdGVGbGFncygqdGhlbWUsIEVudHJ5LCByZW5kZXJPYmplY3QpKTsKLSAgICBhdXRvJiBpY29u
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVJY29uR2FkZ2V0Jj4odGhlbWVQYXJ0ID09IEVudHJ5
SWNvbkxlZnQgPyBzZWFyY2hFbnRyeVdpZGdldC5sZWZ0SWNvbigpIDogc2VhcmNoRW50cnlXaWRn
ZXQucmlnaHRJY29uKCkpOwotICAgIGljb24uc2V0U3RhdGUodGhlbWVQYXJ0U3RhdGVGbGFncygq
dGhlbWUsIHRoZW1lUGFydCwgcmVuZGVyT2JqZWN0KSk7Ci0gICAgaWNvbi5zZXRJY29uU2l6ZShy
ZW5kZXJPYmplY3Quc3R5bGUoKS5jb21wdXRlZEZvbnRQaXhlbFNpemUoKSk7Ci0gICAgR3RrQm9y
ZGVyIGNvbnRlbnRzQm94ID0gc2VhcmNoRW50cnlXaWRnZXQuZW50cnkoKS5jb250ZW50c0JveCgp
OwotICAgIEludFJlY3QgaWNvblJlY3QgPSByZWN0OwotICAgIGlmICh0aGVtZVBhcnQgPT0gRW50
cnlJY29uTGVmdCkgewotICAgICAgICBpY29uUmVjdC5tb3ZlKGNvbnRlbnRzQm94LmxlZnQsIGNv
bnRlbnRzQm94LnRvcCk7Ci0gICAgICAgIGljb25SZWN0LmNvbnRyYWN0KGNvbnRlbnRzQm94Lmxl
ZnQsIGNvbnRlbnRzQm94LnRvcCArIGNvbnRlbnRzQm94LmJvdHRvbSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGljb25SZWN0LmNvbnRyYWN0KGNvbnRlbnRzQm94LnJpZ2h0LCBjb250ZW50c0JveC50
b3AgKyBjb250ZW50c0JveC5ib3R0b20pOwotICAgIHJldHVybiAhaWNvbi5yZW5kZXIocGFpbnRJ
bmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgaWNvblJlY3QpOwotfQotYm9v
bCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydChj
b25zdCBSZW5kZXJCb3gmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50U2VhcmNoRmllbGRJY29u
KHRoaXMsIEVudHJ5SWNvbkxlZnQsIHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25z
dCBSZW5kZXJCb3gmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50U2VhcmNoRmllbGRJY29uKHRo
aXMsIEVudHJ5SWNvblJpZ2h0LCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7Ci19Ci0K
LSNpZiBFTkFCTEUoREFUQUxJU1RfRUxFTUVOVCkKLXZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dExpc3RCdXR0b25TdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQqKSBjb25z
dAotewotICAgIC8vIEFkZCBhIG1hcmdpbiB0byBwbGFjZSB0aGUgYnV0dG9uIGF0IGVuZCBvZiB0
aGUgaW5wdXQgZmllbGQuCi0gICAgaWYgKHN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkK
LSAgICAgICAgc3R5bGUuc2V0TWFyZ2luUmlnaHQoTGVuZ3RoKC00LCBGaXhlZCkpOwotICAgIGVs
c2UKLSAgICAgICAgc3R5bGUuc2V0TWFyZ2luTGVmdChMZW5ndGgoLTQsIEZpeGVkKSk7Ci19Ci0K
LXZvaWQgUmVuZGVyVGhlbWVHdGs6OnBhaW50TGlzdEJ1dHRvbkZvcklucHV0KGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQotewotICAgIC8vIFVzZSBhIGNvbWJvIGJveCB3aWRnZXQgdG8gcmVu
ZGVyIGl0cyBhcnJvdy4KLSAgICBhdXRvJiBjb21ib1dpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRl
clRoZW1lQ29tYm9Cb3gmPihSZW5kZXJUaGVtZVdpZGdldDo6Z2V0T3JDcmVhdGUoUmVuZGVyVGhl
bWVXaWRnZXQ6OlR5cGU6OkNvbWJvQm94KSk7Ci0gICAgY29tYm9XaWRnZXQuYXJyb3coKS5zZXRT
dGF0ZSh0aGVtZVBhcnRTdGF0ZUZsYWdzKCp0aGlzLCBDb21ib0JveEJ1dHRvbiwgcmVuZGVyT2Jq
ZWN0KSk7Ci0KLSAgICAvLyBCdXQgYSBzZWFyY2ggZW50cnkgd2lkZ2V0IHRvIGdldCB0aGUgY29u
dGVudHMgcmVjdCwgc2luY2UgdGhpcyBpcyBhIHRleHQgaW5wdXQgZmllbGQuCi0gICAgYXV0byYg
c2VhcmNoRW50cnlXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNlYXJjaEVudHJ5Jj4o
UmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpT
ZWFyY2hFbnRyeSkpOwotICAgIGF1dG8mIGljb24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUlj
b25HYWRnZXQmPihzZWFyY2hFbnRyeVdpZGdldC5yaWdodEljb24oKSk7Ci0gICAgaWNvbi5zZXRJ
Y29uU2l6ZShjb21ib1dpZGdldC5hcnJvdygpLnByZWZlcnJlZFNpemUoKS53aWR0aCgpKTsKLSAg
ICBHdGtCb3JkZXIgY29udGVudHNCb3ggPSBzZWFyY2hFbnRyeVdpZGdldC5lbnRyeSgpLmNvbnRl
bnRzQm94KCk7Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkUmVjdChyZWN0KTsKLSAgICBhZGp1c3Rl
ZFJlY3QubW92ZShjb250ZW50c0JveC5sZWZ0LCBjb250ZW50c0JveC50b3ApOwotICAgIGFkanVz
dGVkUmVjdC5jb250cmFjdChjb250ZW50c0JveC5yaWdodCArIDEsIGNvbnRlbnRzQm94LnRvcCAr
IGNvbnRlbnRzQm94LmJvdHRvbSk7Ci0gICAgY29tYm9XaWRnZXQuYXJyb3coKS5yZW5kZXIocGFp
bnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYWRqdXN0ZWRSZWN0KTsK
LX0KLSNlbmRpZgotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFN0eWxl
KFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgLy8gV2Ug
Y2Fubm90IGdpdmUgYSBwcm9wZXIgcmVuZGVyaW5nIHdoZW4gYm9yZGVyIHJhZGl1cyBpcyBhY3Rp
dmUsIHVuZm9ydHVuYXRlbHkuCi0gICAgc3R5bGUucmVzZXRCb3JkZXJSYWRpdXMoKTsKLSAgICBz
dHlsZS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmpl
Y3QmIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBy
ZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwgcmVjdCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVH
dGs6OnNob3VsZEhhdmVDYXBzTG9ja0luZGljYXRvcihjb25zdCBIVE1MSW5wdXRFbGVtZW50JiBl
bGVtZW50KSBjb25zdAotewotICAgIHJldHVybiBlbGVtZW50LmlzUGFzc3dvcmRGaWVsZCgpOwot
fQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUcmFja1N0eWxlKFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCopIGNvbnN0Ci17Ci0gICAgc3R5bGUuc2V0Qm94U2hh
ZG93KG51bGxwdHIpOwotfQotCi12b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVt
YlN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
LXsKLSAgICBSZW5kZXJUaGVtZTo6YWRqdXN0U2xpZGVyVGh1bWJTdHlsZShzdHlsZSwgZWxlbWVu
dCk7Ci0gICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwotfQotCi0vKgotICogR3RrU2Nh
bGUKLSAqCi0gKiBzY2FsZQotICog4pWw4pSA4pSAIGNvbnRlbnRzCi0gKiAgICAg4pWw4pSA4pSA
IHRyb3VnaAotICogICAgICAgICDilJzilIDilIAgc2xpZGVyCi0gKiAgICAgICAgIOKVsOKUgOKU
gCBbaGlnaGxpZ2h0XQotICovCi1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRyYWNr
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVu
ZGVyT2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgpOwotICAgIEFTU0VSVChwYXJ0ID09IFNsaWRl
ckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVmVydGljYWxQYXJ0KTsKLQotICAgIGF1
dG8mIHNsaWRlcldpZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lU2xpZGVyJj4oUmVuZGVy
VGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgPyBS
ZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6SG9yaXpvbnRhbFNsaWRlciA6IFJlbmRlclRoZW1lV2lk
Z2V0OjpUeXBlOjpWZXJ0aWNhbFNsaWRlcikpOwotICAgIGF1dG8gc2NhbGVTdGF0ZSA9IHRoZW1l
UGFydFN0YXRlRmxhZ3MoKnRoaXMsIFNjYWxlLCByZW5kZXJPYmplY3QpOwotICAgIGF1dG8mIHNj
YWxlID0gc2xpZGVyV2lkZ2V0LnNjYWxlKCk7Ci0gICAgc2NhbGUuc2V0U3RhdGUoc2NhbGVTdGF0
ZSk7Ci0gICAgYXV0byYgY29udGVudHMgPSBzbGlkZXJXaWRnZXQuY29udGVudHMoKTsKLSAgICBh
dXRvJiB0cm91Z2ggPSBzbGlkZXJXaWRnZXQudHJvdWdoKCk7Ci0gICAgdHJvdWdoLnNldFN0YXRl
KHNjYWxlU3RhdGUpOwotICAgIGF1dG8mIHNsaWRlciA9IHNsaWRlcldpZGdldC5zbGlkZXIoKTsK
LSAgICBhdXRvJiBoaWdobGlnaHQgPSBzbGlkZXJXaWRnZXQuaGlnaGxpZ2h0KCk7Ci0KLSAgICAv
LyBUaGUgZ2l2ZW4gcmVjdGFuZ2xlIGlzIG5vdCBjYWxjdWxhdGVkIGJhc2VkIG9uIHRoZSBzY2Fs
ZSBzaXplLCBidXQgYWxsIHRoZSBtYXJnaW5zIGFuZCBwYWRkaW5ncyBhcmUgYmFzZWQgb24gaXQu
Ci0gICAgSW50U2l6ZSBwcmVmZXJyZWRTaXplID0gc2NhbGUucHJlZmVycmVkU2l6ZSgpOwotICAg
IHByZWZlcnJlZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFuZGVkVG8oY29udGVudHMucHJlZmVy
cmVkU2l6ZSgpKTsKLSAgICBwcmVmZXJyZWRTaXplID0gcHJlZmVycmVkU2l6ZS5leHBhbmRlZFRv
KHRyb3VnaC5wcmVmZXJyZWRTaXplKCkpOwotICAgIEZsb2F0UmVjdCB0cmFja1JlY3QgPSByZWN0
OwotICAgIGlmIChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0KSB7Ci0gICAgICAgIHRyYWNr
UmVjdC5tb3ZlKDAsIHJlY3QuaGVpZ2h0KCkgLyAyIC0gKHByZWZlcnJlZFNpemUuaGVpZ2h0KCkg
LyAyKSk7Ci0gICAgICAgIHRyYWNrUmVjdC5zZXRIZWlnaHQocHJlZmVycmVkU2l6ZS5oZWlnaHQo
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdHJhY2tSZWN0Lm1vdmUocmVjdC53aWR0aCgpIC8g
MiAtIChwcmVmZXJyZWRTaXplLndpZHRoKCkgLyAyKSwgMCk7Ci0gICAgICAgIHRyYWNrUmVjdC5z
ZXRXaWR0aChwcmVmZXJyZWRTaXplLndpZHRoKCkpOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCBj
b250ZW50c1JlY3Q7Ci0gICAgc2NhbGUucmVuZGVyKHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCktPmNyKCksIHRyYWNrUmVjdCwgJmNvbnRlbnRzUmVjdCk7Ci0gICAgY29udGVu
dHMucmVuZGVyKHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGNv
bnRlbnRzUmVjdCwgJmNvbnRlbnRzUmVjdCk7Ci0gICAgLy8gU2NhbGUgdHJvdWdoIGRlZmluZXMg
aXRzIHNpemUgcXVlcnlpbmcgc2xpZGVyIGFuZCBoaWdobGlnaHQuCi0gICAgaWYgKHBhcnQgPT0g
U2xpZGVySG9yaXpvbnRhbFBhcnQpCi0gICAgICAgIGNvbnRlbnRzUmVjdC5zZXRIZWlnaHQodHJv
dWdoLnByZWZlcnJlZFNpemUoKS5oZWlnaHQoKSArIHN0ZDo6bWF4KHNsaWRlci5wcmVmZXJyZWRT
aXplKCkuaGVpZ2h0KCksIGhpZ2hsaWdodC5wcmVmZXJyZWRTaXplKCkuaGVpZ2h0KCkpKTsKLSAg
ICBlbHNlCi0gICAgICAgIGNvbnRlbnRzUmVjdC5zZXRXaWR0aCh0cm91Z2gucHJlZmVycmVkU2l6
ZSgpLndpZHRoKCkgKyBzdGQ6Om1heChzbGlkZXIucHJlZmVycmVkU2l6ZSgpLndpZHRoKCksIGhp
Z2hsaWdodC5wcmVmZXJyZWRTaXplKCkud2lkdGgoKSkpOwotICAgIEZsb2F0UmVjdCB0cm91Z2hS
ZWN0ID0gY29udGVudHNSZWN0OwotICAgIHRyb3VnaC5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQo
KS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgdHJvdWdoUmVjdCwgJmNvbnRlbnRzUmVjdCk7Ci0g
ICAgaWYgKGlzRm9jdXNlZChyZW5kZXJPYmplY3QpKQotICAgICAgICB0cm91Z2gucmVuZGVyRm9j
dXMocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgdHJvdWdoUmVj
dCk7Ci0KLSAgICBMYXlvdXRQb2ludCB0aHVtYkxvY2F0aW9uOwotICAgIGlmIChpczxIVE1MSW5w
dXRFbGVtZW50PihyZW5kZXJPYmplY3Qubm9kZSgpKSkgewotICAgICAgICBhdXRvJiBpbnB1dCA9
IGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KCpyZW5kZXJPYmplY3Qubm9kZSgpKTsKLSAgICAg
ICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBpbnB1dC5zbGlkZXJUaHVtYkVsZW1lbnQoKSkKLSAgICAg
ICAgICAgIHRodW1iTG9jYXRpb24gPSBlbGVtZW50LT5yZW5kZXJCb3goKS0+bG9jYXRpb24oKTsK
LSAgICB9Ci0KLSAgICBpZiAocGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCkgewotICAgICAg
ICBpZiAocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6
UlRMKSB7Ci0gICAgICAgICAgICBjb250ZW50c1JlY3QubW92ZSh0aHVtYkxvY2F0aW9uLngoKSwg
MCk7Ci0gICAgICAgICAgICBjb250ZW50c1JlY3Quc2V0V2lkdGgoY29udGVudHNSZWN0LndpZHRo
KCkgLSB0aHVtYkxvY2F0aW9uLngoKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY29u
dGVudHNSZWN0LnNldFdpZHRoKHRodW1iTG9jYXRpb24ueCgpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgY29udGVudHNSZWN0LnNldEhlaWdodCh0aHVtYkxvY2F0aW9uLnkoKSk7Ci0gICAgaGlnaGxp
Z2h0LnJlbmRlcihwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBj
b250ZW50c1JlY3QpOwotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFJlbmRlclRoZW1l
R3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVt
ZW50KikgY29uc3QKLXsKLSAgICBDb250cm9sUGFydCBwYXJ0ID0gc3R5bGUuYXBwZWFyYW5jZSgp
OwotICAgIGlmIChwYXJ0ICE9IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgJiYgcGFydCAhPSBT
bGlkZXJUaHVtYlZlcnRpY2FsUGFydCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byYgc2xp
ZGVyV2lkZ2V0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVTbGlkZXImPihSZW5kZXJUaGVtZVdp
ZGdldDo6Z2V0T3JDcmVhdGUocGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0ID8gUmVu
ZGVyVGhlbWVXaWRnZXQ6OlR5cGU6Okhvcml6b250YWxTbGlkZXIgOiBSZW5kZXJUaGVtZVdpZGdl
dDo6VHlwZTo6VmVydGljYWxTbGlkZXIpKTsKLSAgICBzbGlkZXJXaWRnZXQuc2NhbGUoKS5zZXRT
dGF0ZShHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwotICAgIHNsaWRlcldpZGdldC50cm91Z2goKS5z
ZXRTdGF0ZShHVEtfU1RBVEVfRkxBR19OT1JNQUwpOwotCi0gICAgSW50U2l6ZSBwcmVmZXJyZWRT
aXplID0gc2xpZGVyV2lkZ2V0LnNjYWxlKCkucHJlZmVycmVkU2l6ZSgpOwotICAgIHByZWZlcnJl
ZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFuZGVkVG8oc2xpZGVyV2lkZ2V0LmNvbnRlbnRzKCku
cHJlZmVycmVkU2l6ZSgpKTsKLSAgICBwcmVmZXJyZWRTaXplID0gcHJlZmVycmVkU2l6ZS5leHBh
bmRlZFRvKHNsaWRlcldpZGdldC50cm91Z2goKS5wcmVmZXJyZWRTaXplKCkpOwotICAgIHByZWZl
cnJlZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFuZGVkVG8oc2xpZGVyV2lkZ2V0LnNsaWRlcigp
LnByZWZlcnJlZFNpemUoKSk7Ci0gICAgaWYgKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFs
UGFydCkgewotICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgocHJlZmVycmVkU2l6ZS53aWR0
aCgpLCBGaXhlZCkpOwotICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHByZWZlcnJlZFNp
emUuaGVpZ2h0KCksIEZpeGVkKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJU
KHBhcnQgPT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpOwotICAgIHN0eWxlLnNldFdpZHRoKExl
bmd0aChwcmVmZXJyZWRTaXplLmhlaWdodCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLnNldEhlaWdo
dChMZW5ndGgocHJlZmVycmVkU2l6ZS53aWR0aCgpLCBGaXhlZCkpOwotfQotCi1ib29sIFJlbmRl
clRoZW1lR3RrOjpwYWludFNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2Jq
ZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICBDb250cm9sUGFydCBwYXJ0ID0gcmVuZGVyT2JqZWN0LnN0eWxlKCkuYXBwZWFyYW5jZSgp
OwotICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9
PSBTbGlkZXJUaHVtYlZlcnRpY2FsUGFydCk7Ci0KLSAgICBhdXRvJiBzbGlkZXJXaWRnZXQgPSBz
dGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNsaWRlciY+KFJlbmRlclRoZW1lV2lkZ2V0OjpnZXRPckNy
ZWF0ZShwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpvbnRhbFBhcnQgPyBSZW5kZXJUaGVtZVdpZGdl
dDo6VHlwZTo6SG9yaXpvbnRhbFNsaWRlciA6IFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpWZXJ0
aWNhbFNsaWRlcikpOwotICAgIGF1dG8gc2NhbGVTdGF0ZSA9IHRoZW1lUGFydFN0YXRlRmxhZ3Mo
KnRoaXMsIFNjYWxlLCByZW5kZXJPYmplY3QpOwotICAgIGF1dG8mIHNjYWxlID0gc2xpZGVyV2lk
Z2V0LnNjYWxlKCk7Ci0gICAgc2NhbGUuc2V0U3RhdGUoc2NhbGVTdGF0ZSk7Ci0gICAgYXV0byYg
Y29udGVudHMgPSBzbGlkZXJXaWRnZXQuY29udGVudHMoKTsKLSAgICBhdXRvJiB0cm91Z2ggPSBz
bGlkZXJXaWRnZXQudHJvdWdoKCk7Ci0gICAgdHJvdWdoLnNldFN0YXRlKHNjYWxlU3RhdGUpOwot
ICAgIGF1dG8mIHNsaWRlciA9IHNsaWRlcldpZGdldC5zbGlkZXIoKTsKLSAgICBzbGlkZXIuc2V0
U3RhdGUodGhlbWVQYXJ0U3RhdGVGbGFncygqdGhpcywgU2NhbGVTbGlkZXIsIHJlbmRlck9iamVj
dCkpOwotICAgIGF1dG8mIGhpZ2hsaWdodCA9IHNsaWRlcldpZGdldC5oaWdobGlnaHQoKTsKLQot
ICAgIEd0a0JvcmRlciBzY2FsZUNvbnRlbnRzQm94ID0gc2NhbGUuY29udGVudHNCb3goKTsKLSAg
ICBHdGtCb3JkZXIgY29udGVudHNDb250ZW50c0JveCA9IGNvbnRlbnRzLmNvbnRlbnRzQm94KCk7
Ci0gICAgR3RrQm9yZGVyIHRyb3VnaENvbnRlbnRzQm94ID0gdHJvdWdoLmNvbnRlbnRzQm94KCk7
Ci0gICAgR3RrQm9yZGVyIHBhZGRpbmc7Ci0gICAgcGFkZGluZy5sZWZ0ID0gc2NhbGVDb250ZW50
c0JveC5sZWZ0ICsgY29udGVudHNDb250ZW50c0JveC5sZWZ0ICsgdHJvdWdoQ29udGVudHNCb3gu
bGVmdDsKLSAgICBwYWRkaW5nLnJpZ2h0ID0gc2NhbGVDb250ZW50c0JveC5yaWdodCArIGNvbnRl
bnRzQ29udGVudHNCb3gucmlnaHQgKyB0cm91Z2hDb250ZW50c0JveC5yaWdodDsKLSAgICBwYWRk
aW5nLnRvcCA9IHNjYWxlQ29udGVudHNCb3gudG9wICsgY29udGVudHNDb250ZW50c0JveC50b3Ag
KyB0cm91Z2hDb250ZW50c0JveC50b3A7Ci0gICAgcGFkZGluZy5ib3R0b20gPSBzY2FsZUNvbnRl
bnRzQm94LmJvdHRvbSArIGNvbnRlbnRzQ29udGVudHNCb3guYm90dG9tICsgdHJvdWdoQ29udGVu
dHNCb3guYm90dG9tOwotCi0gICAgLy8gU2NhbGUgdHJvdWdoIGRlZmluZXMgaXRzIHNpemUgcXVl
cnlpbmcgc2xpZGVyIGFuZCBoaWdobGlnaHQuCi0gICAgaW50IHRyb3VnaEhlaWdodCA9IHRyb3Vn
aC5wcmVmZXJyZWRTaXplKCkuaGVpZ2h0KCkgKyBzdGQ6Om1heChzbGlkZXIucHJlZmVycmVkU2l6
ZSgpLmhlaWdodCgpLCBoaWdobGlnaHQucHJlZmVycmVkU2l6ZSgpLmhlaWdodCgpKTsKLSAgICBJ
bnRSZWN0IHNsaWRlclJlY3QocmVjdC5sb2NhdGlvbigpLCBJbnRTaXplKHRyb3VnaEhlaWdodCwg
dHJvdWdoSGVpZ2h0KSk7Ci0gICAgc2xpZGVyUmVjdC5tb3ZlKHBhZGRpbmcubGVmdCwgcGFkZGlu
Zy50b3ApOwotICAgIHNsaWRlclJlY3QuY29udHJhY3QocGFkZGluZy5sZWZ0ICsgcGFkZGluZy5y
aWdodCwgcGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbSk7Ci0gICAgc2xpZGVyLnJlbmRlcihw
YWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBzbGlkZXJSZWN0KTsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUludFJlY3QgUmVuZGVyVGhlbWVHdGs6OnByb2dyZXNz
QmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3Qg
SW50UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIGNvbnN0IGF1dG8mIHJlbmRlclByb2dyZXNz
ID0gZG93bmNhc3Q8UmVuZGVyUHJvZ3Jlc3M+KHJlbmRlck9iamVjdCk7Ci0gICAgYXV0byYgcHJv
Z3Jlc3NCYXJXaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVByb2dyZXNzQmFyJj4oUmVu
ZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKHJlbmRlclByb2dyZXNzLmlzRGV0ZXJtaW5hdGUo
KSA/IFJlbmRlclRoZW1lUHJvZ3Jlc3NCYXI6OlR5cGU6OlByb2dyZXNzQmFyIDogUmVuZGVyVGhl
bWVQcm9ncmVzc0Jhcjo6VHlwZTo6SW5kZXRlcm1pbmF0ZVByb2dyZXNzQmFyKSk7Ci0gICAgSW50
U2l6ZSBwcmVmZXJyZWRTaXplID0gcHJvZ3Jlc3NCYXJXaWRnZXQucHJvZ3Jlc3NCYXIoKS5wcmVm
ZXJyZWRTaXplKCk7Ci0gICAgcHJlZmVycmVkU2l6ZSA9IHByZWZlcnJlZFNpemUuZXhwYW5kZWRU
byhwcm9ncmVzc0JhcldpZGdldC50cm91Z2goKS5wcmVmZXJyZWRTaXplKCkpOwotICAgIHByZWZl
cnJlZFNpemUgPSBwcmVmZXJyZWRTaXplLmV4cGFuZGVkVG8ocHJvZ3Jlc3NCYXJXaWRnZXQucHJv
Z3Jlc3MoKS5wcmVmZXJyZWRTaXplKCkpOwotICAgIHJldHVybiBJbnRSZWN0KGJvdW5kcy54KCks
IGJvdW5kcy55KCksIGJvdW5kcy53aWR0aCgpLCBwcmVmZXJyZWRTaXplLmhlaWdodCgpKTsKLX0K
LQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRQcm9ncmVzc0Jhcihjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJl
Y3QmIHJlY3QpCi17Ci0gICAgaWYgKCFyZW5kZXJPYmplY3QuaXNQcm9ncmVzcygpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGNvbnN0IGF1dG8mIHJlbmRlclByb2dyZXNzID0gZG93bmNh
c3Q8UmVuZGVyUHJvZ3Jlc3M+KHJlbmRlck9iamVjdCk7Ci0gICAgYXV0byYgcHJvZ3Jlc3NCYXJX
aWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVByb2dyZXNzQmFyJj4oUmVuZGVyVGhlbWVX
aWRnZXQ6OmdldE9yQ3JlYXRlKHJlbmRlclByb2dyZXNzLmlzRGV0ZXJtaW5hdGUoKSA/IFJlbmRl
clRoZW1lUHJvZ3Jlc3NCYXI6OlR5cGU6OlByb2dyZXNzQmFyIDogUmVuZGVyVGhlbWVQcm9ncmVz
c0Jhcjo6VHlwZTo6SW5kZXRlcm1pbmF0ZVByb2dyZXNzQmFyKSk7Ci0gICAgcHJvZ3Jlc3NCYXJX
aWRnZXQucHJvZ3Jlc3NCYXIoKS5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci0gICAgcHJvZ3Jlc3NCYXJXaWRnZXQudHJvdWdoKCkucmVu
ZGVyKHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QpOwot
ICAgIHByb2dyZXNzQmFyV2lkZ2V0LnByb2dyZXNzKCkucmVuZGVyKHBhaW50SW5mby5jb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGNhbGN1bGF0ZVByb2dyZXNzUmVjdChyZW5kZXJP
YmplY3QsIHJlY3QpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlbmRlclRoZW1lOjpJbm5l
clNwaW5CdXR0b25MYXlvdXQgUmVuZGVyVGhlbWVHdGs6OmlubmVyU3BpbkJ1dHRvbkxheW91dChj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCkgY29uc3QKLXsKLSAgICByZXR1cm4gcmVu
ZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMID8gSW5u
ZXJTcGluQnV0dG9uTGF5b3V0OjpIb3Jpem9udGFsVXBMZWZ0IDogSW5uZXJTcGluQnV0dG9uTGF5
b3V0OjpIb3Jpem9udGFsVXBSaWdodDsKLX0KLQotdm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0
SW5uZXJTcGluQnV0dG9uU3R5bGUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBFbGVtZW50Kikg
Y29uc3QKLXsKLSAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoc3BpbkJ1dHRvblNpemUoKS53aWR0
aCgpLCBGaXhlZCkpOwotICAgIHN0eWxlLnNldEhlaWdodChMZW5ndGgoc3BpbkJ1dHRvblNpemUo
KS5oZWlnaHQoKSwgRml4ZWQpKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJbm5l
clNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGF1dG8mIHNwaW5C
dXR0b25XaWRnZXQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVNwaW5CdXR0b24mPihSZW5kZXJU
aGVtZVdpZGdldDo6Z2V0T3JDcmVhdGUoUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OlNwaW5CdXR0
b24pKTsKLSAgICBhdXRvIHNwaW5CdXR0b25TdGF0ZSA9IHRoZW1lUGFydFN0YXRlRmxhZ3MoKnRo
aXMsIFNwaW5CdXR0b24sIHJlbmRlck9iamVjdCk7Ci0gICAgc3BpbkJ1dHRvbldpZGdldC5zcGlu
QnV0dG9uKCkuc2V0U3RhdGUoc3BpbkJ1dHRvblN0YXRlKTsKLSAgICBzcGluQnV0dG9uV2lkZ2V0
LmVudHJ5KCkuc2V0U3RhdGUoc3BpbkJ1dHRvblN0YXRlKTsKLSAgICBhdXRvJiB1cCA9IHNwaW5C
dXR0b25XaWRnZXQudXAoKTsKLSAgICB1cC5zZXRTdGF0ZSh0aGVtZVBhcnRTdGF0ZUZsYWdzKCp0
aGlzLCBTcGluQnV0dG9uVXBCdXR0b24sIHJlbmRlck9iamVjdCkpOwotICAgIGF1dG8mIGRvd24g
PSBzcGluQnV0dG9uV2lkZ2V0LmRvd24oKTsKLSAgICBkb3duLnNldFN0YXRlKHRoZW1lUGFydFN0
YXRlRmxhZ3MoKnRoaXMsIFNwaW5CdXR0b25Eb3duQnV0dG9uLCByZW5kZXJPYmplY3QpKTsKLQot
ICAgIEludFJlY3QgaWNvblJlY3QgPSByZWN0OwotICAgIGljb25SZWN0LnNldFdpZHRoKGljb25S
ZWN0LndpZHRoKCkgLyAyKTsKLSAgICBpZiAocmVuZGVyT2JqZWN0LnN0eWxlKCkuZGlyZWN0aW9u
KCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICB1cC5yZW5kZXIocGFpbnRJbmZvLmNv
bnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgaWNvblJlY3QpOwotICAgIGVsc2UKLSAg
ICAgICAgZG93bi5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+
Y3IoKSwgaWNvblJlY3QpOwotICAgIGljb25SZWN0Lm1vdmUoaWNvblJlY3Qud2lkdGgoKSwgMCk7
Ci0gICAgaWYgKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rp
b246OlJUTCkKLSAgICAgICAgZG93bi5yZW5kZXIocGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKSwgaWNvblJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgdXAucmVuZGVy
KHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGljb25SZWN0KTsK
LQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogU2Vjb25kcyBSZW5kZXJUaGVtZUd0azo6Y2FyZXRC
bGlua0ludGVydmFsKCkgY29uc3QKIHsKLSAgICBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtf
c2V0dGluZ3NfZ2V0X2RlZmF1bHQoKTsKLQogICAgIGdib29sZWFuIHNob3VsZEJsaW5rOwogICAg
IGdpbnQgdGltZTsKLQotICAgIGdfb2JqZWN0X2dldChzZXR0aW5ncywgImd0ay1jdXJzb3ItYmxp
bmsiLCAmc2hvdWxkQmxpbmssICJndGstY3Vyc29yLWJsaW5rLXRpbWUiLCAmdGltZSwgbnVsbHB0
cik7Ci0KLSAgICBpZiAoIXNob3VsZEJsaW5rKQotICAgICAgICByZXR1cm4gMF9zOwotCi0gICAg
cmV0dXJuIDUwMF91cyAqIHRpbWU7Ci19Ci0KLWVudW0gU3R5bGVDb2xvclR5cGUgeyBTdHlsZUNv
bG9yQmFja2dyb3VuZCwgU3R5bGVDb2xvckZvcmVncm91bmQgfTsKLQotc3RhdGljIENvbG9yIHN0
eWxlQ29sb3IoUmVuZGVyVGhlbWVQYXJ0IHRoZW1lUGFydCwgR3RrU3RhdGVGbGFncyBzdGF0ZSwg
U3R5bGVDb2xvclR5cGUgY29sb3JUeXBlKQotewotICAgIFJlbmRlclRoZW1lR2FkZ2V0KiBnYWRn
ZXQgPSBudWxscHRyOwotICAgIHN3aXRjaCAodGhlbWVQYXJ0KSB7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAgIGNh
c2UgRW50cnk6Ci0gICAgICAgIGdhZGdldCA9ICZzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUVudHJ5
Jj4oUmVuZGVyVGhlbWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBl
OjpFbnRyeSkpLmVudHJ5KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRW50cnlTZWxlY3Rp
b246Ci0gICAgICAgIGdhZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lRW50cnkmPihSZW5k
ZXJUaGVtZVdpZGdldDo6Z2V0T3JDcmVhdGUoUmVuZGVyVGhlbWVXaWRnZXQ6OlR5cGU6OlNlbGVj
dGVkRW50cnkpKS5zZWxlY3Rpb24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBMaXN0Qm94
OgotICAgICAgICBnYWRnZXQgPSAmc3RhdGljX2Nhc3Q8UmVuZGVyVGhlbWVMaXN0VmlldyY+KFJl
bmRlclRoZW1lV2lkZ2V0OjpnZXRPckNyZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6TGlz
dFZpZXcpKS50cmVldmlldygpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEJ1dHRvbjoKLSAg
ICAgICAgZ2FkZ2V0ID0gJnN0YXRpY19jYXN0PFJlbmRlclRoZW1lQnV0dG9uJj4oUmVuZGVyVGhl
bWVXaWRnZXQ6OmdldE9yQ3JlYXRlKFJlbmRlclRoZW1lV2lkZ2V0OjpUeXBlOjpCdXR0b24pKS5i
dXR0b24oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBXaW5kb3c6Ci0gICAgICAgIGdhZGdl
dCA9ICZzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZVdpbmRvdyY+KFJlbmRlclRoZW1lV2lkZ2V0Ojpn
ZXRPckNyZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6V2luZG93KSkud2luZG93KCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEFTU0VSVChnYWRnZXQpOwotICAgIGdhZGdldC0+
c2V0U3RhdGUoc3RhdGUpOwotICAgIHJldHVybiBjb2xvclR5cGUgPT0gU3R5bGVDb2xvckJhY2tn
cm91bmQgPyBnYWRnZXQtPmJhY2tncm91bmRDb2xvcigpIDogZ2FkZ2V0LT5jb2xvcigpOwotfQot
Ci1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAotewotICAgIHJldHVy
biBzdHlsZUNvbG9yKEVudHJ5U2VsZWN0aW9uLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihH
VEtfU1RBVEVfRkxBR19TRUxFQ1RFRCB8IEdUS19TVEFURV9GTEFHX0ZPQ1VTRUQpLCBTdHlsZUNv
bG9yQmFja2dyb3VuZCk7CisgICAgZ19vYmplY3RfZ2V0KGd0a19zZXR0aW5nc19nZXRfZGVmYXVs
dCgpLCAiZ3RrLWN1cnNvci1ibGluayIsICZzaG91bGRCbGluaywgImd0ay1jdXJzb3ItYmxpbmst
dGltZSIsICZ0aW1lLCBudWxscHRyKTsKKyAgICByZXR1cm4gc2hvdWxkQmxpbmsgPyA1MDBfdXMg
KiB0aW1lIDogMF9zOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4p
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0eWxlQ29sb3IoRW50cnlTZWxlY3Rpb24sIEdUS19TVEFU
RV9GTEFHX1NFTEVDVEVELCBTdHlsZUNvbG9yQmFja2dyb3VuZCk7Ci19Ci0KLUNvbG9yIFJlbmRl
clRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25T
ZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0eWxlQ29sb3Io
RW50cnlTZWxlY3Rpb24sIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KEdUS19TVEFURV9GTEFH
X1NFTEVDVEVEIHwgR1RLX1NUQVRFX0ZMQUdfRk9DVVNFRCksIFN0eWxlQ29sb3JGb3JlZ3JvdW5k
KTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25G
b3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAotewot
ICAgIHJldHVybiBzdHlsZUNvbG9yKEVudHJ5U2VsZWN0aW9uLCBHVEtfU1RBVEVfRkxBR19TRUxF
Q1RFRCwgU3R5bGVDb2xvckZvcmVncm91bmQpOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZUd0azo6
cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxT
dHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKLXsKLSAgICByZXR1cm4gc3R5bGVDb2xvcihMaXN0
Qm94LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCB8
IEdUS19TVEFURV9GTEFHX0ZPQ1VTRUQpLCBTdHlsZUNvbG9yQmFja2dyb3VuZCk7Ci19Ci0KLUNv
bG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHN0eWxlQ29sb3IoTGlzdEJveCwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsIFN0eWxl
Q29sb3JCYWNrZ3JvdW5kKTsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0
aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6
T3B0aW9ucz4pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0eWxlQ29sb3IoTGlzdEJveCwgc3RhdGlj
X2Nhc3Q8R3RrU3RhdGVGbGFncz4oR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQgfCBHVEtfU1RBVEVf
RkxBR19GT0NVU0VEKSwgU3R5bGVDb2xvckZvcmVncm91bmQpOwotfQotCi1Db2xvciBSZW5kZXJU
aGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
T3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAotewotICAgIHJldHVybiBzdHls
ZUNvbG9yKExpc3RCb3gsIEdUS19TVEFURV9GTEFHX1NFTEVDVEVELCBTdHlsZUNvbG9yRm9yZWdy
b3VuZCk7Ci19Ci0KLUNvbG9yIFJlbmRlclRoZW1lR3RrOjpkaXNhYmxlZFRleHRDb2xvcihjb25z
dCBDb2xvciYsIGNvbnN0IENvbG9yJikgY29uc3QKLXsKLSAgICByZXR1cm4gc3R5bGVDb2xvcihF
bnRyeSwgR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkUsIFN0eWxlQ29sb3JGb3JlZ3JvdW5kKTsK
LX0KLQotQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnN5c3RlbUNvbG9yKENTU1ZhbHVlSUQgY3NzVmFs
dWVJZCwgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0Ci17Ci0g
ICAgc3dpdGNoIChjc3NWYWx1ZUlkKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6Ci0g
ICAgICAgIHJldHVybiBzdHlsZUNvbG9yKEJ1dHRvbiwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCBT
dHlsZUNvbG9yRm9yZWdyb3VuZCk7Ci0gICAgY2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgotICAg
ICAgICByZXR1cm4gc3R5bGVDb2xvcihFbnRyeSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCBTdHls
ZUNvbG9yRm9yZWdyb3VuZCk7Ci0gICAgY2FzZSBDU1NWYWx1ZVRleHQ6Ci0gICAgICAgIHJldHVy
biBzdHlsZUNvbG9yKEVudHJ5LCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUsIFN0eWxlQ29sb3JGb3Jl
Z3JvdW5kKTsKLSAgICBjYXNlIENTU1ZhbHVlR3JheXRleHQ6Ci0gICAgICAgIHJldHVybiBzdHls
ZUNvbG9yKEVudHJ5LCBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRSwgU3R5bGVDb2xvckZvcmVn
cm91bmQpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVy
biBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCwgb3B0aW9ucyk7Ci19Ci0KLXZv
aWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQ29sb3JzRGlkQ2hhbmdlKCkKLXsKLSAgICBSZW5k
ZXJUaGVtZTo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKLX0KLQotI2lmIEVOQUJMRShWSURF
TykKLVN0cmluZyBSZW5kZXJUaGVtZUd0azo6ZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgp
Ci17Ci0gICAgcmV0dXJuIFN0cmluZyhtZWRpYUNvbnRyb2xzR3RrVXNlckFnZW50U3R5bGVTaGVl
dCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNHdGtVc2VyQWdlbnRTdHlsZVNoZWV0KSk7Ci19Ci0KLSNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi1TdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmV4dHJhRnVs
bFNjcmVlblN0eWxlU2hlZXQoKQotewotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLSNlbmRpZgot
Ci1ib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhQnV0dG9uKGNvbnN0IFJlbmRlck9iamVj
dCYgcmVuZGVyT2JqZWN0LCBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3Qg
SW50UmVjdCYgcmVjdCwgY29uc3QgY2hhciogaWNvbk5hbWUpCi17Ci0gICAgYXV0byYgaWNvbldp
ZGdldCA9IHN0YXRpY19jYXN0PFJlbmRlclRoZW1lSWNvbiY+KFJlbmRlclRoZW1lV2lkZ2V0Ojpn
ZXRPckNyZWF0ZShSZW5kZXJUaGVtZVdpZGdldDo6VHlwZTo6SWNvbikpOwotICAgIGF1dG8mIGlj
b24gPSBzdGF0aWNfY2FzdDxSZW5kZXJUaGVtZUljb25HYWRnZXQmPihpY29uV2lkZ2V0Lmljb24o
KSk7Ci0gICAgaWNvbi5zZXRTdGF0ZSh0aGVtZVBhcnRTdGF0ZUZsYWdzKCp0aGlzLCBNZWRpYUJ1
dHRvbiwgcmVuZGVyT2JqZWN0KSk7Ci0gICAgaWNvbi5zZXRJY29uU2l6ZShSZW5kZXJUaGVtZUlj
b25HYWRnZXQ6Okljb25TaXplR3RrOjpNZW51KTsKLSAgICBpY29uLnNldEljb25OYW1lKGljb25O
YW1lKTsKLSAgICByZXR1cm4gIWljb24ucmVuZGVyKGdyYXBoaWNzQ29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKS0+Y3IoKSwgcmVjdCk7Ci19Ci0KLWJvb2wgUmVuZGVyVGhlbWVHdGs6Omhhc093bkRp
c2FibGVkU3RhdGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCBwYXJ0KSBjb25zdAotewotICAgIHJl
dHVybiAocGFydCAhPSBNZWRpYU11dGVCdXR0b25QYXJ0KTsKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5k
ZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZv
LmNvbnRleHQoKSwgcmVjdCwgInZpZXctZnVsbHNjcmVlbi1zeW1ib2xpYyIpOwotfQotCi1ib29s
IFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3Qm
IHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QpCi17Ci0gICAgTm9kZSogbm9kZSA9IHJlbmRlck9iamVjdC5ub2RlKCk7Ci0gICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBOb2RlKiBtZWRpYU5vZGUgPSBub2Rl
LT5zaGFkb3dIb3N0KCk7Ci0gICAgaWYgKCFpczxIVE1MTWVkaWFFbGVtZW50PihtZWRpYU5vZGUp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxl
bWVudCA9IGRvd25jYXN0PEhUTUxNZWRpYUVsZW1lbnQ+KG1lZGlhTm9kZSk7Ci0gICAgcmV0dXJu
IHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0
LCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyAiYXVkaW8tdm9sdW1lLW11dGVkLXN5bWJvbGljIiA6
ICJhdWRpby12b2x1bWUtaGlnaC1zeW1ib2xpYyIpOwotfQotCi1ib29sIFJlbmRlclRoZW1lR3Rr
OjpwYWludE1lZGlhUGxheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwg
Y29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAg
Tm9kZSogbm9kZSA9IHJlbmRlck9iamVjdC5ub2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAoIW5vZGVIYXNQc2V1ZG8oKm5vZGUsICItd2Via2l0LW1l
ZGlhLWNvbnRyb2xzLXBsYXktYnV0dG9uIikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
cmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCgp
LCByZWN0LCBub2RlSGFzQ2xhc3Mobm9kZSwgInBhdXNlZCIpID8gIm1lZGlhLXBsYXliYWNrLXN0
YXJ0LXN5bWJvbGljIiA6ICJtZWRpYS1wbGF5YmFjay1wYXVzZS1zeW1ib2xpYyIpOwotfQotCi1i
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0JhY2tCdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQotewotICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVj
dCwgcGFpbnRJbmZvLmNvbnRleHQoKSwgcmVjdCwgIm1lZGlhLXNlZWstYmFja3dhcmQtc3ltYm9s
aWMiKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVNlZWtGb3J3YXJkQnV0
dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcGFpbnRNZWRpYUJ1
dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0KCksIHJlY3QsICJtZWRpYS1zZWVr
LWZvcndhcmQtc3ltYm9saWMiKTsKLX0KLQotI2lmIEVOQUJMRShWSURFT19UUkFDSykKLWJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFUb2dnbGVDbG9zZWRDYXB0aW9uc0J1dHRvbihjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVu
ZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0LCAibWVkaWEtdmlldy1zdWJ0aXRs
ZXMtc3ltYm9saWMiKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgRmxvYXRSb3VuZGVkUmVjdDo6UmFk
aWkgYm9yZGVyUmFkaWlGcm9tU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAg
IHJldHVybiBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSgKLSAgICAgICAgSW50U2l6ZShzdHlsZS5i
b3JkZXJUb3BMZWZ0UmFkaXVzKCkud2lkdGguaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyVG9wTGVm
dFJhZGl1cygpLmhlaWdodC5pbnRWYWx1ZSgpKSwKLSAgICAgICAgSW50U2l6ZShzdHlsZS5ib3Jk
ZXJUb3BSaWdodFJhZGl1cygpLndpZHRoLmludFZhbHVlKCksIHN0eWxlLmJvcmRlclRvcFJpZ2h0
UmFkaXVzKCkuaGVpZ2h0LmludFZhbHVlKCkpLAotICAgICAgICBJbnRTaXplKHN0eWxlLmJvcmRl
ckJvdHRvbUxlZnRSYWRpdXMoKS53aWR0aC5pbnRWYWx1ZSgpLCBzdHlsZS5ib3JkZXJCb3R0b21M
ZWZ0UmFkaXVzKCkuaGVpZ2h0LmludFZhbHVlKCkpLAotICAgICAgICBJbnRTaXplKHN0eWxlLmJv
cmRlckJvdHRvbVJpZ2h0UmFkaXVzKCkud2lkdGguaW50VmFsdWUoKSwgc3R5bGUuYm9yZGVyQm90
dG9tUmlnaHRSYWRpdXMoKS5oZWlnaHQuaW50VmFsdWUoKSkpOwotfQotCi1ib29sIFJlbmRlclRo
ZW1lR3RrOjpwYWludE1lZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiBvLCBjb25z
dCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICBhdXRvIG1l
ZGlhRWxlbWVudCA9IHBhcmVudE1lZGlhRWxlbWVudChvKTsKLSAgICBpZiAoIW1lZGlhRWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQg
PSBwYWludEluZm8uY29udGV4dCgpOwotICAgIGNvbnRleHQuc2F2ZSgpOwotICAgIGNvbnRleHQu
c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOwotCi0gICAgZmxvYXQgbWVkaWFEdXJhdGlvbiA9IG1l
ZGlhRWxlbWVudC0+ZHVyYXRpb24oKTsKLSAgICBmbG9hdCB0b3RhbFRyYWNrV2lkdGggPSByLndp
ZHRoKCk7Ci0gICAgYXV0byYgc3R5bGUgPSBvLnN0eWxlKCk7Ci0gICAgUmVmUHRyPFRpbWVSYW5n
ZXM+IHRpbWVSYW5nZXMgPSBtZWRpYUVsZW1lbnQtPmJ1ZmZlcmVkKCk7Ci0gICAgZm9yICh1bnNp
Z25lZCBpbmRleCA9IDA7IGluZGV4IDwgdGltZVJhbmdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsK
LSAgICAgICAgZmxvYXQgc3RhcnQgPSB0aW1lUmFuZ2VzLT5zdGFydChpbmRleCkucmVsZWFzZVJl
dHVyblZhbHVlKCk7Ci0gICAgICAgIGZsb2F0IGVuZCA9IHRpbWVSYW5nZXMtPmVuZChpbmRleCku
cmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgICAgIGZsb2F0IHN0YXJ0UmF0aW8gPSBzdGFydCAv
IG1lZGlhRHVyYXRpb247Ci0gICAgICAgIGZsb2F0IGxlbmd0aFJhdGlvID0gKGVuZCAtIHN0YXJ0
KSAvIG1lZGlhRHVyYXRpb247Ci0gICAgICAgIGlmICghbGVuZ3RoUmF0aW8pCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBJbnRSZWN0IHJhbmdlUmVjdChyKTsKLSAgICAgICAgcmFu
Z2VSZWN0LnNldFdpZHRoKGxlbmd0aFJhdGlvICogdG90YWxUcmFja1dpZHRoKTsKLSAgICAgICAg
aWYgKGluZGV4KQotICAgICAgICAgICAgcmFuZ2VSZWN0Lm1vdmUoc3RhcnRSYXRpbyAqIHRvdGFs
VHJhY2tXaWR0aCwgMCk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91
bmRlZFJlY3QocmFuZ2VSZWN0LCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLCBzdHlsZS52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpOwotICAgIH0KLQotICAgIGNv
bnRleHQucmVzdG9yZSgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRNZWRpYVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYgbywgY29uc3Qg
UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCi17Ci0gICAgYXV0byYgc3R5
bGUgPSBvLnN0eWxlKCk7Ci0gICAgcGFpbnRJbmZvLmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3Qo
RmxvYXRSb3VuZGVkUmVjdChyLCBib3JkZXJSYWRpaUZyb21TdHlsZShzdHlsZSkpLCBzdHlsZS52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpOwotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRyYWNr
KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBhdXRvIG1lZGlhRWxlbWVudCA9IHBh
cmVudE1lZGlhRWxlbWVudChyZW5kZXJPYmplY3QpOwotICAgIGlmICghbWVkaWFFbGVtZW50KQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGZsb2F0IHZvbHVtZSA9IG1lZGlhRWxlbWVudC0+
bXV0ZWQoKSA/IDAuMGYgOiBtZWRpYUVsZW1lbnQtPnZvbHVtZSgpOwotICAgIGlmICghdm9sdW1l
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9
IHBhaW50SW5mby5jb250ZXh0KCk7Ci0gICAgY29udGV4dC5zYXZlKCk7Ci0gICAgY29udGV4dC5z
ZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7Ci0KLSAgICBpbnQgcmVjdEhlaWdodCA9IHJlY3QuaGVp
Z2h0KCk7Ci0gICAgZmxvYXQgdHJhY2tIZWlnaHQgPSByZWN0SGVpZ2h0ICogdm9sdW1lOwotICAg
IGF1dG8mIHN0eWxlID0gcmVuZGVyT2JqZWN0LnN0eWxlKCk7Ci0gICAgSW50UmVjdCB2b2x1bWVS
ZWN0KHJlY3QpOwotICAgIHZvbHVtZVJlY3QubW92ZSgwLCByZWN0SGVpZ2h0IC0gdHJhY2tIZWln
aHQpOwotICAgIHZvbHVtZVJlY3Quc2V0SGVpZ2h0KGNlaWwodHJhY2tIZWlnaHQpKTsKLQotICAg
IGNvbnRleHQuZmlsbFJvdW5kZWRSZWN0KEZsb2F0Um91bmRlZFJlY3Qodm9sdW1lUmVjdCwgYm9y
ZGVyUmFkaWlGcm9tU3R5bGUoc3R5bGUpKSwgc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Q29sb3IpKTsKLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYVZvbHVtZVNsaWRlclRo
dW1iKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcGFpbnRNZWRpYVNs
aWRlclRodW1iKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0KTsKLX0KLQotU3RyaW5nIFJl
bmRlclRoZW1lR3RrOjpmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVu
dFRpbWUsIGZsb2F0IGR1cmF0aW9uKSBjb25zdAotewotICAgIHJldHVybiBmb3JtYXRNZWRpYUNv
bnRyb2xzVGltZShjdXJyZW50VGltZSkgKyAiIC8gIiArIGZvcm1hdE1lZGlhQ29udHJvbHNUaW1l
KGR1cmF0aW9uKTsKLX0KLQotYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYUN1cnJlbnRU
aW1lKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLSNlbmRpZgotCi12b2lkIFJlbmRlclRoZW1lR3Rr
OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVu
dCopIGNvbnN0Ci17Ci0gICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwotfQotCi0vLyBU
aGVzZSB2YWx1ZXMgaGF2ZSBiZWVuIGNvcGllZCBmcm9tIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
LmNwcAotc3RhdGljIGNvbnN0IGludCBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzID0gNTsKLXN0YXRp
YyBjb25zdCBpbnQgcHJvZ3Jlc3NBbmltYXRpb25GcmFtZXMgPSAxMDsKLXN0YXRpYyBjb25zdCBT
ZWNvbmRzIHByb2dyZXNzQW5pbWF0aW9uSW50ZXJ2YWwgeyAxMjVfbXMgfTsKLVNlY29uZHMgUmVu
ZGVyVGhlbWVHdGs6OmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIoUmVuZGVy
UHJvZ3Jlc3MmKSBjb25zdAotewotICAgIHJldHVybiBwcm9ncmVzc0FuaW1hdGlvbkludGVydmFs
OwotfQotCi1TZWNvbmRzIFJlbmRlclRoZW1lR3RrOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dy
ZXNzQmFyKFJlbmRlclByb2dyZXNzJikgY29uc3QKLXsKLSAgICByZXR1cm4gcHJvZ3Jlc3NBbmlt
YXRpb25JbnRlcnZhbCAqIHByb2dyZXNzQW5pbWF0aW9uRnJhbWVzICogMjsgLy8gIjIiIGZvciBi
YWNrIGFuZCBmb3J0aDsKLX0KLQotSW50UmVjdCBSZW5kZXJUaGVtZUd0azo6Y2FsY3VsYXRlUHJv
Z3Jlc3NSZWN0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBJbnRSZWN0
JiBmdWxsQmFyUmVjdCkKLXsKLSAgICBJbnRSZWN0IHByb2dyZXNzUmVjdChmdWxsQmFyUmVjdCk7
Ci0gICAgY29uc3QgYXV0byYgcmVuZGVyUHJvZ3Jlc3MgPSBkb3duY2FzdDxSZW5kZXJQcm9ncmVz
cz4ocmVuZGVyT2JqZWN0KTsKLSAgICBpZiAocmVuZGVyUHJvZ3Jlc3MuaXNEZXRlcm1pbmF0ZSgp
KSB7Ci0gICAgICAgIGludCBwcm9ncmVzc1dpZHRoID0gcHJvZ3Jlc3NSZWN0LndpZHRoKCkgKiBy
ZW5kZXJQcm9ncmVzcy5wb3NpdGlvbigpOwotICAgICAgICBpZiAocmVuZGVyT2JqZWN0LnN0eWxl
KCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMKQotICAgICAgICAgICAgcHJvZ3Jl
c3NSZWN0LnNldFgocHJvZ3Jlc3NSZWN0LngoKSArIHByb2dyZXNzUmVjdC53aWR0aCgpIC0gcHJv
Z3Jlc3NXaWR0aCk7Ci0gICAgICAgIHByb2dyZXNzUmVjdC5zZXRXaWR0aChwcm9ncmVzc1dpZHRo
KTsKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzUmVjdDsKLSAgICB9Ci0KLSAgICBkb3VibGUgYW5p
bWF0aW9uUHJvZ3Jlc3MgPSByZW5kZXJQcm9ncmVzcy5hbmltYXRpb25Qcm9ncmVzcygpOwotCi0g
ICAgLy8gTmV2ZXIgbGV0IHRoZSBwcm9ncmVzcyByZWN0IHNocmluayBzbWFsbGVyIHRoYW4gMiBw
aXhlbHMuCi0gICAgaW50IG5ld1dpZHRoID0gc3RkOjptYXgoMiwgcHJvZ3Jlc3NSZWN0LndpZHRo
KCkgLyBwcm9ncmVzc0FjdGl2aXR5QmxvY2tzKTsKLSAgICBpbnQgbW92YWJsZVdpZHRoID0gcHJv
Z3Jlc3NSZWN0LndpZHRoKCkgLSBuZXdXaWR0aDsKLSAgICBwcm9ncmVzc1JlY3Quc2V0V2lkdGgo
bmV3V2lkdGgpOwotCi0gICAgLy8gV2Ugd2FudCB0aGUgZmlyc3QgMC41IHVuaXRzIG9mIHRoZSBh
bmltYXRpb24gcHJvZ3Jlc3MgdG8gcmVwcmVzZW50IHRoZQotICAgIC8vIGZvcndhcmQgbW90aW9u
IGFuZCB0aGUgc2Vjb25kIDAuNSB1bml0cyB0byByZXByZXNlbnQgdGhlIGJhY2t3YXJkIG1vdGlv
biwKLSAgICAvLyB0aHVzIHdlIG11bHRpcGx5IGJ5IHR3byBoZXJlIHRvIGdldCB0aGUgZnVsbCBz
d2VlcCBvZiB0aGUgcHJvZ3Jlc3MgYmFyIHdpdGgKLSAgICAvLyBlYWNoIGRpcmVjdGlvbi4KLSAg
ICBpZiAoYW5pbWF0aW9uUHJvZ3Jlc3MgPCAwLjUpCi0gICAgICAgIHByb2dyZXNzUmVjdC5zZXRY
KHByb2dyZXNzUmVjdC54KCkgKyAoYW5pbWF0aW9uUHJvZ3Jlc3MgKiAyICogbW92YWJsZVdpZHRo
KSk7Ci0gICAgZWxzZQotICAgICAgICBwcm9ncmVzc1JlY3Quc2V0WChwcm9ncmVzc1JlY3QueCgp
ICsgKCgxLjAgLSBhbmltYXRpb25Qcm9ncmVzcykgKiAyICogbW92YWJsZVdpZHRoKSk7Ci0gICAg
cmV0dXJuIHByb2dyZXNzUmVjdDsKLX0KLQotU3RyaW5nIFJlbmRlclRoZW1lR3RrOjpmaWxlTGlz
dE5hbWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCogZmlsZUxpc3QsIGNvbnN0IEZvbnRDYXNjYWRl
JiBmb250LCBpbnQgd2lkdGgsIGJvb2wgbXVsdGlwbGVGaWxlc0FsbG93ZWQpIGNvbnN0Ci17Ci0g
ICAgaWYgKHdpZHRoIDw9IDApCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIGlmIChm
aWxlTGlzdC0+bGVuZ3RoKCkgPiAxKQotICAgICAgICByZXR1cm4gU3RyaW5nVHJ1bmNhdG9yOjpy
aWdodFRydW5jYXRlKG11bHRpcGxlRmlsZVVwbG9hZFRleHQoZmlsZUxpc3QtPmxlbmd0aCgpKSwg
d2lkdGgsIGZvbnQpOwotCi0gICAgU3RyaW5nIHN0cmluZzsKLSAgICBpZiAoZmlsZUxpc3QtPmxl
bmd0aCgpKQotICAgICAgICBzdHJpbmcgPSBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUoZmls
ZUxpc3QtPml0ZW0oMCktPnBhdGgoKSk7Ci0gICAgZWxzZSBpZiAobXVsdGlwbGVGaWxlc0FsbG93
ZWQpCi0gICAgICAgIHN0cmluZyA9IGZpbGVCdXR0b25Ob0ZpbGVzU2VsZWN0ZWRMYWJlbCgpOwot
ICAgIGVsc2UKLSAgICAgICAgc3RyaW5nID0gZmlsZUJ1dHRvbk5vRmlsZVNlbGVjdGVkTGFiZWwo
KTsKLQotICAgIHJldHVybiBTdHJpbmdUcnVuY2F0b3I6OmNlbnRlclRydW5jYXRlKHN0cmluZywg
d2lkdGgsIGZvbnQpOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotU3RyaW5nIFJlbmRlclRoZW1l
R3RrOjptZWRpYUNvbnRyb2xzU2NyaXB0KCkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIHNjcmlwdEJ1
aWxkZXI7Ci0gICAgc2NyaXB0QnVpbGRlci5hcHBlbmRDaGFyYWN0ZXJzKG1lZGlhQ29udHJvbHNM
b2NhbGl6ZWRTdHJpbmdzSmF2YVNjcmlwdCwgc2l6ZW9mKG1lZGlhQ29udHJvbHNMb2NhbGl6ZWRT
dHJpbmdzSmF2YVNjcmlwdCkpOwotICAgIHNjcmlwdEJ1aWxkZXIuYXBwZW5kQ2hhcmFjdGVycyht
ZWRpYUNvbnRyb2xzQmFzZUphdmFTY3JpcHQsIHNpemVvZihtZWRpYUNvbnRyb2xzQmFzZUphdmFT
Y3JpcHQpKTsKLSAgICBzY3JpcHRCdWlsZGVyLmFwcGVuZENoYXJhY3RlcnMobWVkaWFDb250cm9s
c0d0a0phdmFTY3JpcHQsIHNpemVvZihtZWRpYUNvbnRyb2xzR3RrSmF2YVNjcmlwdCkpOwotICAg
IHJldHVybiBzY3JpcHRCdWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKFZJ
REVPKQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVHdGsuaAppbmRleCA4N2MzYWFkNThiYS4uYWEwYjM5NTdhNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5oCkBAIC0xLDEyICsxLDUgQEAKIC8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgV2ViS2l0IHByb2plY3QuCi0gKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVs
IEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIElnYWxpYSBTLkwuCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTI3LDE3MCArMjAsMTYgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJSZW5kZXJUaGVtZS5oIgorI2luY2x1ZGUgIlJlbmRlclRoZW1lQWR3YWl0YS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJlbmRlclRoZW1lR3RrIGZpbmFsIDogcHVi
bGljIFJlbmRlclRoZW1lIHsKLXB1YmxpYzoKLSAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8UmVu
ZGVyVGhlbWVHdGs+OwotCi0jaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCi0gICAgLy8gUmV0
dXJucyBzaXplIG9mIG9uZSBzbGlkZXIgdGljayBtYXJrIGZvciBhIGhvcml6b250YWwgdHJhY2su
Ci0gICAgLy8gRm9yIHZlcnRpY2FsIHRyYWNrcyB3ZSByb3RhdGUgaXQgYW5kIHVzZSBpdC4gaS5l
LiBXaWR0aCBpcyBhbHdheXMgbGVuZ3RoIGFsb25nIHRoZSB0cmFjay4KLSAgICBJbnRTaXplIHNs
aWRlclRpY2tTaXplKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgLy8gUmV0dXJucyB0aGUgZGlzdGFu
Y2Ugb2Ygc2xpZGVyIHRpY2sgb3JpZ2luIGZyb20gdGhlIHNsaWRlciB0cmFjayBjZW50ZXIuCi0g
ICAgaW50IHNsaWRlclRpY2tPZmZzZXRGcm9tVHJhY2tDZW50ZXIoKSBjb25zdCBvdmVycmlkZTsK
LSNlbmRpZgotCitjbGFzcyBSZW5kZXJUaGVtZUd0ayBmaW5hbCA6IHB1YmxpYyBSZW5kZXJUaGVt
ZUFkd2FpdGEgewogcHJpdmF0ZToKLSAgICAvLyBTeXN0ZW0gZm9udHMuCi0gICAgdm9pZCB1cGRh
dGVDYWNoZWRTeXN0ZW1Gb250RGVzY3JpcHRpb24oQ1NTVmFsdWVJRCwgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwotCi1wdWJsaWM6Ci0gICAgLy8gQSBtZXRob2QgYXNr
aW5nIGlmIHRoZSB0aGVtZSdzIGNvbnRyb2xzIGFjdHVhbGx5IGNhcmUgYWJvdXQgcmVkcmF3aW5n
IHdoZW4gaG92ZXJlZC4KLSAgICBib29sIHN1cHBvcnRzSG92ZXIoY29uc3QgUmVuZGVyU3R5bGUm
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAvLyBBIG1ldGhvZCBhc2tp
bmcgaWYgdGhlIHRoZW1lIGlzIGFibGUgdG8gZHJhdyB0aGUgZm9jdXMgcmluZy4KLSAgICBib29s
IHN1cHBvcnRzRm9jdXNSaW5nKGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICAvLyBBIG1ldGhvZCBhc2tpbmcgaWYgdGhlIGNvbnRyb2wgY2hhbmdlcyBpdHMgdGludCB3
aGVuIHRoZSB3aW5kb3cgaGFzIGZvY3VzIG9yIG5vdC4KLSAgICBib29sIGNvbnRyb2xTdXBwb3J0
c1RpbnRzKGNvbnN0IFJlbmRlck9iamVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgLy8gQSBn
ZW5lcmFsIG1ldGhvZCBhc2tpbmcgaWYgYW55IGNvbnRyb2wgdGludGluZyBpcyBzdXBwb3J0ZWQg
YXQgYWxsLgotICAgIGJvb2wgc3VwcG9ydHNDb250cm9sVGludHMoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIGFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJlbmRl
ck9iamVjdCYsIEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgLy8gQSBtZXRob2QgdG8gb2J0
YWluIHRoZSBiYXNlbGluZSBwb3NpdGlvbiBmb3IgYSAibGVhZiIgY29udHJvbC4gIFRoaXMgd2ls
bCBvbmx5IGJlIHVzZWQgaWYgYSBiYXNlbGluZQotICAgIC8vIHBvc2l0aW9uIGNhbm5vdCBiZSBk
ZXRlcm1pbmVkIGJ5IGV4YW1pbmluZyBjaGlsZCBjb250ZW50LiBDaGVja2JveGVzIGFuZCByYWRp
byBidXR0b25zIGFyZSBleGFtcGxlcyBvZgotICAgIC8vIGNvbnRyb2xzIHRoYXQgbmVlZCB0byBk
byB0aGlzLgotICAgIGludCBiYXNlbGluZVBvc2l0aW9uKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0
IG92ZXJyaWRlOwotCi0gICAgLy8gVGhlIHBsYXRmb3JtIHNlbGVjdGlvbiBjb2xvci4KLSAgICBD
b2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5
bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3JtSW5h
Y3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlv
bnM+KSBjb25zdCBvdmVycmlkZTsKLSAgICBDb2xvciBwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZv
cmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92ZXJy
aWRlOwotICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3Io
T3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCBvdmVycmlkZTsKLQotICAgIC8v
IExpc3QgQm94IHNlbGVjdGlvbiBjb2xvcgotICAgIENvbG9yIHBsYXRmb3JtQWN0aXZlTGlzdEJv
eFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4p
IGNvbnN0IG92ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IG92
ZXJyaWRlOwotICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dy
b3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCBvdmVycmlkZTsKLQotICAg
IENvbG9yIGRpc2FibGVkVGV4dENvbG9yKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIH5SZW5kZXJUaGVtZUd0aygpID0gZGVmYXVsdDsKIAor
ICAgIHZvaWQgdXBkYXRlQ2FjaGVkU3lzdGVtRm9udERlc2NyaXB0aW9uKENTU1ZhbHVlSUQsIEZv
bnRDYXNjYWRlRGVzY3JpcHRpb24mKSBjb25zdCBvdmVycmlkZTsKICAgICBTZWNvbmRzIGNhcmV0
QmxpbmtJbnRlcnZhbCgpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBwbGF0Zm9ybUNvbG9y
c0RpZENoYW5nZSgpIG92ZXJyaWRlOwotCi0gICAgLy8gU3lzdGVtIGNvbG9ycy4KLSAgICBDb2xv
ciBzeXN0ZW1Db2xvcihDU1NWYWx1ZUlELCBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4p
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBwb3BzTWVudUJ5U3BhY2VPclJldHVybigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBT
dHJpbmcgZXh0cmFNZWRpYUNvbnRyb2xzU3R5bGVTaGVldCgpIG92ZXJyaWRlOwotICAgIFN0cmlu
ZyBmb3JtYXRNZWRpYUNvbnRyb2xzQ3VycmVudFRpbWUoZmxvYXQgY3VycmVudFRpbWUsIGZsb2F0
IGR1cmF0aW9uKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHN1cHBvcnRzQ2xvc2VkQ2FwdGlv
bmluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICBTdHJpbmcgbWVkaWFD
b250cm9sc1NjcmlwdCgpIG92ZXJyaWRlOwotCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQot
ICAgIFN0cmluZyBleHRyYUZ1bGxTY3JlZW5TdHlsZVNoZWV0KCkgb3ZlcnJpZGU7Ci0jZW5kaWYK
LSNlbmRpZgotCi0gICAgYm9vbCBzaG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgSFRN
TElucHV0RWxlbWVudCYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIHZpcnR1YWwg
flJlbmRlclRoZW1lR3RrKCk7Ci0KLSAgICBib29sIHBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0Q2hlY2tib3hTaXplKFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBib29sIHBhaW50UmFkaW8oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UmFkaW9TaXplKFJlbmRlclN0
eWxlJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFkanVzdEJ1dHRvblN0eWxlKFJlbmRl
clN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBhZGp1c3RUZXh0RmllbGRTdHlsZShSZW5kZXJTdHls
ZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHBhaW50VGV4dEZp
ZWxkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVj
dCYpIG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRUZXh0QXJlYShjb25zdCBSZW5kZXJPYmplY3Qm
LCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQotICAgIExl
bmd0aEJveCBwb3B1cEludGVybmFsUGFkZGluZ0JveChjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0
IG92ZXJyaWRlOwotCi0gICAgLy8gVGhlIE1hYyBwb3J0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4g
dGhlICJtZW51IGxpc3QiIGFuZCB0aGUgIm1lbnUgbGlzdCBidXR0b24uIgotICAgIC8vIFRoZSBm
b3JtZXIgaXMgdXNlZCB3aGVuIGEgbWVudSBsaXN0IGJ1dHRvbiBoYXMgYmVlbiBzdHlsZWQuIFRo
aXMgaXMgdXNlZCB0byBlbnN1cmUKLSAgICAvLyBBcXVhIHRoZW1lZCBjb250cm9scyB3aGVuZXZl
ciBwb3NzaWJsZS4gV2UgYWx3YXlzIHdhbnQgdG8gdXNlIEdUSysgdGhlbWluZywgc28KLSAgICAv
LyB3ZSBkb24ndCBtYWludGFpbiB0aGlzIGRpZmZlcmVudGlhdGlvbi4KLSAgICB2b2lkIGFkanVz
dE1lbnVMaXN0U3R5bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBhZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRNZW51TGlzdChjb25z
dCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVy
cmlkZTsKLSAgICBib29sIHBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyhjb25zdCBSZW5k
ZXJCb3gmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKLQot
ICAgIHZvaWQgYWRqdXN0U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnRTdHlsZShSZW5k
ZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIHBhaW50
U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyQm94JiwgY29uc3Qg
UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBhZGp1c3RT
ZWFyY2hGaWVsZFN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOwotICAgIGJvb2wgcGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25z
dCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGFkanVz
dFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVu
dCopIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNCdXR0
b24oY29uc3QgUmVuZGVyQm94JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwotCi0gICAgdm9pZCBhZGp1c3RTZWFyY2hGaWVsZENhbmNlbEJ1dHRvblN0eWxlKFJl
bmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcGFp
bnRTZWFyY2hGaWVsZENhbmNlbEJ1dHRvbihjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBQYWludElu
Zm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0KLSNpZiBFTkFCTEUoREFUQUxJU1RfRUxF
TUVOVCkKLSAgICB2b2lkIHBhaW50TGlzdEJ1dHRvbkZvcklucHV0KGNvbnN0IFJlbmRlck9iamVj
dCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgYWRqdXN0
TGlzdEJ1dHRvblN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCopIGNvbnN0IG92ZXJy
aWRlOwotI2VuZGlmCi0KLSAgICBib29sIHBhaW50U2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2Jq
ZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIHZv
aWQgYWRqdXN0U2xpZGVyVHJhY2tTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIGJvb2wgcGFpbnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJP
YmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBhZGp1c3RTbGlkZXJUaHVtYlN0eWxlKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCop
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVy
U3R5bGUmLCBjb25zdCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSNpZiBFTkFCTEUoVklE
RU8pCi0gICAgYm9vbCBoYXNPd25EaXNhYmxlZFN0YXRlSGFuZGxpbmdGb3IoQ29udHJvbFBhcnQp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oY29u
c3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJy
aWRlOwotICAgIGJvb2wgcGFpbnRNZWRpYVBsYXlCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0Jiwg
Y29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIGJvb2wgcGFp
bnRNZWRpYU11dGVCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRNZWRpYVNlZWtCYWNrQnV0
dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
KSBvdmVycmlkZTsKLSAgICBib29sIHBhaW50TWVkaWFTZWVrRm9yd2FyZEJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBwYWludE1lZGlhU2xpZGVyVHJhY2soY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotICAgIGJvb2wgcGFpbnRN
ZWRpYVNsaWRlclRodW1iKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSAgICBib29sIHBhaW50TWVkaWFWb2x1bWVTbGlkZXJU
cmFjayhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
Jikgb3ZlcnJpZGU7Ci0gICAgYm9vbCBwYWludE1lZGlhVm9sdW1lU2xpZGVyVGh1bWIoY29uc3Qg
UmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRl
OwotICAgIGJvb2wgcGFpbnRNZWRpYUN1cnJlbnRUaW1lKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLSNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCi0gICAgYm9vbCBwYWludE1lZGlhVG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24o
Y29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92
ZXJyaWRlOwotI2VuZGlmCi0jZW5kaWYKLQotICAgIFNlY29uZHMgYW5pbWF0aW9uUmVwZWF0SW50
ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYpIGNvbnN0IG92ZXJyaWRlOwotICAg
IFNlY29uZHMgYW5pbWF0aW9uRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyYp
IGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShSZW5kZXJT
dHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICBJbnRSZWN0IHByb2dy
ZXNzQmFyUmVjdEZvckJvdW5kcyhjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRSZWN0Jikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBwYWludFByb2dyZXNzQmFyKGNvbnN0IFJlbmRlck9i
amVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLQotICAg
IElubmVyU3BpbkJ1dHRvbkxheW91dCBpbm5lclNwaW5CdXR0b25MYXlvdXQoY29uc3QgUmVuZGVy
T2JqZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGp1c3RJbm5lclNwaW5CdXR0b25T
dHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKLSAgICBi
b29sIHBhaW50SW5uZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50
SW5mbyYsIGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKLQotICAgIFN0cmluZyBmaWxlTGlzdE5h
bWVGb3JXaWR0aChjb25zdCBGaWxlTGlzdCosIGNvbnN0IEZvbnRDYXNjYWRlJiwgaW50IHdpZHRo
LCBib29sIG11bHRpcGxlRmlsZXNBbGxvd2VkKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHN0YXRp
YyB2b2lkIHNldFRleHRJbnB1dEJvcmRlcnMoUmVuZGVyU3R5bGUmKTsKLQotI2lmIEVOQUJMRShW
SURFTykKLSAgICBib29sIHBhaW50TWVkaWFCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IGNoYXIqIGljb25OYW1lKTsKLSNl
bmRpZgotCi0gICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlUHJvZ3Jlc3NSZWN0KGNvbnN0IFJl
bmRlck9iamVjdCYsIGNvbnN0IEludFJlY3QmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggYTAyMzI0MWU2NzcuLmI5ZTM1Njg4NDNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDIwLTAyLTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXSBTdG9wIHVzaW5nIGd0ayBmb3JlaWduIGRyYXdpbmcg
QVBJIHRvIHN0eWxlIGZvcm0gY29udHJvbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwODEyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dGhlbWVEaWRDaGFuZ2UpOiBOb3RpZnkgUmVu
ZGVyVGhlbWUgYWJvdXQgdGhlIHRoZW1lIGNoYW5nZSB0byBjbGVhciB0aGUgY29sb3JzIGNhY2hl
LgorCiAyMDIwLTAyLTIzICBBZHJpYW4gUGVyZXogZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5j
b20+CiAKICAgICAgICAgTm9uLXVuaWZpZWQgYnVpbGQgZml4ZXMgbGF0ZSBGZWJydWFyeSAyMDIw
IGVkaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9XZWJQYWdlR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9X
ZWJQYWdlR3RrLmNwcAppbmRleCA4ZTg2ZWQzYjEyYS4uMTUzOTkwMWU2YzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKQEAg
LTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2UuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Bhc3RlYm9hcmRIZWxwZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyVGhlbWUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1NldHRpbmdzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1VzZXJBZ2VudC5oPgpAQCAtMTY0LDYgKzE2NSw3IEBAIHZvaWQgV2Vi
UGFnZTo6dGhlbWVEaWRDaGFuZ2UoU3RyaW5nJiYgdGhlbWVOYW1lKQogCiAgICAgbV90aGVtZU5h
bWUgPSBXVEZNb3ZlKHRoZW1lTmFtZSk7CiAgICAgZ19vYmplY3Rfc2V0KGd0a19zZXR0aW5nc19n
ZXRfZGVmYXVsdCgpLCAiZ3RrLXRoZW1lLW5hbWUiLCBtX3RoZW1lTmFtZS51dGY4KCkuZGF0YSgp
LCBudWxscHRyKTsKKyAgICBSZW5kZXJUaGVtZTo6c2luZ2xldG9uKCkucGxhdGZvcm1Db2xvcnNE
aWRDaGFuZ2UoKTsKICAgICBQYWdlOjp1cGRhdGVTdHlsZUZvckFsbFBhZ2VzQWZ0ZXJHbG9iYWxD
aGFuZ2VJbkVudmlyb25tZW50KCk7CiB9CiAK
</data>
<flag name="review"
          id="407041"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>