<?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>94320</bug_id>
          
          <creation_ts>2012-08-17 02:29:29 -0700</creation_ts>
          <short_desc>Share WebKit-Gtk&apos;s Enchant implementation with others WebKit ports</short_desc>
          <delta_ts>2012-08-24 07:01:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>91854</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Grzegorz Czajkowski">g.czajkowski</reporter>
          <assigned_to name="Grzegorz Czajkowski">g.czajkowski</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>mario</cc>
    
    <cc>mifenton</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>698081</commentid>
    <comment_count>0</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-08-17 02:29:29 -0700</bug_when>
    <thetext>WebKit-Gtk ensures spellchecking with the Enchant library support, mostly implemented at https://bugs.webkit.org/show_bug.cgi?id=90269.
This code is used in both WebKit-Gtk.
The WebKit-Efl&apos;s implemention of spellchecking is based on Enchant too. It doesn&apos;t have sense to duplicate implementation from text/gtk/TextCheckerEnchant* files for WebKit&apos;s Efl.

To share WebKit-Gtk&apos;s implemnetation with others WebKit, this patch proposes:
1. Move TextCheckerEnchant{h.cpp} files form WebCore/platform/text/gtk/ to WebCore/platform/text/enchant/.
2. Limit Glib&apos;s calls as possible for example, GOwnPtr -&gt; WTF::OwnPtr etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700756</commentid>
    <comment_count>1</comment_count>
      <attachid>159689</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-08-21 07:55:49 -0700</bug_when>
    <thetext>Created attachment 159689
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700848</commentid>
    <comment_count>2</comment_count>
      <attachid>159689</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-21 09:53:53 -0700</bug_when>
    <thetext>Comment on attachment 159689
proposed patch

Since the GTK+ port already uses ICU (at least by default) maybe we could use the same code based on ICU and avoid the #ifdefs? And for the language maybe we could use WebCore::defaultLanguage() or any other method in Language.h. What you guys think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700863</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-21 10:01:33 -0700</bug_when>
    <thetext>I think #ifdefs should be avoided here if possible and it seems like it&apos;s very possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>700897</commentid>
    <comment_count>4</comment_count>
      <attachid>159689</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-08-21 10:37:47 -0700</bug_when>
    <thetext>Comment on attachment 159689
proposed patch

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

I agree with Martin and Carlos&apos;s comments. Additionally, you&apos;re missing the fix for bug 94202 here, thus re-introducing the issue with this patch.

See my comment below...

&gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:137
&gt; +                if (enchant_dict_check(*dictIter, word.utf8().data(), wordLength)) {

You are probably missing the fix for bug 94202, committed last week, which is about not calling this function passing wordLength because it will fail for strings with special UTF8 characters, such as &quot;דעפ&quot;, for instance. You should pass &apos;bytes&apos; instead which is what enchant_dict_check actually expects.

See bug 94202 for more details.

&gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:203
&gt; +            // No dictionaries selected, we get first from the list.

&quot;we get first from the list&quot; -&gt; &quot;we get the first one from the list&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701746</commentid>
    <comment_count>5</comment_count>
      <attachid>159895</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-08-22 03:50:14 -0700</bug_when>
    <thetext>Created attachment 159895
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701757</commentid>
    <comment_count>6</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-08-22 04:03:04 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 159689 [details])
&gt; Since the GTK+ port already uses ICU (at least by default) maybe we could use the same code based on ICU and avoid the #ifdefs?

Ok, I used ICU instead of Pango at the patch so any Platform specif code doesn&apos;t exist.

&gt; And for the language maybe we could use WebCore::defaultLanguage() or any other method in Language.h. What you guys think?

Good idea.
For WebKit-Gtk the method returns &quot;en-US&quot;. There is no problem for the Enchant backed, its &apos;normalize&apos; function is called to properly find the desired dictionary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701765</commentid>
    <comment_count>7</comment_count>
      <attachid>159689</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-08-22 04:14:52 -0700</bug_when>
    <thetext>Comment on attachment 159689
proposed patch

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

&gt;&gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:137
&gt;&gt; +                if (enchant_dict_check(*dictIter, word.utf8().data(), wordLength)) {
&gt; 
&gt; You are probably missing the fix for bug 94202, committed last week, which is about not calling this function passing wordLength because it will fail for strings with special UTF8 characters, such as &quot;דעפ&quot;, for instance. You should pass &apos;bytes&apos; instead which is what enchant_dict_check actually expects.
&gt; 
&gt; See bug 94202 for more details.

You&apos;re right.
This bug shows up that the String::fromUTF8() also requires the number of bytes instead of number of characters.
To properly compute the number of bytes from utf8 string I had to use glib&apos;s API - g_utf8_offset_to_pointer() as it was done before. Unfortunately it makes TextCheckerEnchant implementation glib independent. Of course for Gtk, Efl it is no problem - we already use it.

&gt;&gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:203
&gt;&gt; +            // No dictionaries selected, we get first from the list.
&gt; 
&gt; &quot;we get first from the list&quot; -&gt; &quot;we get the first one from the list&quot;

Fixed thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701862</commentid>
    <comment_count>8</comment_count>
      <attachid>159895</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-08-22 06:56:35 -0700</bug_when>
    <thetext>Comment on attachment 159895
updated patch

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

Thanks for the update. However, I&apos;m afraid you will need to provide yet another one mainly because a new patch has recently (today!) been committed that affects the base your patch :(. See bug 94683 for more details.

Also, I commented a couple of things on this patch too. Hope you find them interesting / useful...

&gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:27
&gt; +#include &lt;glib.h&gt; // For utf8 support.

I don&apos;t think this comment is actually needed (also, it&apos;s not very common to have inline comments, even less for includes, AFAIK)

&gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:101
&gt; +            const char* cstart = cString + start;

Shouldn&apos;t you use g_utf8_offset_to_pointer() here too?

&gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:106
&gt; +                if (enchant_dict_check(*dictIter, word.utf8().data(), numberOfBytes)) {

I&apos;m not completely sure, but I think it&apos;s not safe to call enchant_dict_check passing directly word.utf8().data() as parameter, since the CString returned by .utf8() will be disposed early and you&apos;ll have a gchar* (as returned by .data()) pointing to invalid memory.

Thus, it&apos;s probably safer to do something like this in line 103:

  CString word = String::fromUTF8(cstart, numberOfBytes).utf8();

... and then just call to word.data() from that point on where you need it (lines 106 and 130 only, I think)

&gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:130
&gt; +        char** suggestions = enchant_dict_suggest(*iter, word.utf8().data(), -1, &amp;numberOfSuggestions);

This line would also benefit of the CString declaration I mentioned before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701932</commentid>
    <comment_count>9</comment_count>
      <attachid>159895</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-08-22 08:22:10 -0700</bug_when>
    <thetext>Comment on attachment 159895
updated patch

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

&gt;&gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:106
&gt;&gt; +                if (enchant_dict_check(*dictIter, word.utf8().data(), numberOfBytes)) {
&gt; 
&gt; I&apos;m not completely sure, but I think it&apos;s not safe to call enchant_dict_check passing directly word.utf8().data() as parameter, since the CString returned by .utf8() will be disposed early and you&apos;ll have a gchar* (as returned by .data()) pointing to invalid memory.
&gt; 
&gt; Thus, it&apos;s probably safer to do something like this in line 103:
&gt; 
&gt;   CString word = String::fromUTF8(cstart, numberOfBytes).utf8();
&gt; 
&gt; ... and then just call to word.data() from that point on where you need it (lines 106 and 130 only, I think)

It&apos;s safe to use .data(), but not to store it and use it on a later line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702751</commentid>
    <comment_count>10</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-08-23 00:10:46 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 159895 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159895&amp;action=review
&gt; 
&gt; Thanks for the update. However, I&apos;m afraid you will need to provide yet another one mainly because a new patch has recently (today!) been committed that affects the base your patch :(. See bug 94683 for more details.

Thanks for the information. This change is good for us too :) Our internal implementation also bases on vector to pass/get languages. Frankly speaking I wanted to change in the another patch:)

&gt; &gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:27
&gt; &gt; +#include &lt;glib.h&gt; // For utf8 support.
&gt; 
&gt; I don&apos;t think this comment is actually needed (also, it&apos;s not very common to have inline comments, even less for includes, AFAIK)

You&apos;re right. I removed this useless comment.

&gt; &gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:101
&gt; &gt; +            const char* cstart = cString + start;
&gt; 
&gt; Shouldn&apos;t you use g_utf8_offset_to_pointer() here too?

Ok, I wanted to limit GLib&apos;s invocation as possible. The beginning of the word can be determined based on raw pointers - it doesn&apos;t matter whether string contains UTF8 data or not. I couldn&apos;t find alternative way how to determine the number of bytes of the string that is passes in UTF8 (only GLib API works) we can restore origin code. We have to use GLib anyway :)

&gt; &gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:106
&gt; &gt; +                if (enchant_dict_check(*dictIter, word.utf8().data(), numberOfBytes)) {
&gt; 
&gt; I&apos;m not completely sure, but I think it&apos;s not safe to call enchant_dict_check passing directly word.utf8().data() as parameter, since the CString returned by .utf8() will be disposed early and you&apos;ll have a gchar* (as returned by .data()) pointing to invalid memory.
&gt; 
&gt; Thus, it&apos;s probably safer to do something like this in line 103:
&gt; 
&gt;   CString word = String::fromUTF8(cstart, numberOfBytes).utf8();
&gt; 
&gt; ... and then just call to word.data() from that point on where you need it (lines 106 and 130 only, I think)

I understand your idea. I tested this patch and I didn&apos;t notice any issues with that. As Martin said using word().utf8().data() is safety. Anyway &apos;ignoreWord&apos;, &apos;learnWord&apos;, &apos;getGuessesForWord&apos; also use word.utf8().data() directly.

&gt; 
&gt; &gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:130
&gt; &gt; +        char** suggestions = enchant_dict_suggest(*iter, word.utf8().data(), -1, &amp;numberOfSuggestions);
&gt; 
&gt; This line would also benefit of the CString declaration I mentioned before.

Here only gchar -&gt; char is being changed. So I leave word.utf8().data() as it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702754</commentid>
    <comment_count>11</comment_count>
      <attachid>159895</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-23 00:18:25 -0700</bug_when>
    <thetext>Comment on attachment 159895
updated patch

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

&gt; Source/WebCore/platform/text/enchant/TextCheckerEnchant.cpp:103
&gt; +            String word = String::fromUTF8(cstart, numberOfBytes);

Why converting it to String here? the string is then converted to utf8 before it&apos;s passed to enchant, so I think it would be better to use a CString in this case and pass word.data() to enchant, or even use cstart directly since the number of bytes is passed to enchant too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702764</commentid>
    <comment_count>12</comment_count>
      <attachid>160101</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-08-23 00:27:30 -0700</bug_when>
    <thetext>Created attachment 160101
patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>702776</commentid>
    <comment_count>13</comment_count>
      <attachid>160104</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-08-23 00:42:45 -0700</bug_when>
    <thetext>Created attachment 160104
passing cstring to enchant

Thanks Carlos for suggestion - applied.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704031</commentid>
    <comment_count>14</comment_count>
      <attachid>160104</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-08-24 06:05:35 -0700</bug_when>
    <thetext>Comment on attachment 160104
passing cstring to enchant

Looks good, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704037</commentid>
    <comment_count>15</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-08-24 06:16:42 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 160104 [details])
&gt; Looks good, thanks!

Thanks!
This patch changes base code of spelling for WebKit-Gtk. I will set cq+ if unit and layout tests pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704058</commentid>
    <comment_count>16</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-08-24 06:38:02 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 160104 [details] [details])
&gt; &gt; Looks good, thanks!
&gt; 
&gt; Thanks!
&gt; This patch changes base code of spelling for WebKit-Gtk. I will set cq+ if unit and layout tests pass.

Unit test result:
TestWebKitWebContext which tests spelling passes.

TEST: ./Tools/gtk/../Scripts/../../WebKitBuild/Release/Programs/WebKit2APITests/TestWebKitWebContext... (pid=12321)
PASS: ./Tools/gtk/../Scripts/../../WebKitBuild/Release/Programs/WebKit2APITests/TestWebKitWebContext

Layout test result:
./Tools/Scripts/run-webkit-tests --gtk editing/spelling

Found 27 tests; running 25, skipping 2.
Running 1 DumpRenderTree over 1 shard.

[1/25] editing/spelling/context-menu-suggestions.html failed
[2/25] editing/spelling/design-mode-spellcheck-off.html passed
[3/25] editing/spelling/grammar-edit-word.html failed
[4/25] editing/spelling/grammar-markers.html passed
[5/25] editing/spelling/grammar.html failed
[6/25] editing/spelling/inline_spelling_markers.html passed
[7/25] editing/spelling/spellcheck-api-crash.html passed
[8/25] editing/spelling/spellcheck-async-mutation.html failed
[9/25] editing/spelling/spellcheck-async-remove-frame.html passed
[10/25] editing/spelling/spellcheck-async.html failed
[11/25] editing/spelling/spellcheck-attribute.html passed
[12/25] editing/spelling/spellcheck-input-search-crash.html passed
[13/25] editing/spelling/spellcheck-paste-disabled.html passed
[14/25] editing/spelling/spellcheck-paste.html passed
[15/25] editing/spelling/spellcheck-queue.html failed
[16/25] editing/spelling/spellcheck-sequencenum.html failed
[17/25] editing/spelling/spelling-attribute-at-child.html passed
[18/25] editing/spelling/spelling-attribute-change.html passed
[19/25] editing/spelling/spelling-backspace-between-lines.html passed
[20/25] editing/spelling/spelling-hasspellingmarker.html passed
[21/25] editing/spelling/spelling-insert-html.html passed
[22/25] editing/spelling/spelling-linebreak.html passed
[23/25] editing/spelling/spelling-marker-description.html failed
[24/25] editing/spelling/spelling-unified-emulation.html failed
[25/25] editing/spelling/spelling.html passed

All 25 tests ran as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704066</commentid>
    <comment_count>17</comment_count>
      <attachid>160104</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2012-08-24 06:43:37 -0700</bug_when>
    <thetext>Comment on attachment 160104
passing cstring to enchant

No regression, cq+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704078</commentid>
    <comment_count>18</comment_count>
      <attachid>160104</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 07:01:38 -0700</bug_when>
    <thetext>Comment on attachment 160104
passing cstring to enchant

Clearing flags on attachment: 160104

Committed r126583: &lt;http://trac.webkit.org/changeset/126583&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704079</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-24 07:01:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159689</attachid>
            <date>2012-08-21 07:55:49 -0700</date>
            <delta_ts>2012-08-22 04:14:52 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>share_enchant_implementaion.patch</filename>
            <type>text/plain</type>
            <size>12563</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNjYzYTQ2Li5iOTJhYzU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzgg
QEAKKzIwMTItMDgtMjEgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgU2hhcmUgV2ViS2l0LUd0aydzIEVuY2hhbnQgaW1wbGVtZW50YXRp
b24gd2l0aCBvdGhlcnMgV2ViS2l0IHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQzMjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGUgbWFpbiByZWFzb24gb2YgdGhpcyBjaGFuZ2UgaXMgdG8g
c2hhcmUgV2ViS2l0LUd0ayBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGluZworICAgICAgICB3aXRo
IG90aGVycyBwb3J0cyB0aGF0IHVzZSB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICAgICAgICBUaGlz
IGlzIHRoZSBmaXJzdCBzdGVwIHRvIGVuYWJsZSBzcGVsbGluZyBmb3IgV2ViS2l0LUVmbCAoaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0KQorCisgICAgICAgIEZp
bGVzIHRoYXQgaW1wbGVtZW50IHNwZWxsaW5nIHdpdGggRW5jaGFudCB3ZXJlIG1vdmVkIHRvIHBs
YXRmb3JtL3RleHQvZW5jaGFudCBkaXJlY3RvcnkuCisKKyAgICAgICAgV2ViS2l0LUd0ayB1c2Vz
IFBhbmdvIGJhY2tlbmQgdG8gZmluZCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIHdvcmQg
dG8gcGVyZm9ybSBjaGVja1NwZWxsaW5nT2ZTdHJpbmcuCisgICAgICAgIEFzIFdlYktpdC1FZmwg
ZG9lc24ndCB1c2UgUGFuZ28gKGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD05MjEwMikgdGhvc2UgaW5mb3JtYXRpb24KKyAgICAgICAgYXJlIGRlbGl2ZXJlZCB0aHJvdWdo
IElDVSBpbnRlcmZhY2UgdXNpbmcgVGV4dEJyZWFrSXRlcmF0b3IuCisKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbTogQWRkcyBuZXdseSBjcmVhdGVkICdlbmNoYW50JyBkaXJlY3RvcnkgdG8gV2Vi
S2l0LUd0aydzIHNvdXJjZXMuCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogVXBkYXRl
cyBsb2NhdGlvbiBvZiBUZXh0Q2hlY2tlckVuY2hhbnQue2gsY3BwfSBmaWxlcy4KKworICAgICAg
ICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6IFJlbW92ZXMgJ3N0YXRpYycgbW9kaWZpZXIg
Zm9yICdpc0xvZ2ljYWxTdGFydE9mV29yZCcgYW5kICdpc2xvZ2ljYWxFbmRPZldvcmQnIGZ1bmN0
aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OmlzTG9naWNhbFN0YXJ0T2ZXb3JkKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzbG9naWNhbEVuZE9mV29yZCk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxl
X3VuaXRzLmg6IEFkZHMgaXNMb2dpY2FsU3RhcnRPZldvcmQnIGFuZCAnaXNsb2dpY2FsRW5kT2ZX
b3JkJyBmdW5jdGlvbnMgdG8gaGVhZGVyIGFzIHRoZXkgYXJlIHVzZWQgYnkgVGV4dENoZWNrZXJF
bmNoYW50LmNwcAorCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2Vy
RW5jaGFudC5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwLgorICAgICAgICAoZW5jaGFudERpY3REZXNjcmliZUNh
bGxiYWNrKTogQWRkcyBjb21tZW50cy4KKyAgICAgICAgKHdvcmRFbmRJc0FDb250cmFjdGlvbkFw
b3N0cm9waGUpOiBBZGRzIGJ1ZyBudW1iZXIgYXMgaXQncyBQYW5nbyBzcGVjaWZpYyBidWcuCisg
ICAgICAgIChUZXh0Q2hlY2tlckVuY2hhbnQ6OlRleHRDaGVja2VyRW5jaGFudCk6CisgICAgICAg
IChUZXh0Q2hlY2tlckVuY2hhbnQ6On5UZXh0Q2hlY2tlckVuY2hhbnQpOgorICAgICAgICAoVGV4
dENoZWNrZXJFbmNoYW50OjppZ25vcmVXb3JkKToKKyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFu
dDo6bGVhcm5Xb3JkKToKKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hl
Y2tlckVuY2hhbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
Z3RrL1RleHRDaGVja2VyRW5jaGFudC5oLgorCiAyMDEyLTA4LTIxICBJbHlhIFRpa2hvbm92c2t5
ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBOTUk6IHJl
bmFtZSBhZGRNZW1iZXIgZm9yIHN0cmluZ3MgYW5kIEtVUkwgdG8gYWRkSW5zdHJ1bWVudGVkTWVt
YmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCBmOWVhYjI0Li5iZTQwYTE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQpAQCAtMTE1LDcgKzExNSw3IEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAog
CS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBcCiAJLUkk
KHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9lbmNoYW50CiAKICMgLS0tCiAjIEZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVs
dCBhdCBjb21waWxhdGlvbiB0aW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAy
YmM5ODc5Li44ZjVmMTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ2ODIs
OCArNDY4Miw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU3VkZGVuVGVybWluYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VwcGxl
bWVudGFibGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3lzdGVtVGltZS5oIFwKLQlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q2hlY2tlckVuY2hhbnQuaCBcCi0J
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENoZWNrZXJFbmNoYW50LmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFu
dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJF
bmNoYW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAppbmRleCBiNDJhZjI2Li5iMGZiOTI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKQEAgLTM2LDcgKzM2LDYgQEAKICNp
bmNsdWRlICJSZW5kZXJlZFBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUg
IlRleHRCb3VuZGFyaWVzLmgiCi0jaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNpbmNs
dWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNs
dWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCkBAIC0zMjMsNyArMzIyLDcgQEAgc3RhdGljIFRleHRC
cmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KGNvbnN0
IFZpc2libGVQb3MKICAgICByZXR1cm4gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nLmRhdGEoKSwg
bGVuKTsKIH0gCiAKLXN0YXRpYyBib29sIGlzTG9naWNhbFN0YXJ0T2ZXb3JkKFRleHRCcmVha0l0
ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKK2Jvb2wgaXNM
b2dpY2FsU3RhcnRPZldvcmQoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXIsIGludCBwb3NpdGlvbiwg
Ym9vbCBoYXJkTGluZUJyZWFrKQogewogICAgIGJvb2wgYm91bmRhcnkgPSBoYXJkTGluZUJyZWFr
ID8gdHJ1ZSA6IGlzVGV4dEJyZWFrKGl0ZXIsIHBvc2l0aW9uKTsKICAgICBpZiAoIWJvdW5kYXJ5
KQpAQCAtMzM0LDcgKzMzMyw3IEBAIHN0YXRpYyBib29sIGlzTG9naWNhbFN0YXJ0T2ZXb3JkKFRl
eHRCcmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyCiAgICAgcmV0dXJu
IGlzV29yZFRleHRCcmVhayhpdGVyKTsKIH0KIAotc3RhdGljIGJvb2wgaXNsb2dpY2FsRW5kT2ZX
b3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVC
cmVhaykKK2Jvb2wgaXNsb2dpY2FsRW5kT2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyLCBp
bnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKIHsKICAgICBib29sIGJvdW5kYXJ5ID0g
aXNUZXh0QnJlYWsoaXRlciwgcG9zaXRpb24pOwogICAgIHJldHVybiAoaGFyZExpbmVCcmVhayB8
fCBib3VuZGFyeSkgJiYgaXNXb3JkVGV4dEJyZWFrKGl0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L3Zpc2libGVfdW5pdHMuaAppbmRleCAwNWIxYTMwLi44MTZlYmJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL3Zpc2libGVfdW5pdHMuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRWRp
dGluZ0JlaGF2aW9yVHlwZXMuaCIKICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKKyNpbmNs
dWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsNiArNDYsOSBAQCBWaXNpYmxlUG9zaXRpb24gbmV4
dFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CiBWaXNpYmxlUG9zaXRpb24g
cmlnaHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCBza2lwc1NwYWNl
V2hlbk1vdmluZ1JpZ2h0KTsKIFZpc2libGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0aW9uKGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiBib29s
IGlzU3RhcnRPZldvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisvLyB1c2VkIGJ5IFRleHRD
aGVja2VyRW5jaGFudC5jcHAKK2Jvb2wgaXNMb2dpY2FsU3RhcnRPZldvcmQoVGV4dEJyZWFrSXRl
cmF0b3IqLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhayA9IGZhbHNlKTsKK2Jvb2wg
aXNsb2dpY2FsRW5kT2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiwgaW50IHBvc2l0aW9uLCBib29s
IGhhcmRMaW5lQnJlYWsgPSBmYWxzZSk7CiAKIC8vIHNlbnRlbmNlcwogVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0T2ZTZW50ZW5jZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5j
cHAKc2ltaWxhcml0eSBpbmRleCA4MiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9ndGsvVGV4dENoZWNrZXJFbmNoYW50LmNwcApyZW5hbWUgdG8gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAKaW5kZXggZjNm
NjBlNi4uOGM4Zjc5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9n
dGsvVGV4dENoZWNrZXJFbmNoYW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiAgQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEy
IFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDEwICsyMiwx
NSBAQAogCiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCiAKLSNpbmNsdWRlIDxwYW5nby9wYW5nby5o
PgotI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2lmIFBMQVRG
T1JNKEdUSykKKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgorI2Vsc2UKKyNpbmNsdWRlIDxlZGl0aW5nL3Zpc2libGVfdW5pdHMuaD4KKyNpbmNs
dWRlIDx0ZXh0L1RleHRCcmVha0l0ZXJhdG9yLmg+CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTM2LDYgKzQyLDggQEAgc3RhdGljIHZvaWQgZW5jaGFudERpY3REZXNj
cmliZUNhbGxiYWNrKGNvbnN0IGNoYXIqIGNvbnN0IGxhbmd1YWdlVGFnLCBjb25zdCBjaGEKICAg
ICBkaWN0aW9uYXJpZXMtPmFwcGVuZChsYW5ndWFnZVRhZyk7CiB9CiAKKyNpZiBQTEFURk9STShH
VEspCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYxMTgKIHN0
YXRpYyBib29sIHdvcmRFbmRJc0FDb250cmFjdGlvbkFwb3N0cm9waGUoY29uc3QgY2hhciogc3Ry
aW5nLCBsb25nIG9mZnNldCkKIHsKICAgICBpZiAoZ191dGY4X2dldF9jaGFyKGdfdXRmOF9vZmZz
ZXRfdG9fcG9pbnRlcihzdHJpbmcsIG9mZnNldCkpICE9IGdfdXRmOF9nZXRfY2hhcigiJyIpKQpA
QCAtNDcsNiArNTUsNyBAQCBzdGF0aWMgYm9vbCB3b3JkRW5kSXNBQ29udHJhY3Rpb25BcG9zdHJv
cGhlKGNvbnN0IGNoYXIqIHN0cmluZywgbG9uZyBvZmZzZXQpCiAKICAgICByZXR1cm4gZ191bmlj
aGFyX2lzYWxwaGEoZ191dGY4X2dldF9jaGFyKGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcihzdHJp
bmcsIG9mZnNldCArIDEpKSk7CiB9CisjZW5kaWYKIAogVGV4dENoZWNrZXJFbmNoYW50OjpUZXh0
Q2hlY2tlckVuY2hhbnQoKQogICAgIDogbV9icm9rZXIoZW5jaGFudF9icm9rZXJfaW5pdCgpKQpA
QCAtNzksNDMgKzg4LDUzIEBAIHZvaWQgVGV4dENoZWNrZXJFbmNoYW50OjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbWlzc3BlCiB7CiAgICAgaWYgKG1f
ZW5jaGFudERpY3Rpb25hcmllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBWZWN0
b3I8RW5jaGFudERpY3QqPjo6Y29uc3RfaXRlcmF0b3IgZGljdEl0ZXIgPSBtX2VuY2hhbnREaWN0
aW9uYXJpZXMuYmVnaW4oKTsKIAotICAgIFBhbmdvTGFuZ3VhZ2UqIGxhbmd1YWdlKHBhbmdvX2xh
bmd1YWdlX2dldF9kZWZhdWx0KCkpOwogICAgIHNpemVfdCBudW1iZXJPZkNoYXJhY3RlcnMgPSBz
dHJpbmcubGVuZ3RoKCk7Ci0gICAgR093blB0cjxQYW5nb0xvZ0F0dHI+IGF0dHJzKGdfbmV3KFBh
bmdvTG9nQXR0ciwgbnVtYmVyT2ZDaGFyYWN0ZXJzICsgMSkpOwotCiAgICAgQ1N0cmluZyB1dGY4
U3RyaW5nID0gc3RyaW5nLnV0ZjgoKTsKICAgICBjb25zdCBjaGFyKiBjU3RyaW5nID0gdXRmOFN0
cmluZy5kYXRhKCk7CiAKKyNpZiBQTEFURk9STShHVEspCisgICAgT3duQXJyYXlQdHI8UGFuZ29M
b2dBdHRyPiBhdHRycyA9IGFkb3B0QXJyYXlQdHIobmV3IFBhbmdvTG9nQXR0cltudW1iZXJPZkNo
YXJhY3RlcnMgKyAxXSk7CisgICAgUGFuZ29MYW5ndWFnZSogbGFuZ3VhZ2UocGFuZ29fbGFuZ3Vh
Z2VfZ2V0X2RlZmF1bHQoKSk7CiAgICAgLy8gcGFuZ29fZ2V0X2xvZ19hdHRycyB1c2VzIGFuIGFk
aXRpb25hbCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0LgogICAgIHBhbmdvX2dldF9s
b2dfYXR0cnMoY1N0cmluZywgLTEsIC0xLCBsYW5ndWFnZSwgYXR0cnMuZ2V0KCksIG51bWJlck9m
Q2hhcmFjdGVycyArIDEpOworI2Vsc2UKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlciA9IHdv
cmRCcmVha0l0ZXJhdG9yKHN0cmluZy5jaGFyYWN0ZXJzKCksIG51bWJlck9mQ2hhcmFjdGVycyk7
CisgICAgaWYgKCFpdGVyKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKworICAgIFZlY3RvcjxF
bmNoYW50RGljdCo+Ojpjb25zdF9pdGVyYXRvciBkaWN0SXRlciA9IG1fZW5jaGFudERpY3Rpb25h
cmllcy5iZWdpbigpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkNoYXJh
Y3RlcnMgKyAxOyBpKyspIHsKLSAgICAgICAgLy8gV2UgZ28gdGhyb3VnaCBlYWNoIGNoYXJhY3Rl
ciB1bnRpbCB3ZSBmaW5kIGFuIGlzX3dvcmRfc3RhcnQsCi0gICAgICAgIC8vIHRoZW4gd2UgZ2V0
IGludG8gYW4gaW5uZXIgbG9vcCB0byBmaW5kIHRoZSBpc193b3JkX2VuZCBjb3JyZXNwb25kaW5n
CisgICAgICAgIC8vIFdlIGdvIHRocm91Z2ggZWFjaCBjaGFyYWN0ZXIgdW50aWwgd2UgZmluZCB0
aGUgYmVnaW5uaW5nIG9mIHRoZSB3b3JkCisgICAgICAgIC8vIHRoZW4gd2UgZ2V0IGludG8gYW4g
aW5uZXIgbG9vcCB0byBmaW5kIHRoZSBlbmQgb2YgdGhlIHdvcmQgY29ycmVzcG9uZGluZwogICAg
ICAgICAvLyB0byBpdC4KKworI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAgaWYgKGF0dHJzLmdl
dCgpW2ldLmlzX3dvcmRfc3RhcnQpIHsKKyNlbHNlCisgICAgICAgIGlmIChpc0xvZ2ljYWxTdGFy
dE9mV29yZChpdGVyLCBpKSkgeworI2VuZGlmCiAgICAgICAgICAgICBpbnQgc3RhcnQgPSBpOwog
ICAgICAgICAgICAgaW50IGVuZCA9IGk7CiAgICAgICAgICAgICBpbnQgd29yZExlbmd0aDsKIAor
I2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAgICAgIHdoaWxlIChhdHRycy5nZXQoKVtlbmRdLmlz
X3dvcmRfZW5kIDwgMSAgfHwgd29yZEVuZElzQUNvbnRyYWN0aW9uQXBvc3Ryb3BoZShjU3RyaW5n
LCBlbmQpKQorI2Vsc2UKKyAgICAgICAgICAgIHdoaWxlICghaXNsb2dpY2FsRW5kT2ZXb3JkKGl0
ZXIsIGVuZCkpCisjZW5kaWYKICAgICAgICAgICAgICAgICBlbmQrKzsKIAogICAgICAgICAgICAg
d29yZExlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgICAgICAgICAgLy8gU2V0IHRoZSBpdGVyYXRv
ciB0byBiZSBhdCB0aGUgY3VycmVudCB3b3JkIGVuZCwgc28gd2UgZG9uJ3QKICAgICAgICAgICAg
IC8vIGNoZWNrIGNoYXJhY3RlcnMgdHdpY2UuCiAgICAgICAgICAgICBpID0gZW5kOwotCi0gICAg
ICAgICAgICBnY2hhciogY3N0YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKGNTdHJpbmcs
IHN0YXJ0KTsKLSAgICAgICAgICAgIGdpbnQgYnl0ZXMgPSBzdGF0aWNfY2FzdDxnaW50PihnX3V0
Zjhfb2Zmc2V0X3RvX3BvaW50ZXIoY1N0cmluZywgZW5kKSAtIGNzdGFydCk7Ci0gICAgICAgICAg
ICBHT3duUHRyPGdjaGFyPiB3b3JkKGdfbmV3MChnY2hhciwgYnl0ZXMgKyAxKSk7Ci0KLSAgICAg
ICAgICAgIGdfdXRmOF9zdHJuY3B5KHdvcmQuZ2V0KCksIGNzdGFydCwgd29yZExlbmd0aCk7Cisg
ICAgICAgICAgICBTdHJpbmcgd29yZCA9IFN0cmluZzo6ZnJvbVVURjgoY1N0cmluZyArIHN0YXJ0
LCB3b3JkTGVuZ3RoKTsKIAogICAgICAgICAgICAgZm9yICg7IGRpY3RJdGVyICE9IG1fZW5jaGFu
dERpY3Rpb25hcmllcy5lbmQoKTsgKytkaWN0SXRlcikgewotICAgICAgICAgICAgICAgIGlmIChl
bmNoYW50X2RpY3RfY2hlY2soKmRpY3RJdGVyLCB3b3JkLmdldCgpLCBieXRlcykpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoZW5jaGFudF9kaWN0X2NoZWNrKCpkaWN0SXRlciwgd29yZC51dGY4KCku
ZGF0YSgpLCB3b3JkTGVuZ3RoKSkgewogICAgICAgICAgICAgICAgICAgICBtaXNzcGVsbGluZ0xv
Y2F0aW9uID0gc3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsaW5nTGVuZ3RoID0g
d29yZExlbmd0aDsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTM5LDcgKzE1OCw3IEBA
IFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2VyRW5jaGFudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29u
c3QgU3RyaW5nJiB3b3JkKQogICAgICAgICBzaXplX3QgbnVtYmVyT2ZTdWdnZXN0aW9uczsKICAg
ICAgICAgc2l6ZV90IGk7CiAKLSAgICAgICAgZ2NoYXIqKiBzdWdnZXN0aW9ucyA9IGVuY2hhbnRf
ZGljdF9zdWdnZXN0KCppdGVyLCB3b3JkLnV0ZjgoKS5kYXRhKCksIC0xLCAmbnVtYmVyT2ZTdWdn
ZXN0aW9ucyk7CisgICAgICAgIGNoYXIqKiBzdWdnZXN0aW9ucyA9IGVuY2hhbnRfZGljdF9zdWdn
ZXN0KCppdGVyLCB3b3JkLnV0ZjgoKS5kYXRhKCksIC0xLCAmbnVtYmVyT2ZTdWdnZXN0aW9ucyk7
CiAgICAgICAgIGlmIChudW1iZXJPZlN1Z2dlc3Rpb25zIDw9IDApCiAgICAgICAgICAgICBjb250
aW51ZTsKIApAQCAtMTcwLDE2ICsxODksMjIgQEAgdm9pZCBUZXh0Q2hlY2tlckVuY2hhbnQ6OnVw
ZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFnZXMoY29uc3QgU3RyaW5nJiBsYW5ndWFnZXMpCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBjb25zdCBjaGFyKiBs
YW5ndWFnZSA9IHBhbmdvX2xhbmd1YWdlX3RvX3N0cmluZyhwYW5nb19sYW5ndWFnZV9nZXRfZGVm
YXVsdCgpKTsKLSAgICAgICAgaWYgKGVuY2hhbnRfYnJva2VyX2RpY3RfZXhpc3RzKG1fYnJva2Vy
LCBsYW5ndWFnZSkpIHsKKyAgICAgICAgLy8gTGFuZ3VhZ2VzIGFyZSBub3Qgc3BlY2lmaWVkIGJ5
IHVzZXIsIHRyeSB0byBnZXQgZGVmYXVsdCBsYW5ndWFnZS4KKyAgICAgICAgY29uc3QgY2hhciog
bGFuZ3VhZ2UgPSAwOworI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgbGFuZ3VhZ2UgPSBwYW5n
b19sYW5ndWFnZV90b19zdHJpbmcocGFuZ29fbGFuZ3VhZ2VfZ2V0X2RlZmF1bHQoKSk7CisjZWxz
ZQorICAgICAgICBsYW5ndWFnZSA9IGdldGVudigiTEFORyIpOworI2VuZGlmCisgICAgICAgIGlm
IChsYW5ndWFnZSAmJiBlbmNoYW50X2Jyb2tlcl9kaWN0X2V4aXN0cyhtX2Jyb2tlciwgbGFuZ3Vh
Z2UpKSB7CiAgICAgICAgICAgICBFbmNoYW50RGljdCogZGljdCA9IGVuY2hhbnRfYnJva2VyX3Jl
cXVlc3RfZGljdChtX2Jyb2tlciwgbGFuZ3VhZ2UpOwogICAgICAgICAgICAgc3BlbGxEaWN0aW9u
YXJpZXMuYXBwZW5kKGRpY3QpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gTm8g
ZGljdGlvbmFyaWVzIHNlbGVjdGVkLCB3ZSBnZXQgb25lIGZyb20gdGhlIGxpc3QuCisgICAgICAg
ICAgICAvLyBObyBkaWN0aW9uYXJpZXMgc2VsZWN0ZWQsIHdlIGdldCBmaXJzdCBmcm9tIHRoZSBs
aXN0LgogICAgICAgICAgICAgVmVjdG9yPENTdHJpbmc+IGFsbERpY3Rpb25hcmllczsKICAgICAg
ICAgICAgIGVuY2hhbnRfYnJva2VyX2xpc3RfZGljdHMobV9icm9rZXIsIGVuY2hhbnREaWN0RGVz
Y3JpYmVDYWxsYmFjaywgJmFsbERpY3Rpb25hcmllcyk7CiAgICAgICAgICAgICBpZiAoIWFsbERp
Y3Rpb25hcmllcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBFbmNoYW50RGljdCogZGlj
dCA9IGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfZGljdChtX2Jyb2tlciwgYWxsRGljdGlvbmFyaWVz
WzBdLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgRW5jaGFudERpY3QqIGRpY3QgPSBlbmNoYW50
X2Jyb2tlcl9yZXF1ZXN0X2RpY3QobV9icm9rZXIsIGFsbERpY3Rpb25hcmllcy5maXJzdCgpLmRh
dGEoKSk7CiAgICAgICAgICAgICAgICAgc3BlbGxEaWN0aW9uYXJpZXMuYXBwZW5kKGRpY3QpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2d0ay9UZXh0Q2hlY2tlckVuY2hhbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuaApzaW1pbGFyaXR5IGluZGV4IDEw
MCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENoZWNr
ZXJFbmNoYW50LmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5jaGFu
dC9UZXh0Q2hlY2tlckVuY2hhbnQuaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159895</attachid>
            <date>2012-08-22 03:50:14 -0700</date>
            <delta_ts>2012-08-23 00:27:30 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>share_enchant_implementaion.patch</filename>
            <type>text/plain</type>
            <size>12652</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNjYzYTQ2Li5jYWY5M2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTItMDgtMjIgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgU2hhcmUgV2ViS2l0LUd0aydzIEVuY2hhbnQgaW1wbGVtZW50YXRp
b24gd2l0aCBvdGhlcnMgV2ViS2l0IHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQzMjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGUgbWFpbiByZWFzb24gb2YgdGhpcyBjaGFuZ2UgaXMgdG8g
c2hhcmUgV2ViS2l0LUd0ayBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGluZworICAgICAgICB3aXRo
IG90aGVycyBwb3J0cyB0aGF0IHVzZSB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICAgICAgICBUaGlz
IGlzIHRoZSBmaXJzdCBzdGVwIHRvIGVuYWJsZSBzcGVsbGluZyBmb3IgV2ViS2l0LUVmbCAoaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0KQorCisgICAgICAgIEZp
bGVzIHRoYXQgaW1wbGVtZW50IHNwZWxsaW5nIHdlcmUgbW92ZWQgdG8gcGxhdGZvcm0vdGV4dC9l
bmNoYW50IGRpcmVjdG9yeS4KKworICAgICAgICBUaGlzIHBhdGNoIHN0b3BzIHVzaW5nIFBhbmdv
IGJhY2tlbmQgdG8gZmluZCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgd29yZC4KKyAgICAgICAg
VGhvc2UgaW5mb3JtYXRpb24gYXJlIGRlbGl2ZXJlZCB0aHJvdWdoIElDVSBpbnRlcmZhY2UgYnkg
dXNpbmcgVGV4dEJyZWFrSXRlcmF0b3IuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRk
cyBuZXdseSBjcmVhdGVkICdlbmNoYW50JyBkaXJlY3RvcnkgdG8gV2ViS2l0LUd0aydzIHNvdXJj
ZXMuCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogVXBkYXRlcyBsb2NhdGlvbiBvZiBU
ZXh0Q2hlY2tlckVuY2hhbnQue2gsY3BwfSBmaWxlcy4KKworICAgICAgICAqIGVkaXRpbmcvdmlz
aWJsZV91bml0cy5jcHA6IFJlbW92ZXMgJ3N0YXRpYycgbW9kaWZpZXIgZm9yICdpc0xvZ2ljYWxT
dGFydE9mV29yZCcgYW5kICdpc2xvZ2ljYWxFbmRPZldvcmQnIGZ1bmN0aW9ucy4KKyAgICAgICAg
KFdlYkNvcmU6OmlzTG9naWNhbFN0YXJ0T2ZXb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OmlzbG9n
aWNhbEVuZE9mV29yZCk6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmg6IEFkZHMg
aXNMb2dpY2FsU3RhcnRPZldvcmQnIGFuZCAnaXNsb2dpY2FsRW5kT2ZXb3JkJyBmdW5jdGlvbnMg
dG8gaGVhZGVyIGFzIHRoZXkgYXJlIHVzZWQgYnkgVGV4dENoZWNrZXJFbmNoYW50LmNwcAorCisg
ICAgICAgICogcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHA6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q2hlY2tlckVu
Y2hhbnQuY3BwLgorICAgICAgICAoZW5jaGFudERpY3REZXNjcmliZUNhbGxiYWNrKTogQWRkcyBj
b21tZW50cy4KKyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6VGV4dENoZWNrZXJFbmNoYW50
KToKKyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6flRleHRDaGVja2VyRW5jaGFudCk6Cisg
ICAgICAgIChUZXh0Q2hlY2tlckVuY2hhbnQ6Omlnbm9yZVdvcmQpOgorICAgICAgICAoVGV4dENo
ZWNrZXJFbmNoYW50OjpsZWFybldvcmQpOgorICAgICAgICAoVGV4dENoZWNrZXJFbmNoYW50Ojpj
aGVja1NwZWxsaW5nT2ZTdHJpbmcpOiBVc2luZyBJQ1UgaW5zdGVhZCBvZiBQYW5nbyB0byBmaW5k
IG91dCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgd29yZC4KKyAgICAgICAgKFRleHRDaGVja2Vy
RW5jaGFudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOiBSZXBsYWNlcyBnY2hhciB0eXBlIHRvIGNoYXIu
CisgICAgICAgIChUZXh0Q2hlY2tlckVuY2hhbnQ6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5ndWFn
ZXMpOiBVc2VzIFdlYkNvcmU6OmRlZmF1bExhbmd1YWdlKCkgaW5zdGVhZCBvZiBQYW5nbyBiYWNr
ZW5kLgorICAgICAgICAoVGV4dENoZWNrZXJFbmNoYW50OjpnZXRTcGVsbENoZWNraW5nTGFuZ3Vh
Z2VzKToKKyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6ZnJlZUVuY2hhbnRCcm9rZXJEaWN0
aW9uYXJpZXMpOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvZW5jaGFudC9UZXh0Q2hlY2tlckVu
Y2hhbnQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1Rl
eHRDaGVja2VyRW5jaGFudC5oLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChUZXh0Q2hl
Y2tlckVuY2hhbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNrZXJFbmNoYW50OjpjcmVh
dGUpOgorCiAyMDEyLTA4LTIxICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBOTUk6IHJlbmFtZSBhZGRNZW1iZXIgZm9yIHN0
cmluZ3MgYW5kIEtVUkwgdG8gYWRkSW5zdHJ1bWVudGVkTWVtYmVyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQppbmRleCBmOWVhYjI0Li5iZTQwYTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTE1LDcg
KzExNSw3IEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
Z3RrCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50CiAK
ICMgLS0tCiAjIEZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVsdCBhdCBjb21waWxhdGlvbiB0aW1l
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAyYmM5ODc5Li44ZjVmMTRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ2ODIsOCArNDY4Miw4IEBAIHdlYmNvcmVf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VkZGVuVGVybWluYXRpb24u
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3VwcGxlbWVudGFibGUuaCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU3lzdGVtVGltZS5oIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2d0ay9UZXh0Q2hlY2tlckVuY2hhbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9ndGsvVGV4dENoZWNrZXJFbmNoYW50LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9CaWRpUmVzb2x2ZXIuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L3Zpc2libGVfdW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRz
LmNwcAppbmRleCBiNDJhZjI2Li5iMGZiOTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlz
aWJsZV91bml0cy5jcHAKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJlZFBvc2l0
aW9uLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCi0j
aW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9u
LmgiCkBAIC0zMjMsNyArMzIyLDcgQEAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJl
YWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3MKICAgICByZXR1
cm4gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nLmRhdGEoKSwgbGVuKTsKIH0gCiAKLXN0YXRpYyBi
b29sIGlzTG9naWNhbFN0YXJ0T2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQgcG9z
aXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKK2Jvb2wgaXNMb2dpY2FsU3RhcnRPZldvcmQoVGV4
dEJyZWFrSXRlcmF0b3IqIGl0ZXIsIGludCBwb3NpdGlvbiwgYm9vbCBoYXJkTGluZUJyZWFrKQog
ewogICAgIGJvb2wgYm91bmRhcnkgPSBoYXJkTGluZUJyZWFrID8gdHJ1ZSA6IGlzVGV4dEJyZWFr
KGl0ZXIsIHBvc2l0aW9uKTsKICAgICBpZiAoIWJvdW5kYXJ5KQpAQCAtMzM0LDcgKzMzMyw3IEBA
IHN0YXRpYyBib29sIGlzTG9naWNhbFN0YXJ0T2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVy
LCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyCiAgICAgcmV0dXJuIGlzV29yZFRleHRCcmVhayhpdGVy
KTsKIH0KIAotc3RhdGljIGJvb2wgaXNsb2dpY2FsRW5kT2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9y
KiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKK2Jvb2wgaXNsb2dpY2Fs
RW5kT2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFy
ZExpbmVCcmVhaykKIHsKICAgICBib29sIGJvdW5kYXJ5ID0gaXNUZXh0QnJlYWsoaXRlciwgcG9z
aXRpb24pOwogICAgIHJldHVybiAoaGFyZExpbmVCcmVhayB8fCBib3VuZGFyeSkgJiYgaXNXb3Jk
VGV4dEJyZWFrKGl0ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNp
YmxlX3VuaXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuaAppbmRl
eCAwNWIxYTMwLi44MTZlYmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zp
c2libGVfdW5pdHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMu
aApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCIK
ICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDUsNiArNDYsOSBAQCBWaXNpYmxlUG9zaXRpb24gbmV4dFdvcmRQb3NpdGlvbihjb25zdCBW
aXNpYmxlUG9zaXRpb24gJik7CiBWaXNpYmxlUG9zaXRpb24gcmlnaHRXb3JkUG9zaXRpb24oY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCBza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0KTsKIFZp
c2libGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJv
b2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7CiBib29sIGlzU3RhcnRPZldvcmQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJik7CisvLyB1c2VkIGJ5IFRleHRDaGVja2VyRW5jaGFudC5jcHAKK2Jv
b2wgaXNMb2dpY2FsU3RhcnRPZldvcmQoVGV4dEJyZWFrSXRlcmF0b3IqLCBpbnQgcG9zaXRpb24s
IGJvb2wgaGFyZExpbmVCcmVhayA9IGZhbHNlKTsKK2Jvb2wgaXNsb2dpY2FsRW5kT2ZXb3JkKFRl
eHRCcmVha0l0ZXJhdG9yKiwgaW50IHBvc2l0aW9uLCBib29sIGhhcmRMaW5lQnJlYWsgPSBmYWxz
ZSk7CiAKIC8vIHNlbnRlbmNlcwogVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZTZW50ZW5jZShjb25z
dCBWaXNpYmxlUG9zaXRpb24gJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L2d0ay9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAKc2ltaWxhcml0eSBpbmRleCA3
OCUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENoZWNr
ZXJFbmNoYW50LmNwcApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNo
YW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAKaW5kZXggZjNmNjBlNi4uMjAzODk2NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENoZWNrZXJFbmNoYW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNr
ZXJFbmNoYW50LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MK
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDggKzIyLDEwIEBACiAKICNpZiBFTkFCTEUoU1BF
TExDSEVDSykKIAotI2luY2x1ZGUgPHBhbmdvL3BhbmdvLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgorI2luY2x1ZGUgPExhbmd1YWdlLmg+CisjaW5jbHVkZSA8ZWRpdGluZy92
aXNpYmxlX3VuaXRzLmg+CisjaW5jbHVkZSA8Z2xpYi5oPiAvLyBGb3IgdXRmOCBzdXBwb3J0Lgor
I2luY2x1ZGUgPHRleHQvVGV4dEJyZWFrSXRlcmF0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC0zNiwx
OCArMzksNiBAQCBzdGF0aWMgdm9pZCBlbmNoYW50RGljdERlc2NyaWJlQ2FsbGJhY2soY29uc3Qg
Y2hhciogY29uc3QgbGFuZ3VhZ2VUYWcsIGNvbnN0IGNoYQogICAgIGRpY3Rpb25hcmllcy0+YXBw
ZW5kKGxhbmd1YWdlVGFnKTsKIH0KIAotc3RhdGljIGJvb2wgd29yZEVuZElzQUNvbnRyYWN0aW9u
QXBvc3Ryb3BoZShjb25zdCBjaGFyKiBzdHJpbmcsIGxvbmcgb2Zmc2V0KQotewotICAgIGlmIChn
X3V0ZjhfZ2V0X2NoYXIoZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0cmluZywgb2Zmc2V0KSkg
IT0gZ191dGY4X2dldF9jaGFyKCInIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IElmIHRoaXMgaXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcsIGl0IGNhbm5vdCBi
ZSB0aGUgYXBvc3Ryb3BoZSBwYXJ0IG9mIGEgY29udHJhY3Rpb24uCi0gICAgaWYgKG9mZnNldCA9
PSBnX3V0Zjhfc3RybGVuKHN0cmluZywgLTEpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gZ191bmljaGFyX2lzYWxwaGEoZ191dGY4X2dldF9jaGFyKGdfdXRmOF9vZmZzZXRf
dG9fcG9pbnRlcihzdHJpbmcsIG9mZnNldCArIDEpKSk7Ci19Ci0KIFRleHRDaGVja2VyRW5jaGFu
dDo6VGV4dENoZWNrZXJFbmNoYW50KCkKICAgICA6IG1fYnJva2VyKGVuY2hhbnRfYnJva2VyX2lu
aXQoKSkKICAgICAsIG1fZW5jaGFudERpY3Rpb25hcmllcygwKQpAQCAtNzksNDMgKzcwLDQwIEBA
IHZvaWQgVGV4dENoZWNrZXJFbmNoYW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGludCYgbWlzc3BlCiB7CiAgICAgaWYgKG1fZW5jaGFudERpY3Rpb25hcmll
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBWZWN0b3I8RW5jaGFudERpY3QqPjo6
Y29uc3RfaXRlcmF0b3IgZGljdEl0ZXIgPSBtX2VuY2hhbnREaWN0aW9uYXJpZXMuYmVnaW4oKTsK
IAotICAgIFBhbmdvTGFuZ3VhZ2UqIGxhbmd1YWdlKHBhbmdvX2xhbmd1YWdlX2dldF9kZWZhdWx0
KCkpOwogICAgIHNpemVfdCBudW1iZXJPZkNoYXJhY3RlcnMgPSBzdHJpbmcubGVuZ3RoKCk7Ci0g
ICAgR093blB0cjxQYW5nb0xvZ0F0dHI+IGF0dHJzKGdfbmV3KFBhbmdvTG9nQXR0ciwgbnVtYmVy
T2ZDaGFyYWN0ZXJzICsgMSkpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyID0gd29yZEJy
ZWFrSXRlcmF0b3Ioc3RyaW5nLmNoYXJhY3RlcnMoKSwgbnVtYmVyT2ZDaGFyYWN0ZXJzKTsKKyAg
ICBpZiAoIWl0ZXIpCisgICAgICAgIHJldHVybjsKIAogICAgIENTdHJpbmcgdXRmOFN0cmluZyA9
IHN0cmluZy51dGY4KCk7CiAgICAgY29uc3QgY2hhciogY1N0cmluZyA9IHV0ZjhTdHJpbmcuZGF0
YSgpOwotCi0gICAgLy8gcGFuZ29fZ2V0X2xvZ19hdHRycyB1c2VzIGFuIGFkaXRpb25hbCBwb3Np
dGlvbiBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0LgotICAgIHBhbmdvX2dldF9sb2dfYXR0cnMoY1N0
cmluZywgLTEsIC0xLCBsYW5ndWFnZSwgYXR0cnMuZ2V0KCksIG51bWJlck9mQ2hhcmFjdGVycyAr
IDEpOworICAgIFZlY3RvcjxFbmNoYW50RGljdCo+Ojpjb25zdF9pdGVyYXRvciBkaWN0SXRlciA9
IG1fZW5jaGFudERpY3Rpb25hcmllcy5iZWdpbigpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBudW1iZXJPZkNoYXJhY3RlcnMgKyAxOyBpKyspIHsKLSAgICAgICAgLy8gV2UgZ28gdGhy
b3VnaCBlYWNoIGNoYXJhY3RlciB1bnRpbCB3ZSBmaW5kIGFuIGlzX3dvcmRfc3RhcnQsCi0gICAg
ICAgIC8vIHRoZW4gd2UgZ2V0IGludG8gYW4gaW5uZXIgbG9vcCB0byBmaW5kIHRoZSBpc193b3Jk
X2VuZCBjb3JyZXNwb25kaW5nCisgICAgICAgIC8vIFdlIGdvIHRocm91Z2ggZWFjaCBjaGFyYWN0
ZXIgdW50aWwgd2UgZmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB3b3JkCisgICAgICAgIC8vIHRo
ZW4gd2UgZ2V0IGludG8gYW4gaW5uZXIgbG9vcCB0byBmaW5kIHRoZSBlbmQgb2YgdGhlIHdvcmQg
Y29ycmVzcG9uZGluZwogICAgICAgICAvLyB0byBpdC4KLSAgICAgICAgaWYgKGF0dHJzLmdldCgp
W2ldLmlzX3dvcmRfc3RhcnQpIHsKKworICAgICAgICBpZiAoaXNMb2dpY2FsU3RhcnRPZldvcmQo
aXRlciwgaSkpIHsKICAgICAgICAgICAgIGludCBzdGFydCA9IGk7CiAgICAgICAgICAgICBpbnQg
ZW5kID0gaTsKICAgICAgICAgICAgIGludCB3b3JkTGVuZ3RoOwogCi0gICAgICAgICAgICB3aGls
ZSAoYXR0cnMuZ2V0KClbZW5kXS5pc193b3JkX2VuZCA8IDEgIHx8IHdvcmRFbmRJc0FDb250cmFj
dGlvbkFwb3N0cm9waGUoY1N0cmluZywgZW5kKSkKKyAgICAgICAgICAgIHdoaWxlICghaXNsb2dp
Y2FsRW5kT2ZXb3JkKGl0ZXIsIGVuZCkpCiAgICAgICAgICAgICAgICAgZW5kKys7CiAKICAgICAg
ICAgICAgIHdvcmRMZW5ndGggPSBlbmQgLSBzdGFydDsKICAgICAgICAgICAgIC8vIFNldCB0aGUg
aXRlcmF0b3IgdG8gYmUgYXQgdGhlIGN1cnJlbnQgd29yZCBlbmQsIHNvIHdlIGRvbid0CiAgICAg
ICAgICAgICAvLyBjaGVjayBjaGFyYWN0ZXJzIHR3aWNlLgogICAgICAgICAgICAgaSA9IGVuZDsK
LQotICAgICAgICAgICAgZ2NoYXIqIGNzdGFydCA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcihj
U3RyaW5nLCBzdGFydCk7Ci0gICAgICAgICAgICBnaW50IGJ5dGVzID0gc3RhdGljX2Nhc3Q8Z2lu
dD4oZ191dGY4X29mZnNldF90b19wb2ludGVyKGNTdHJpbmcsIGVuZCkgLSBjc3RhcnQpOwotICAg
ICAgICAgICAgR093blB0cjxnY2hhcj4gd29yZChnX25ldzAoZ2NoYXIsIGJ5dGVzICsgMSkpOwot
Ci0gICAgICAgICAgICBnX3V0Zjhfc3RybmNweSh3b3JkLmdldCgpLCBjc3RhcnQsIHdvcmRMZW5n
dGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25zdCBjaGFyKiBjc3RhcnQgPSBjU3Ry
aW5nICsgc3RhcnQ7CisgICAgICAgICAgICBpbnQgbnVtYmVyT2ZCeXRlcyA9IHN0YXRpY19jYXN0
PGludD4oZ191dGY4X29mZnNldF90b19wb2ludGVyKGNTdHJpbmcsIGVuZCkgLSBjc3RhcnQpOwor
ICAgICAgICAgICAgU3RyaW5nIHdvcmQgPSBTdHJpbmc6OmZyb21VVEY4KGNzdGFydCwgbnVtYmVy
T2ZCeXRlcyk7CiAKICAgICAgICAgICAgIGZvciAoOyBkaWN0SXRlciAhPSBtX2VuY2hhbnREaWN0
aW9uYXJpZXMuZW5kKCk7ICsrZGljdEl0ZXIpIHsKLSAgICAgICAgICAgICAgICBpZiAoZW5jaGFu
dF9kaWN0X2NoZWNrKCpkaWN0SXRlciwgd29yZC5nZXQoKSwgYnl0ZXMpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGVuY2hhbnRfZGljdF9jaGVjaygqZGljdEl0ZXIsIHdvcmQudXRmOCgpLmRhdGEo
KSwgbnVtYmVyT2ZCeXRlcykpIHsKICAgICAgICAgICAgICAgICAgICAgbWlzc3BlbGxpbmdMb2Nh
dGlvbiA9IHN0YXJ0OwogICAgICAgICAgICAgICAgICAgICBtaXNzcGVsbGluZ0xlbmd0aCA9IHdv
cmRMZW5ndGg7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEzOSw3ICsxMjcsNyBAQCBW
ZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tlckVuY2hhbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0
IFN0cmluZyYgd29yZCkKICAgICAgICAgc2l6ZV90IG51bWJlck9mU3VnZ2VzdGlvbnM7CiAgICAg
ICAgIHNpemVfdCBpOwogCi0gICAgICAgIGdjaGFyKiogc3VnZ2VzdGlvbnMgPSBlbmNoYW50X2Rp
Y3Rfc3VnZ2VzdCgqaXRlciwgd29yZC51dGY4KCkuZGF0YSgpLCAtMSwgJm51bWJlck9mU3VnZ2Vz
dGlvbnMpOworICAgICAgICBjaGFyKiogc3VnZ2VzdGlvbnMgPSBlbmNoYW50X2RpY3Rfc3VnZ2Vz
dCgqaXRlciwgd29yZC51dGY4KCkuZGF0YSgpLCAtMSwgJm51bWJlck9mU3VnZ2VzdGlvbnMpOwog
ICAgICAgICBpZiAobnVtYmVyT2ZTdWdnZXN0aW9ucyA8PSAwKQogICAgICAgICAgICAgY29udGlu
dWU7CiAKQEAgLTE3MCwxNiArMTU4LDE4IEBAIHZvaWQgVGV4dENoZWNrZXJFbmNoYW50Ojp1cGRh
dGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2VzKQogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgY2hhciogbGFu
Z3VhZ2UgPSBwYW5nb19sYW5ndWFnZV90b19zdHJpbmcocGFuZ29fbGFuZ3VhZ2VfZ2V0X2RlZmF1
bHQoKSk7CisgICAgICAgIC8vIExhbmd1YWdlcyBhcmUgbm90IHNwZWNpZmllZCBieSB1c2VyLCB0
cnkgdG8gZ2V0IGRlZmF1bHQgbGFuZ3VhZ2UuCisgICAgICAgIENTdHJpbmcgdXRmOExhbmd1YWdl
ID0gZGVmYXVsdExhbmd1YWdlKCkudXRmOCgpOworICAgICAgICBjb25zdCBjaGFyKiBsYW5ndWFn
ZSA9IHV0ZjhMYW5ndWFnZS5kYXRhKCk7CiAgICAgICAgIGlmIChlbmNoYW50X2Jyb2tlcl9kaWN0
X2V4aXN0cyhtX2Jyb2tlciwgbGFuZ3VhZ2UpKSB7CiAgICAgICAgICAgICBFbmNoYW50RGljdCog
ZGljdCA9IGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfZGljdChtX2Jyb2tlciwgbGFuZ3VhZ2UpOwog
ICAgICAgICAgICAgc3BlbGxEaWN0aW9uYXJpZXMuYXBwZW5kKGRpY3QpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgLy8gTm8gZGljdGlvbmFyaWVzIHNlbGVjdGVkLCB3ZSBnZXQgb25l
IGZyb20gdGhlIGxpc3QuCisgICAgICAgICAgICAvLyBObyBkaWN0aW9uYXJpZXMgc2VsZWN0ZWQs
IHdlIGdldCB0aGUgZmlyc3Qgb25lIGZyb20gdGhlIGxpc3QuCiAgICAgICAgICAgICBWZWN0b3I8
Q1N0cmluZz4gYWxsRGljdGlvbmFyaWVzOwogICAgICAgICAgICAgZW5jaGFudF9icm9rZXJfbGlz
dF9kaWN0cyhtX2Jyb2tlciwgZW5jaGFudERpY3REZXNjcmliZUNhbGxiYWNrLCAmYWxsRGljdGlv
bmFyaWVzKTsKICAgICAgICAgICAgIGlmICghYWxsRGljdGlvbmFyaWVzLmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gZW5jaGFudF9icm9rZXJfcmVxdWVz
dF9kaWN0KG1fYnJva2VyLCBhbGxEaWN0aW9uYXJpZXNbMF0uZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICBFbmNoYW50RGljdCogZGljdCA9IGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfZGljdChtX2Jy
b2tlciwgYWxsRGljdGlvbmFyaWVzLmZpcnN0KCkuZGF0YSgpKTsKICAgICAgICAgICAgICAgICBz
cGVsbERpY3Rpb25hcmllcy5hcHBlbmQoZGljdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDaGVja2Vy
RW5jaGFudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVj
a2VyRW5jaGFudC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q2hlY2tlckVuY2hhbnQuaApyZW5hbWUgdG8gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160101</attachid>
            <date>2012-08-23 00:27:30 -0700</date>
            <delta_ts>2012-08-23 00:42:45 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>share_enchant_implementaion.patch</filename>
            <type>text/plain</type>
            <size>12634</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNzUzMjBhLi4wMWZlYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTItMDgtMjIgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgU2hhcmUgV2ViS2l0LUd0aydzIEVuY2hhbnQgaW1wbGVtZW50YXRp
b24gd2l0aCBvdGhlcnMgV2ViS2l0IHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQzMjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGUgbWFpbiByZWFzb24gb2YgdGhpcyBjaGFuZ2UgaXMgdG8g
c2hhcmUgV2ViS2l0LUd0ayBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGluZworICAgICAgICB3aXRo
IG90aGVycyBwb3J0cyB0aGF0IHVzZSB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICAgICAgICBUaGlz
IGlzIHRoZSBmaXJzdCBzdGVwIHRvIGVuYWJsZSBzcGVsbGluZyBmb3IgV2ViS2l0LUVmbCAoaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0KQorCisgICAgICAgIEZp
bGVzIHRoYXQgaW1wbGVtZW50IHNwZWxsaW5nIHdlcmUgbW92ZWQgdG8gcGxhdGZvcm0vdGV4dC9l
bmNoYW50IGRpcmVjdG9yeS4KKworICAgICAgICBUaGlzIHBhdGNoIHN0b3BzIHVzaW5nIFBhbmdv
IGJhY2tlbmQgdG8gZmluZCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgd29yZC4KKyAgICAgICAg
VGhvc2UgaW5mb3JtYXRpb24gYXJlIGRlbGl2ZXJlZCB0aHJvdWdoIElDVSBpbnRlcmZhY2UgYnkg
dXNpbmcgVGV4dEJyZWFrSXRlcmF0b3IuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRk
ZWQgbmV3bHkgY3JlYXRlZCAnZW5jaGFudCcgZGlyZWN0b3J5IHRvIFdlYktpdC1HdGsncyBzb3Vy
Y2VzLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IFVwZGF0ZWQgbG9jYXRpb24gb2Yg
VGV4dENoZWNrZXJFbmNoYW50LntoLGNwcH0gZmlsZXMuCisKKyAgICAgICAgKiBlZGl0aW5nL3Zp
c2libGVfdW5pdHMuY3BwOiBSZW1vdmVkICdzdGF0aWMnIG1vZGlmaWVyIGZvciAnaXNMb2dpY2Fs
U3RhcnRPZldvcmQnIGFuZCAnaXNsb2dpY2FsRW5kT2ZXb3JkJyBmdW5jdGlvbnMuCisgICAgICAg
IChXZWJDb3JlOjppc0xvZ2ljYWxTdGFydE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjppc2xv
Z2ljYWxFbmRPZldvcmQpOgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5oOiBBZGRl
ZCBpc0xvZ2ljYWxTdGFydE9mV29yZCcgYW5kICdpc2xvZ2ljYWxFbmRPZldvcmQnIGZ1bmN0aW9u
cyB0byBoZWFkZXIgYXMgdGhleSBhcmUgdXNlZCBieSBUZXh0Q2hlY2tlckVuY2hhbnQuY3BwCisK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDaGVja2Vy
RW5jaGFudC5jcHAuCisgICAgICAgIChlbmNoYW50RGljdERlc2NyaWJlQ2FsbGJhY2spOiBBZGRl
ZCBjb21tZW50cy4KKyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6VGV4dENoZWNrZXJFbmNo
YW50KToKKyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6flRleHRDaGVja2VyRW5jaGFudCk6
CisgICAgICAgIChUZXh0Q2hlY2tlckVuY2hhbnQ6Omlnbm9yZVdvcmQpOgorICAgICAgICAoVGV4
dENoZWNrZXJFbmNoYW50OjpsZWFybldvcmQpOgorICAgICAgICAoVGV4dENoZWNrZXJFbmNoYW50
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOiBVc2luZyBJQ1UgaW5zdGVhZCBvZiBQYW5nbyB0byBm
aW5kIG91dCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgd29yZC4KKyAgICAgICAgKFRleHRDaGVj
a2VyRW5jaGFudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOiBSZXBsYWNlZCBnY2hhciB0eXBlIHRvIGNo
YXIuCisgICAgICAgIChUZXh0Q2hlY2tlckVuY2hhbnQ6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMpOiBVc2luZyBXZWJDb3JlOjpkZWZhdWxMYW5ndWFnZSgpIGluc3RlYWQgb2YgUGFuZ28g
YmFja2VuZC4KKyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6Z2V0U3BlbGxDaGVja2luZ0xh
bmd1YWdlcyk6CisgICAgICAgIChUZXh0Q2hlY2tlckVuY2hhbnQ6OmZyZWVFbmNoYW50QnJva2Vy
RGljdGlvbmFyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNr
ZXJFbmNoYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0Q2hlY2tlckVuY2hhbnQuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVGV4
dENoZWNrZXJFbmNoYW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudDo6
Y3JlYXRlKToKKwogMjAxMi0wOC0yMiAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW1Y4XSBSZW1vdmUgVjhQcm94eSBmcm9tIENvZGVHZW5lcmF0b3JWOC5w
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA3NjFiMjE0Li4wNmE4OTYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQpAQCAtMTE1LDcgKzExNSw3IEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBcCiAJLUkkKHNy
Y2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvZ3RrCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9lbmNoYW50CiAKICMgLS0tCiAjIEZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVsdCBh
dCBjb21waWxhdGlvbiB0aW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBmNTc2
NDIwLi5hNjgyMTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU2NzEsOCAr
NTY3MSw4IEBAIHdlYmNvcmVfcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU3VkZGVuVGVybWluYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U3VwcGxlbWVudGFibGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3lzdGVtVGltZS5o
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q2hlY2tlckVuY2hhbnQu
aCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENoZWNrZXJFbmNoYW50
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2Vy
RW5jaGFudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENo
ZWNrZXJFbmNoYW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29u
dGV4dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAppbmRleCBiNDJhZjI2Li5iMGZiOTI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKQEAgLTM2LDcgKzM2LDYg
QEAKICNpbmNsdWRlICJSZW5kZXJlZFBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2lu
Y2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCi0jaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIK
ICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCkBAIC0zMjMsNyArMzIyLDcgQEAgc3RhdGlj
IFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5
KGNvbnN0IFZpc2libGVQb3MKICAgICByZXR1cm4gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nLmRh
dGEoKSwgbGVuKTsKIH0gCiAKLXN0YXRpYyBib29sIGlzTG9naWNhbFN0YXJ0T2ZXb3JkKFRleHRC
cmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKK2Jv
b2wgaXNMb2dpY2FsU3RhcnRPZldvcmQoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXIsIGludCBwb3Np
dGlvbiwgYm9vbCBoYXJkTGluZUJyZWFrKQogewogICAgIGJvb2wgYm91bmRhcnkgPSBoYXJkTGlu
ZUJyZWFrID8gdHJ1ZSA6IGlzVGV4dEJyZWFrKGl0ZXIsIHBvc2l0aW9uKTsKICAgICBpZiAoIWJv
dW5kYXJ5KQpAQCAtMzM0LDcgKzMzMyw3IEBAIHN0YXRpYyBib29sIGlzTG9naWNhbFN0YXJ0T2ZX
b3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyCiAgICAg
cmV0dXJuIGlzV29yZFRleHRCcmVhayhpdGVyKTsKIH0KIAotc3RhdGljIGJvb2wgaXNsb2dpY2Fs
RW5kT2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFy
ZExpbmVCcmVhaykKK2Jvb2wgaXNsb2dpY2FsRW5kT2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiBp
dGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKIHsKICAgICBib29sIGJvdW5k
YXJ5ID0gaXNUZXh0QnJlYWsoaXRlciwgcG9zaXRpb24pOwogICAgIHJldHVybiAoaGFyZExpbmVC
cmVhayB8fCBib3VuZGFyeSkgJiYgaXNXb3JkVGV4dEJyZWFrKGl0ZXIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL3Zpc2libGVfdW5pdHMuaAppbmRleCAwNWIxYTMwLi44MTZlYmJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCIKICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIK
KyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsNiArNDYsOSBAQCBWaXNpYmxlUG9zaXRp
b24gbmV4dFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CiBWaXNpYmxlUG9z
aXRpb24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCBza2lw
c1NwYWNlV2hlbk1vdmluZ1JpZ2h0KTsKIFZpc2libGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7
CiBib29sIGlzU3RhcnRPZldvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisvLyB1c2VkIGJ5
IFRleHRDaGVja2VyRW5jaGFudC5jcHAKK2Jvb2wgaXNMb2dpY2FsU3RhcnRPZldvcmQoVGV4dEJy
ZWFrSXRlcmF0b3IqLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhayA9IGZhbHNlKTsK
K2Jvb2wgaXNsb2dpY2FsRW5kT2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiwgaW50IHBvc2l0aW9u
LCBib29sIGhhcmRMaW5lQnJlYWsgPSBmYWxzZSk7CiAKIC8vIHNlbnRlbmNlcwogVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0T2ZTZW50ZW5jZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q2hlY2tlckVuY2hhbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5j
aGFudC5jcHAKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9ndGsvVGV4dENoZWNrZXJFbmNoYW50LmNwcApyZW5hbWUgdG8gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAKaW5k
ZXggMTFhM2VmMi4uNDg1ZTMyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9ndGsvVGV4dENoZWNrZXJFbmNoYW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDgg
KzIyLDEwIEBACiAKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKIAotI2luY2x1ZGUgPHBhbmdvL3Bh
bmdvLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPExhbmd1
YWdlLmg+CisjaW5jbHVkZSA8ZWRpdGluZy92aXNpYmxlX3VuaXRzLmg+CisjaW5jbHVkZSA8Z2xp
Yi5oPgorI2luY2x1ZGUgPHRleHQvVGV4dEJyZWFrSXRlcmF0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBA
IC0zNiwxOCArMzksNiBAQCBzdGF0aWMgdm9pZCBlbmNoYW50RGljdERlc2NyaWJlQ2FsbGJhY2so
Y29uc3QgY2hhciogY29uc3QgbGFuZ3VhZ2VUYWcsIGNvbnN0IGNoYQogICAgIGRpY3Rpb25hcmll
cy0+YXBwZW5kKGxhbmd1YWdlVGFnKTsKIH0KIAotc3RhdGljIGJvb2wgd29yZEVuZElzQUNvbnRy
YWN0aW9uQXBvc3Ryb3BoZShjb25zdCBjaGFyKiBzdHJpbmcsIGxvbmcgb2Zmc2V0KQotewotICAg
IGlmIChnX3V0ZjhfZ2V0X2NoYXIoZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0cmluZywgb2Zm
c2V0KSkgIT0gZ191dGY4X2dldF9jaGFyKCInIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIElmIHRoaXMgaXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcsIGl0IGNh
bm5vdCBiZSB0aGUgYXBvc3Ryb3BoZSBwYXJ0IG9mIGEgY29udHJhY3Rpb24uCi0gICAgaWYgKG9m
ZnNldCA9PSBnX3V0Zjhfc3RybGVuKHN0cmluZywgLTEpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gZ191bmljaGFyX2lzYWxwaGEoZ191dGY4X2dldF9jaGFyKGdfdXRmOF9v
ZmZzZXRfdG9fcG9pbnRlcihzdHJpbmcsIG9mZnNldCArIDEpKSk7Ci19Ci0KIFRleHRDaGVja2Vy
RW5jaGFudDo6VGV4dENoZWNrZXJFbmNoYW50KCkKICAgICA6IG1fYnJva2VyKGVuY2hhbnRfYnJv
a2VyX2luaXQoKSkKICAgICAsIG1fZW5jaGFudERpY3Rpb25hcmllcygwKQpAQCAtNzksMjggKzcw
LDI3IEBAIHZvaWQgVGV4dENoZWNrZXJFbmNoYW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbWlzc3BlCiB7CiAgICAgaWYgKG1fZW5jaGFudERpY3Rp
b25hcmllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBWZWN0b3I8RW5jaGFudERp
Y3QqPjo6Y29uc3RfaXRlcmF0b3IgZGljdEl0ZXIgPSBtX2VuY2hhbnREaWN0aW9uYXJpZXMuYmVn
aW4oKTsKIAotICAgIFBhbmdvTGFuZ3VhZ2UqIGxhbmd1YWdlKHBhbmdvX2xhbmd1YWdlX2dldF9k
ZWZhdWx0KCkpOwogICAgIHNpemVfdCBudW1iZXJPZkNoYXJhY3RlcnMgPSBzdHJpbmcubGVuZ3Ro
KCk7Ci0gICAgR093blB0cjxQYW5nb0xvZ0F0dHI+IGF0dHJzKGdfbmV3KFBhbmdvTG9nQXR0ciwg
bnVtYmVyT2ZDaGFyYWN0ZXJzICsgMSkpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyID0g
d29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nLmNoYXJhY3RlcnMoKSwgbnVtYmVyT2ZDaGFyYWN0ZXJz
KTsKKyAgICBpZiAoIWl0ZXIpCisgICAgICAgIHJldHVybjsKIAogICAgIENTdHJpbmcgdXRmOFN0
cmluZyA9IHN0cmluZy51dGY4KCk7CiAgICAgY29uc3QgY2hhciogY1N0cmluZyA9IHV0ZjhTdHJp
bmcuZGF0YSgpOwotCi0gICAgLy8gcGFuZ29fZ2V0X2xvZ19hdHRycyB1c2VzIGFuIGFkaXRpb25h
bCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0LgotICAgIHBhbmdvX2dldF9sb2dfYXR0
cnMoY1N0cmluZywgLTEsIC0xLCBsYW5ndWFnZSwgYXR0cnMuZ2V0KCksIG51bWJlck9mQ2hhcmFj
dGVycyArIDEpOworICAgIFZlY3RvcjxFbmNoYW50RGljdCo+Ojpjb25zdF9pdGVyYXRvciBkaWN0
SXRlciA9IG1fZW5jaGFudERpY3Rpb25hcmllcy5iZWdpbigpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkNoYXJhY3RlcnMgKyAxOyBpKyspIHsKLSAgICAgICAgLy8gV2Ug
Z28gdGhyb3VnaCBlYWNoIGNoYXJhY3RlciB1bnRpbCB3ZSBmaW5kIGFuIGlzX3dvcmRfc3RhcnQs
Ci0gICAgICAgIC8vIHRoZW4gd2UgZ2V0IGludG8gYW4gaW5uZXIgbG9vcCB0byBmaW5kIHRoZSBp
c193b3JkX2VuZCBjb3JyZXNwb25kaW5nCisgICAgICAgIC8vIFdlIGdvIHRocm91Z2ggZWFjaCBj
aGFyYWN0ZXIgdW50aWwgd2UgZmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB3b3JkCisgICAgICAg
IC8vIHRoZW4gd2UgZ2V0IGludG8gYW4gaW5uZXIgbG9vcCB0byBmaW5kIHRoZSBlbmQgb2YgdGhl
IHdvcmQgY29ycmVzcG9uZGluZwogICAgICAgICAvLyB0byBpdC4KLSAgICAgICAgaWYgKGF0dHJz
LmdldCgpW2ldLmlzX3dvcmRfc3RhcnQpIHsKKworICAgICAgICBpZiAoaXNMb2dpY2FsU3RhcnRP
ZldvcmQoaXRlciwgaSkpIHsKICAgICAgICAgICAgIGludCBzdGFydCA9IGk7CiAgICAgICAgICAg
ICBpbnQgZW5kID0gaTsKICAgICAgICAgICAgIGludCB3b3JkTGVuZ3RoOwogCi0gICAgICAgICAg
ICB3aGlsZSAoYXR0cnMuZ2V0KClbZW5kXS5pc193b3JkX2VuZCA8IDEgIHx8IHdvcmRFbmRJc0FD
b250cmFjdGlvbkFwb3N0cm9waGUoY1N0cmluZywgZW5kKSkKKyAgICAgICAgICAgIHdoaWxlICgh
aXNsb2dpY2FsRW5kT2ZXb3JkKGl0ZXIsIGVuZCkpCiAgICAgICAgICAgICAgICAgZW5kKys7CiAK
ICAgICAgICAgICAgIHdvcmRMZW5ndGggPSBlbmQgLSBzdGFydDsKQEAgLTEwOCwxNCArOTgsMTIg
QEAgdm9pZCBUZXh0Q2hlY2tlckVuY2hhbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBT
dHJpbmcmIHN0cmluZywgaW50JiBtaXNzcGUKICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXJhY3Rl
cnMgdHdpY2UuCiAgICAgICAgICAgICBpID0gZW5kOwogCi0gICAgICAgICAgICBnY2hhciogY3N0
YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKGNTdHJpbmcsIHN0YXJ0KTsKLSAgICAgICAg
ICAgIGdpbnQgYnl0ZXMgPSBzdGF0aWNfY2FzdDxnaW50PihnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50
ZXIoY1N0cmluZywgZW5kKSAtIGNzdGFydCk7Ci0gICAgICAgICAgICBHT3duUHRyPGdjaGFyPiB3
b3JkKGdfbmV3MChnY2hhciwgYnl0ZXMgKyAxKSk7Ci0KLSAgICAgICAgICAgIGdfdXRmOF9zdHJu
Y3B5KHdvcmQuZ2V0KCksIGNzdGFydCwgd29yZExlbmd0aCk7CisgICAgICAgICAgICBjaGFyKiBj
c3RhcnQgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIoY1N0cmluZywgc3RhcnQpOworICAgICAg
ICAgICAgaW50IG51bWJlck9mQnl0ZXMgPSBzdGF0aWNfY2FzdDxpbnQ+KGdfdXRmOF9vZmZzZXRf
dG9fcG9pbnRlcihjU3RyaW5nLCBlbmQpIC0gY3N0YXJ0KTsKKyAgICAgICAgICAgIFN0cmluZyB3
b3JkID0gU3RyaW5nOjpmcm9tVVRGOChjc3RhcnQsIG51bWJlck9mQnl0ZXMpOwogCiAgICAgICAg
ICAgICBmb3IgKDsgZGljdEl0ZXIgIT0gbV9lbmNoYW50RGljdGlvbmFyaWVzLmVuZCgpOyArK2Rp
Y3RJdGVyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVuY2hhbnRfZGljdF9jaGVjaygqZGljdEl0
ZXIsIHdvcmQuZ2V0KCksIGJ5dGVzKSkgeworICAgICAgICAgICAgICAgIGlmIChlbmNoYW50X2Rp
Y3RfY2hlY2soKmRpY3RJdGVyLCB3b3JkLnV0ZjgoKS5kYXRhKCksIG51bWJlck9mQnl0ZXMpKSB7
CiAgICAgICAgICAgICAgICAgICAgIG1pc3NwZWxsaW5nTG9jYXRpb24gPSBzdGFydDsKICAgICAg
ICAgICAgICAgICAgICAgbWlzc3BlbGxpbmdMZW5ndGggPSB3b3JkTGVuZ3RoOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CkBAIC0xMzksNyArMTI3LDcgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENo
ZWNrZXJFbmNoYW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQpCiAgICAg
ICAgIHNpemVfdCBudW1iZXJPZlN1Z2dlc3Rpb25zOwogICAgICAgICBzaXplX3QgaTsKIAotICAg
ICAgICBnY2hhcioqIHN1Z2dlc3Rpb25zID0gZW5jaGFudF9kaWN0X3N1Z2dlc3QoKml0ZXIsIHdv
cmQudXRmOCgpLmRhdGEoKSwgLTEsICZudW1iZXJPZlN1Z2dlc3Rpb25zKTsKKyAgICAgICAgY2hh
cioqIHN1Z2dlc3Rpb25zID0gZW5jaGFudF9kaWN0X3N1Z2dlc3QoKml0ZXIsIHdvcmQudXRmOCgp
LmRhdGEoKSwgLTEsICZudW1iZXJPZlN1Z2dlc3Rpb25zKTsKICAgICAgICAgaWYgKG51bWJlck9m
U3VnZ2VzdGlvbnMgPD0gMCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xNjgsMTYgKzE1
NiwxOCBAQCB2b2lkIFRleHRDaGVja2VyRW5jaGFudDo6dXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1
YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgY2hhciogbGFuZ3VhZ2UgPSBwYW5nb19sYW5n
dWFnZV90b19zdHJpbmcocGFuZ29fbGFuZ3VhZ2VfZ2V0X2RlZmF1bHQoKSk7CisgICAgICAgIC8v
IExhbmd1YWdlcyBhcmUgbm90IHNwZWNpZmllZCBieSB1c2VyLCB0cnkgdG8gZ2V0IGRlZmF1bHQg
bGFuZ3VhZ2UuCisgICAgICAgIENTdHJpbmcgdXRmOExhbmd1YWdlID0gZGVmYXVsdExhbmd1YWdl
KCkudXRmOCgpOworICAgICAgICBjb25zdCBjaGFyKiBsYW5ndWFnZSA9IHV0ZjhMYW5ndWFnZS5k
YXRhKCk7CiAgICAgICAgIGlmIChlbmNoYW50X2Jyb2tlcl9kaWN0X2V4aXN0cyhtX2Jyb2tlciwg
bGFuZ3VhZ2UpKSB7CiAgICAgICAgICAgICBFbmNoYW50RGljdCogZGljdCA9IGVuY2hhbnRfYnJv
a2VyX3JlcXVlc3RfZGljdChtX2Jyb2tlciwgbGFuZ3VhZ2UpOwogICAgICAgICAgICAgc3BlbGxE
aWN0aW9uYXJpZXMuYXBwZW5kKGRpY3QpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Ly8gTm8gZGljdGlvbmFyaWVzIHNlbGVjdGVkLCB3ZSBnZXQgb25lIGZyb20gdGhlIGxpc3QuCisg
ICAgICAgICAgICAvLyBObyBkaWN0aW9uYXJpZXMgc2VsZWN0ZWQsIHdlIGdldCB0aGUgZmlyc3Qg
b25lIGZyb20gdGhlIGxpc3QuCiAgICAgICAgICAgICBWZWN0b3I8Q1N0cmluZz4gYWxsRGljdGlv
bmFyaWVzOwogICAgICAgICAgICAgZW5jaGFudF9icm9rZXJfbGlzdF9kaWN0cyhtX2Jyb2tlciwg
ZW5jaGFudERpY3REZXNjcmliZUNhbGxiYWNrLCAmYWxsRGljdGlvbmFyaWVzKTsKICAgICAgICAg
ICAgIGlmICghYWxsRGljdGlvbmFyaWVzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIEVu
Y2hhbnREaWN0KiBkaWN0ID0gZW5jaGFudF9icm9rZXJfcmVxdWVzdF9kaWN0KG1fYnJva2VyLCBh
bGxEaWN0aW9uYXJpZXNbMF0uZGF0YSgpKTsKKyAgICAgICAgICAgICAgICBFbmNoYW50RGljdCog
ZGljdCA9IGVuY2hhbnRfYnJva2VyX3JlcXVlc3RfZGljdChtX2Jyb2tlciwgYWxsRGljdGlvbmFy
aWVzLmZpcnN0KCkuZGF0YSgpKTsKICAgICAgICAgICAgICAgICBzcGVsbERpY3Rpb25hcmllcy5h
cHBlbmQoZGljdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDaGVja2VyRW5jaGFudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oCnNpbWls
YXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L2d0ay9UZXh0Q2hlY2tlckVuY2hhbnQuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160104</attachid>
            <date>2012-08-23 00:42:45 -0700</date>
            <delta_ts>2012-08-24 07:01:38 -0700</delta_ts>
            <desc>passing cstring to enchant</desc>
            <filename>share_enchant_implementaion.patch</filename>
            <type>text/plain</type>
            <size>12552</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmNzUzMjBhLi4wMWZlYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMg
QEAKKzIwMTItMDgtMjIgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgU2hhcmUgV2ViS2l0LUd0aydzIEVuY2hhbnQgaW1wbGVtZW50YXRp
b24gd2l0aCBvdGhlcnMgV2ViS2l0IHBvcnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQzMjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGUgbWFpbiByZWFzb24gb2YgdGhpcyBjaGFuZ2UgaXMgdG8g
c2hhcmUgV2ViS2l0LUd0ayBpbXBsZW1lbnRhdGlvbiBvZiBzcGVsbGluZworICAgICAgICB3aXRo
IG90aGVycyBwb3J0cyB0aGF0IHVzZSB0aGUgRW5jaGFudCBsaWJyYXJ5LgorICAgICAgICBUaGlz
IGlzIHRoZSBmaXJzdCBzdGVwIHRvIGVuYWJsZSBzcGVsbGluZyBmb3IgV2ViS2l0LUVmbCAoaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxODU0KQorCisgICAgICAgIEZp
bGVzIHRoYXQgaW1wbGVtZW50IHNwZWxsaW5nIHdlcmUgbW92ZWQgdG8gcGxhdGZvcm0vdGV4dC9l
bmNoYW50IGRpcmVjdG9yeS4KKworICAgICAgICBUaGlzIHBhdGNoIHN0b3BzIHVzaW5nIFBhbmdv
IGJhY2tlbmQgdG8gZmluZCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgd29yZC4KKyAgICAgICAg
VGhvc2UgaW5mb3JtYXRpb24gYXJlIGRlbGl2ZXJlZCB0aHJvdWdoIElDVSBpbnRlcmZhY2UgYnkg
dXNpbmcgVGV4dEJyZWFrSXRlcmF0b3IuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRk
ZWQgbmV3bHkgY3JlYXRlZCAnZW5jaGFudCcgZGlyZWN0b3J5IHRvIFdlYktpdC1HdGsncyBzb3Vy
Y2VzLgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IFVwZGF0ZWQgbG9jYXRpb24gb2Yg
VGV4dENoZWNrZXJFbmNoYW50LntoLGNwcH0gZmlsZXMuCisKKyAgICAgICAgKiBlZGl0aW5nL3Zp
c2libGVfdW5pdHMuY3BwOiBSZW1vdmVkICdzdGF0aWMnIG1vZGlmaWVyIGZvciAnaXNMb2dpY2Fs
U3RhcnRPZldvcmQnIGFuZCAnaXNsb2dpY2FsRW5kT2ZXb3JkJyBmdW5jdGlvbnMuCisgICAgICAg
IChXZWJDb3JlOjppc0xvZ2ljYWxTdGFydE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjppc2xv
Z2ljYWxFbmRPZldvcmQpOgorICAgICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5oOiBBZGRl
ZCBpc0xvZ2ljYWxTdGFydE9mV29yZCcgYW5kICdpc2xvZ2ljYWxFbmRPZldvcmQnIGZ1bmN0aW9u
cyB0byBoZWFkZXIgYXMgdGhleSBhcmUgdXNlZCBieSBUZXh0Q2hlY2tlckVuY2hhbnQuY3BwCisK
KyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDaGVja2Vy
RW5jaGFudC5jcHAuCisgICAgICAgIChlbmNoYW50RGljdERlc2NyaWJlQ2FsbGJhY2spOiBBZGRl
ZCBjb21tZW50cy4KKyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6VGV4dENoZWNrZXJFbmNo
YW50KToKKyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6flRleHRDaGVja2VyRW5jaGFudCk6
CisgICAgICAgIChUZXh0Q2hlY2tlckVuY2hhbnQ6Omlnbm9yZVdvcmQpOgorICAgICAgICAoVGV4
dENoZWNrZXJFbmNoYW50OjpsZWFybldvcmQpOgorICAgICAgICAoVGV4dENoZWNrZXJFbmNoYW50
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOiBVc2luZyBJQ1UgaW5zdGVhZCBvZiBQYW5nbyB0byBm
aW5kIG91dCB0aGUgYmVnaW5uaW5nL2VuZCBvZiB0aGUgd29yZC4KKyAgICAgICAgKFRleHRDaGVj
a2VyRW5jaGFudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOiBSZXBsYWNlZCBnY2hhciB0eXBlIHRvIGNo
YXIuCisgICAgICAgIChUZXh0Q2hlY2tlckVuY2hhbnQ6OnVwZGF0ZVNwZWxsQ2hlY2tpbmdMYW5n
dWFnZXMpOiBVc2luZyBXZWJDb3JlOjpkZWZhdWxMYW5ndWFnZSgpIGluc3RlYWQgb2YgUGFuZ28g
YmFja2VuZC4KKyAgICAgICAgKFRleHRDaGVja2VyRW5jaGFudDo6Z2V0U3BlbGxDaGVja2luZ0xh
bmd1YWdlcyk6CisgICAgICAgIChUZXh0Q2hlY2tlckVuY2hhbnQ6OmZyZWVFbmNoYW50QnJva2Vy
RGljdGlvbmFyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNr
ZXJFbmNoYW50Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0Q2hlY2tlckVuY2hhbnQuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoVGV4
dENoZWNrZXJFbmNoYW50KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2VyRW5jaGFudDo6
Y3JlYXRlKToKKwogMjAxMi0wOC0yMiAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW1Y4XSBSZW1vdmUgVjhQcm94eSBmcm9tIENvZGVHZW5lcmF0b3JWOC5w
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA3NjFiMjE0Li4wNmE4OTYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQpAQCAtMTE1LDcgKzExNSw3IEBAIHdlYmNvcmVndGtfY3BwZmxhZ3MgKz0gXAogCS1J
JChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ayBcCiAJLUkkKHNy
Y2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAgXAotCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvZ3RrCisJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vdGV4dC9lbmNoYW50CiAKICMgLS0tCiAjIEZlYXR1cmVzIGVuYWJsZWQgYnkgZGVmYXVsdCBh
dCBjb21waWxhdGlvbiB0aW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBmNTc2
NDIwLi5hNjgyMTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU2NzEsOCAr
NTY3MSw4IEBAIHdlYmNvcmVfcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU3VkZGVuVGVybWluYXRpb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U3VwcGxlbWVudGFibGUuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3lzdGVtVGltZS5o
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q2hlY2tlckVuY2hhbnQu
aCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dENoZWNrZXJFbmNoYW50
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2Vy
RW5jaGFudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENo
ZWNrZXJFbmNoYW50LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29u
dGV4dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpUmVzb2x2ZXIuaCBcCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcAppbmRleCBiNDJhZjI2Li5iMGZiOTI1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAKQEAgLTM2LDcgKzM2LDYg
QEAKICNpbmNsdWRlICJSZW5kZXJlZFBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2lu
Y2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCi0jaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIK
ICNpbmNsdWRlICJWaXNpYmxlU2VsZWN0aW9uLmgiCkBAIC0zMjMsNyArMzIyLDcgQEAgc3RhdGlj
IFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5
KGNvbnN0IFZpc2libGVQb3MKICAgICByZXR1cm4gd29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nLmRh
dGEoKSwgbGVuKTsKIH0gCiAKLXN0YXRpYyBib29sIGlzTG9naWNhbFN0YXJ0T2ZXb3JkKFRleHRC
cmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKK2Jv
b2wgaXNMb2dpY2FsU3RhcnRPZldvcmQoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXIsIGludCBwb3Np
dGlvbiwgYm9vbCBoYXJkTGluZUJyZWFrKQogewogICAgIGJvb2wgYm91bmRhcnkgPSBoYXJkTGlu
ZUJyZWFrID8gdHJ1ZSA6IGlzVGV4dEJyZWFrKGl0ZXIsIHBvc2l0aW9uKTsKICAgICBpZiAoIWJv
dW5kYXJ5KQpAQCAtMzM0LDcgKzMzMyw3IEBAIHN0YXRpYyBib29sIGlzTG9naWNhbFN0YXJ0T2ZX
b3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyCiAgICAg
cmV0dXJuIGlzV29yZFRleHRCcmVhayhpdGVyKTsKIH0KIAotc3RhdGljIGJvb2wgaXNsb2dpY2Fs
RW5kT2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFy
ZExpbmVCcmVhaykKK2Jvb2wgaXNsb2dpY2FsRW5kT2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiBp
dGVyLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhaykKIHsKICAgICBib29sIGJvdW5k
YXJ5ID0gaXNUZXh0QnJlYWsoaXRlciwgcG9zaXRpb24pOwogICAgIHJldHVybiAoaGFyZExpbmVC
cmVhayB8fCBib3VuZGFyeSkgJiYgaXNXb3JkVGV4dEJyZWFrKGl0ZXIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmggYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL3Zpc2libGVfdW5pdHMuaAppbmRleCAwNWIxYTMwLi44MTZlYmJiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiRWRpdGluZ0JlaGF2aW9yVHlwZXMuaCIKICNpbmNsdWRlICJFZGl0aW5nQm91bmRhcnkuaCIK
KyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsNiArNDYsOSBAQCBWaXNpYmxlUG9zaXRp
b24gbmV4dFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CiBWaXNpYmxlUG9z
aXRpb24gcmlnaHRXb3JkUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgYm9vbCBza2lw
c1NwYWNlV2hlbk1vdmluZ1JpZ2h0KTsKIFZpc2libGVQb3NpdGlvbiBsZWZ0V29yZFBvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGJvb2wgc2tpcHNTcGFjZVdoZW5Nb3ZpbmdSaWdodCk7
CiBib29sIGlzU3RhcnRPZldvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisvLyB1c2VkIGJ5
IFRleHRDaGVja2VyRW5jaGFudC5jcHAKK2Jvb2wgaXNMb2dpY2FsU3RhcnRPZldvcmQoVGV4dEJy
ZWFrSXRlcmF0b3IqLCBpbnQgcG9zaXRpb24sIGJvb2wgaGFyZExpbmVCcmVhayA9IGZhbHNlKTsK
K2Jvb2wgaXNsb2dpY2FsRW5kT2ZXb3JkKFRleHRCcmVha0l0ZXJhdG9yKiwgaW50IHBvc2l0aW9u
LCBib29sIGhhcmRMaW5lQnJlYWsgPSBmYWxzZSk7CiAKIC8vIHNlbnRlbmNlcwogVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0T2ZTZW50ZW5jZShjb25zdCBWaXNpYmxlUG9zaXRpb24gJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q2hlY2tlckVuY2hhbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5j
aGFudC5jcHAKc2ltaWxhcml0eSBpbmRleCA3NyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vdGV4dC9ndGsvVGV4dENoZWNrZXJFbmNoYW50LmNwcApyZW5hbWUgdG8gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9lbmNoYW50L1RleHRDaGVja2VyRW5jaGFudC5jcHAKaW5k
ZXggMTFhM2VmMi4uMjBlNDMwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9ndGsvVGV4dENoZWNrZXJFbmNoYW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmNwcApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTIxLDgg
KzIyLDEwIEBACiAKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKIAotI2luY2x1ZGUgPHBhbmdvL3Bh
bmdvLmg+Ci0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPExhbmd1
YWdlLmg+CisjaW5jbHVkZSA8ZWRpdGluZy92aXNpYmxlX3VuaXRzLmg+CisjaW5jbHVkZSA8Z2xp
Yi5oPgorI2luY2x1ZGUgPHRleHQvVGV4dEJyZWFrSXRlcmF0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCkBA
IC0zNiwxOCArMzksNiBAQCBzdGF0aWMgdm9pZCBlbmNoYW50RGljdERlc2NyaWJlQ2FsbGJhY2so
Y29uc3QgY2hhciogY29uc3QgbGFuZ3VhZ2VUYWcsIGNvbnN0IGNoYQogICAgIGRpY3Rpb25hcmll
cy0+YXBwZW5kKGxhbmd1YWdlVGFnKTsKIH0KIAotc3RhdGljIGJvb2wgd29yZEVuZElzQUNvbnRy
YWN0aW9uQXBvc3Ryb3BoZShjb25zdCBjaGFyKiBzdHJpbmcsIGxvbmcgb2Zmc2V0KQotewotICAg
IGlmIChnX3V0ZjhfZ2V0X2NoYXIoZ191dGY4X29mZnNldF90b19wb2ludGVyKHN0cmluZywgb2Zm
c2V0KSkgIT0gZ191dGY4X2dldF9jaGFyKCInIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIElmIHRoaXMgaXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcsIGl0IGNh
bm5vdCBiZSB0aGUgYXBvc3Ryb3BoZSBwYXJ0IG9mIGEgY29udHJhY3Rpb24uCi0gICAgaWYgKG9m
ZnNldCA9PSBnX3V0Zjhfc3RybGVuKHN0cmluZywgLTEpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gZ191bmljaGFyX2lzYWxwaGEoZ191dGY4X2dldF9jaGFyKGdfdXRmOF9v
ZmZzZXRfdG9fcG9pbnRlcihzdHJpbmcsIG9mZnNldCArIDEpKSk7Ci19Ci0KIFRleHRDaGVja2Vy
RW5jaGFudDo6VGV4dENoZWNrZXJFbmNoYW50KCkKICAgICA6IG1fYnJva2VyKGVuY2hhbnRfYnJv
a2VyX2luaXQoKSkKICAgICAsIG1fZW5jaGFudERpY3Rpb25hcmllcygwKQpAQCAtNzksMjggKzcw
LDI2IEBAIHZvaWQgVGV4dENoZWNrZXJFbmNoYW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29u
c3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbWlzc3BlCiB7CiAgICAgaWYgKG1fZW5jaGFudERpY3Rp
b25hcmllcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBWZWN0b3I8RW5jaGFudERp
Y3QqPjo6Y29uc3RfaXRlcmF0b3IgZGljdEl0ZXIgPSBtX2VuY2hhbnREaWN0aW9uYXJpZXMuYmVn
aW4oKTsKIAotICAgIFBhbmdvTGFuZ3VhZ2UqIGxhbmd1YWdlKHBhbmdvX2xhbmd1YWdlX2dldF9k
ZWZhdWx0KCkpOwogICAgIHNpemVfdCBudW1iZXJPZkNoYXJhY3RlcnMgPSBzdHJpbmcubGVuZ3Ro
KCk7Ci0gICAgR093blB0cjxQYW5nb0xvZ0F0dHI+IGF0dHJzKGdfbmV3KFBhbmdvTG9nQXR0ciwg
bnVtYmVyT2ZDaGFyYWN0ZXJzICsgMSkpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyID0g
d29yZEJyZWFrSXRlcmF0b3Ioc3RyaW5nLmNoYXJhY3RlcnMoKSwgbnVtYmVyT2ZDaGFyYWN0ZXJz
KTsKKyAgICBpZiAoIWl0ZXIpCisgICAgICAgIHJldHVybjsKIAogICAgIENTdHJpbmcgdXRmOFN0
cmluZyA9IHN0cmluZy51dGY4KCk7CiAgICAgY29uc3QgY2hhciogY1N0cmluZyA9IHV0ZjhTdHJp
bmcuZGF0YSgpOwotCi0gICAgLy8gcGFuZ29fZ2V0X2xvZ19hdHRycyB1c2VzIGFuIGFkaXRpb25h
bCBwb3NpdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0LgotICAgIHBhbmdvX2dldF9sb2dfYXR0
cnMoY1N0cmluZywgLTEsIC0xLCBsYW5ndWFnZSwgYXR0cnMuZ2V0KCksIG51bWJlck9mQ2hhcmFj
dGVycyArIDEpOworICAgIFZlY3RvcjxFbmNoYW50RGljdCo+Ojpjb25zdF9pdGVyYXRvciBkaWN0
SXRlciA9IG1fZW5jaGFudERpY3Rpb25hcmllcy5iZWdpbigpOwogCiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkNoYXJhY3RlcnMgKyAxOyBpKyspIHsKLSAgICAgICAgLy8gV2Ug
Z28gdGhyb3VnaCBlYWNoIGNoYXJhY3RlciB1bnRpbCB3ZSBmaW5kIGFuIGlzX3dvcmRfc3RhcnQs
Ci0gICAgICAgIC8vIHRoZW4gd2UgZ2V0IGludG8gYW4gaW5uZXIgbG9vcCB0byBmaW5kIHRoZSBp
c193b3JkX2VuZCBjb3JyZXNwb25kaW5nCisgICAgICAgIC8vIFdlIGdvIHRocm91Z2ggZWFjaCBj
aGFyYWN0ZXIgdW50aWwgd2UgZmluZCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB3b3JkCisgICAgICAg
IC8vIHRoZW4gd2UgZ2V0IGludG8gYW4gaW5uZXIgbG9vcCB0byBmaW5kIHRoZSBlbmQgb2YgdGhl
IHdvcmQgY29ycmVzcG9uZGluZwogICAgICAgICAvLyB0byBpdC4KLSAgICAgICAgaWYgKGF0dHJz
LmdldCgpW2ldLmlzX3dvcmRfc3RhcnQpIHsKKyAgICAgICAgaWYgKGlzTG9naWNhbFN0YXJ0T2ZX
b3JkKGl0ZXIsIGkpKSB7CiAgICAgICAgICAgICBpbnQgc3RhcnQgPSBpOwogICAgICAgICAgICAg
aW50IGVuZCA9IGk7CiAgICAgICAgICAgICBpbnQgd29yZExlbmd0aDsKIAotICAgICAgICAgICAg
d2hpbGUgKGF0dHJzLmdldCgpW2VuZF0uaXNfd29yZF9lbmQgPCAxICB8fCB3b3JkRW5kSXNBQ29u
dHJhY3Rpb25BcG9zdHJvcGhlKGNTdHJpbmcsIGVuZCkpCisgICAgICAgICAgICB3aGlsZSAoIWlz
bG9naWNhbEVuZE9mV29yZChpdGVyLCBlbmQpKQogICAgICAgICAgICAgICAgIGVuZCsrOwogCiAg
ICAgICAgICAgICB3b3JkTGVuZ3RoID0gZW5kIC0gc3RhcnQ7CkBAIC0xMDgsMTQgKzk3LDExIEBA
IHZvaWQgVGV4dENoZWNrZXJFbmNoYW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGludCYgbWlzc3BlCiAgICAgICAgICAgICAvLyBjaGVjayBjaGFyYWN0ZXJz
IHR3aWNlLgogICAgICAgICAgICAgaSA9IGVuZDsKIAotICAgICAgICAgICAgZ2NoYXIqIGNzdGFy
dCA9IGdfdXRmOF9vZmZzZXRfdG9fcG9pbnRlcihjU3RyaW5nLCBzdGFydCk7Ci0gICAgICAgICAg
ICBnaW50IGJ5dGVzID0gc3RhdGljX2Nhc3Q8Z2ludD4oZ191dGY4X29mZnNldF90b19wb2ludGVy
KGNTdHJpbmcsIGVuZCkgLSBjc3RhcnQpOwotICAgICAgICAgICAgR093blB0cjxnY2hhcj4gd29y
ZChnX25ldzAoZ2NoYXIsIGJ5dGVzICsgMSkpOwotCi0gICAgICAgICAgICBnX3V0Zjhfc3RybmNw
eSh3b3JkLmdldCgpLCBjc3RhcnQsIHdvcmRMZW5ndGgpOworICAgICAgICAgICAgY2hhciogY3N0
YXJ0ID0gZ191dGY4X29mZnNldF90b19wb2ludGVyKGNTdHJpbmcsIHN0YXJ0KTsKKyAgICAgICAg
ICAgIGludCBudW1iZXJPZkJ5dGVzID0gc3RhdGljX2Nhc3Q8aW50PihnX3V0Zjhfb2Zmc2V0X3Rv
X3BvaW50ZXIoY1N0cmluZywgZW5kKSAtIGNzdGFydCk7CiAKICAgICAgICAgICAgIGZvciAoOyBk
aWN0SXRlciAhPSBtX2VuY2hhbnREaWN0aW9uYXJpZXMuZW5kKCk7ICsrZGljdEl0ZXIpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoZW5jaGFudF9kaWN0X2NoZWNrKCpkaWN0SXRlciwgd29yZC5nZXQo
KSwgYnl0ZXMpKSB7CisgICAgICAgICAgICAgICAgaWYgKGVuY2hhbnRfZGljdF9jaGVjaygqZGlj
dEl0ZXIsIGNzdGFydCwgbnVtYmVyT2ZCeXRlcykpIHsKICAgICAgICAgICAgICAgICAgICAgbWlz
c3BlbGxpbmdMb2NhdGlvbiA9IHN0YXJ0OwogICAgICAgICAgICAgICAgICAgICBtaXNzcGVsbGlu
Z0xlbmd0aCA9IHdvcmRMZW5ndGg7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTEzOSw3
ICsxMjUsNyBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tlckVuY2hhbnQ6OmdldEd1ZXNzZXNG
b3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKICAgICAgICAgc2l6ZV90IG51bWJlck9mU3VnZ2Vz
dGlvbnM7CiAgICAgICAgIHNpemVfdCBpOwogCi0gICAgICAgIGdjaGFyKiogc3VnZ2VzdGlvbnMg
PSBlbmNoYW50X2RpY3Rfc3VnZ2VzdCgqaXRlciwgd29yZC51dGY4KCkuZGF0YSgpLCAtMSwgJm51
bWJlck9mU3VnZ2VzdGlvbnMpOworICAgICAgICBjaGFyKiogc3VnZ2VzdGlvbnMgPSBlbmNoYW50
X2RpY3Rfc3VnZ2VzdCgqaXRlciwgd29yZC51dGY4KCkuZGF0YSgpLCAtMSwgJm51bWJlck9mU3Vn
Z2VzdGlvbnMpOwogICAgICAgICBpZiAobnVtYmVyT2ZTdWdnZXN0aW9ucyA8PSAwKQogICAgICAg
ICAgICAgY29udGludWU7CiAKQEAgLTE2OCwxNiArMTU0LDE4IEBAIHZvaWQgVGV4dENoZWNrZXJF
bmNoYW50Ojp1cGRhdGVTcGVsbENoZWNraW5nTGFuZ3VhZ2VzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBsYW5nCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBj
b25zdCBjaGFyKiBsYW5ndWFnZSA9IHBhbmdvX2xhbmd1YWdlX3RvX3N0cmluZyhwYW5nb19sYW5n
dWFnZV9nZXRfZGVmYXVsdCgpKTsKKyAgICAgICAgLy8gTGFuZ3VhZ2VzIGFyZSBub3Qgc3BlY2lm
aWVkIGJ5IHVzZXIsIHRyeSB0byBnZXQgZGVmYXVsdCBsYW5ndWFnZS4KKyAgICAgICAgQ1N0cmlu
ZyB1dGY4TGFuZ3VhZ2UgPSBkZWZhdWx0TGFuZ3VhZ2UoKS51dGY4KCk7CisgICAgICAgIGNvbnN0
IGNoYXIqIGxhbmd1YWdlID0gdXRmOExhbmd1YWdlLmRhdGEoKTsKICAgICAgICAgaWYgKGVuY2hh
bnRfYnJva2VyX2RpY3RfZXhpc3RzKG1fYnJva2VyLCBsYW5ndWFnZSkpIHsKICAgICAgICAgICAg
IEVuY2hhbnREaWN0KiBkaWN0ID0gZW5jaGFudF9icm9rZXJfcmVxdWVzdF9kaWN0KG1fYnJva2Vy
LCBsYW5ndWFnZSk7CiAgICAgICAgICAgICBzcGVsbERpY3Rpb25hcmllcy5hcHBlbmQoZGljdCk7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBObyBkaWN0aW9uYXJpZXMgc2VsZWN0
ZWQsIHdlIGdldCBvbmUgZnJvbSB0aGUgbGlzdC4KKyAgICAgICAgICAgIC8vIE5vIGRpY3Rpb25h
cmllcyBzZWxlY3RlZCwgd2UgZ2V0IHRoZSBmaXJzdCBvbmUgZnJvbSB0aGUgbGlzdC4KICAgICAg
ICAgICAgIFZlY3RvcjxDU3RyaW5nPiBhbGxEaWN0aW9uYXJpZXM7CiAgICAgICAgICAgICBlbmNo
YW50X2Jyb2tlcl9saXN0X2RpY3RzKG1fYnJva2VyLCBlbmNoYW50RGljdERlc2NyaWJlQ2FsbGJh
Y2ssICZhbGxEaWN0aW9uYXJpZXMpOwogICAgICAgICAgICAgaWYgKCFhbGxEaWN0aW9uYXJpZXMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgRW5jaGFudERpY3QqIGRpY3QgPSBlbmNoYW50
X2Jyb2tlcl9yZXF1ZXN0X2RpY3QobV9icm9rZXIsIGFsbERpY3Rpb25hcmllc1swXS5kYXRhKCkp
OworICAgICAgICAgICAgICAgIEVuY2hhbnREaWN0KiBkaWN0ID0gZW5jaGFudF9icm9rZXJfcmVx
dWVzdF9kaWN0KG1fYnJva2VyLCBhbGxEaWN0aW9uYXJpZXMuZmlyc3QoKS5kYXRhKCkpOwogICAg
ICAgICAgICAgICAgIHNwZWxsRGljdGlvbmFyaWVzLmFwcGVuZChkaWN0KTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9n
dGsvVGV4dENoZWNrZXJFbmNoYW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2Vu
Y2hhbnQvVGV4dENoZWNrZXJFbmNoYW50LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDaGVja2VyRW5jaGFudC5o
CnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQvVGV4dENoZWNr
ZXJFbmNoYW50LmgK
</data>

          </attachment>
      

    </bug>

</bugzilla>