<?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>119036</bug_id>
          
          <creation_ts>2013-07-24 00:36:58 -0700</creation_ts>
          <short_desc>[WK2][GTK][EFL] Unify TextChecker implementations of Gtk and Efl into one</short_desc>
          <delta_ts>2017-03-11 11:15:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>118643</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kwang Yul Seo">skyul</reporter>
          <assigned_to name="Kwang Yul Seo">skyul</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>g.czajkowski</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>911240</commentid>
    <comment_count>0</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2013-07-24 00:36:58 -0700</bug_when>
    <thetext>Unify TextCheckerEfl.cpp and TextCheckerGtk.cpp into TextChecker.cpp because two implementations are mostly the same. This remove code duplication and Gtk port can reuse the Efl implementation of asynchronous spell checking and unified text checker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911245</commentid>
    <comment_count>1</comment_count>
      <attachid>207378</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2013-07-24 00:45:07 -0700</bug_when>
    <thetext>Created attachment 207378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911246</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-24 00:46:32 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911268</commentid>
    <comment_count>3</comment_count>
      <attachid>207378</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-07-24 03:37:49 -0700</bug_when>
    <thetext>Comment on attachment 207378
Patch

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

&gt; Source/WebKit2/ChangeLog:27
&gt; +        * UIProcess/TextChecker.cpp: Renamed from Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp.

I am wondering whether TextChecker.cpp is a proper name. We&apos;ll have TextChecker.cpp TextCheckerQt.cpp and TextCheckerMac.mm if the commit lands.
How about DefaultTextChecker.cpp which will be used for EFL and GTK?

In addition, we could consider to get rid of TextCheckerQt.cpp in a favour of DefaultTextChecker.cpp as its implementation uses the client&apos;s one. If the client is not defined, DefaultTextChecker.cpp should behave as the TextCheckerQt.cpp. I&apos;d better ask Qt guys about that.

&gt; Source/WebKit2/UIProcess/TextChecker.cpp:35
&gt; +#if ENABLE(SPELLCHECK)

Would be nice if we could omit usage of the macro in the whole file. Mario Sanchez Prada has proposed it, maybe it&apos;s a good chance to get rid of it here? See https://bugs.webkit.org/show_bug.cgi?id=95718#c2 for more details.

&gt; Source/WebKit2/UIProcess/TextChecker.cpp:66
&gt; +#if ENABLE(SPELLCHECK)
&gt; +    return WebTextChecker::shared()-&gt;client().continuousSpellCheckingAllowed();
&gt; +#else
&gt; +    return false;
&gt; +#endif

IMHO it&apos;s better to implement the methods once they are used (when the client implements it). As far as I know neither EFL or GTK implement it. I&apos;d leave it as not implemented.

&gt; Source/WebKit2/UIProcess/TextChecker.cpp:84
&gt; +void TextChecker::setGrammarCheckingEnabled(bool isGrammarCheckingEnabled)

Ditto.

&gt; Source/WebKit2/UIProcess/TextChecker.cpp:108
&gt; +void TextChecker::grammarCheckingEnabledStateChanged(bool enabled)

Ditto.

&gt; Source/WebKit2/UIProcess/TextChecker.cpp:221
&gt; +void TextChecker::checkGrammarOfString(int64_t spellDocumentTag, const UChar* text, uint32_t length, Vector&lt;WebCore::GrammarDetail&gt;&amp; grammarDetails, int32_t&amp; badGrammarLocation, int32_t&amp; badGrammarLength)

Ditto.

&gt; Source/WebKit2/UIProcess/TextChecker.cpp:235
&gt; +bool TextChecker::spellingUIIsShowing()

Ditto.

&gt; Source/WebKit2/UIProcess/TextChecker.cpp:244
&gt; +void TextChecker::toggleSpellingUIIsShowing()

Ditto.

&gt; Source/WebKit2/UIProcess/TextChecker.cpp:251
&gt; +void TextChecker::updateSpellingUIWithMisspelledWord(int64_t spellDocumentTag, const String&amp; misspelledWord)

Ditto.

&gt; Source/WebKit2/UIProcess/TextChecker.cpp:261
&gt; +void TextChecker::updateSpellingUIWithGrammarString(int64_t spellDocumentTag, const String&amp; badGrammarPhrase, const GrammarDetail&amp; grammarDetail)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911457</commentid>
    <comment_count>4</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2013-07-24 16:30:48 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I am wondering whether TextChecker.cpp is a proper name. We&apos;ll have TextChecker.cpp TextCheckerQt.cpp and TextCheckerMac.mm if the commit lands.
&gt; How about DefaultTextChecker.cpp which will be used for EFL and GTK?

I think TextCheckerDefault.cpp is a better name. Similar cases are Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp and Source/WTF/wtf/unicode/CollatorDefault.cpp.

&gt; In addition, we could consider to get rid of TextCheckerQt.cpp in a favour of DefaultTextChecker.cpp as its implementation uses the client&apos;s one. If the client is not defined, DefaultTextChecker.cpp should behave as the TextCheckerQt.cpp. I&apos;d better ask Qt guys about that.

That&apos;s a good idea. Let&apos;s do this in a separate bug.
 
&gt; &gt; Source/WebKit2/UIProcess/TextChecker.cpp:35
&gt; &gt; +#if ENABLE(SPELLCHECK)
&gt; 
&gt; Would be nice if we could omit usage of the macro in the whole file. Mario Sanchez Prada has proposed it, maybe it&apos;s a good chance to get rid of it here? See https://bugs.webkit.org/show_bug.cgi?id=95718#c2 for more details.

I agree with Mario. I will get rid of ENABLE(SPELLCHECK) guards in the file and follow the Gtk style.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/TextChecker.cpp:66
&gt; &gt; +#if ENABLE(SPELLCHECK)
&gt; &gt; +    return WebTextChecker::shared()-&gt;client().continuousSpellCheckingAllowed();
&gt; &gt; +#else
&gt; &gt; +    return false;
&gt; &gt; +#endif
&gt; 
&gt; IMHO it&apos;s better to implement the methods once they are used (when the client implements it). As far as I know neither EFL or GTK implement it. I&apos;d leave it as not implemented.

It makes sense when there is only one port. Now we have at least two ports (Gtk and Efl) and each port has varying degree of implementations. For example, only the EFL port has implementations of uniqueSpellDocumentTagCallback and closeSpellDocumentWithTagCallback.

I think it is better to implement all the methods so that later each port can implement some methods without touching TextCheckerDefault.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911458</commentid>
    <comment_count>5</comment_count>
      <attachid>207419</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2013-07-24 16:38:09 -0700</bug_when>
    <thetext>Created attachment 207419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911526</commentid>
    <comment_count>6</comment_count>
      <attachid>207419</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-07-25 00:28:50 -0700</bug_when>
    <thetext>Comment on attachment 207419
Patch

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

Looks fine. Added some comments before formal review.

&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:73
&gt; +void TextChecker::setGrammarCheckingEnabled(bool isContinuousSpellCheckingEnabled)

You&apos;ve probably thought of isGrammarCheckingEnabled param.

&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:75
&gt; +    if (state().isContinuousSpellCheckingEnabled == isContinuousSpellCheckingEnabled)

if (state().isGrammarCheckingEnabled ... )

&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:77
&gt; +    textCheckerState.isContinuousSpellCheckingEnabled = isContinuousSpellCheckingEnabled;

textCheckerState.isGrammarCheckingEnabled = ...

&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:78
&gt; +    WebTextChecker::shared()-&gt;client().setContinuousSpellCheckingEnabled(isContinuousSpellCheckingEnabled);

... setGrammarCheckingEnabled(isGrammarCheckingEnabled);

That&apos;s why I was against of adding methods that can not be used/tested :p

Additionally, could we match the style of the method to TextChecker::setContinuousSpellCheckingEnabled? They will look similar then (only the setting will be different).

&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:94
&gt; +    WebTextChecker::shared()-&gt;client().setGrammarCheckingEnabled(isGrammarCheckingEnabled);

I am not sure, but I guess we don&apos;t need to send the notification to the client in this case. We are doing it in the setGrammarCheckingEnabled which is called when user has changed an appropriate context menu option.

Additionally, could we keep the style of the above method?

&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:168
&gt; +#endif

Would be nice to add a comment to which #if it refers to.

&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:236
&gt; +#endif

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911527</commentid>
    <comment_count>7</comment_count>
      <attachid>207419</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2013-07-25 00:43:37 -0700</bug_when>
    <thetext>Comment on attachment 207419
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:78
&gt;&gt; +    WebTextChecker::shared()-&gt;client().setContinuousSpellCheckingEnabled(isContinuousSpellCheckingEnabled);
&gt; 
&gt; ... setGrammarCheckingEnabled(isGrammarCheckingEnabled);
&gt; 
&gt; That&apos;s why I was against of adding methods that can not be used/tested :p
&gt; 
&gt; Additionally, could we match the style of the method to TextChecker::setContinuousSpellCheckingEnabled? They will look similar then (only the setting will be different).

Oops. I will fix it. Now I see your point :)

&gt;&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:94
&gt;&gt; +    WebTextChecker::shared()-&gt;client().setGrammarCheckingEnabled(isGrammarCheckingEnabled);
&gt; 
&gt; I am not sure, but I guess we don&apos;t need to send the notification to the client in this case. We are doing it in the setGrammarCheckingEnabled which is called when user has changed an appropriate context menu option.
&gt; 
&gt; Additionally, could we keep the style of the above method?

You are right. I will remove the notification.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911528</commentid>
    <comment_count>8</comment_count>
      <attachid>207436</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2013-07-25 01:09:44 -0700</bug_when>
    <thetext>Created attachment 207436
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911542</commentid>
    <comment_count>9</comment_count>
      <attachid>207436</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-07-25 02:16:48 -0700</bug_when>
    <thetext>Comment on attachment 207436
Patch

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

&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:69
&gt; +
&gt; +    WebTextChecker::shared()-&gt;client().setContinuousSpellCheckingEnabled(isContinuousSpellCheckingEnabled);

Nit: IMHO the comment about the setting change has been removed unnecessarily. It shows the difference between setContinuousSpellCheckingEnabled(bool) and continuousSpellCheckingEnabledStateChanged(bool)

&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:79
&gt; +
&gt; +    WebTextChecker::shared()-&gt;client().setGrammarCheckingEnabled(isGrammarCheckingEnabled);

Nit: I&apos;d add the comment here as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911544</commentid>
    <comment_count>10</comment_count>
      <attachid>207441</attachid>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2013-07-25 02:20:57 -0700</bug_when>
    <thetext>Created attachment 207441
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911545</commentid>
    <comment_count>11</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2013-07-25 02:21:39 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:69
&gt; &gt; +
&gt; &gt; +    WebTextChecker::shared()-&gt;client().setContinuousSpellCheckingEnabled(isContinuousSpellCheckingEnabled);
&gt; 
&gt; Nit: IMHO the comment about the setting change has been removed unnecessarily. It shows the difference between setContinuousSpellCheckingEnabled(bool) and continuousSpellCheckingEnabledStateChanged(bool)

Done.

&gt; &gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:79
&gt; &gt; +
&gt; &gt; +    WebTextChecker::shared()-&gt;client().setGrammarCheckingEnabled(isGrammarCheckingEnabled);
&gt; 
&gt; Nit: I&apos;d add the comment here as well.

Done.

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911551</commentid>
    <comment_count>12</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-07-25 02:33:04 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #9)
&gt; &gt; &gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:69
&gt; &gt; &gt; +
&gt; &gt; &gt; +    WebTextChecker::shared()-&gt;client().setContinuousSpellCheckingEnabled(isContinuousSpellCheckingEnabled);
&gt; &gt; 
&gt; &gt; Nit: IMHO the comment about the setting change has been removed unnecessarily. It shows the difference between setContinuousSpellCheckingEnabled(bool) and continuousSpellCheckingEnabledStateChanged(bool)
&gt; 
&gt; Done.
&gt; 
&gt; &gt; &gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:79
&gt; &gt; &gt; +
&gt; &gt; &gt; +    WebTextChecker::shared()-&gt;client().setGrammarCheckingEnabled(isGrammarCheckingEnabled);
&gt; &gt; 
&gt; &gt; Nit: I&apos;d add the comment here as well.
&gt; 
&gt; Done.
&gt; 
&gt; Thanks for the review!

You&apos;re welcome! Feel free to add me to CC in spellchecking bugs if you&apos;d like to hear my opinions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911553</commentid>
    <comment_count>13</comment_count>
      <attachid>207441</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-07-25 02:34:32 -0700</bug_when>
    <thetext>Comment on attachment 207441
Patch

LGTM!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>913732</commentid>
    <comment_count>14</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-08-01 06:34:59 -0700</bug_when>
    <thetext>Chris.
Would you mind sharing TextCheckingEfl.cpp with GTK+? IMHO it&apos;s good direction to have sharable TextCheckerDefault.cpp as well as TextCheckerEnchant.cpp
I&apos;d like to know your views. Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914033</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-08-02 00:21:31 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Chris.
&gt; Would you mind sharing TextCheckingEfl.cpp with GTK+? IMHO it&apos;s good direction to have sharable TextCheckerDefault.cpp as well as TextCheckerEnchant.cpp
&gt; I&apos;d like to know your views. Thanks

No, I do not mind. I think it is nice to share as much code as possible with other ports. I like the patch but a WK2 owner will need to sign off on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914034</commentid>
    <comment_count>16</comment_count>
      <attachid>207441</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-08-02 00:23:41 -0700</bug_when>
    <thetext>Comment on attachment 207441
Patch

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

&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:31
&gt; +#if PLATFORM(EFL) || PLATFORM(GTK)

I don&apos;t really think we need this #if. Ports that do not wish to use it can simply not add it to their build system, right?
See for e.g. Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>914039</commentid>
    <comment_count>17</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-08-02 00:39:21 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; Chris.
&gt; &gt; Would you mind sharing TextCheckingEfl.cpp with GTK+? IMHO it&apos;s good direction to have sharable TextCheckerDefault.cpp as well as TextCheckerEnchant.cpp
&gt; &gt; I&apos;d like to know your views. Thanks
&gt; 
&gt; No, I do not mind. I think it is nice to share as much code as possible with other ports. I like the patch but a WK2 owner will need to sign off on this.

Yes, WebKit direction is to share code between ports as much as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952468</commentid>
    <comment_count>18</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-11-20 00:26:54 -0800</bug_when>
    <thetext>Hello Kwang,
Are you planning to continue working on this? I was trying to informally review this patch as it uses EFL&apos;s implementation of async spellchecking and it just needs minor improvements.

As I already mention. there are plans to get rid of sync implementation of spellchecking (in WebCore and ports as well) in a favour of async path.

As far as I know WebKit-GTK+ (both WK1 and WK2) implements synchronous spellchecking only. Switching to async path of spellchecing without this patch will completely break this feature for WebKit-GTK+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>957588</commentid>
    <comment_count>19</comment_count>
    <who name="Kwang Yul Seo">skyul</who>
    <bug_when>2013-12-08 01:43:26 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Hello Kwang,
&gt; Are you planning to continue working on this? I was trying to informally review this patch as it uses EFL&apos;s implementation of async spellchecking and it just needs minor improvements.
&gt; 
&gt; As I already mention. there are plans to get rid of sync implementation of spellchecking (in WebCore and ports as well) in a favour of async path.
&gt; 
&gt; As far as I know WebKit-GTK+ (both WK1 and WK2) implements synchronous spellchecking only. Switching to async path of spellchecing without this patch will completely break this feature for WebKit-GTK+.

Yes, I am working on this at WebKitGTK hackfest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153327</commentid>
    <comment_count>20</comment_count>
      <attachid>207441</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-06 19:43:58 -0800</bug_when>
    <thetext>Comment on attachment 207441
Patch

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

Thanks for this nice cleanup. r=me if you can get an owner to rubber stamp this. Owners?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitTextChecker.h:40
&gt; +    bool isSpellCheckingEnabled();

This function should be const.

&gt;&gt; Source/WebKit2/UIProcess/TextCheckerDefault.cpp:31
&gt;&gt; +#if PLATFORM(EFL) || PLATFORM(GTK)
&gt; 
&gt; I don&apos;t really think we need this #if. Ports that do not wish to use it can simply not add it to their build system, right?
&gt; See for e.g. Source/WebCore/platform/text/LocaleToScriptMappingDefault.cpp

Don&apos;t forget to remove this #if, as Chris requested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153330</commentid>
    <comment_count>21</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2016-01-06 19:50:33 -0800</bug_when>
    <thetext>This patch is likely obsolete after https://bugs.webkit.org/show_bug.cgi?id=144648.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153360</commentid>
    <comment_count>22</comment_count>
      <attachid>207441</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-06 21:05:04 -0800</bug_when>
    <thetext>Comment on attachment 207441
Patch

Certainly it will need rebased, but I think the basic idea is still sound, merging the two files together. Though EFL&apos;s file is no longer the same as ours, so I guess this will need some work to rebase.

I will r- just because we will want to review again if this is rebased.

Thanks for your patch, Kwang, and sorry for the delay in getting a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1286807</commentid>
    <comment_count>23</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-03-11 11:15:15 -0800</bug_when>
    <thetext>EFL port has been removed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207378</attachid>
            <date>2013-07-24 00:45:07 -0700</date>
            <delta_ts>2013-07-24 16:38:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119036-20130724164455.patch</filename>
            <type>text/plain</type>
            <size>34593</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzMDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjA5ZGFlZTUyMDYyODFk
OGI3NjBiMTI5NDBhZDQ4YTlmNWVhOTQ2NS4uY2E4NWNkMGE1MjU1MjJhNGE0MzY4NzU1MGI3YmRl
MmJlMmIxZjk0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEzLTA3LTI0ICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgW1dLMl1bR1RLXVtF
RkxdIFVuaWZ5IFRleHRDaGVja2VyIGltcGxlbWVudGF0aW9ucyBvZiBHdGsgYW5kIEVmbCBpbnRv
IG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5
MDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5p
ZnkgVGV4dENoZWNrZXJFZmwuY3BwIGFuZCBUZXh0Q2hlY2tlckd0ay5jcHAgaW50byBUZXh0Q2hl
Y2tlci5jcHAKKyAgICAgICAgYmVjYXVzZSB0d28gaW1wbGVtZW50YXRpb25zIGFyZSBtb3N0bHkg
dGhlIHNhbWUuIFRoaXMgcmVtb3ZlIGNvZGUKKyAgICAgICAgZHVwbGljYXRpb24gYW5kIEd0ayBw
b3J0IGNhbiByZXVzZSB0aGUgRWZsIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIGFzeW5jaHJv
bm91cyBzcGVsbCBjaGVja2luZyBhbmQgdW5pZmllZCB0ZXh0IGNoZWNrZXIuCisKKyAgICAgICAg
VGV4dENoZWNrZXIuY3BwIGRvZXMgbm90IGludm9sdmUgYW55IHNwZWxsIGNoZWNraW5nIGVuZ2lu
ZSBzdWNoIGFzCisgICAgICAgIGVuY2hhbnQsIHNvIHdlIGNhbiB0aGluayBvZiBpdCBhcyB0aGUg
ZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgV0syCisgICAgICAgIHVubGVzcyBhIHBvcnQgcHJv
dmlkZXMgaXRzIG93biBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogUGxhdGZvcm1FZmwu
Y21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3Bw
OgorICAgICAgICAoV2ViS2l0VGV4dENoZWNrZXI6OldlYktpdFRleHRDaGVja2VyKToKKyAgICAg
ICAgUmVtb3ZlIG1lbWJlciB2YXJpYWJsZSBtX3NwZWxsQ2hlY2tpbmdFbmFibGVkIG1lbWJlciBh
bmQgcmVhZCBpdCBmcm9tCisgICAgICAgIFRleHRDaGVja2VyOjpzdGF0ZSgpLmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkIHRvIGF2b2lkIGR1cGxpY2F0aW9uIG9mIGluZm9ybWF0aW9u
LgorICAgICAgICAoV2ViS2l0VGV4dENoZWNrZXI6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWQpOgor
ICAgICAgICAoV2ViS2l0VGV4dENoZWNrZXI6OnNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9UZXh0Q2hlY2tlci5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcC4KKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnNl
dENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1l
bnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50
V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6Om5leHRXb3JkT2Zmc2V0KToKKyAgICAgICAgKFdl
YktpdDo6VGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYktp
dDo6VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6
OlRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6cmVx
dWVzdENoZWNraW5nT2ZTdHJpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvVGV4dENoZWNr
ZXJHdGsuY3BwOiBSZW1vdmVkLgorCiAyMDEzLTA3LTIzICBLd2FuZyBZdWwgU2VvICA8c2t5dWxA
Y29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgW1dLMl0gTW92ZSB0aGUgaW1wbGVtZW50YXRpb24g
b2YgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCB0byBXZWJFZGl0b3JDbGll
bnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IGRiYWFjNTI1NzM5OGQ1MzMxZjE0ZDEyNWZm
ZWZjZjYxMTA4MDExNTYuLjNmYWI0ZjdmZDVkNTljMTUzOTYwZDI4ZjI0OWNkOWViMmNlODQzNjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0yNTksNiArMjU5LDcgQEAgc2V0KFdlYktpdDJfU09V
UkNFUwogCiAgICAgVUlQcm9jZXNzL1Jlc3BvbnNpdmVuZXNzVGltZXIuY3BwCiAgICAgVUlQcm9j
ZXNzL1N0YXRpc3RpY3NSZXF1ZXN0LmNwcAorICAgIFVJUHJvY2Vzcy9UZXh0Q2hlY2tlci5jcHAK
ICAgICBVSVByb2Nlc3MvVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcAogICAgIFVJUHJvY2Vzcy9W
aXNpdGVkTGlua1Byb3ZpZGVyLmNwcAogICAgIFVJUHJvY2Vzcy9XZWJBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlclByb3h5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDFkNTY4
OWUwNWFhNDZlNmMxY2NlODAxNDExOTE5ZTVjYTZlM2UzZi4uY2ZjOTBhNDAzZWJjNWU0ZTFiODFm
MjA3N2Y4YTIzYTFkZmY4MDFjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC04
MTUsNyArODE1LDYgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFByb3h5LmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9jYWlyby9CYWNraW5nU3RvcmVDYWlyby5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvRXhwZXJpbWVudGFsRmVhdHVyZXMuY3BwIFwKLQlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9XZWJDb250ZXh0R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJDb250ZXh0TWVudVByb3h5R3RrLmggXApAQCAtODczLDYgKzg3Miw3IEBA
IHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3NvdXAvV2Vi
U291cFJlcXVlc3RNYW5hZ2VyUHJveHkuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
c291cC9XZWJTb3VwUmVxdWVzdE1hbmFnZXJQcm94eS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvVGV4dENoZWNrZXIuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVj
a2VyLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyQ29tcGxldGlv
bi5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXJDb21wbGV0aW9uLmNw
cCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuY3BwIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggZGJiNzY2YmFmMjJlMTQ2NTgxZTI4MzM3MGVi
MzI1ZjEwMGE2MzFhYy4uZWI3YTk1NjQ4ZWViMDM5ZWQ1YmVhYjJjMmE5MjZmM2RkMmM2ZWE2ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTExNyw3ICsxMTcsNiBAQCBsaXN0KEFQUEVO
RCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvZWZsL1BhZ2VWaWV3cG9ydENvbnRyb2xs
ZXJDbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9SZXF1ZXN0TWFuYWdlckNsaWVudEVm
bC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyQ2xpZW50RWZsLmNwcAotICAgIFVJ
UHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9WaWJyYXRp
b25DbGllbnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9WaWV3Q2xpZW50RWZsLmNwcAogICAg
IFVJUHJvY2Vzcy9lZmwvV2ViVmlld0VmbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmNwcAppbmRleCA4OWU3NDZkNDdl
NWZjNjVlMWU3NDg0Y2QwYzZhMDUyMmFjMDg0NjQzLi41MmY1MzRmOWMzMDhlNDgyNWI2YTY5ZjY5
YjQ0YTFmYjQ5NDMwOWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBF
TkFCTEUoU1BFTExDSEVDSykKIAorI2luY2x1ZGUgIlRleHRDaGVja2VyLmgiCisjaW5jbHVkZSAi
VGV4dENoZWNrZXJTdGF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKQEAgLTgzLDcgKzg1LDYgQEAgV2ViS2l0VGV4dENoZWNrZXI6On5X
ZWJLaXRUZXh0Q2hlY2tlcigpCiAKIFdlYktpdFRleHRDaGVja2VyOjpXZWJLaXRUZXh0Q2hlY2tl
cigpCiAgICAgOiBtX3RleHRDaGVja2VyKFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudDo6Y3Jl
YXRlKCkpCi0gICAgLCBtX3NwZWxsQ2hlY2tpbmdFbmFibGVkKGZhbHNlKQogewogICAgIFdLVGV4
dENoZWNrZXJDbGllbnQgd2tUZXh0Q2hlY2tlckNsaWVudCA9IHsKICAgICAgICAga1dLVGV4dENo
ZWNrZXJDbGllbnRDdXJyZW50VmVyc2lvbiwKQEAgLTEyOCwxMiArMTI5LDEzIEBAIHZvaWQgV2Vi
S2l0VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQogICAgIG1fdGV4
dENoZWNrZXItPmlnbm9yZVdvcmQod29yZCk7CiB9CiAKLXZvaWQgV2ViS2l0VGV4dENoZWNrZXI6
OnNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK2Jvb2wgV2ViS2l0VGV4dENo
ZWNrZXI6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQogewotICAgIGlmIChtX3NwZWxsQ2hlY2tp
bmdFbmFibGVkID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3NwZWxsQ2hlY2tp
bmdFbmFibGVkID0gZW5hYmxlZDsKKyAgICByZXR1cm4gVGV4dENoZWNrZXI6OnN0YXRlKCkuaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7Cit9CiAKK3ZvaWQgV2ViS2l0VGV4dENoZWNr
ZXI6OnNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKICAgICAvLyBXZSBu
ZWVkIHRvIG5vdGlmeSB0aGUgV2ViIHByb2Nlc3MgdGhhdCB0aGlzIGhhcyBjaGFuZ2VkLgogICAg
IFdLVGV4dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQo
ZW5hYmxlZCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRUZXh0Q2hlY2tlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0VGV4dENoZWNrZXIuaAppbmRleCAxNWY3NjRmNjE2YTI5MTZhNGQ5ODE0YmZhMmUwYzgx
ZjE4MTgxZWI2Li45NWY5NzhjNzZhOGVlNDQ5ZDgzNWRmY2Y3ZmJkMjc0NzliNTZjNThhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVj
a2VyLmgKQEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldlYktpdFRleHRD
aGVja2VyKCk7CiAKICAgICAvLyBGb3IgaW1wbGVtZW50aW5nIFRleHRDaGVja2VyQ2xpZW50Lgot
ICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZCgpIHsgcmV0dXJuIG1fc3BlbGxDaGVja2lu
Z0VuYWJsZWQ7IH0KKyAgICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKICAgICB2b2lk
IHNldFNwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCk7CiAgICAgdm9pZCBjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgaW50JiBtaXNzcGVsbGluZ0xlbmd0aCk7CiAgICAgVmVjdG9yPFN0cmluZz4gZ2V0R3Vl
c3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKTsKQEAgLTUzLDcgKzUzLDYgQEAgcHJpdmF0
ZToKIAogICAgIE93blB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tlckVuY2hhbnQ+IG1fdGV4dENoZWNr
ZXI7CiAgICAgR1JlZlB0cjxHUHRyQXJyYXk+IG1fc3BlbGxDaGVja2luZ0xhbmd1YWdlczsKLSAg
ICBib29sIG1fc3BlbGxDaGVja2luZ0VuYWJsZWQ7CiB9OwogCiAjZW5kaWYgLy8gRU5BQkxFKFNQ
RUxMQ0hFQ0spCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNr
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41ZTBlZjk1MjAzYWM0NzI5NzI4ZTc4MDQxODEwOWM2MDAxYzE2OTBiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmNwcApAQCAtMCww
ICsxLDMyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgorCisjaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9S
TShHVEspCisKKyNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCisKKyNpZiBFTkFCTEUoU1BF
TExDSEVDSykKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgorI2luY2x1ZGUgIldlYlRl
eHRDaGVja2VyLmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitzdGF0aWMgVGV4dENoZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRl
OworCitjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQoreworICAg
IHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOworICAgIGlmIChkaWRJbml0
aWFsaXplU3RhdGUpCisgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOworCisgICAgdGV4
dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGZhbHNlOwor
ICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gZmFsc2U7CisK
KyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOworCisgICAgcmV0dXJuIHRleHRDaGVja2Vy
U3RhdGU7Cit9CisKK2Jvb2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdB
bGxvd2VkKCkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICByZXR1cm4gV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQo
KTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgVGV4dENoZWNr
ZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGlmIChz
dGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID09IGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0
YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQ7CisKKyAgICAvLyBOb3RpZnkgdGhlIGNsaWVudCBhYm91dCB0aGUgc2V0
dGluZyBjaGFuZ2UuCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQpOworI2VuZGlmCit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCit7CisjaWYgRU5BQkxF
KFNQRUxMQ0hFQ0spCisgICAgaWYgKHN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09
IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHRleHRDaGVj
a2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkOworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNo
ZWNraW5nRW5hYmxlZChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oZW5hYmxlZCk7CisjZW5kaWYKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6Y29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKK3sKKyNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKKyAgICBpZiAoc3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hl
Y2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOworI2VuZGlmCit9CisKK3ZvaWQgVGV4dENo
ZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQor
eworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGVuYWJs
ZWQpOworI2VuZGlmCit9CisKK2ludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1l
bnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAg
IHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9j
dW1lbnRUYWcocGFnZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKKyAgICByZXR1
cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRX
aXRoVGFnKGludDY0X3QgdGFnKQoreworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIFdlYlRl
eHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh0
YWcpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGFnKTsKKyNlbmRpZgorfQorCisjaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spICYmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCitzdGF0aWMgaW50
IG5leHRXb3JkT2Zmc2V0KGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBpbnQgY3VycmVu
dE9mZnNldCkKK3sKKyAgICAvLyBGSVhNRTogYXZvaWQgY3JlYXRpbmcgdGV4dEl0ZXJhdG9yIG9i
amVjdCBoZXJlLCBpdCBjb3VsZCBiZSBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuCisgICAgLy8gICAg
ICAgIGlzVGV4dEJyZWFrKCkgbGVhdmVzIHRoZSBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmly
c3QgYm91bmRhcnkgcG9zaXRpb24gYXQKKyAgICAvLyAgICAgICAgb3IgYWZ0ZXIgIm9mZnNldCIg
KHVicmtfaXNCb3VuZGFyeSBzaWRlIGVmZmVjdCkuCisgICAgLy8gICAgICAgIEZvciBtYW55IHdv
cmQgc2VwYXJhdG9ycywgdGhlIG1ldGhvZCBkb2Vzbid0IHByb3Blcmx5IGRldGVybWluZSB0aGUg
Ym91bmRhcmllcworICAgIC8vICAgICAgICB3aXRob3V0IHJlc2V0dGluZyB0aGUgaXRlcmF0b3Iu
CisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHRleHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9y
KHRleHQsIGxlbmd0aCk7CisgICAgaWYgKCF0ZXh0SXRlcmF0b3IpCisgICAgICAgIHJldHVybiBj
dXJyZW50T2Zmc2V0OworCisgICAgaW50IHdvcmRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0OworICAg
IHdoaWxlICh3b3JkT2Zmc2V0IDwgbGVuZ3RoICYmIGlzVGV4dEJyZWFrKHRleHRJdGVyYXRvciwg
d29yZE9mZnNldCkpCisgICAgICAgICsrd29yZE9mZnNldDsKKworICAgIC8vIERvIG5vdCB0cmVh
dCB0aGUgd29yZCdzIGJvdW5kYXJ5IGFzIGEgc2VwYXJhdG9yLgorICAgIGlmICghY3VycmVudE9m
ZnNldCAmJiB3b3JkT2Zmc2V0ID09IDEpCisgICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0Owor
CisgICAgLy8gT21pdCBtdWx0aXBsZSBzZXBhcmF0b3JzLgorICAgIGlmICgod29yZE9mZnNldCAt
IGN1cnJlbnRPZmZzZXQpID4gMSkKKyAgICAgICAgLS13b3JkT2Zmc2V0OworCisgICAgcmV0dXJu
IHdvcmRPZmZzZXQ7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNQRUxMQ0hFQ0spCisKKyNpZiBVU0Uo
VU5JRklFRF9URVhUX0NIRUNLSU5HKQorVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENo
ZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29u
c3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMpCit7Cisg
ICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcGFyYWdyYXBoQ2hlY2tpbmdSZXN1bHQ7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBUZXh0Q2hlY2tp
bmdUeXBlU3BlbGxpbmcpIHsKKyAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHRleHRJdGVyYXRv
ciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7CisgICAgICAgIGlmICghdGV4dEl0
ZXJhdG9yKQorICAgICAgICAgICAgcmV0dXJuIHBhcmFncmFwaENoZWNraW5nUmVzdWx0OworCisg
ICAgICAgIC8vIE9taXQgdGhlIHdvcmQgc2VwYXJhdG9ycyBhdCB0aGUgYmVnaW5uaW5nL2VuZCBv
ZiB0aGUgdGV4dCB0byBkb24ndCB1bm5lY2Vzc2FyaWx5CisgICAgICAgIC8vIGludm9sdmUgdGhl
IGNsaWVudCB0byBjaGVjayBzcGVsbGluZyBmb3IgdGhlbS4KKyAgICAgICAgaW50IG9mZnNldCA9
IG5leHRXb3JkT2Zmc2V0KHRleHQsIGxlbmd0aCwgMCk7CisgICAgICAgIGludCBsZW5ndGhTdHJp
cCA9IGxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGxlbmd0aFN0cmlwID4gMCAmJiBpc1RleHRCcmVh
ayh0ZXh0SXRlcmF0b3IsIGxlbmd0aFN0cmlwIC0gMSkpCisgICAgICAgICAgICAtLWxlbmd0aFN0
cmlwOworCisgICAgICAgIHdoaWxlIChvZmZzZXQgPj0gMCAmJiBvZmZzZXQgPCBsZW5ndGhTdHJp
cCkgeworICAgICAgICAgICAgaW50MzJfdCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAg
ICAgICAgICBpbnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGNoZWNr
U3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCB0ZXh0ICsgb2Zmc2V0LCBsZW5ndGhT
dHJpcCAtIG9mZnNldCwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwor
ICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ0xlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IG1pc3NwZWxsaW5nUmVzdWx0Owor
ICAgICAgICAgICAgbWlzc3BlbGxpbmdSZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGVTcGVs
bGluZzsKKyAgICAgICAgICAgIG1pc3NwZWxsaW5nUmVzdWx0LmxvY2F0aW9uID0gb2Zmc2V0ICsg
bWlzc3BlbGxpbmdMb2NhdGlvbjsKKyAgICAgICAgICAgIG1pc3NwZWxsaW5nUmVzdWx0Lmxlbmd0
aCA9IG1pc3NwZWxsaW5nTGVuZ3RoOworICAgICAgICAgICAgcGFyYWdyYXBoQ2hlY2tpbmdSZXN1
bHQuYXBwZW5kKG1pc3NwZWxsaW5nUmVzdWx0KTsKKyAgICAgICAgICAgIG9mZnNldCArPSBtaXNz
cGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGg7CisgICAgICAgICAgICAvLyBHZW5l
cmFsbHksIHdlIGVuZCB1cCBjaGVja2luZyBhdCB0aGUgd29yZCBzZXBhcmF0b3IsIG1vdmUgdG8g
dGhlIGFkamFjZW50IHdvcmQuCisgICAgICAgICAgICBvZmZzZXQgPSBuZXh0V29yZE9mZnNldCh0
ZXh0LCBsZW5ndGhTdHJpcCwgb2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsK
KyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tpbmdUeXBl
cyk7CisjZW5kaWYKKyAgICByZXR1cm4gcGFyYWdyYXBoQ2hlY2tpbmdSZXN1bHQ7Cit9CisjZW5k
aWYKKwordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3Qgc3Bl
bGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgaW50MzJf
dCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCit7Cisj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRleHQs
IGxlbmd0aCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh0
ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKKyAgICBVTlVTRURfUEFSQU0obWlzc3Bl
bGxpbmdMb2NhdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyNl
bmRpZgorfQorCit2b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIFZl
Y3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJh
ZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKK3sKKyNpZiBFTkFC
TEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNo
ZWNrR3JhbW1hck9mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgp
LCBncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOworICAgIFVOVVNFRF9Q
QVJBTSh0ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKKyAgICBVTlVTRURfUEFSQU0o
Z3JhbW1hckRldGFpbHMpOworICAgIFVOVVNFRF9QQVJBTShiYWRHcmFtbWFyTG9jYXRpb24pOwor
ICAgIFVOVVNFRF9QQVJBTShiYWRHcmFtbWFyTGVuZ3RoKTsKKyNlbmRpZgorfQorCitib29sIFRl
eHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKK3sKKyNpZiBFTkFCTEUoU1BFTExDSEVD
SykKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVsbGlu
Z1VJSXNTaG93aW5nKCk7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2
b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKK3sKKyNpZiBFTkFC
TEUoU1BFTExDSEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnRv
Z2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyNlbmRpZgorfQorCit2b2lkIFRleHRDaGVja2Vy
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVu
dFRhZywgY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKK3sKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywgbWlzc3BlbGxlZFdvcmQp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CisgICAgVU5VU0VE
X1BBUkFNKG1pc3NwZWxsZWRXb3JkKTsKKyNlbmRpZgorfQorCit2b2lkIFRleHRDaGVja2VyOjp1
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFn
LCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdy
YW1tYXJEZXRhaWwpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
c3BlbGxEb2N1bWVudFRhZywgYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKKyAgICBVTlVTRURfUEFSQU0o
YmFkR3JhbW1hclBocmFzZSk7CisgICAgVU5VU0VEX1BBUkFNKGdyYW1tYXJEZXRhaWwpOworI2Vu
ZGlmCit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qgc3Bl
bGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmICwgVmVjdG9y
PFN0cmluZz4mIGd1ZXNzZXMpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVsbERvY3VtZW50
VGFnLCB3b3JkLCBndWVzc2VzKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1l
bnRUYWcpOworICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKKyAgICBVTlVTRURfUEFSQU0oZ3Vlc3Nl
cyk7CisjZW5kaWYKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qgc3Bl
bGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQoreworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkubGVhcm5Xb3JkKHNw
ZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1
bWVudFRhZyk7CisgICAgVU5VU0VEX1BBUkFNKHdvcmQpOworI2VuZGlmCit9CisKK3ZvaWQgVGV4
dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIHdvcmQpCit7CisjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CisgICAgVU5VU0VEX1BB
UkFNKHdvcmQpOworI2VuZGlmCit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNrZXJDb21wbGV0aW9uPiBjb21wbGV0aW9uKQor
eworI2lmIEVOQUJMRShTUEVMTENIRUNLKSAmJiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQor
ICAgIGlmICghY29tcGxldGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dENoZWNraW5n
UmVxdWVzdERhdGEgcmVxdWVzdCA9IGNvbXBsZXRpb24tPnRleHRDaGVja2luZ1JlcXVlc3REYXRh
KCk7CisgICAgQVNTRVJUKHJlcXVlc3Quc2VxdWVuY2UoKSAhPSB1bnJlcXVlc3RlZFRleHRDaGVj
a2luZ1NlcXVlbmNlKTsKKyAgICBBU1NFUlQocmVxdWVzdC5tYXNrKCkgIT0gVGV4dENoZWNraW5n
VHlwZU5vbmUpOworCisgICAgU3RyaW5nIHRleHQgPSByZXF1ZXN0LnRleHQoKTsKKyAgICBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHQgPSBjaGVja1RleHRPZlBhcmFncmFwaChjb21w
bGV0aW9uLT5zcGVsbERvY3VtZW50VGFnKCksIHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0
aCgpLCByZXF1ZXN0Lm1hc2soKSk7CisKKyAgICBjb21wbGV0aW9uLT5kaWRGaW5pc2hDaGVja2lu
Z1RleHQocmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOworI2Vu
ZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDg2YTdkNmM2YmFhYTJiNDdhMGQyMWIyYjYxNGNkOWEyZDdlMjkzOGIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
ODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAgTW90b3JvbGEgTW9i
aWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgotCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0KLSNpZiBFTkFCTEUoU1BFTExDSEVDSykK
LSNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xp
ZW50RWZsLmgiCi0jaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIuaCIKLSNlbmRpZgotCi11c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyBUZXh0Q2hl
Y2tlclN0YXRlIHRleHRDaGVja2VyU3RhdGU7Ci0KLWNvbnN0IFRleHRDaGVja2VyU3RhdGUmIFRl
eHRDaGVja2VyOjpzdGF0ZSgpCi17Ci0gICAgc3RhdGljIGJvb2wgZGlkSW5pdGlhbGl6ZVN0YXRl
ID0gZmFsc2U7Ci0gICAgaWYgKGRpZEluaXRpYWxpemVTdGF0ZSkKLSAgICAgICAgcmV0dXJuIHRl
eHRDaGVja2VyU3RhdGU7Ci0KLSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkID0gZmFsc2U7Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQgPSBmYWxzZTsKLQotICAgIGRpZEluaXRpYWxpemVTdGF0ZSA9IHRydWU7
Ci0KLSAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKLX0KLQotYm9vbCBUZXh0Q2hlY2tlcjo6
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpzZXRDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCkKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBpZiAoc3RhdGUoKS5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
OwotCi0gICAgLy8gTm90aWZ5IHRoZSBjbGllbnQgYWJvdXQgdGhlIHNldHRpbmcgY2hhbmdlLgot
ICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0Q29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKLSNl
bmRpZgotfQotCi12b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJv
b2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6Y29u
dGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKLXsK
LSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBpZiAoc3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0ZXh0
Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsK
LSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGVuYWJsZWQpOwotI2VuZGlmCi19Ci0KLXZvaWQgVGV4
dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCkKLXsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1pbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVs
bERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVD
SykKLSAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51bmlxdWVT
cGVsbERvY3VtZW50VGFnKHBhZ2UpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ocGFnZSk7Ci0g
ICAgcmV0dXJuIDA7Ci0jZW5kaWYKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERv
Y3VtZW50V2l0aFRhZyhpbnQ2NF90IHRhZykKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdp
dGhUYWcodGFnKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhZyk7Ci0jZW5kaWYKLX0KLQot
I2lmIEVOQUJMRShTUEVMTENIRUNLKQotc3RhdGljIGludCBuZXh0V29yZE9mZnNldChjb25zdCBV
Q2hhciogdGV4dCwgaW50IGxlbmd0aCwgaW50IGN1cnJlbnRPZmZzZXQpCi17Ci0gICAgLy8gRklY
TUU6IGF2b2lkIGNyZWF0aW5nIHRleHRJdGVyYXRvciBvYmplY3QgaGVyZSwgaXQgY291bGQgYmUg
cGFzc2VkIGFzIGEgcGFyYW1ldGVyLgotICAgIC8vICAgICAgICBpc1RleHRCcmVhaygpIGxlYXZl
cyB0aGUgaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGJvdW5kYXJ5IHBvc2l0aW9uIGF0
Ci0gICAgLy8gICAgICAgIG9yIGFmdGVyICJvZmZzZXQiICh1YnJrX2lzQm91bmRhcnkgc2lkZSBl
ZmZlY3QpLgotICAgIC8vICAgICAgICBGb3IgbWFueSB3b3JkIHNlcGFyYXRvcnMsIHRoZSBtZXRo
b2QgZG9lc24ndCBwcm9wZXJseSBkZXRlcm1pbmUgdGhlIGJvdW5kYXJpZXMKLSAgICAvLyAgICAg
ICAgd2l0aG91dCByZXNldHRpbmcgdGhlIGl0ZXJhdG9yLgotICAgIFRleHRCcmVha0l0ZXJhdG9y
KiB0ZXh0SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0LCBsZW5ndGgpOwotICAgIGlm
ICghdGV4dEl0ZXJhdG9yKQotICAgICAgICByZXR1cm4gY3VycmVudE9mZnNldDsKLQotICAgIGlu
dCB3b3JkT2Zmc2V0ID0gY3VycmVudE9mZnNldDsKLSAgICB3aGlsZSAod29yZE9mZnNldCA8IGxl
bmd0aCAmJiBpc1RleHRCcmVhayh0ZXh0SXRlcmF0b3IsIHdvcmRPZmZzZXQpKQotICAgICAgICAr
K3dvcmRPZmZzZXQ7Ci0KLSAgICAvLyBEbyBub3QgdHJlYXQgdGhlIHdvcmQncyBib3VuZGFyeSBh
cyBhIHNlcGFyYXRvci4KLSAgICBpZiAoIWN1cnJlbnRPZmZzZXQgJiYgd29yZE9mZnNldCA9PSAx
KQotICAgICAgICByZXR1cm4gY3VycmVudE9mZnNldDsKLQotICAgIC8vIE9taXQgbXVsdGlwbGUg
c2VwYXJhdG9ycy4KLSAgICBpZiAoKHdvcmRPZmZzZXQgLSBjdXJyZW50T2Zmc2V0KSA+IDEpCi0g
ICAgICAgIC0td29yZE9mZnNldDsKLQotICAgIHJldHVybiB3b3JkT2Zmc2V0OwotfQotI2VuZGlm
IC8vIEVOQUJMRShTUEVMTENIRUNLKQotCi0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykK
LVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFn
cmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVu
Z3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKQotewotICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IHBhcmFncmFwaENoZWNraW5nUmVzdWx0OwotI2lmIEVOQUJMRShTUEVMTENIRUNLKQot
ICAgIGlmIChjaGVja2luZ1R5cGVzICYgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSB7Ci0gICAg
ICAgIFRleHRCcmVha0l0ZXJhdG9yKiB0ZXh0SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0
ZXh0LCBsZW5ndGgpOwotICAgICAgICBpZiAoIXRleHRJdGVyYXRvcikKLSAgICAgICAgICAgIHJl
dHVybiBwYXJhZ3JhcGhDaGVja2luZ1Jlc3VsdDsKLQotICAgICAgICAvLyBPbWl0IHRoZSB3b3Jk
IHNlcGFyYXRvcnMgYXQgdGhlIGJlZ2lubmluZy9lbmQgb2YgdGhlIHRleHQgdG8gZG9uJ3QgdW5u
ZWNlc3NhcmlseQotICAgICAgICAvLyBpbnZvbHZlIHRoZSBjbGllbnQgdG8gY2hlY2sgc3BlbGxp
bmcgZm9yIHRoZW0uCi0gICAgICAgIGludCBvZmZzZXQgPSBuZXh0V29yZE9mZnNldCh0ZXh0LCBs
ZW5ndGgsIDApOwotICAgICAgICBpbnQgbGVuZ3RoU3RyaXAgPSBsZW5ndGg7Ci0gICAgICAgIHdo
aWxlIChsZW5ndGhTdHJpcCA+IDAgJiYgaXNUZXh0QnJlYWsodGV4dEl0ZXJhdG9yLCBsZW5ndGhT
dHJpcCAtIDEpKQotICAgICAgICAgICAgLS1sZW5ndGhTdHJpcDsKLQotICAgICAgICB3aGlsZSAo
b2Zmc2V0ID49IDAgJiYgb2Zmc2V0IDwgbGVuZ3RoU3RyaXApIHsKLSAgICAgICAgICAgIGludDMy
X3QgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOwotICAgICAgICAgICAgaW50MzJfdCBtaXNzcGVs
bGluZ0xlbmd0aCA9IDA7Ci0gICAgICAgICAgICBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxE
b2N1bWVudFRhZywgdGV4dCArIG9mZnNldCwgbGVuZ3RoU3RyaXAgLSBvZmZzZXQsIG1pc3NwZWxs
aW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICAgICAgICAgIGlmICghbWlzc3Bl
bGxpbmdMZW5ndGgpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIFRleHRD
aGVja2luZ1Jlc3VsdCBtaXNzcGVsbGluZ1Jlc3VsdDsKLSAgICAgICAgICAgIG1pc3NwZWxsaW5n
UmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgICAgICAgICBtaXNz
cGVsbGluZ1Jlc3VsdC5sb2NhdGlvbiA9IG9mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247Ci0g
ICAgICAgICAgICBtaXNzcGVsbGluZ1Jlc3VsdC5sZW5ndGggPSBtaXNzcGVsbGluZ0xlbmd0aDsK
LSAgICAgICAgICAgIHBhcmFncmFwaENoZWNraW5nUmVzdWx0LmFwcGVuZChtaXNzcGVsbGluZ1Jl
c3VsdCk7Ci0gICAgICAgICAgICBvZmZzZXQgKz0gbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3Nw
ZWxsaW5nTGVuZ3RoOwotICAgICAgICAgICAgLy8gR2VuZXJhbGx5LCB3ZSBlbmQgdXAgY2hlY2tp
bmcgYXQgdGhlIHdvcmQgc2VwYXJhdG9yLCBtb3ZlIHRvIHRoZSBhZGphY2VudCB3b3JkLgotICAg
ICAgICAgICAgb2Zmc2V0ID0gbmV4dFdvcmRPZmZzZXQodGV4dCwgbGVuZ3RoU3RyaXAsIG9mZnNl
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3Vt
ZW50VGFnKTsKLSAgICBVTlVTRURfUEFSQU0odGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxlbmd0
aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNoZWNraW5nVHlwZXMpOwotI2VuZGlmCi0gICAgcmV0dXJu
IHBhcmFncmFwaENoZWNraW5nUmVzdWx0OwotfQotI2VuZGlmCi0KLXZvaWQgVGV4dENoZWNrZXI6
OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVD
aGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24s
IGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQot
ICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3Ry
aW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzcGVs
bERvY3VtZW50VGFnKTsKLSAgICBVTlVTRURfUEFSQU0odGV4dCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGxlbmd0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKG1pc3NwZWxsaW5nTG9jYXRpb24pOwotICAgIFVO
VVNFRF9QQVJBTShtaXNzcGVsbGluZ0xlbmd0aCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBUZXh0Q2hl
Y2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJf
dCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYsIGludDMyX3QmKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLWJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dp
bmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0
aE1pc3NwZWxsZWRXb3JkKGludDY0X3QsIGNvbnN0IFN0cmluZyYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFt
bWFyU3RyaW5nKGludDY0X3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0IEdyYW1tYXJEZXRhaWwmKQot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNz
ZXNGb3JXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBj
b25zdCBTdHJpbmcmICwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCi17Ci0jaWYgRU5BQkxFKFNQ
RUxMQ0hFQ0spCi0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5ndWVzc2Vz
Rm9yV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOwotICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKLSAg
ICBVTlVTRURfUEFSQU0oZ3Vlc3Nlcyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6
bGVhcm5Xb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQot
ewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7Ci0gICAgVU5VU0VEX1BBUkFNKHdvcmQpOwot
I2VuZGlmCi19Ci0KLXZvaWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCBzcGVsbERv
Y3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxs
RG9jdW1lbnRUYWcsIHdvcmQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVu
dFRhZyk7Ci0gICAgVU5VU0VEX1BBUkFNKHdvcmQpOwotI2VuZGlmCi19Ci0KLXZvaWQgVGV4dENo
ZWNrZXI6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNrZXJDb21w
bGV0aW9uPiBjb21wbGV0aW9uKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIGlmICgh
Y29tcGxldGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVGV4dENoZWNraW5nUmVxdWVzdERh
dGEgcmVxdWVzdCA9IGNvbXBsZXRpb24tPnRleHRDaGVja2luZ1JlcXVlc3REYXRhKCk7Ci0gICAg
QVNTRVJUKHJlcXVlc3Quc2VxdWVuY2UoKSAhPSB1bnJlcXVlc3RlZFRleHRDaGVja2luZ1NlcXVl
bmNlKTsKLSAgICBBU1NFUlQocmVxdWVzdC5tYXNrKCkgIT0gVGV4dENoZWNraW5nVHlwZU5vbmUp
OwotCi0gICAgU3RyaW5nIHRleHQgPSByZXF1ZXN0LnRleHQoKTsKLSAgICBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiByZXN1bHQgPSBjaGVja1RleHRPZlBhcmFncmFwaChjb21wbGV0aW9uLT5z
cGVsbERvY3VtZW50VGFnKCksIHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpLCByZXF1
ZXN0Lm1hc2soKSk7Ci0KLSAgICBjb21wbGV0aW9uLT5kaWRGaW5pc2hDaGVja2luZ1RleHQocmVz
dWx0KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOwotI2VuZGlmCi19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1RleHRDaGVja2VyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJjNDE5
MDc5OGZmY2FiMTBjMjQxMDFmZTdhNGZhYWRiNDExMjA2Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1Rl
eHRDaGVja2VyR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFBv
cnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlRleHRDaGVja2VyLmgiCi0KLSNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCi0jaW5jbHVk
ZSAiV2ViVGV4dENoZWNrZXIuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotIAotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLXN0
YXRpYyBUZXh0Q2hlY2tlclN0YXRlIHRleHRDaGVja2VyU3RhdGU7Ci0KLWNvbnN0IFRleHRDaGVj
a2VyU3RhdGUmIFRleHRDaGVja2VyOjpzdGF0ZSgpCi17Ci0gICAgc3RhdGljIGJvb2wgZGlkSW5p
dGlhbGl6ZVN0YXRlID0gZmFsc2U7Ci0gICAgaWYgKGRpZEluaXRpYWxpemVTdGF0ZSkKLSAgICAg
ICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7Ci0KLSAgICBXZWJUZXh0Q2hlY2tlckNsaWVudCYg
Y2xpZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKTsKLSAgICB0ZXh0Q2hl
Y2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmNvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwotICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkID0gIGNsaWVudC5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7Ci0K
LSAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOwotCi0gICAgcmV0dXJuIHRleHRDaGVja2Vy
U3RhdGU7Ci19Ci0gIAotYm9vbCBUZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0FsbG93ZWQoKQotewotICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwotfQotCi12b2lkIFRleHRDaGVj
a2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCkKLXsKLSAgICBpZiAoc3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKLSAgICBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Ci19Ci0KLXZvaWQgVGV4
dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQpCi17Ci0gICAgaWYgKHN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09
IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIHRleHRDaGVj
a2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkOwotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNo
ZWNraW5nRW5hYmxlZChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOwotfQotCi12b2lkIFRleHRD
aGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBl
bmFibGVkKQotewotICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQgPSBlbmFibGVkOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tp
bmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICB0ZXh0Q2hlY2tlclN0
YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7Ci19Ci0KLWludDY0X3QgVGV4
dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQotewot
ICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxs
RG9jdW1lbnRUYWcocGFnZSk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1
bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCi17Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7Ci19Ci0KLXZvaWQgVGV4
dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcs
IGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIGludDMyX3QmIG1pc3NwZWxsaW5n
TG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQotewotICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1l
bnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVs
bGluZ0xlbmd0aCk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxl
bmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50
MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQotewot
ICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tHcmFtbWFyT2ZTdHJp
bmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCksIGdyYW1tYXJEZXRhaWxz
LCBiYWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOwotfQotCi1ib29sIFRleHRD
aGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKLXsKLSAgICByZXR1cm4gV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVsbGluZ1VJSXNTaG93aW5nKCk7Ci19Ci0KLXZvaWQg
VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQotewotICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOwot
fQotCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3Jk
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkK
LXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5n
VUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywgbWlzc3BlbGxlZFdvcmQpOwot
fQotCi12b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
aW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2Us
IGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCi17Ci0gICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
c3BlbGxEb2N1bWVudFRhZywgYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7Ci19Ci0K
LXZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVu
dFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFZlY3RvcjxT
dHJpbmc+JiBndWVzc2VzKQotewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7Ci19Ci0K
LXZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgd29yZCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKLX0KLQotdm9pZCBUZXh0Q2hl
Y2tlcjo6aWdub3JlV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYg
d29yZCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmlnbm9yZVdv
cmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OnJlcXVl
c3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNrZXJDb21wbGV0aW9uPikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207419</attachid>
            <date>2013-07-24 16:38:09 -0700</date>
            <delta_ts>2013-07-25 01:09:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119036-20130725083756.patch</filename>
            <type>text/plain</type>
            <size>33037</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzMTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzNjYzg4ZjQ0NWZiNzQ4
MGJkMjkwZjI5NTBmZjIxYjQ0NGIxYzE0Zi4uZWFiMWYyYmFmMDNlZjE5NzBiOTIwYjBmNTdjMmJi
ZGFmZDE2YmQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEzLTA3LTI0ICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgW1dLMl1bR1RLXVtF
RkxdIFVuaWZ5IFRleHRDaGVja2VyIGltcGxlbWVudGF0aW9ucyBvZiBHdGsgYW5kIEVmbCBpbnRv
IG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5
MDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5p
ZnkgVGV4dENoZWNrZXJFZmwuY3BwIGFuZCBUZXh0Q2hlY2tlckd0ay5jcHAgaW50byBUZXh0Q2hl
Y2tlckRlZmF1bHQuY3BwCisgICAgICAgIGJlY2F1c2UgdHdvIGltcGxlbWVudGF0aW9ucyBhcmUg
bW9zdGx5IHRoZSBzYW1lLiBUaGlzIHJlbW92ZSBjb2RlCisgICAgICAgIGR1cGxpY2F0aW9uIGFu
ZCBHdGsgcG9ydCBjYW4gcmV1c2UgdGhlIEVmbCBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBh
c3luY2hyb25vdXMgc3BlbGwgY2hlY2tpbmcgYW5kIHVuaWZpZWQgdGV4dCBjaGVja2VyLgorCisg
ICAgICAgIFRleHRDaGVja2VyRGVmYXVsdC5jcHAgZG9lcyBub3QgaW52b2x2ZSBhbnkgc3BlbGwg
Y2hlY2tpbmcgZW5naW5lIHN1Y2ggYXMKKyAgICAgICAgZW5jaGFudCwgc28gd2UgY2FuIHRoaW5r
IG9mIGl0IGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBXSzIKKyAgICAgICAgdW5s
ZXNzIGEgcG9ydCBwcm92aWRlcyBpdHMgb3duIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRU
ZXh0Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6V2ViS2l0VGV4dENo
ZWNrZXIpOgorICAgICAgICBSZW1vdmUgbWVtYmVyIHZhcmlhYmxlIG1fc3BlbGxDaGVja2luZ0Vu
YWJsZWQgbWVtYmVyIGFuZCByZWFkIGl0IGZyb20KKyAgICAgICAgVGV4dENoZWNrZXI6OnN0YXRl
KCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgdG8gYXZvaWQgZHVwbGljYXRpb24g
b2YgaW5mb3JtYXRpb24uCisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6aXNTcGVsbENoZWNr
aW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2lu
Z0VuYWJsZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2Vy
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1RleHRDaGVja2VyRGVmYXVsdC5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcC4KKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdl
YktpdDo6VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFy
Q2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6Om5leHRXb3Jk
T2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVs
bGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vl
c3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwOiBSZW1vdmVkLgorCiAyMDEzLTA3LTIzICBL
d2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgW1dLMl0gTW92
ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFn
cmFwaCB0byBXZWJFZGl0b3JDbGllbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IGRiYWFj
NTI1NzM5OGQ1MzMxZjE0ZDEyNWZmZWZjZjYxMTA4MDExNTYuLjgyOGViMjU0MzY3ZGFjMzRjNjZj
OTZiNDhhYTU0ZTYzOTM2ZjljNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0yNjAsNiArMjYw
LDcgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1Rp
bWVyLmNwcAogICAgIFVJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAKICAgICBVSVByb2Nl
c3MvVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcAorICAgIFVJUHJvY2Vzcy9UZXh0Q2hlY2tlckRl
ZmF1bHQuY3BwCiAgICAgVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuY3BwCiAgICAgVUlQ
cm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCiAgICAgVUlQcm9jZXNz
L1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IGQxZDU2ODllMDVhYTQ2ZTZjMWNjZTgwMTQxMTkxOWU1Y2E2ZTNlM2YuLjY1ZWE2MTEzOTdlNjhi
OGYzYWM5MTFkYzc3NTk2ZTJhOGJmMTRiZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtODE1LDcgKzgxNSw2IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0V4cGVyaW1lbnRhbEZlYXR1cmVzLmNwcCBcCi0JU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oIFwKQEAgLTg3Myw2ICs4
NzIsNyBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9z
b3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHkuaCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9U
ZXh0Q2hlY2tlckRlZmF1bHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENo
ZWNrZXJDb21wbGV0aW9uLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tl
ckNvbXBsZXRpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlzaXRlZExpbmtQ
cm92aWRlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBkYmI3NjZiYWYyMmUx
NDY1ODFlMjgzMzcwZWIzMjVmMTAwYTYzMWFjLi5lYjdhOTU2NDhlZWIwMzllZDViZWFiMmMyYTky
NmYzZGQyYzZlYTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTE3LDcgKzExNyw2
IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9lZmwvUGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1JlcXVlc3RN
YW5hZ2VyQ2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJDbGllbnRF
ZmwuY3BwCi0gICAgVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKICAgICBVSVByb2Nl
c3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1ZpZXdDbGll
bnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwCmlu
ZGV4IDg5ZTc0NmQ0N2U1ZmM2NWUxZTc0ODRjZDBjNmEwNTIyYWMwODQ2NDMuLjUyZjUzNGY5YzMw
OGU0ODI1YjZhNjlmNjliNDRhMWZiNDk0MzA5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKQEAgLTI4LDYgKzI4
LDggQEAKIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQogCisjaW5jbHVkZSAiVGV4dENoZWNrZXIu
aCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0
ZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtODMsNyArODUsNiBAQCBXZWJLaXRU
ZXh0Q2hlY2tlcjo6fldlYktpdFRleHRDaGVja2VyKCkKIAogV2ViS2l0VGV4dENoZWNrZXI6Oldl
YktpdFRleHRDaGVja2VyKCkKICAgICA6IG1fdGV4dENoZWNrZXIoV2ViQ29yZTo6VGV4dENoZWNr
ZXJFbmNoYW50OjpjcmVhdGUoKSkKLSAgICAsIG1fc3BlbGxDaGVja2luZ0VuYWJsZWQoZmFsc2Up
CiB7CiAgICAgV0tUZXh0Q2hlY2tlckNsaWVudCB3a1RleHRDaGVja2VyQ2xpZW50ID0gewogICAg
ICAgICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLApAQCAtMTI4LDEyICsxMjks
MTMgQEAgdm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChjb25zdCBTdHJpbmcmIHdv
cmQpCiAgICAgbV90ZXh0Q2hlY2tlci0+aWdub3JlV29yZCh3b3JkKTsKIH0KIAotdm9pZCBXZWJL
aXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQorYm9v
bCBXZWJLaXRUZXh0Q2hlY2tlcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCiB7Ci0gICAgaWYg
KG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworICAgIHJldHVybiBUZXh0Q2hlY2tl
cjo6c3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKK30KIAordm9pZCBX
ZWJLaXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQor
ewogICAgIC8vIFdlIG5lZWQgdG8gbm90aWZ5IHRoZSBXZWIgcHJvY2VzcyB0aGF0IHRoaXMgaGFz
IGNoYW5nZWQuCiAgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oCmluZGV4IDE1Zjc2NGY2MTZhMjkxNmE0
ZDk4MTRiZmEyZTBjODFmMTgxODFlYjYuLjk1Zjk3OGM3NmE4ZWU0NDlkODM1ZGZjZjdmYmQyNzQ3
OWI1NmM1OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFRleHRDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0VGV4dENoZWNrZXIuaApAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+V2ViS2l0VGV4dENoZWNrZXIoKTsKIAogICAgIC8vIEZvciBpbXBsZW1lbnRpbmcgVGV4dENo
ZWNrZXJDbGllbnQuCi0gICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgeyByZXR1cm4g
bV9zcGVsbENoZWNraW5nRW5hYmxlZDsgfQorICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpOwogICAgIHZvaWQgc2V0U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKICAg
ICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKICAgICBWZWN0b3I8
U3RyaW5nPiBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQpOwpAQCAtNTMsNyAr
NTMsNiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFu
dD4gbV90ZXh0Q2hlY2tlcjsKICAgICBHUmVmUHRyPEdQdHJBcnJheT4gbV9zcGVsbENoZWNraW5n
TGFuZ3VhZ2VzOwotICAgIGJvb2wgbV9zcGVsbENoZWNraW5nRW5hYmxlZDsKIH07CiAKICNlbmRp
ZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UZXh0Q2hlY2tlckRlZmF1bHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Rl
eHRDaGVja2VyRGVmYXVsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDMwNmZiMDQ2ODM2MTIzOWRjYzgwMzBi
MjNkNzUwNTllY2U1YTA5MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UZXh0Q2hlY2tlckRlZmF1bHQuY3BwCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRp
b25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRDaGVja2Vy
LmgiCisKKyNpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykKKworI2luY2x1ZGUgIlRl
eHRCcmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgorI2luY2x1
ZGUgIldlYlRleHRDaGVja2VyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFRleHRDaGVja2VyU3RhdGUgdGV4dENoZWNrZXJTdGF0
ZTsKKworY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplU3RhdGUgPSBmYWxzZTsKKyAgICBpZiAoZGlkSW5p
dGlhbGl6ZVN0YXRlKQorICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKKworICAgIHRl
eHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmYWxzZTsK
KyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGZhbHNlOwor
CisgICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0gdHJ1ZTsKKworICAgIHJldHVybiB0ZXh0Q2hlY2tl
clN0YXRlOworfQorCitib29sIFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
QWxsb3dlZCgpCit7CisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkuY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNr
ZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKQoreworICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7CisKKyAgICAv
LyBOb3RpZnkgdGhlIGNsaWVudCBhYm91dCB0aGUgc2V0dGluZyBjaGFuZ2UuCisgICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworfQorCit2b2lkIFRleHRD
aGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpCit7CisgICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQgPT0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCisgICAgICAg
IHJldHVybjsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7CisgICAgV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworfQorCit2b2lkIFRleHRDaGVj
a2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFi
bGVkKQoreworICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
ID09IGVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHRleHRDaGVja2VyU3RhdGUuaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworfQorCit2b2lkIFRleHRD
aGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKQoreworICAgIGlmIChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCA9PSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICB0
ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZDsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdy
YW1tYXJDaGVja2luZ0VuYWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKK30KKworaW50
NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBh
Z2UpCit7CisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudW5p
cXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VT
cGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90IHRhZykKK3sKKyAgICBXZWJUZXh0Q2hlY2tlcjo6
c2hhcmVkKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKK30KKwor
I2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCitzdGF0aWMgaW50IG5leHRXb3JkT2Zmc2V0
KGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBpbnQgY3VycmVudE9mZnNldCkKK3sKKyAg
ICAvLyBGSVhNRTogYXZvaWQgY3JlYXRpbmcgdGV4dEl0ZXJhdG9yIG9iamVjdCBoZXJlLCBpdCBj
b3VsZCBiZSBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuCisgICAgLy8gICAgICAgIGlzVGV4dEJyZWFr
KCkgbGVhdmVzIHRoZSBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgYm91bmRhcnkgcG9z
aXRpb24gYXQKKyAgICAvLyAgICAgICAgb3IgYWZ0ZXIgIm9mZnNldCIgKHVicmtfaXNCb3VuZGFy
eSBzaWRlIGVmZmVjdCkuCisgICAgLy8gICAgICAgIEZvciBtYW55IHdvcmQgc2VwYXJhdG9ycywg
dGhlIG1ldGhvZCBkb2Vzbid0IHByb3Blcmx5IGRldGVybWluZSB0aGUgYm91bmRhcmllcworICAg
IC8vICAgICAgICB3aXRob3V0IHJlc2V0dGluZyB0aGUgaXRlcmF0b3IuCisgICAgVGV4dEJyZWFr
SXRlcmF0b3IqIHRleHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7
CisgICAgaWYgKCF0ZXh0SXRlcmF0b3IpCisgICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0Owor
CisgICAgaW50IHdvcmRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0OworICAgIHdoaWxlICh3b3JkT2Zm
c2V0IDwgbGVuZ3RoICYmIGlzVGV4dEJyZWFrKHRleHRJdGVyYXRvciwgd29yZE9mZnNldCkpCisg
ICAgICAgICsrd29yZE9mZnNldDsKKworICAgIC8vIERvIG5vdCB0cmVhdCB0aGUgd29yZCdzIGJv
dW5kYXJ5IGFzIGEgc2VwYXJhdG9yLgorICAgIGlmICghY3VycmVudE9mZnNldCAmJiB3b3JkT2Zm
c2V0ID09IDEpCisgICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0OworCisgICAgLy8gT21pdCBt
dWx0aXBsZSBzZXBhcmF0b3JzLgorICAgIGlmICgod29yZE9mZnNldCAtIGN1cnJlbnRPZmZzZXQp
ID4gMSkKKyAgICAgICAgLS13b3JkT2Zmc2V0OworCisgICAgcmV0dXJuIHdvcmRPZmZzZXQ7Cit9
CisKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBh
cmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQg
bGVuZ3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKQoreworICAgIFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+IHBhcmFncmFwaENoZWNraW5nUmVzdWx0OworICAgIGlmIChjaGVja2luZ1R5cGVz
ICYgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSB7CisgICAgICAgIFRleHRCcmVha0l0ZXJhdG9y
KiB0ZXh0SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0LCBsZW5ndGgpOworICAgICAg
ICBpZiAoIXRleHRJdGVyYXRvcikKKyAgICAgICAgICAgIHJldHVybiBwYXJhZ3JhcGhDaGVja2lu
Z1Jlc3VsdDsKKworICAgICAgICAvLyBPbWl0IHRoZSB3b3JkIHNlcGFyYXRvcnMgYXQgdGhlIGJl
Z2lubmluZy9lbmQgb2YgdGhlIHRleHQgdG8gZG9uJ3QgdW5uZWNlc3NhcmlseQorICAgICAgICAv
LyBpbnZvbHZlIHRoZSBjbGllbnQgdG8gY2hlY2sgc3BlbGxpbmcgZm9yIHRoZW0uCisgICAgICAg
IGludCBvZmZzZXQgPSBuZXh0V29yZE9mZnNldCh0ZXh0LCBsZW5ndGgsIDApOworICAgICAgICBp
bnQgbGVuZ3RoU3RyaXAgPSBsZW5ndGg7CisgICAgICAgIHdoaWxlIChsZW5ndGhTdHJpcCA+IDAg
JiYgaXNUZXh0QnJlYWsodGV4dEl0ZXJhdG9yLCBsZW5ndGhTdHJpcCAtIDEpKQorICAgICAgICAg
ICAgLS1sZW5ndGhTdHJpcDsKKworICAgICAgICB3aGlsZSAob2Zmc2V0ID49IDAgJiYgb2Zmc2V0
IDwgbGVuZ3RoU3RyaXApIHsKKyAgICAgICAgICAgIGludDMyX3QgbWlzc3BlbGxpbmdMb2NhdGlv
biA9IC0xOworICAgICAgICAgICAgaW50MzJfdCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7CisgICAg
ICAgICAgICBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgdGV4dCArIG9m
ZnNldCwgbGVuZ3RoU3RyaXAgLSBvZmZzZXQsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxs
aW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdMZW5ndGgpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCBtaXNzcGVs
bGluZ1Jlc3VsdDsKKyAgICAgICAgICAgIG1pc3NwZWxsaW5nUmVzdWx0LnR5cGUgPSBUZXh0Q2hl
Y2tpbmdUeXBlU3BlbGxpbmc7CisgICAgICAgICAgICBtaXNzcGVsbGluZ1Jlc3VsdC5sb2NhdGlv
biA9IG9mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247CisgICAgICAgICAgICBtaXNzcGVsbGlu
Z1Jlc3VsdC5sZW5ndGggPSBtaXNzcGVsbGluZ0xlbmd0aDsKKyAgICAgICAgICAgIHBhcmFncmFw
aENoZWNraW5nUmVzdWx0LmFwcGVuZChtaXNzcGVsbGluZ1Jlc3VsdCk7CisgICAgICAgICAgICBv
ZmZzZXQgKz0gbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoOworICAgICAg
ICAgICAgLy8gR2VuZXJhbGx5LCB3ZSBlbmQgdXAgY2hlY2tpbmcgYXQgdGhlIHdvcmQgc2VwYXJh
dG9yLCBtb3ZlIHRvIHRoZSBhZGphY2VudCB3b3JkLgorICAgICAgICAgICAgb2Zmc2V0ID0gbmV4
dFdvcmRPZmZzZXQodGV4dCwgbGVuZ3RoU3RyaXAsIG9mZnNldCk7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIHBhcmFncmFwaENoZWNraW5nUmVzdWx0OworfQorI2VuZGlmCisKK3ZvaWQg
VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRU
YWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIGludDMyX3QmIG1pc3NwZWxs
aW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQoreworICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9j
dW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNz
cGVsbGluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3Ry
aW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90
IGxlbmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywg
aW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQor
eworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tHcmFtbWFyT2ZT
dHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCksIGdyYW1tYXJEZXRh
aWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOworfQorCitib29sIFRl
eHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKK3sKKyAgICByZXR1cm4gV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVsbGluZ1VJSXNTaG93aW5nKCk7Cit9CisKK3Zv
aWQgVGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQoreworICAgIFdlYlRl
eHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygp
OworfQorCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRX
b3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29y
ZCkKK3sKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywgbWlzc3BlbGxlZFdvcmQp
OworfQorCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJh
c2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCit7CisgICAgV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcoc3BlbGxEb2N1bWVudFRhZywgYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7Cit9
CisKK3ZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qgc3BlbGxEb2N1
bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmICwgVmVjdG9yPFN0cmlu
Zz4mIGd1ZXNzZXMpCit7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5n
dWVzc2VzRm9yV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKK30KKwordm9p
ZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3Qg
U3RyaW5nJiB3b3JkKQoreworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCku
bGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworfQorCit2b2lkIFRleHRDaGVja2Vy
OjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3Jk
KQoreworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuaWdub3JlV29yZChz
cGVsbERvY3VtZW50VGFnLCB3b3JkKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+IGNvbXBsZXRp
b24pCit7CisjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKKyAgICBpZiAoIWNvbXBsZXRp
b24pCisgICAgICAgIHJldHVybjsKKworICAgIFRleHRDaGVja2luZ1JlcXVlc3REYXRhIHJlcXVl
c3QgPSBjb21wbGV0aW9uLT50ZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSgpOworICAgIEFTU0VSVChy
ZXF1ZXN0LnNlcXVlbmNlKCkgIT0gdW5yZXF1ZXN0ZWRUZXh0Q2hlY2tpbmdTZXF1ZW5jZSk7Cisg
ICAgQVNTRVJUKHJlcXVlc3QubWFzaygpICE9IFRleHRDaGVja2luZ1R5cGVOb25lKTsKKworICAg
IFN0cmluZyB0ZXh0ID0gcmVxdWVzdC50ZXh0KCk7CisgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4gcmVzdWx0ID0gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29tcGxldGlvbi0+c3BlbGxEb2N1
bWVudFRhZygpLCB0ZXh0LmNoYXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgcmVxdWVzdC5tYXNr
KCkpOworCisgICAgY29tcGxldGlvbi0+ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHJlc3VsdCk7Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9uKTsKKyNlbmRpZgorfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9l
ZmwvVGV4dENoZWNrZXJFZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmE3
ZDZjNmJhYWEyYjQ3YTBkMjFiMmI2MTRjZDlhMmQ3ZTI5MzhiLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwv
VGV4dENoZWNrZXJFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
UG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgU2Ftc3VuZyBFbGVj
dHJvbmljcwotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dENo
ZWNrZXIuaCIKLQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVGV4dENo
ZWNrZXJTdGF0ZS5oIgotCi0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0jaW5jbHVkZSAiVGV4dEJy
ZWFrSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudEVmbC5oIgotI2luY2x1
ZGUgIldlYlRleHRDaGVja2VyLmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgVGV4dENoZWNrZXJTdGF0ZSB0ZXh0Q2hl
Y2tlclN0YXRlOwotCi1jb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUo
KQotewotICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOwotICAgIGlm
IChkaWRJbml0aWFsaXplU3RhdGUpCi0gICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwot
Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9
IGZhbHNlOwotICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0g
ZmFsc2U7Ci0KLSAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOwotCi0gICAgcmV0dXJuIHRl
eHRDaGVja2VyU3RhdGU7Ci19Ci0KLWJvb2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdBbGxvd2VkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCi17Ci0jaWYgRU5B
QkxFKFNQRUxMQ0hFQ0spCi0gICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQgPT0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKLQotICAgIC8vIE5vdGlm
eSB0aGUgY2xpZW50IGFib3V0IHRoZSBzZXR0aW5nIGNoYW5nZS4KLSAgICBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJB
TShpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBU
ZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCi17Ci0jaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCi0gICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQg
PT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShlbmFibGVkKTsKLSNlbmRpZgotfQotCi12b2lkIFRleHRDaGVja2VyOjpncmFtbWFy
Q2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQotaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQ
YWdlUHJveHkqIHBhZ2UpCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgcmV0dXJuIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVudFRhZyhw
YWdlKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwotICAgIHJldHVybiAwOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50
NjRfdCB0YWcpCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTSh0YWcpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoU1BFTExD
SEVDSykKLXN0YXRpYyBpbnQgbmV4dFdvcmRPZmZzZXQoY29uc3QgVUNoYXIqIHRleHQsIGludCBs
ZW5ndGgsIGludCBjdXJyZW50T2Zmc2V0KQotewotICAgIC8vIEZJWE1FOiBhdm9pZCBjcmVhdGlu
ZyB0ZXh0SXRlcmF0b3Igb2JqZWN0IGhlcmUsIGl0IGNvdWxkIGJlIHBhc3NlZCBhcyBhIHBhcmFt
ZXRlci4KLSAgICAvLyAgICAgICAgaXNUZXh0QnJlYWsoKSBsZWF2ZXMgdGhlIGl0ZXJhdG9yIHBv
aW50aW5nIHRvIHRoZSBmaXJzdCBib3VuZGFyeSBwb3NpdGlvbiBhdAotICAgIC8vICAgICAgICBv
ciBhZnRlciAib2Zmc2V0IiAodWJya19pc0JvdW5kYXJ5IHNpZGUgZWZmZWN0KS4KLSAgICAvLyAg
ICAgICAgRm9yIG1hbnkgd29yZCBzZXBhcmF0b3JzLCB0aGUgbWV0aG9kIGRvZXNuJ3QgcHJvcGVy
bHkgZGV0ZXJtaW5lIHRoZSBib3VuZGFyaWVzCi0gICAgLy8gICAgICAgIHdpdGhvdXQgcmVzZXR0
aW5nIHRoZSBpdGVyYXRvci4KLSAgICBUZXh0QnJlYWtJdGVyYXRvciogdGV4dEl0ZXJhdG9yID0g
d29yZEJyZWFrSXRlcmF0b3IodGV4dCwgbGVuZ3RoKTsKLSAgICBpZiAoIXRleHRJdGVyYXRvcikK
LSAgICAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQ7Ci0KLSAgICBpbnQgd29yZE9mZnNldCA9IGN1
cnJlbnRPZmZzZXQ7Ci0gICAgd2hpbGUgKHdvcmRPZmZzZXQgPCBsZW5ndGggJiYgaXNUZXh0QnJl
YWsodGV4dEl0ZXJhdG9yLCB3b3JkT2Zmc2V0KSkKLSAgICAgICAgKyt3b3JkT2Zmc2V0OwotCi0g
ICAgLy8gRG8gbm90IHRyZWF0IHRoZSB3b3JkJ3MgYm91bmRhcnkgYXMgYSBzZXBhcmF0b3IuCi0g
ICAgaWYgKCFjdXJyZW50T2Zmc2V0ICYmIHdvcmRPZmZzZXQgPT0gMSkKLSAgICAgICAgcmV0dXJu
IGN1cnJlbnRPZmZzZXQ7Ci0KLSAgICAvLyBPbWl0IG11bHRpcGxlIHNlcGFyYXRvcnMuCi0gICAg
aWYgKCh3b3JkT2Zmc2V0IC0gY3VycmVudE9mZnNldCkgPiAxKQotICAgICAgICAtLXdvcmRPZmZz
ZXQ7Ci0KLSAgICByZXR1cm4gd29yZE9mZnNldDsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoU1BFTExD
SEVDSykKLQotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi1WZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hl
Y2tpbmdUeXBlcykKLXsKLSAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBwYXJhZ3JhcGhD
aGVja2luZ1Jlc3VsdDsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBpZiAoY2hlY2tpbmdU
eXBlcyAmIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZykgewotICAgICAgICBUZXh0QnJlYWtJdGVy
YXRvciogdGV4dEl0ZXJhdG9yID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dCwgbGVuZ3RoKTsKLSAg
ICAgICAgaWYgKCF0ZXh0SXRlcmF0b3IpCi0gICAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoQ2hl
Y2tpbmdSZXN1bHQ7Ci0KLSAgICAgICAgLy8gT21pdCB0aGUgd29yZCBzZXBhcmF0b3JzIGF0IHRo
ZSBiZWdpbm5pbmcvZW5kIG9mIHRoZSB0ZXh0IHRvIGRvbid0IHVubmVjZXNzYXJpbHkKLSAgICAg
ICAgLy8gaW52b2x2ZSB0aGUgY2xpZW50IHRvIGNoZWNrIHNwZWxsaW5nIGZvciB0aGVtLgotICAg
ICAgICBpbnQgb2Zmc2V0ID0gbmV4dFdvcmRPZmZzZXQodGV4dCwgbGVuZ3RoLCAwKTsKLSAgICAg
ICAgaW50IGxlbmd0aFN0cmlwID0gbGVuZ3RoOwotICAgICAgICB3aGlsZSAobGVuZ3RoU3RyaXAg
PiAwICYmIGlzVGV4dEJyZWFrKHRleHRJdGVyYXRvciwgbGVuZ3RoU3RyaXAgLSAxKSkKLSAgICAg
ICAgICAgIC0tbGVuZ3RoU3RyaXA7Ci0KLSAgICAgICAgd2hpbGUgKG9mZnNldCA+PSAwICYmIG9m
ZnNldCA8IGxlbmd0aFN0cmlwKSB7Ci0gICAgICAgICAgICBpbnQzMl90IG1pc3NwZWxsaW5nTG9j
YXRpb24gPSAtMTsKLSAgICAgICAgICAgIGludDMyX3QgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwot
ICAgICAgICAgICAgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIHRleHQg
KyBvZmZzZXQsIGxlbmd0aFN0cmlwIC0gb2Zmc2V0LCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNz
cGVsbGluZ0xlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoIW1pc3NwZWxsaW5nTGVuZ3RoKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgbWlz
c3BlbGxpbmdSZXN1bHQ7Ci0gICAgICAgICAgICBtaXNzcGVsbGluZ1Jlc3VsdC50eXBlID0gVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nOwotICAgICAgICAgICAgbWlzc3BlbGxpbmdSZXN1bHQubG9j
YXRpb24gPSBvZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uOwotICAgICAgICAgICAgbWlzc3Bl
bGxpbmdSZXN1bHQubGVuZ3RoID0gbWlzc3BlbGxpbmdMZW5ndGg7Ci0gICAgICAgICAgICBwYXJh
Z3JhcGhDaGVja2luZ1Jlc3VsdC5hcHBlbmQobWlzc3BlbGxpbmdSZXN1bHQpOwotICAgICAgICAg
ICAgb2Zmc2V0ICs9IG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aDsKLSAg
ICAgICAgICAgIC8vIEdlbmVyYWxseSwgd2UgZW5kIHVwIGNoZWNraW5nIGF0IHRoZSB3b3JkIHNl
cGFyYXRvciwgbW92ZSB0byB0aGUgYWRqYWNlbnQgd29yZC4KLSAgICAgICAgICAgIG9mZnNldCA9
IG5leHRXb3JkT2Zmc2V0KHRleHQsIGxlbmd0aFN0cmlwLCBvZmZzZXQpOwotICAgICAgICB9Ci0g
ICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRleHQpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIFVOVVNFRF9Q
QVJBTShjaGVja2luZ1R5cGVzKTsKLSNlbmRpZgotICAgIHJldHVybiBwYXJhZ3JhcGhDaGVja2lu
Z1Jlc3VsdDsKLX0KLSNlbmRpZgotCi12b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZT
dHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMy
X3QgbGVuZ3RoLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVs
bGluZ0xlbmd0aCkKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50
VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxp
bmdMZW5ndGgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHRleHQpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIFVO
VVNFRF9QQVJBTShtaXNzcGVsbGluZ0xvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0obWlzc3Bl
bGxpbmdMZW5ndGgpOwotI2VuZGlmCi19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1h
ck9mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFyKiwgdWludDMyX3QsIFZlY3RvcjxHcmFtbWFy
RGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi1ib29sIFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6
dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChp
bnQ2NF90LCBjb25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZv
aWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhpbnQ2NF90
LCBjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiAsIFZl
Y3RvcjxTdHJpbmc+JiBndWVzc2VzKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1
bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzcGVsbERv
Y3VtZW50VGFnKTsKLSAgICBVTlVTRURfUEFSQU0od29yZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGd1
ZXNzZXMpOwotI2VuZGlmCi19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKLXsKLSNpZiBFTkFCTEUoU1BF
TExDSEVDSykKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmxlYXJuV29y
ZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNwZWxs
RG9jdW1lbnRUYWcpOwotICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKLSNlbmRpZgotfQotCi12b2lk
IFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3Qg
U3RyaW5nJiB3b3JkKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuaWdub3JlV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3Jk
KTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOwotICAgIFVOVVNF
RF9QQVJBTSh3b3JkKTsKLSNlbmRpZgotfQotCi12b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hl
Y2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29tcGxldGlvbj4gY29tcGxldGlv
bikKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBpZiAoIWNvbXBsZXRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFRleHRDaGVja2luZ1JlcXVlc3REYXRhIHJlcXVlc3QgPSBjb21w
bGV0aW9uLT50ZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSgpOwotICAgIEFTU0VSVChyZXF1ZXN0LnNl
cXVlbmNlKCkgIT0gdW5yZXF1ZXN0ZWRUZXh0Q2hlY2tpbmdTZXF1ZW5jZSk7Ci0gICAgQVNTRVJU
KHJlcXVlc3QubWFzaygpICE9IFRleHRDaGVja2luZ1R5cGVOb25lKTsKLQotICAgIFN0cmluZyB0
ZXh0ID0gcmVxdWVzdC50ZXh0KCk7Ci0gICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVz
dWx0ID0gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29tcGxldGlvbi0+c3BlbGxEb2N1bWVudFRhZygp
LCB0ZXh0LmNoYXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgcmVxdWVzdC5tYXNrKCkpOwotCi0g
ICAgY29tcGxldGlvbi0+ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHJlc3VsdCk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShjb21wbGV0aW9uKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNr
ZXJHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYzQxOTA3OThmZmNhYjEwYzI0MTAx
ZmU3YTRmYWFkYjQxMTIwNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQg
KGMpIDIwMTAgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgot
Ci0jaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgotI2luY2x1ZGUgIldlYlRleHRDaGVja2Vy
LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKLSAKLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgVGV4dENoZWNrZXJT
dGF0ZSB0ZXh0Q2hlY2tlclN0YXRlOwotCi1jb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hl
Y2tlcjo6c3RhdGUoKQotewotICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZh
bHNlOwotICAgIGlmIChkaWRJbml0aWFsaXplU3RhdGUpCi0gICAgICAgIHJldHVybiB0ZXh0Q2hl
Y2tlclN0YXRlOwotCi0gICAgV2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCk7Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoKTsKLSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCA9ICBjbGllbnQuZ3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwotCi0gICAgZGlkSW5pdGlhbGl6
ZVN0YXRlID0gdHJ1ZTsKLQotICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwotfQotICAKLWJv
b2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKLXsKLSAg
ICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jb250aW51b3VzU3Bl
bGxDaGVja2luZ0FsbG93ZWQoKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQpCi17Ci0gICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQg
PT0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAg
ICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpzZXRHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQotewotICAg
IGlmIChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKLSAgICBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6Y29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICB0
ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxl
ZDsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hh
bmdlZChib29sIGVuYWJsZWQpCi17Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQgPSBlbmFibGVkOwotfQotCi1pbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVT
cGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKLXsKLSAgICByZXR1cm4gV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51bmlxdWVTcGVsbERvY3VtZW50VGFnKHBhZ2Up
OwotfQotCi12b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0
X3QgdGFnKQotewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2xvc2VT
cGVsbERvY3VtZW50V2l0aFRhZyh0YWcpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4
dCwgdWludDMyX3QgbGVuZ3RoLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90
JiBtaXNzcGVsbGluZ0xlbmd0aCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNs
aWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4
dCwgbGVuZ3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotfQot
Ci12b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIFZlY3RvcjxXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJhZEdyYW1tYXJM
b2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrR3JhbW1hck9mU3RyaW5nKHNwZWxsRG9jdW1lbnRU
YWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hckxvY2F0
aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKLX0KLQotYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdV
SUlzU2hvd2luZygpCi17Ci0gICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xp
ZW50KCkuc3BlbGxpbmdVSUlzU2hvd2luZygpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjp0b2dn
bGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKLX0KLQotdm9pZCBUZXh0Q2hl
Y2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCi17Ci0gICAgV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRX
b3JkKHNwZWxsRG9jdW1lbnRUYWcsIG1pc3NwZWxsZWRXb3JkKTsKLX0KLQotdm9pZCBUZXh0Q2hl
Y2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1
bWVudFRhZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0
YWlsJiBncmFtbWFyRGV0YWlsKQotewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xp
ZW50KCkudXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcs
IGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwotfQotCi12b2lkIFRleHRDaGVja2Vy
OjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmlu
ZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykK
LXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3Jk
KHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOwotfQotCi12b2lkIFRleHRDaGVja2Vy
OjpsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQp
Ci17Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5sZWFybldvcmQoc3Bl
bGxEb2N1bWVudFRhZywgd29yZCk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQo
aW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCi17Ci0gICAgV2Vi
VGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRU
YWcsIHdvcmQpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmlu
ZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29tcGxldGlvbj4pCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207436</attachid>
            <date>2013-07-25 01:09:44 -0700</date>
            <delta_ts>2013-07-25 02:20:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119036-20130725170932.patch</filename>
            <type>text/plain</type>
            <size>32981</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzMTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzNjYzg4ZjQ0NWZiNzQ4
MGJkMjkwZjI5NTBmZjIxYjQ0NGIxYzE0Zi4uZWFiMWYyYmFmMDNlZjE5NzBiOTIwYjBmNTdjMmJi
ZGFmZDE2YmQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEzLTA3LTI0ICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgW1dLMl1bR1RLXVtF
RkxdIFVuaWZ5IFRleHRDaGVja2VyIGltcGxlbWVudGF0aW9ucyBvZiBHdGsgYW5kIEVmbCBpbnRv
IG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5
MDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5p
ZnkgVGV4dENoZWNrZXJFZmwuY3BwIGFuZCBUZXh0Q2hlY2tlckd0ay5jcHAgaW50byBUZXh0Q2hl
Y2tlckRlZmF1bHQuY3BwCisgICAgICAgIGJlY2F1c2UgdHdvIGltcGxlbWVudGF0aW9ucyBhcmUg
bW9zdGx5IHRoZSBzYW1lLiBUaGlzIHJlbW92ZSBjb2RlCisgICAgICAgIGR1cGxpY2F0aW9uIGFu
ZCBHdGsgcG9ydCBjYW4gcmV1c2UgdGhlIEVmbCBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBh
c3luY2hyb25vdXMgc3BlbGwgY2hlY2tpbmcgYW5kIHVuaWZpZWQgdGV4dCBjaGVja2VyLgorCisg
ICAgICAgIFRleHRDaGVja2VyRGVmYXVsdC5jcHAgZG9lcyBub3QgaW52b2x2ZSBhbnkgc3BlbGwg
Y2hlY2tpbmcgZW5naW5lIHN1Y2ggYXMKKyAgICAgICAgZW5jaGFudCwgc28gd2UgY2FuIHRoaW5r
IG9mIGl0IGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBXSzIKKyAgICAgICAgdW5s
ZXNzIGEgcG9ydCBwcm92aWRlcyBpdHMgb3duIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRU
ZXh0Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6V2ViS2l0VGV4dENo
ZWNrZXIpOgorICAgICAgICBSZW1vdmUgbWVtYmVyIHZhcmlhYmxlIG1fc3BlbGxDaGVja2luZ0Vu
YWJsZWQgbWVtYmVyIGFuZCByZWFkIGl0IGZyb20KKyAgICAgICAgVGV4dENoZWNrZXI6OnN0YXRl
KCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgdG8gYXZvaWQgZHVwbGljYXRpb24g
b2YgaW5mb3JtYXRpb24uCisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6aXNTcGVsbENoZWNr
aW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2lu
Z0VuYWJsZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2Vy
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1RleHRDaGVja2VyRGVmYXVsdC5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcC4KKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdl
YktpdDo6VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFy
Q2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6Om5leHRXb3Jk
T2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVs
bGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vl
c3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwOiBSZW1vdmVkLgorCiAyMDEzLTA3LTIzICBL
d2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgW1dLMl0gTW92
ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFn
cmFwaCB0byBXZWJFZGl0b3JDbGllbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IGRiYWFj
NTI1NzM5OGQ1MzMxZjE0ZDEyNWZmZWZjZjYxMTA4MDExNTYuLjgyOGViMjU0MzY3ZGFjMzRjNjZj
OTZiNDhhYTU0ZTYzOTM2ZjljNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0yNjAsNiArMjYw
LDcgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1Rp
bWVyLmNwcAogICAgIFVJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAKICAgICBVSVByb2Nl
c3MvVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcAorICAgIFVJUHJvY2Vzcy9UZXh0Q2hlY2tlckRl
ZmF1bHQuY3BwCiAgICAgVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuY3BwCiAgICAgVUlQ
cm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCiAgICAgVUlQcm9jZXNz
L1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IGQxZDU2ODllMDVhYTQ2ZTZjMWNjZTgwMTQxMTkxOWU1Y2E2ZTNlM2YuLjY1ZWE2MTEzOTdlNjhi
OGYzYWM5MTFkYzc3NTk2ZTJhOGJmMTRiZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtODE1LDcgKzgxNSw2IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0V4cGVyaW1lbnRhbEZlYXR1cmVzLmNwcCBcCi0JU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oIFwKQEAgLTg3Myw2ICs4
NzIsNyBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9z
b3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHkuaCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9U
ZXh0Q2hlY2tlckRlZmF1bHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENo
ZWNrZXJDb21wbGV0aW9uLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tl
ckNvbXBsZXRpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlzaXRlZExpbmtQ
cm92aWRlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBkYmI3NjZiYWYyMmUx
NDY1ODFlMjgzMzcwZWIzMjVmMTAwYTYzMWFjLi5lYjdhOTU2NDhlZWIwMzllZDViZWFiMmMyYTky
NmYzZGQyYzZlYTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTE3LDcgKzExNyw2
IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9lZmwvUGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1JlcXVlc3RN
YW5hZ2VyQ2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJDbGllbnRF
ZmwuY3BwCi0gICAgVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKICAgICBVSVByb2Nl
c3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1ZpZXdDbGll
bnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwCmlu
ZGV4IDg5ZTc0NmQ0N2U1ZmM2NWUxZTc0ODRjZDBjNmEwNTIyYWMwODQ2NDMuLjUyZjUzNGY5YzMw
OGU0ODI1YjZhNjlmNjliNDRhMWZiNDk0MzA5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKQEAgLTI4LDYgKzI4
LDggQEAKIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQogCisjaW5jbHVkZSAiVGV4dENoZWNrZXIu
aCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0
ZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtODMsNyArODUsNiBAQCBXZWJLaXRU
ZXh0Q2hlY2tlcjo6fldlYktpdFRleHRDaGVja2VyKCkKIAogV2ViS2l0VGV4dENoZWNrZXI6Oldl
YktpdFRleHRDaGVja2VyKCkKICAgICA6IG1fdGV4dENoZWNrZXIoV2ViQ29yZTo6VGV4dENoZWNr
ZXJFbmNoYW50OjpjcmVhdGUoKSkKLSAgICAsIG1fc3BlbGxDaGVja2luZ0VuYWJsZWQoZmFsc2Up
CiB7CiAgICAgV0tUZXh0Q2hlY2tlckNsaWVudCB3a1RleHRDaGVja2VyQ2xpZW50ID0gewogICAg
ICAgICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLApAQCAtMTI4LDEyICsxMjks
MTMgQEAgdm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChjb25zdCBTdHJpbmcmIHdv
cmQpCiAgICAgbV90ZXh0Q2hlY2tlci0+aWdub3JlV29yZCh3b3JkKTsKIH0KIAotdm9pZCBXZWJL
aXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQorYm9v
bCBXZWJLaXRUZXh0Q2hlY2tlcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCiB7Ci0gICAgaWYg
KG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworICAgIHJldHVybiBUZXh0Q2hlY2tl
cjo6c3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKK30KIAordm9pZCBX
ZWJLaXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQor
ewogICAgIC8vIFdlIG5lZWQgdG8gbm90aWZ5IHRoZSBXZWIgcHJvY2VzcyB0aGF0IHRoaXMgaGFz
IGNoYW5nZWQuCiAgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oCmluZGV4IDE1Zjc2NGY2MTZhMjkxNmE0
ZDk4MTRiZmEyZTBjODFmMTgxODFlYjYuLjk1Zjk3OGM3NmE4ZWU0NDlkODM1ZGZjZjdmYmQyNzQ3
OWI1NmM1OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFRleHRDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0VGV4dENoZWNrZXIuaApAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+V2ViS2l0VGV4dENoZWNrZXIoKTsKIAogICAgIC8vIEZvciBpbXBsZW1lbnRpbmcgVGV4dENo
ZWNrZXJDbGllbnQuCi0gICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgeyByZXR1cm4g
bV9zcGVsbENoZWNraW5nRW5hYmxlZDsgfQorICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpOwogICAgIHZvaWQgc2V0U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKICAg
ICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKICAgICBWZWN0b3I8
U3RyaW5nPiBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQpOwpAQCAtNTMsNyAr
NTMsNiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFu
dD4gbV90ZXh0Q2hlY2tlcjsKICAgICBHUmVmUHRyPEdQdHJBcnJheT4gbV9zcGVsbENoZWNraW5n
TGFuZ3VhZ2VzOwotICAgIGJvb2wgbV9zcGVsbENoZWNraW5nRW5hYmxlZDsKIH07CiAKICNlbmRp
ZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UZXh0Q2hlY2tlckRlZmF1bHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Rl
eHRDaGVja2VyRGVmYXVsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDJkZTY5MTJhZjg5NjcwMjZkM2I4Mzkx
YjdmYmU1NjZhZjQ1ZmYwMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UZXh0Q2hlY2tlckRlZmF1bHQuY3BwCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRp
b25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRDaGVja2Vy
LmgiCisKKyNpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykKKworI2luY2x1ZGUgIlRl
eHRCcmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgorI2luY2x1
ZGUgIldlYlRleHRDaGVja2VyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFRleHRDaGVja2VyU3RhdGUgdGV4dENoZWNrZXJTdGF0
ZTsKKworY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplU3RhdGUgPSBmYWxzZTsKKyAgICBpZiAoZGlkSW5p
dGlhbGl6ZVN0YXRlKQorICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKKworICAgIHRl
eHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmYWxzZTsK
KyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGZhbHNlOwor
CisgICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0gdHJ1ZTsKKworICAgIHJldHVybiB0ZXh0Q2hlY2tl
clN0YXRlOworfQorCitib29sIFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
QWxsb3dlZCgpCit7CisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkuY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNr
ZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKQoreworICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7CisKKyAgICBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Cit9CisKK3ZvaWQg
VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQpCit7CisgICAgaWYgKHN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
ID09IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4
dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQ7CisKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdy
YW1tYXJDaGVja2luZ0VuYWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKK30KKwordm9p
ZCBUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2Vk
KGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCit7CisgICAgaWYgKHN0YXRl
KCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHRleHRDaGVja2VyU3RhdGUu
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZDsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxl
ZFN0YXRlQ2hhbmdlZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKK3sKKyAgICBpZiAo
c3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPT0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKK30KKworaW50NjRfdCBU
ZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCit7
CisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudW5pcXVlU3Bl
bGxEb2N1bWVudFRhZyhwYWdlKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERv
Y3VtZW50V2l0aFRhZyhpbnQ2NF90IHRhZykKK3sKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKK30KKworI2lmIFVT
RShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCitzdGF0aWMgaW50IG5leHRXb3JkT2Zmc2V0KGNvbnN0
IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBpbnQgY3VycmVudE9mZnNldCkKK3sKKyAgICAvLyBG
SVhNRTogYXZvaWQgY3JlYXRpbmcgdGV4dEl0ZXJhdG9yIG9iamVjdCBoZXJlLCBpdCBjb3VsZCBi
ZSBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuCisgICAgLy8gICAgICAgIGlzVGV4dEJyZWFrKCkgbGVh
dmVzIHRoZSBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgYm91bmRhcnkgcG9zaXRpb24g
YXQKKyAgICAvLyAgICAgICAgb3IgYWZ0ZXIgIm9mZnNldCIgKHVicmtfaXNCb3VuZGFyeSBzaWRl
IGVmZmVjdCkuCisgICAgLy8gICAgICAgIEZvciBtYW55IHdvcmQgc2VwYXJhdG9ycywgdGhlIG1l
dGhvZCBkb2Vzbid0IHByb3Blcmx5IGRldGVybWluZSB0aGUgYm91bmRhcmllcworICAgIC8vICAg
ICAgICB3aXRob3V0IHJlc2V0dGluZyB0aGUgaXRlcmF0b3IuCisgICAgVGV4dEJyZWFrSXRlcmF0
b3IqIHRleHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7CisgICAg
aWYgKCF0ZXh0SXRlcmF0b3IpCisgICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0OworCisgICAg
aW50IHdvcmRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0OworICAgIHdoaWxlICh3b3JkT2Zmc2V0IDwg
bGVuZ3RoICYmIGlzVGV4dEJyZWFrKHRleHRJdGVyYXRvciwgd29yZE9mZnNldCkpCisgICAgICAg
ICsrd29yZE9mZnNldDsKKworICAgIC8vIERvIG5vdCB0cmVhdCB0aGUgd29yZCdzIGJvdW5kYXJ5
IGFzIGEgc2VwYXJhdG9yLgorICAgIGlmICghY3VycmVudE9mZnNldCAmJiB3b3JkT2Zmc2V0ID09
IDEpCisgICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0OworCisgICAgLy8gT21pdCBtdWx0aXBs
ZSBzZXBhcmF0b3JzLgorICAgIGlmICgod29yZE9mZnNldCAtIGN1cnJlbnRPZmZzZXQpID4gMSkK
KyAgICAgICAgLS13b3JkT2Zmc2V0OworCisgICAgcmV0dXJuIHdvcmRPZmZzZXQ7Cit9CisKK1Zl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFw
aChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3Ro
LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKQoreworICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+IHBhcmFncmFwaENoZWNraW5nUmVzdWx0OworICAgIGlmIChjaGVja2luZ1R5cGVzICYgVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nKSB7CisgICAgICAgIFRleHRCcmVha0l0ZXJhdG9yKiB0ZXh0
SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0LCBsZW5ndGgpOworICAgICAgICBpZiAo
IXRleHRJdGVyYXRvcikKKyAgICAgICAgICAgIHJldHVybiBwYXJhZ3JhcGhDaGVja2luZ1Jlc3Vs
dDsKKworICAgICAgICAvLyBPbWl0IHRoZSB3b3JkIHNlcGFyYXRvcnMgYXQgdGhlIGJlZ2lubmlu
Zy9lbmQgb2YgdGhlIHRleHQgdG8gZG9uJ3QgdW5uZWNlc3NhcmlseQorICAgICAgICAvLyBpbnZv
bHZlIHRoZSBjbGllbnQgdG8gY2hlY2sgc3BlbGxpbmcgZm9yIHRoZW0uCisgICAgICAgIGludCBv
ZmZzZXQgPSBuZXh0V29yZE9mZnNldCh0ZXh0LCBsZW5ndGgsIDApOworICAgICAgICBpbnQgbGVu
Z3RoU3RyaXAgPSBsZW5ndGg7CisgICAgICAgIHdoaWxlIChsZW5ndGhTdHJpcCA+IDAgJiYgaXNU
ZXh0QnJlYWsodGV4dEl0ZXJhdG9yLCBsZW5ndGhTdHJpcCAtIDEpKQorICAgICAgICAgICAgLS1s
ZW5ndGhTdHJpcDsKKworICAgICAgICB3aGlsZSAob2Zmc2V0ID49IDAgJiYgb2Zmc2V0IDwgbGVu
Z3RoU3RyaXApIHsKKyAgICAgICAgICAgIGludDMyX3QgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0x
OworICAgICAgICAgICAgaW50MzJfdCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7CisgICAgICAgICAg
ICBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgdGV4dCArIG9mZnNldCwg
bGVuZ3RoU3RyaXAgLSBvZmZzZXQsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVu
Z3RoKTsKKyAgICAgICAgICAgIGlmICghbWlzc3BlbGxpbmdMZW5ndGgpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCBtaXNzcGVsbGluZ1Jl
c3VsdDsKKyAgICAgICAgICAgIG1pc3NwZWxsaW5nUmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdU
eXBlU3BlbGxpbmc7CisgICAgICAgICAgICBtaXNzcGVsbGluZ1Jlc3VsdC5sb2NhdGlvbiA9IG9m
ZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247CisgICAgICAgICAgICBtaXNzcGVsbGluZ1Jlc3Vs
dC5sZW5ndGggPSBtaXNzcGVsbGluZ0xlbmd0aDsKKyAgICAgICAgICAgIHBhcmFncmFwaENoZWNr
aW5nUmVzdWx0LmFwcGVuZChtaXNzcGVsbGluZ1Jlc3VsdCk7CisgICAgICAgICAgICBvZmZzZXQg
Kz0gbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoOworICAgICAgICAgICAg
Ly8gR2VuZXJhbGx5LCB3ZSBlbmQgdXAgY2hlY2tpbmcgYXQgdGhlIHdvcmQgc2VwYXJhdG9yLCBt
b3ZlIHRvIHRoZSBhZGphY2VudCB3b3JkLgorICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dFdvcmRP
ZmZzZXQodGV4dCwgbGVuZ3RoU3RyaXAsIG9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHBhcmFncmFwaENoZWNraW5nUmVzdWx0OworfQorI2VuZGlmIC8vIFVTRShVTklGSUVE
X1RFWFRfQ0hFQ0tJTkcpCisKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmlu
ZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBs
ZW5ndGgsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5n
TGVuZ3RoKQoreworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tT
cGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZyh0ZXh0LCBsZW5ndGgpLCBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Cit9CisKK3ZvaWQgVGV4dENo
ZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29u
c3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJE
ZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQz
Ml90JiBiYWRHcmFtbWFyTGVuZ3RoKQoreworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
Y2xpZW50KCkuY2hlY2tHcmFtbWFyT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRl
eHQsIGxlbmd0aCksIGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1t
YXJMZW5ndGgpOworfQorCitib29sIFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkK
K3sKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVsbGlu
Z1VJSXNTaG93aW5nKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJ
c1Nob3dpbmcoKQoreworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudG9n
Z2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOworfQorCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29u
c3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKK3sKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1
bWVudFRhZywgbWlzc3BlbGxlZFdvcmQpOworfQorCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJE
ZXRhaWwpCit7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgYmFkR3JhbW1hclBo
cmFzZSwgZ3JhbW1hckRldGFpbCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNG
b3JXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25z
dCBTdHJpbmcmICwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit7CisgICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVsbERvY3VtZW50VGFnLCB3
b3JkLCBndWVzc2VzKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQoreworICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQp
OworfQorCit2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVu
dFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQoreworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQo
KS0+Y2xpZW50KCkuaWdub3JlV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKK30KKwordm9p
ZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hl
Y2tlckNvbXBsZXRpb24+IGNvbXBsZXRpb24pCit7CisjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVD
S0lORykKKyAgICBpZiAoIWNvbXBsZXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIFRleHRD
aGVja2luZ1JlcXVlc3REYXRhIHJlcXVlc3QgPSBjb21wbGV0aW9uLT50ZXh0Q2hlY2tpbmdSZXF1
ZXN0RGF0YSgpOworICAgIEFTU0VSVChyZXF1ZXN0LnNlcXVlbmNlKCkgIT0gdW5yZXF1ZXN0ZWRU
ZXh0Q2hlY2tpbmdTZXF1ZW5jZSk7CisgICAgQVNTRVJUKHJlcXVlc3QubWFzaygpICE9IFRleHRD
aGVja2luZ1R5cGVOb25lKTsKKworICAgIFN0cmluZyB0ZXh0ID0gcmVxdWVzdC50ZXh0KCk7Cisg
ICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0ID0gY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoY29tcGxldGlvbi0+c3BlbGxEb2N1bWVudFRhZygpLCB0ZXh0LmNoYXJhY3RlcnMoKSwgdGV4
dC5sZW5ndGgoKSwgcmVxdWVzdC5tYXNrKCkpOworCisgICAgY29tcGxldGlvbi0+ZGlkRmluaXNo
Q2hlY2tpbmdUZXh0KHJlc3VsdCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb21wbGV0aW9u
KTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFBMQVRG
T1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL1RleHRDaGVja2VyRWZsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZh
N2Q2YzZiYWFhMmI0N2EwZDIxYjJiNjE0Y2Q5YTJkN2UyOTM4Yi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1RleHRDaGVja2VyRWZsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHRD
aGVja2VyLmgiCi0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlRleHRD
aGVja2VyU3RhdGUuaCIKLQotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotI2luY2x1ZGUgIlRleHRC
cmVha0l0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnRFZmwuaCIKLSNpbmNs
dWRlICJXZWJUZXh0Q2hlY2tlci5oIgotI2VuZGlmCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIFRleHRDaGVja2VyU3RhdGUgdGV4dENo
ZWNrZXJTdGF0ZTsKLQotY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRl
KCkKLXsKLSAgICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplU3RhdGUgPSBmYWxzZTsKLSAgICBp
ZiAoZGlkSW5pdGlhbGl6ZVN0YXRlKQotICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsK
LQotICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQg
PSBmYWxzZTsKLSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9
IGZhbHNlOwotCi0gICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0gdHJ1ZTsKLQotICAgIHJldHVybiB0
ZXh0Q2hlY2tlclN0YXRlOwotfQotCi1ib29sIFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nQWxsb3dlZCgpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZChib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQotewotI2lmIEVO
QUJMRShTUEVMTENIRUNLKQotICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7Ci0KLSAgICAvLyBOb3Rp
ZnkgdGhlIGNsaWVudCBhYm91dCB0aGUgc2V0dGluZyBjaGFuZ2UuCi0gICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFS
QU0oaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwotI2VuZGlmCi19Ci0KLXZvaWQg
VGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCkKLXsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQotewotI2lmIEVOQUJMRShTUEVM
TENIRUNLKQotICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
ID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRleHRDaGVja2VyU3RhdGUuaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOwotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oZW5hYmxlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6Z3JhbW1h
ckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLWludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2Vi
UGFnZVByb3h5KiBwYWdlKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIHJldHVybiBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWco
cGFnZSk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKLSAgICByZXR1cm4gMDsKLSNl
bmRpZgotfQotCi12b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGlu
dDY0X3QgdGFnKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFdlYlRleHRDaGVja2Vy
OjpzaGFyZWQoKS0+Y2xpZW50KCkuY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh0YWcpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0odGFnKTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCi1zdGF0aWMgaW50IG5leHRXb3JkT2Zmc2V0KGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQg
bGVuZ3RoLCBpbnQgY3VycmVudE9mZnNldCkKLXsKLSAgICAvLyBGSVhNRTogYXZvaWQgY3JlYXRp
bmcgdGV4dEl0ZXJhdG9yIG9iamVjdCBoZXJlLCBpdCBjb3VsZCBiZSBwYXNzZWQgYXMgYSBwYXJh
bWV0ZXIuCi0gICAgLy8gICAgICAgIGlzVGV4dEJyZWFrKCkgbGVhdmVzIHRoZSBpdGVyYXRvciBw
b2ludGluZyB0byB0aGUgZmlyc3QgYm91bmRhcnkgcG9zaXRpb24gYXQKLSAgICAvLyAgICAgICAg
b3IgYWZ0ZXIgIm9mZnNldCIgKHVicmtfaXNCb3VuZGFyeSBzaWRlIGVmZmVjdCkuCi0gICAgLy8g
ICAgICAgIEZvciBtYW55IHdvcmQgc2VwYXJhdG9ycywgdGhlIG1ldGhvZCBkb2Vzbid0IHByb3Bl
cmx5IGRldGVybWluZSB0aGUgYm91bmRhcmllcwotICAgIC8vICAgICAgICB3aXRob3V0IHJlc2V0
dGluZyB0aGUgaXRlcmF0b3IuCi0gICAgVGV4dEJyZWFrSXRlcmF0b3IqIHRleHRJdGVyYXRvciA9
IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7Ci0gICAgaWYgKCF0ZXh0SXRlcmF0b3Ip
Ci0gICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0OwotCi0gICAgaW50IHdvcmRPZmZzZXQgPSBj
dXJyZW50T2Zmc2V0OwotICAgIHdoaWxlICh3b3JkT2Zmc2V0IDwgbGVuZ3RoICYmIGlzVGV4dEJy
ZWFrKHRleHRJdGVyYXRvciwgd29yZE9mZnNldCkpCi0gICAgICAgICsrd29yZE9mZnNldDsKLQot
ICAgIC8vIERvIG5vdCB0cmVhdCB0aGUgd29yZCdzIGJvdW5kYXJ5IGFzIGEgc2VwYXJhdG9yLgot
ICAgIGlmICghY3VycmVudE9mZnNldCAmJiB3b3JkT2Zmc2V0ID09IDEpCi0gICAgICAgIHJldHVy
biBjdXJyZW50T2Zmc2V0OwotCi0gICAgLy8gT21pdCBtdWx0aXBsZSBzZXBhcmF0b3JzLgotICAg
IGlmICgod29yZE9mZnNldCAtIGN1cnJlbnRPZmZzZXQpID4gMSkKLSAgICAgICAgLS13b3JkT2Zm
c2V0OwotCi0gICAgcmV0dXJuIHdvcmRPZmZzZXQ7Ci19Ci0jZW5kaWYgLy8gRU5BQkxFKFNQRUxM
Q0hFQ0spCi0KLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3Qgc3Bl
bGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIHVpbnQ2NF90IGNo
ZWNraW5nVHlwZXMpCi17Ci0gICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcGFyYWdyYXBo
Q2hlY2tpbmdSZXN1bHQ7Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgaWYgKGNoZWNraW5n
VHlwZXMgJiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpIHsKLSAgICAgICAgVGV4dEJyZWFrSXRl
cmF0b3IqIHRleHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7Ci0g
ICAgICAgIGlmICghdGV4dEl0ZXJhdG9yKQotICAgICAgICAgICAgcmV0dXJuIHBhcmFncmFwaENo
ZWNraW5nUmVzdWx0OwotCi0gICAgICAgIC8vIE9taXQgdGhlIHdvcmQgc2VwYXJhdG9ycyBhdCB0
aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgdGV4dCB0byBkb24ndCB1bm5lY2Vzc2FyaWx5Ci0gICAg
ICAgIC8vIGludm9sdmUgdGhlIGNsaWVudCB0byBjaGVjayBzcGVsbGluZyBmb3IgdGhlbS4KLSAg
ICAgICAgaW50IG9mZnNldCA9IG5leHRXb3JkT2Zmc2V0KHRleHQsIGxlbmd0aCwgMCk7Ci0gICAg
ICAgIGludCBsZW5ndGhTdHJpcCA9IGxlbmd0aDsKLSAgICAgICAgd2hpbGUgKGxlbmd0aFN0cmlw
ID4gMCAmJiBpc1RleHRCcmVhayh0ZXh0SXRlcmF0b3IsIGxlbmd0aFN0cmlwIC0gMSkpCi0gICAg
ICAgICAgICAtLWxlbmd0aFN0cmlwOwotCi0gICAgICAgIHdoaWxlIChvZmZzZXQgPj0gMCAmJiBv
ZmZzZXQgPCBsZW5ndGhTdHJpcCkgewotICAgICAgICAgICAgaW50MzJfdCBtaXNzcGVsbGluZ0xv
Y2F0aW9uID0gLTE7Ci0gICAgICAgICAgICBpbnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsK
LSAgICAgICAgICAgIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCB0ZXh0
ICsgb2Zmc2V0LCBsZW5ndGhTdHJpcCAtIG9mZnNldCwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlz
c3BlbGxpbmdMZW5ndGgpOwotICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ0xlbmd0aCkKLSAg
ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IG1p
c3NwZWxsaW5nUmVzdWx0OwotICAgICAgICAgICAgbWlzc3BlbGxpbmdSZXN1bHQudHlwZSA9IFRl
eHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgIG1pc3NwZWxsaW5nUmVzdWx0Lmxv
Y2F0aW9uID0gb2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsKLSAgICAgICAgICAgIG1pc3Nw
ZWxsaW5nUmVzdWx0Lmxlbmd0aCA9IG1pc3NwZWxsaW5nTGVuZ3RoOwotICAgICAgICAgICAgcGFy
YWdyYXBoQ2hlY2tpbmdSZXN1bHQuYXBwZW5kKG1pc3NwZWxsaW5nUmVzdWx0KTsKLSAgICAgICAg
ICAgIG9mZnNldCArPSBtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGg7Ci0g
ICAgICAgICAgICAvLyBHZW5lcmFsbHksIHdlIGVuZCB1cCBjaGVja2luZyBhdCB0aGUgd29yZCBz
ZXBhcmF0b3IsIG1vdmUgdG8gdGhlIGFkamFjZW50IHdvcmQuCi0gICAgICAgICAgICBvZmZzZXQg
PSBuZXh0V29yZE9mZnNldCh0ZXh0LCBsZW5ndGhTdHJpcCwgb2Zmc2V0KTsKLSAgICAgICAgfQot
ICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOwotICAgIFVO
VVNFRF9QQVJBTSh0ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLSAgICBVTlVTRURf
UEFSQU0oY2hlY2tpbmdUeXBlcyk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcGFyYWdyYXBoQ2hlY2tp
bmdSZXN1bHQ7Ci19Ci0jZW5kaWYKLQotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQz
Ml90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3Bl
bGxpbmdMZW5ndGgpCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVu
dFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxs
aW5nTGVuZ3RoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOwot
ICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsKLSAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKLSAgICBV
TlVTRURfUEFSQU0obWlzc3BlbGxpbmdMb2NhdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKG1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKLSNlbmRpZgotfQotCi12b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1t
YXJPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBWZWN0b3I8R3JhbW1h
ckRldGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LX0KLQotYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZygpCi17Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6
OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19
Ci0KLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQo
aW50NjRfdCwgY29uc3QgU3RyaW5nJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12
b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRf
dCwgY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCi17Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRf
dCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgLCBW
ZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxsRG9j
dW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc3BlbGxE
b2N1bWVudFRhZyk7Ci0gICAgVU5VU0VEX1BBUkFNKHdvcmQpOwotICAgIFVOVVNFRF9QQVJBTShn
dWVzc2VzKTsKLSNlbmRpZgotfQotCi12b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRf
dCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCi17Ci0jaWYgRU5BQkxFKFNQ
RUxMQ0hFQ0spCi0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5sZWFybldv
cmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzcGVs
bERvY3VtZW50VGFnKTsKLSAgICBVTlVTRURfUEFSQU0od29yZCk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFN0cmluZyYgd29yZCkKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBXZWJUZXh0Q2hl
Y2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmlnbm9yZVdvcmQoc3BlbGxEb2N1bWVudFRhZywgd29y
ZCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKLSAgICBVTlVT
RURfUEFSQU0od29yZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENo
ZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+IGNvbXBsZXRp
b24pCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgaWYgKCFjb21wbGV0aW9uKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBUZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSByZXF1ZXN0ID0gY29t
cGxldGlvbi0+dGV4dENoZWNraW5nUmVxdWVzdERhdGEoKTsKLSAgICBBU1NFUlQocmVxdWVzdC5z
ZXF1ZW5jZSgpICE9IHVucmVxdWVzdGVkVGV4dENoZWNraW5nU2VxdWVuY2UpOwotICAgIEFTU0VS
VChyZXF1ZXN0Lm1hc2soKSAhPSBUZXh0Q2hlY2tpbmdUeXBlTm9uZSk7Ci0KLSAgICBTdHJpbmcg
dGV4dCA9IHJlcXVlc3QudGV4dCgpOwotICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJl
c3VsdCA9IGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbXBsZXRpb24tPnNwZWxsRG9jdW1lbnRUYWco
KSwgdGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIHJlcXVlc3QubWFzaygpKTsKLQot
ICAgIGNvbXBsZXRpb24tPmRpZEZpbmlzaENoZWNraW5nVGV4dChyZXN1bHQpOwotI2Vsc2UKLSAg
ICBVTlVTRURfUEFSQU0oY29tcGxldGlvbik7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1RleHRDaGVj
a2VyR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmM0MTkwNzk4ZmZjYWIxMGMyNDEw
MWZlN2E0ZmFhZGI0MTEyMDZmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMgQ29weXJpZ2h0
IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIK
LQotI2luY2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKLSNpbmNsdWRlICJXZWJUZXh0Q2hlY2tl
ci5oIgotI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KLQotdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7Ci0gCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGljIFRleHRDaGVja2Vy
U3RhdGUgdGV4dENoZWNrZXJTdGF0ZTsKLQotY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENo
ZWNrZXI6OnN0YXRlKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplU3RhdGUgPSBm
YWxzZTsKLSAgICBpZiAoZGlkSW5pdGlhbGl6ZVN0YXRlKQotICAgICAgICByZXR1cm4gdGV4dENo
ZWNrZXJTdGF0ZTsKLQotICAgIFdlYlRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQgPSBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpOwotICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBjbGllbnQuY29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKCk7Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQgPSAgY2xpZW50LmdyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKLQotICAgIGRpZEluaXRpYWxp
emVTdGF0ZSA9IHRydWU7Ci0KLSAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKLX0KLSAgCi1i
b29sIFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpCi17Ci0g
ICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY29udGludW91c1Nw
ZWxsQ2hlY2tpbmdBbGxvd2VkKCk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKQotewotICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
ID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0g
ICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOwotICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3Jh
bW1hckNoZWNraW5nRW5hYmxlZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKLXsKLSAg
ICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPT0gaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQgPSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQ7Ci0gICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCi17Ci0gICAg
dGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGVuYWJs
ZWQ7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNo
YW5nZWQoYm9vbCBlbmFibGVkKQotewotICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkID0gZW5hYmxlZDsKLX0KLQotaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVl
U3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIFdlYlRl
eHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVudFRhZyhwYWdl
KTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2
NF90IHRhZykKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNsb3Nl
U3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tT
cGVsbGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRl
eHQsIHVpbnQzMl90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJf
dCYgbWlzc3BlbGxpbmdMZW5ndGgpCi17Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5j
bGllbnQoKS5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRl
eHQsIGxlbmd0aCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLX0K
LQotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERv
Y3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBWZWN0b3I8V2Vi
Q29yZTo6R3JhbW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90JiBiYWRHcmFtbWFy
TG9jYXRpb24sIGludDMyX3QmIGJhZEdyYW1tYXJMZW5ndGgpCi17Ci0gICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50
VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2Nh
dGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7Ci19Ci0KLWJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5n
VUlJc1Nob3dpbmcoKQotewotICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNs
aWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6dG9n
Z2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCi17Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKS50b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCk7Ci19Ci0KLXZvaWQgVGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERv
Y3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQotewotICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZChzcGVsbERvY3VtZW50VGFnLCBtaXNzcGVsbGVkV29yZCk7Ci19Ci0KLXZvaWQgVGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRl
dGFpbCYgZ3JhbW1hckRldGFpbCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNs
aWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFn
LCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tl
cjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMp
Ci17Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29y
ZChzcGVsbERvY3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tl
cjo6bGVhcm5Xb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3Jk
KQotewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkubGVhcm5Xb3JkKHNw
ZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3Jk
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQotewotICAgIFdl
YlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuaWdub3JlV29yZChzcGVsbERvY3VtZW50
VGFnLCB3b3JkKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJp
bmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+KQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207441</attachid>
            <date>2013-07-25 02:20:57 -0700</date>
            <delta_ts>2016-01-06 21:05:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119036-20130725182044.patch</filename>
            <type>text/plain</type>
            <size>33085</size>
            <attacher name="Kwang Yul Seo">skyul</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUzMTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzNjYzg4ZjQ0NWZiNzQ4
MGJkMjkwZjI5NTBmZjIxYjQ0NGIxYzE0Zi4uZWFiMWYyYmFmMDNlZjE5NzBiOTIwYjBmNTdjMmJi
ZGFmZDE2YmQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDEzLTA3LTI0ICBLd2Fu
ZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CisKKyAgICAgICAgW1dLMl1bR1RLXVtF
RkxdIFVuaWZ5IFRleHRDaGVja2VyIGltcGxlbWVudGF0aW9ucyBvZiBHdGsgYW5kIEVmbCBpbnRv
IG9uZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5
MDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW5p
ZnkgVGV4dENoZWNrZXJFZmwuY3BwIGFuZCBUZXh0Q2hlY2tlckd0ay5jcHAgaW50byBUZXh0Q2hl
Y2tlckRlZmF1bHQuY3BwCisgICAgICAgIGJlY2F1c2UgdHdvIGltcGxlbWVudGF0aW9ucyBhcmUg
bW9zdGx5IHRoZSBzYW1lLiBUaGlzIHJlbW92ZSBjb2RlCisgICAgICAgIGR1cGxpY2F0aW9uIGFu
ZCBHdGsgcG9ydCBjYW4gcmV1c2UgdGhlIEVmbCBpbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICBh
c3luY2hyb25vdXMgc3BlbGwgY2hlY2tpbmcgYW5kIHVuaWZpZWQgdGV4dCBjaGVja2VyLgorCisg
ICAgICAgIFRleHRDaGVja2VyRGVmYXVsdC5jcHAgZG9lcyBub3QgaW52b2x2ZSBhbnkgc3BlbGwg
Y2hlY2tpbmcgZW5naW5lIHN1Y2ggYXMKKyAgICAgICAgZW5jaGFudCwgc28gd2UgY2FuIHRoaW5r
IG9mIGl0IGFzIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGZvciBXSzIKKyAgICAgICAgdW5s
ZXNzIGEgcG9ydCBwcm92aWRlcyBpdHMgb3duIGltcGxlbWVudGF0aW9uLgorCisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRU
ZXh0Q2hlY2tlci5jcHA6CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6V2ViS2l0VGV4dENo
ZWNrZXIpOgorICAgICAgICBSZW1vdmUgbWVtYmVyIHZhcmlhYmxlIG1fc3BlbGxDaGVja2luZ0Vu
YWJsZWQgbWVtYmVyIGFuZCByZWFkIGl0IGZyb20KKyAgICAgICAgVGV4dENoZWNrZXI6OnN0YXRl
KCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgdG8gYXZvaWQgZHVwbGljYXRpb24g
b2YgaW5mb3JtYXRpb24uCisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6aXNTcGVsbENoZWNr
aW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2lu
Z0VuYWJsZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2Vy
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1RleHRDaGVja2VyRGVmYXVsdC5jcHA6IFJlbmFtZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcC4KKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKToKKyAgICAgICAgKFdl
YktpdDo6VGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKToK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpncmFtbWFy
Q2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNr
ZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tl
cjo6Y2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyk6CisgICAgICAgIChXZWJLaXQ6Om5leHRXb3Jk
T2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVs
bGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Z2V0R3Vl
c3Nlc0ZvcldvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKToK
KyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpUZXh0Q2hlY2tlcjo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwOiBSZW1vdmVkLgorCiAyMDEzLTA3LTIzICBL
d2FuZyBZdWwgU2VvICA8c2t5dWxAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgW1dLMl0gTW92
ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFn
cmFwaCB0byBXZWJFZGl0b3JDbGllbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
TWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CmluZGV4IGRiYWFj
NTI1NzM5OGQ1MzMxZjE0ZDEyNWZmZWZjZjYxMTA4MDExNTYuLjgyOGViMjU0MzY3ZGFjMzRjNjZj
OTZiNDhhYTU0ZTYzOTM2ZjljNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CkBAIC0yNjAsNiArMjYw
LDcgQEAgc2V0KFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9SZXNwb25zaXZlbmVzc1Rp
bWVyLmNwcAogICAgIFVJUHJvY2Vzcy9TdGF0aXN0aWNzUmVxdWVzdC5jcHAKICAgICBVSVByb2Nl
c3MvVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcAorICAgIFVJUHJvY2Vzcy9UZXh0Q2hlY2tlckRl
ZmF1bHQuY3BwCiAgICAgVUlQcm9jZXNzL1Zpc2l0ZWRMaW5rUHJvdmlkZXIuY3BwCiAgICAgVUlQ
cm9jZXNzL1dlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUHJveHkuY3BwCiAgICAgVUlQcm9jZXNz
L1dlYkJhY2tGb3J3YXJkTGlzdC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IGQxZDU2ODllMDVhYTQ2ZTZjMWNjZTgwMTQxMTkxOWU1Y2E2ZTNlM2YuLjY1ZWE2MTEzOTdlNjhi
OGYzYWM5MTFkYzc3NTk2ZTJhOGJmMTRiZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtODE1LDcgKzgxNSw2IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RQcm94eS5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvY2Fpcm8vQmFja2luZ1N0b3JlQ2Fpcm8uY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL0V4cGVyaW1lbnRhbEZlYXR1cmVzLmNwcCBcCi0JU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAgXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvV2ViQ29udGV4dE1lbnVQcm94eUd0ay5oIFwKQEAgLTg3Myw2ICs4
NzIsNyBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9z
b3VwL1dlYlNvdXBSZXF1ZXN0TWFuYWdlclByb3h5LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3NvdXAvV2ViU291cFJlcXVlc3RNYW5hZ2VyUHJveHkuaCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9U
ZXh0Q2hlY2tlckRlZmF1bHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENo
ZWNrZXJDb21wbGV0aW9uLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tl
ckNvbXBsZXRpb24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVmlzaXRlZExpbmtQ
cm92aWRlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21h
a2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBkYmI3NjZiYWYyMmUx
NDY1ODFlMjgzMzcwZWIzMjVmMTAwYTYzMWFjLi5lYjdhOTU2NDhlZWIwMzllZDViZWFiMmMyYTky
NmYzZGQyYzZlYTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtMTE3LDcgKzExNyw2
IEBAIGxpc3QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9lZmwvUGFnZVZp
ZXdwb3J0Q29udHJvbGxlckNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1JlcXVlc3RN
YW5hZ2VyQ2xpZW50RWZsLmNwcAogICAgIFVJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJDbGllbnRF
ZmwuY3BwCi0gICAgVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKICAgICBVSVByb2Nl
c3MvZWZsL1ZpYnJhdGlvbkNsaWVudEVmbC5jcHAKICAgICBVSVByb2Nlc3MvZWZsL1ZpZXdDbGll
bnRFZmwuY3BwCiAgICAgVUlQcm9jZXNzL2VmbC9XZWJWaWV3RWZsLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VGV4dENoZWNrZXIuY3BwCmlu
ZGV4IDg5ZTc0NmQ0N2U1ZmM2NWUxZTc0ODRjZDBjNmEwNTIyYWMwODQ2NDMuLjUyZjUzNGY5YzMw
OGU0ODI1YjZhNjlmNjliNDRhMWZiNDk0MzA5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5jcHAKQEAgLTI4LDYgKzI4
LDggQEAKIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQogCisjaW5jbHVkZSAiVGV4dENoZWNrZXIu
aCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpdmF0
ZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwpAQCAtODMsNyArODUsNiBAQCBXZWJLaXRU
ZXh0Q2hlY2tlcjo6fldlYktpdFRleHRDaGVja2VyKCkKIAogV2ViS2l0VGV4dENoZWNrZXI6Oldl
YktpdFRleHRDaGVja2VyKCkKICAgICA6IG1fdGV4dENoZWNrZXIoV2ViQ29yZTo6VGV4dENoZWNr
ZXJFbmNoYW50OjpjcmVhdGUoKSkKLSAgICAsIG1fc3BlbGxDaGVja2luZ0VuYWJsZWQoZmFsc2Up
CiB7CiAgICAgV0tUZXh0Q2hlY2tlckNsaWVudCB3a1RleHRDaGVja2VyQ2xpZW50ID0gewogICAg
ICAgICBrV0tUZXh0Q2hlY2tlckNsaWVudEN1cnJlbnRWZXJzaW9uLApAQCAtMTI4LDEyICsxMjks
MTMgQEAgdm9pZCBXZWJLaXRUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChjb25zdCBTdHJpbmcmIHdv
cmQpCiAgICAgbV90ZXh0Q2hlY2tlci0+aWdub3JlV29yZCh3b3JkKTsKIH0KIAotdm9pZCBXZWJL
aXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQorYm9v
bCBXZWJLaXRUZXh0Q2hlY2tlcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCiB7Ci0gICAgaWYg
KG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fc3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOworICAgIHJldHVybiBUZXh0Q2hlY2tl
cjo6c3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKK30KIAordm9pZCBX
ZWJLaXRUZXh0Q2hlY2tlcjo6c2V0U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQor
ewogICAgIC8vIFdlIG5lZWQgdG8gbm90aWZ5IHRoZSBXZWIgcHJvY2VzcyB0aGF0IHRoaXMgaGFz
IGNoYW5nZWQuCiAgICAgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRUZXh0Q2hlY2tlci5oCmluZGV4IDE1Zjc2NGY2MTZhMjkxNmE0
ZDk4MTRiZmEyZTBjODFmMTgxODFlYjYuLjk1Zjk3OGM3NmE4ZWU0NDlkODM1ZGZjZjdmYmQyNzQ3
OWI1NmM1OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFRleHRDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0VGV4dENoZWNrZXIuaApAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB+V2ViS2l0VGV4dENoZWNrZXIoKTsKIAogICAgIC8vIEZvciBpbXBsZW1lbnRpbmcgVGV4dENo
ZWNrZXJDbGllbnQuCi0gICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgeyByZXR1cm4g
bV9zcGVsbENoZWNraW5nRW5hYmxlZDsgfQorICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpOwogICAgIHZvaWQgc2V0U3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKTsKICAg
ICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKICAgICBWZWN0b3I8
U3RyaW5nPiBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQpOwpAQCAtNTMsNyAr
NTMsNiBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFu
dD4gbV90ZXh0Q2hlY2tlcjsKICAgICBHUmVmUHRyPEdQdHJBcnJheT4gbV9zcGVsbENoZWNraW5n
TGFuZ3VhZ2VzOwotICAgIGJvb2wgbV9zcGVsbENoZWNraW5nRW5hYmxlZDsKIH07CiAKICNlbmRp
ZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UZXh0Q2hlY2tlckRlZmF1bHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Rl
eHRDaGVja2VyRGVmYXVsdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2FkNTNkOWEyYjQ0ZjA2NmNjZDI0NDhj
NTgzZTU0ZmExMWJiNWY2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9UZXh0Q2hlY2tlckRlZmF1bHQuY3BwCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFBvcnRp
b25zIENvcHlyaWdodCAoYykgMjAxMCBNb3Rvcm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIFNhbXN1bmcgRWxlY3Ryb25p
Y3MKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRleHRDaGVja2Vy
LmgiCisKKyNpZiBQTEFURk9STShFRkwpIHx8IFBMQVRGT1JNKEdUSykKKworI2luY2x1ZGUgIlRl
eHRCcmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgorI2luY2x1
ZGUgIldlYlRleHRDaGVja2VyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFRleHRDaGVja2VyU3RhdGUgdGV4dENoZWNrZXJTdGF0
ZTsKKworY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKK3sKKyAg
ICBzdGF0aWMgYm9vbCBkaWRJbml0aWFsaXplU3RhdGUgPSBmYWxzZTsKKyAgICBpZiAoZGlkSW5p
dGlhbGl6ZVN0YXRlKQorICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKKworICAgIHRl
eHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmYWxzZTsK
KyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGZhbHNlOwor
CisgICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0gdHJ1ZTsKKworICAgIHJldHVybiB0ZXh0Q2hlY2tl
clN0YXRlOworfQorCitib29sIFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
QWxsb3dlZCgpCit7CisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkuY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNr
ZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKQoreworICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7CisKKyAgICAv
LyBOb3RpZnkgdGhlIGNsaWVudCBhYm91dCB0aGUgc2V0dGluZyBjaGFuZ2UuCisgICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOworfQorCit2b2lkIFRleHRD
aGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKQoreworICAgIGlmIChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHRleHRDaGVj
a2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkOworCisgICAgLy8gTm90aWZ5IHRoZSBjbGllbnQgYWJvdXQgdGhlIHNldHRpbmcgY2hhbmdl
LgorICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNoZWNr
aW5nRW5hYmxlZChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOworfQorCit2b2lkIFRleHRDaGVj
a2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKK3sKKyAgICBpZiAoc3RhdGUoKS5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
OworfQorCit2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQoreworICAgIGlmIChzdGF0ZSgpLmlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOworfQorCitpbnQ2NF90IFRleHRDaGVja2Vy
Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICByZXR1
cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51bmlxdWVTcGVsbERvY3VtZW50
VGFnKHBhZ2UpOworfQorCit2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRo
VGFnKGludDY0X3QgdGFnKQoreworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkuY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh0YWcpOworfQorCisjaWYgVVNFKFVOSUZJRURf
VEVYVF9DSEVDS0lORykKK3N0YXRpYyBpbnQgbmV4dFdvcmRPZmZzZXQoY29uc3QgVUNoYXIqIHRl
eHQsIGludCBsZW5ndGgsIGludCBjdXJyZW50T2Zmc2V0KQoreworICAgIC8vIEZJWE1FOiBhdm9p
ZCBjcmVhdGluZyB0ZXh0SXRlcmF0b3Igb2JqZWN0IGhlcmUsIGl0IGNvdWxkIGJlIHBhc3NlZCBh
cyBhIHBhcmFtZXRlci4KKyAgICAvLyAgICAgICAgaXNUZXh0QnJlYWsoKSBsZWF2ZXMgdGhlIGl0
ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBib3VuZGFyeSBwb3NpdGlvbiBhdAorICAgIC8v
ICAgICAgICBvciBhZnRlciAib2Zmc2V0IiAodWJya19pc0JvdW5kYXJ5IHNpZGUgZWZmZWN0KS4K
KyAgICAvLyAgICAgICAgRm9yIG1hbnkgd29yZCBzZXBhcmF0b3JzLCB0aGUgbWV0aG9kIGRvZXNu
J3QgcHJvcGVybHkgZGV0ZXJtaW5lIHRoZSBib3VuZGFyaWVzCisgICAgLy8gICAgICAgIHdpdGhv
dXQgcmVzZXR0aW5nIHRoZSBpdGVyYXRvci4KKyAgICBUZXh0QnJlYWtJdGVyYXRvciogdGV4dEl0
ZXJhdG9yID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dCwgbGVuZ3RoKTsKKyAgICBpZiAoIXRleHRJ
dGVyYXRvcikKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQ7CisKKyAgICBpbnQgd29yZE9m
ZnNldCA9IGN1cnJlbnRPZmZzZXQ7CisgICAgd2hpbGUgKHdvcmRPZmZzZXQgPCBsZW5ndGggJiYg
aXNUZXh0QnJlYWsodGV4dEl0ZXJhdG9yLCB3b3JkT2Zmc2V0KSkKKyAgICAgICAgKyt3b3JkT2Zm
c2V0OworCisgICAgLy8gRG8gbm90IHRyZWF0IHRoZSB3b3JkJ3MgYm91bmRhcnkgYXMgYSBzZXBh
cmF0b3IuCisgICAgaWYgKCFjdXJyZW50T2Zmc2V0ICYmIHdvcmRPZmZzZXQgPT0gMSkKKyAgICAg
ICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQ7CisKKyAgICAvLyBPbWl0IG11bHRpcGxlIHNlcGFyYXRv
cnMuCisgICAgaWYgKCh3b3JkT2Zmc2V0IC0gY3VycmVudE9mZnNldCkgPiAxKQorICAgICAgICAt
LXdvcmRPZmZzZXQ7CisKKyAgICByZXR1cm4gd29yZE9mZnNldDsKK30KKworVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIHVpbnQ2NF90
IGNoZWNraW5nVHlwZXMpCit7CisgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcGFyYWdy
YXBoQ2hlY2tpbmdSZXN1bHQ7CisgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBUZXh0Q2hlY2tpbmdU
eXBlU3BlbGxpbmcpIHsKKyAgICAgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHRleHRJdGVyYXRvciA9
IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7CisgICAgICAgIGlmICghdGV4dEl0ZXJh
dG9yKQorICAgICAgICAgICAgcmV0dXJuIHBhcmFncmFwaENoZWNraW5nUmVzdWx0OworCisgICAg
ICAgIC8vIE9taXQgdGhlIHdvcmQgc2VwYXJhdG9ycyBhdCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0
aGUgdGV4dCB0byBkb24ndCB1bm5lY2Vzc2FyaWx5CisgICAgICAgIC8vIGludm9sdmUgdGhlIGNs
aWVudCB0byBjaGVjayBzcGVsbGluZyBmb3IgdGhlbS4KKyAgICAgICAgaW50IG9mZnNldCA9IG5l
eHRXb3JkT2Zmc2V0KHRleHQsIGxlbmd0aCwgMCk7CisgICAgICAgIGludCBsZW5ndGhTdHJpcCA9
IGxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGxlbmd0aFN0cmlwID4gMCAmJiBpc1RleHRCcmVhayh0
ZXh0SXRlcmF0b3IsIGxlbmd0aFN0cmlwIC0gMSkpCisgICAgICAgICAgICAtLWxlbmd0aFN0cmlw
OworCisgICAgICAgIHdoaWxlIChvZmZzZXQgPj0gMCAmJiBvZmZzZXQgPCBsZW5ndGhTdHJpcCkg
eworICAgICAgICAgICAgaW50MzJfdCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAgICAg
ICAgICBpbnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCB0ZXh0ICsgb2Zmc2V0LCBsZW5ndGhTdHJp
cCAtIG9mZnNldCwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAg
ICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ0xlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgVGV4dENoZWNraW5nUmVzdWx0IG1pc3NwZWxsaW5nUmVzdWx0OworICAg
ICAgICAgICAgbWlzc3BlbGxpbmdSZXN1bHQudHlwZSA9IFRleHRDaGVja2luZ1R5cGVTcGVsbGlu
ZzsKKyAgICAgICAgICAgIG1pc3NwZWxsaW5nUmVzdWx0LmxvY2F0aW9uID0gb2Zmc2V0ICsgbWlz
c3BlbGxpbmdMb2NhdGlvbjsKKyAgICAgICAgICAgIG1pc3NwZWxsaW5nUmVzdWx0Lmxlbmd0aCA9
IG1pc3NwZWxsaW5nTGVuZ3RoOworICAgICAgICAgICAgcGFyYWdyYXBoQ2hlY2tpbmdSZXN1bHQu
YXBwZW5kKG1pc3NwZWxsaW5nUmVzdWx0KTsKKyAgICAgICAgICAgIG9mZnNldCArPSBtaXNzcGVs
bGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGg7CisgICAgICAgICAgICAvLyBHZW5lcmFs
bHksIHdlIGVuZCB1cCBjaGVja2luZyBhdCB0aGUgd29yZCBzZXBhcmF0b3IsIG1vdmUgdG8gdGhl
IGFkamFjZW50IHdvcmQuCisgICAgICAgICAgICBvZmZzZXQgPSBuZXh0V29yZE9mZnNldCh0ZXh0
LCBsZW5ndGhTdHJpcCwgb2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcGFy
YWdyYXBoQ2hlY2tpbmdSZXN1bHQ7Cit9CisjZW5kaWYgLy8gVVNFKFVOSUZJRURfVEVYVF9DSEVD
S0lORykKKwordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwgaW50
MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCit7
CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja1NwZWxsaW5nT2ZT
dHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCksIG1pc3NwZWxsaW5n
TG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6Y2hl
Y2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciog
dGV4dCwgdWludDMyX3QgbGVuZ3RoLCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mIGdy
YW1tYXJEZXRhaWxzLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QmIGJhZEdy
YW1tYXJMZW5ndGgpCit7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5j
aGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3Ro
KSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7
Cit9CisKK2Jvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKQoreworICAgIHJl
dHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dp
bmcoKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygp
Cit7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS50b2dnbGVTcGVsbGlu
Z1VJSXNTaG93aW5nKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcm
IG1pc3NwZWxsZWRXb3JkKQoreworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkudXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChzcGVsbERvY3VtZW50VGFnLCBt
aXNzcGVsbGVkV29yZCk7Cit9CisKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYg
YmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKK3sK
KyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFt
bWFyRGV0YWlsKTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50
NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYg
LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3sKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNz
ZXMpOworfQorCit2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3Vt
ZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCit7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS5sZWFybldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7Cit9CisKK3Zv
aWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBTdHJpbmcmIHdvcmQpCit7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworfQorCit2b2lkIFRleHRDaGVj
a2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29tcGxl
dGlvbj4gY29tcGxldGlvbikKK3sKKyNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAg
IGlmICghY29tcGxldGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgVGV4dENoZWNraW5nUmVx
dWVzdERhdGEgcmVxdWVzdCA9IGNvbXBsZXRpb24tPnRleHRDaGVja2luZ1JlcXVlc3REYXRhKCk7
CisgICAgQVNTRVJUKHJlcXVlc3Quc2VxdWVuY2UoKSAhPSB1bnJlcXVlc3RlZFRleHRDaGVja2lu
Z1NlcXVlbmNlKTsKKyAgICBBU1NFUlQocmVxdWVzdC5tYXNrKCkgIT0gVGV4dENoZWNraW5nVHlw
ZU5vbmUpOworCisgICAgU3RyaW5nIHRleHQgPSByZXF1ZXN0LnRleHQoKTsKKyAgICBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHQgPSBjaGVja1RleHRPZlBhcmFncmFwaChjb21wbGV0
aW9uLT5zcGVsbERvY3VtZW50VGFnKCksIHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgp
LCByZXF1ZXN0Lm1hc2soKSk7CisKKyAgICBjb21wbGV0aW9uLT5kaWRGaW5pc2hDaGVja2luZ1Rl
eHQocmVzdWx0KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbXBsZXRpb24pOworI2VuZGlm
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gUExBVEZPUk0oRUZMKSB8
fCBQTEFURk9STShHVEspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZs
L1RleHRDaGVja2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENo
ZWNrZXJFZmwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmE3ZDZjNmJhYWEy
YjQ3YTBkMjFiMmI2MTRjZDlhMmQ3ZTI5MzhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNr
ZXJFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogUG9ydGlvbnMg
Q29weXJpZ2h0IChjKSAyMDEwIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcwot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIK
LQotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0
ZS5oIgotCi0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0jaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0
b3IuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudEVmbC5oIgotI2luY2x1ZGUgIldlYlRl
eHRDaGVja2VyLmgiCi0jZW5kaWYKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotCi1zdGF0aWMgVGV4dENoZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRl
OwotCi1jb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQotewotICAg
IHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOwotICAgIGlmIChkaWRJbml0
aWFsaXplU3RhdGUpCi0gICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwotCi0gICAgdGV4
dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9IGZhbHNlOwot
ICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gZmFsc2U7Ci0K
LSAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOwotCi0gICAgcmV0dXJuIHRleHRDaGVja2Vy
U3RhdGU7Ci19Ci0KLWJvb2wgVGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdB
bGxvd2VkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJv
b2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCi17Ci0jaWYgRU5BQkxFKFNQRUxM
Q0hFQ0spCi0gICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQg
PT0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKLQotICAgIC8vIE5vdGlmeSB0aGUgY2xp
ZW50IGFib3V0IHRoZSBzZXR0aW5nIGNoYW5nZS4KLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBUZXh0Q2hlY2tl
cjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0g
ICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gZW5hYmxl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShl
bmFibGVkKTsKLSNlbmRpZgotfQotCi12b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
aW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkq
IHBhZ2UpCi17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgcmV0dXJuIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsKLSNl
bHNlCi0gICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwotICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0K
LXZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcp
Ci17Ci0jaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgp
LT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTSh0YWcpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLXN0
YXRpYyBpbnQgbmV4dFdvcmRPZmZzZXQoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIGlu
dCBjdXJyZW50T2Zmc2V0KQotewotICAgIC8vIEZJWE1FOiBhdm9pZCBjcmVhdGluZyB0ZXh0SXRl
cmF0b3Igb2JqZWN0IGhlcmUsIGl0IGNvdWxkIGJlIHBhc3NlZCBhcyBhIHBhcmFtZXRlci4KLSAg
ICAvLyAgICAgICAgaXNUZXh0QnJlYWsoKSBsZWF2ZXMgdGhlIGl0ZXJhdG9yIHBvaW50aW5nIHRv
IHRoZSBmaXJzdCBib3VuZGFyeSBwb3NpdGlvbiBhdAotICAgIC8vICAgICAgICBvciBhZnRlciAi
b2Zmc2V0IiAodWJya19pc0JvdW5kYXJ5IHNpZGUgZWZmZWN0KS4KLSAgICAvLyAgICAgICAgRm9y
IG1hbnkgd29yZCBzZXBhcmF0b3JzLCB0aGUgbWV0aG9kIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZXJt
aW5lIHRoZSBib3VuZGFyaWVzCi0gICAgLy8gICAgICAgIHdpdGhvdXQgcmVzZXR0aW5nIHRoZSBp
dGVyYXRvci4KLSAgICBUZXh0QnJlYWtJdGVyYXRvciogdGV4dEl0ZXJhdG9yID0gd29yZEJyZWFr
SXRlcmF0b3IodGV4dCwgbGVuZ3RoKTsKLSAgICBpZiAoIXRleHRJdGVyYXRvcikKLSAgICAgICAg
cmV0dXJuIGN1cnJlbnRPZmZzZXQ7Ci0KLSAgICBpbnQgd29yZE9mZnNldCA9IGN1cnJlbnRPZmZz
ZXQ7Ci0gICAgd2hpbGUgKHdvcmRPZmZzZXQgPCBsZW5ndGggJiYgaXNUZXh0QnJlYWsodGV4dEl0
ZXJhdG9yLCB3b3JkT2Zmc2V0KSkKLSAgICAgICAgKyt3b3JkT2Zmc2V0OwotCi0gICAgLy8gRG8g
bm90IHRyZWF0IHRoZSB3b3JkJ3MgYm91bmRhcnkgYXMgYSBzZXBhcmF0b3IuCi0gICAgaWYgKCFj
dXJyZW50T2Zmc2V0ICYmIHdvcmRPZmZzZXQgPT0gMSkKLSAgICAgICAgcmV0dXJuIGN1cnJlbnRP
ZmZzZXQ7Ci0KLSAgICAvLyBPbWl0IG11bHRpcGxlIHNlcGFyYXRvcnMuCi0gICAgaWYgKCh3b3Jk
T2Zmc2V0IC0gY3VycmVudE9mZnNldCkgPiAxKQotICAgICAgICAtLXdvcmRPZmZzZXQ7Ci0KLSAg
ICByZXR1cm4gd29yZE9mZnNldDsKLX0KLSNlbmRpZiAvLyBFTkFCTEUoU1BFTExDSEVDSykKLQot
I2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVsbERvY3VtZW50
VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hlY2tpbmdUeXBl
cykKLXsKLSAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBwYXJhZ3JhcGhDaGVja2luZ1Jl
c3VsdDsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBpZiAoY2hlY2tpbmdUeXBlcyAmIFRl
eHRDaGVja2luZ1R5cGVTcGVsbGluZykgewotICAgICAgICBUZXh0QnJlYWtJdGVyYXRvciogdGV4
dEl0ZXJhdG9yID0gd29yZEJyZWFrSXRlcmF0b3IodGV4dCwgbGVuZ3RoKTsKLSAgICAgICAgaWYg
KCF0ZXh0SXRlcmF0b3IpCi0gICAgICAgICAgICByZXR1cm4gcGFyYWdyYXBoQ2hlY2tpbmdSZXN1
bHQ7Ci0KLSAgICAgICAgLy8gT21pdCB0aGUgd29yZCBzZXBhcmF0b3JzIGF0IHRoZSBiZWdpbm5p
bmcvZW5kIG9mIHRoZSB0ZXh0IHRvIGRvbid0IHVubmVjZXNzYXJpbHkKLSAgICAgICAgLy8gaW52
b2x2ZSB0aGUgY2xpZW50IHRvIGNoZWNrIHNwZWxsaW5nIGZvciB0aGVtLgotICAgICAgICBpbnQg
b2Zmc2V0ID0gbmV4dFdvcmRPZmZzZXQodGV4dCwgbGVuZ3RoLCAwKTsKLSAgICAgICAgaW50IGxl
bmd0aFN0cmlwID0gbGVuZ3RoOwotICAgICAgICB3aGlsZSAobGVuZ3RoU3RyaXAgPiAwICYmIGlz
VGV4dEJyZWFrKHRleHRJdGVyYXRvciwgbGVuZ3RoU3RyaXAgLSAxKSkKLSAgICAgICAgICAgIC0t
bGVuZ3RoU3RyaXA7Ci0KLSAgICAgICAgd2hpbGUgKG9mZnNldCA+PSAwICYmIG9mZnNldCA8IGxl
bmd0aFN0cmlwKSB7Ci0gICAgICAgICAgICBpbnQzMl90IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAt
MTsKLSAgICAgICAgICAgIGludDMyX3QgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwotICAgICAgICAg
ICAgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIHRleHQgKyBvZmZzZXQs
IGxlbmd0aFN0cmlwIC0gb2Zmc2V0LCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xl
bmd0aCk7Ci0gICAgICAgICAgICBpZiAoIW1pc3NwZWxsaW5nTGVuZ3RoKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgbWlzc3BlbGxpbmdS
ZXN1bHQ7Ci0gICAgICAgICAgICBtaXNzcGVsbGluZ1Jlc3VsdC50eXBlID0gVGV4dENoZWNraW5n
VHlwZVNwZWxsaW5nOwotICAgICAgICAgICAgbWlzc3BlbGxpbmdSZXN1bHQubG9jYXRpb24gPSBv
ZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uOwotICAgICAgICAgICAgbWlzc3BlbGxpbmdSZXN1
bHQubGVuZ3RoID0gbWlzc3BlbGxpbmdMZW5ndGg7Ci0gICAgICAgICAgICBwYXJhZ3JhcGhDaGVj
a2luZ1Jlc3VsdC5hcHBlbmQobWlzc3BlbGxpbmdSZXN1bHQpOwotICAgICAgICAgICAgb2Zmc2V0
ICs9IG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aDsKLSAgICAgICAgICAg
IC8vIEdlbmVyYWxseSwgd2UgZW5kIHVwIGNoZWNraW5nIGF0IHRoZSB3b3JkIHNlcGFyYXRvciwg
bW92ZSB0byB0aGUgYWRqYWNlbnQgd29yZC4KLSAgICAgICAgICAgIG9mZnNldCA9IG5leHRXb3Jk
T2Zmc2V0KHRleHQsIGxlbmd0aFN0cmlwLCBvZmZzZXQpOwotICAgICAgICB9Ci0gICAgfQotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7Ci0gICAgVU5VU0VEX1BBUkFN
KHRleHQpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIFVOVVNFRF9QQVJBTShjaGVj
a2luZ1R5cGVzKTsKLSNlbmRpZgotICAgIHJldHVybiBwYXJhZ3JhcGhDaGVja2luZ1Jlc3VsdDsK
LX0KLSNlbmRpZgotCi12b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50
NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3Ro
LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0
aCkKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJp
bmcodGV4dCwgbGVuZ3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgp
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7Ci0gICAgVU5VU0VE
X1BBUkFNKHRleHQpOwotICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwotICAgIFVOVVNFRF9QQVJB
TShtaXNzcGVsbGluZ0xvY2F0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0obWlzc3BlbGxpbmdMZW5n
dGgpOwotI2VuZGlmCi19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KGludDY0X3QsIGNvbnN0IFVDaGFyKiwgdWludDMyX3QsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYs
IGludDMyX3QmLCBpbnQzMl90JikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1ib29s
IFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6dG9nZ2xlU3Bl
bGxpbmdVSUlzU2hvd2luZygpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBU
ZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBj
b25zdCBTdHJpbmcmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgVGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhpbnQ2NF90LCBjb25zdCBT
dHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiAsIFZlY3RvcjxTdHJp
bmc+JiBndWVzc2VzKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywg
d29yZCwgZ3Vlc3Nlcyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFn
KTsKLSAgICBVTlVTRURfUEFSQU0od29yZCk7Ci0gICAgVU5VU0VEX1BBUkFNKGd1ZXNzZXMpOwot
I2VuZGlmCi19Ci0KLXZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKLXsKLSNpZiBFTkFCTEUoU1BFTExDSEVDSykK
LSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERv
Y3VtZW50VGFnLCB3b3JkKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRU
YWcpOwotICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKLSNlbmRpZgotfQotCi12b2lkIFRleHRDaGVj
a2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3
b3JkKQotewotI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuaWdub3JlV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOwotICAgIFVOVVNFRF9QQVJBTSh3
b3JkKTsKLSNlbmRpZgotfQotCi12b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0
cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29tcGxldGlvbj4gY29tcGxldGlvbikKLXsKLSNp
ZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBpZiAoIWNvbXBsZXRpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFRleHRDaGVja2luZ1JlcXVlc3REYXRhIHJlcXVlc3QgPSBjb21wbGV0aW9uLT50
ZXh0Q2hlY2tpbmdSZXF1ZXN0RGF0YSgpOwotICAgIEFTU0VSVChyZXF1ZXN0LnNlcXVlbmNlKCkg
IT0gdW5yZXF1ZXN0ZWRUZXh0Q2hlY2tpbmdTZXF1ZW5jZSk7Ci0gICAgQVNTRVJUKHJlcXVlc3Qu
bWFzaygpICE9IFRleHRDaGVja2luZ1R5cGVOb25lKTsKLQotICAgIFN0cmluZyB0ZXh0ID0gcmVx
dWVzdC50ZXh0KCk7Ci0gICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0ID0gY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoY29tcGxldGlvbi0+c3BlbGxEb2N1bWVudFRhZygpLCB0ZXh0LmNo
YXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgcmVxdWVzdC5tYXNrKCkpOwotCi0gICAgY29tcGxl
dGlvbi0+ZGlkRmluaXNoQ2hlY2tpbmdUZXh0KHJlc3VsdCk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShjb21wbGV0aW9uKTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZiYzQxOTA3OThmZmNhYjEwYzI0MTAxZmU3YTRmYWFk
YjQxMTIwNmYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDIwMTAg
TW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgotCi0jaW5jbHVk
ZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgotI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKLSAKLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgVGV4dENoZWNrZXJTdGF0ZSB0ZXh0
Q2hlY2tlclN0YXRlOwotCi1jb25zdCBUZXh0Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6c3Rh
dGUoKQotewotICAgIHN0YXRpYyBib29sIGRpZEluaXRpYWxpemVTdGF0ZSA9IGZhbHNlOwotICAg
IGlmIChkaWRJbml0aWFsaXplU3RhdGUpCi0gICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRl
OwotCi0gICAgV2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2xpZW50KCk7Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KTsKLSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9ICBjbGll
bnQuZ3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOwotCi0gICAgZGlkSW5pdGlhbGl6ZVN0YXRlID0g
dHJ1ZTsKLQotICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwotfQotICAKLWJvb2wgVGV4dENo
ZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKLXsKLSAgICByZXR1cm4g
V2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jb250aW51b3VzU3BlbGxDaGVja2lu
Z0FsbG93ZWQoKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCi17Ci0g
ICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICB0ZXh0Q2hl
Y2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQ7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQotewotICAgIGlmIChzdGF0
ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9PSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKLSAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6
c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICB0ZXh0Q2hlY2tl
clN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZW5hYmxlZDsKLX0KLQot
dm9pZCBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29s
IGVuYWJsZWQpCi17Ci0gICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQgPSBlbmFibGVkOwotfQotCi1pbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3Vt
ZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKLXsKLSAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS51bmlxdWVTcGVsbERvY3VtZW50VGFnKHBhZ2UpOwotfQotCi12
b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQot
ewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2xvc2VTcGVsbERvY3Vt
ZW50V2l0aFRhZyh0YWcpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZT
dHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgdWludDMy
X3QgbGVuZ3RoLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVs
bGluZ0xlbmd0aCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNo
ZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4dCwgbGVuZ3Ro
KSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotfQotCi12b2lkIFRl
eHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcs
IGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIFZlY3RvcjxXZWJDb3JlOjpHcmFt
bWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwg
aW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLmNoZWNrR3JhbW1hck9mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIFN0cmlu
Zyh0ZXh0LCBsZW5ndGgpLCBncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hckxvY2F0aW9uLCBiYWRH
cmFtbWFyTGVuZ3RoKTsKLX0KLQotYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2lu
ZygpCi17Ci0gICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc3Bl
bGxpbmdVSUlzU2hvd2luZygpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGlu
Z1VJSXNTaG93aW5nKCkKLXsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgp
LnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6dXBk
YXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcs
IGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCi17Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNwZWxs
RG9jdW1lbnRUYWcsIG1pc3NwZWxsZWRXb3JkKTsKLX0KLQotdm9pZCBUZXh0Q2hlY2tlcjo6dXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywg
Y29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBncmFt
bWFyRGV0YWlsKQotewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIGJhZEdyYW1t
YXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpnZXRHdWVz
c2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCwg
Y29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKLXsKLSAgICBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxsRG9j
dW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOwotfQotCi12b2lkIFRleHRDaGVja2VyOjpsZWFybldv
cmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCi17Ci0gICAg
V2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5sZWFybldvcmQoc3BlbGxEb2N1bWVu
dFRhZywgd29yZCk7Ci19Ci0KLXZvaWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCBz
cGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCi17Ci0gICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQp
OwotfQotCi12b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVm
UHRyPFRleHRDaGVja2VyQ29tcGxldGlvbj4pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="229233"
          type_id="1"
          status="-"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>