<?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>107682</bug_id>
          
          <creation_ts>2013-01-23 05:49:54 -0800</creation_ts>
          <short_desc>[WK2][EFL] Unified text checker implementation</short_desc>
          <delta_ts>2013-02-25 00:41:06 -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>WebKit EFL</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>
          <dependson>108299</dependson>
    
    <dependson>108349</dependson>
          <blocked>108172</blocked>
    
    <blocked>108528</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Grzegorz Czajkowski">g.czajkowski</reporter>
          <assigned_to name="Grzegorz Czajkowski">g.czajkowski</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>enrica</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mario</cc>
    
    <cc>morrita</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>tmpsantos</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>814138</commentid>
    <comment_count>0</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-01-23 05:49:54 -0800</bug_when>
    <thetext>Provide implementation of textCheckOfParagraph which allows to check spelling for multiple words.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814151</commentid>
    <comment_count>1</comment_count>
      <attachid>184215</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-01-23 06:19:20 -0800</bug_when>
    <thetext>Created attachment 184215
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>815217</commentid>
    <comment_count>2</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-01-24 01:09:11 -0800</bug_when>
    <thetext>Hi,
This patch implements unified text checker for WK2-EFL similarly to Mac. It uses a sync message between WebProcess and UIProcess to synchronously call TextChecker::checkTextOfParagraph().

Are you in a favour of this solution?
Or maybe should we implement it asynchronously? BTW we should be aware that it&apos;s likely to change spelling implementation for wk2 a lot - at the moment it&apos;s working synchronously).
Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818896</commentid>
    <comment_count>3</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-01-29 06:31:37 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Hi,
&gt; This patch implements unified text checker for WK2-EFL similarly to Mac. It uses a sync message between WebProcess and UIProcess to synchronously call TextChecker::checkTextOfParagraph().
&gt; 
&gt; Are you in a favour of this solution?
&gt; Or maybe should we implement it asynchronously? BTW we should be aware that it&apos;s likely to change spelling implementation for wk2 a lot - at the moment it&apos;s working synchronously).
&gt; Thanks

I created a bug 108172 to deliver asynchronous spelling implementation, so please ignore above question.
Could someone from WK2 Owners approve unified text checker implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818902</commentid>
    <comment_count>4</comment_count>
      <attachid>184215</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-01-29 06:47:20 -0800</bug_when>
    <thetext>Comment on attachment 184215
proposed patch

According to WK2 review policy, the patch requires WK2 Owners review. Clearing Morrita&apos;s r+ :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818937</commentid>
    <comment_count>5</comment_count>
      <attachid>184215</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-29 07:31:21 -0800</bug_when>
    <thetext>Comment on attachment 184215
proposed patch

Clearing flags on attachment: 184215

Committed r141110: &lt;http://trac.webkit.org/changeset/141110&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>818938</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-29 07:31:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819051</commentid>
    <comment_count>7</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-29 10:09:07 -0800</bug_when>
    <thetext>The unit tests are failing on the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819055</commentid>
    <comment_count>8</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-29 10:10:11 -0800</bug_when>
    <thetext>[ RUN      ] EWK2UnitTestBase.ewk_text_checker_string_spelling_check_cb_set
/home/buildslave-1/webkit-buildslave/efl-linux-64-release-wk2/build/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:150: Failure
Value of: text
  Actual: &quot;aa &quot;
Expected: expectedMisspelledWord
Which is: &quot;aa&quot;
/home/buildslave-1/webkit-buildslave/efl-linux-64-release-wk2/build/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:468: Failure
Value of: callbacksExecutionStats.spellingCheck
  Actual: false
Expected: true
[  FAILED  ] EWK2UnitTestBase.ewk_text_checker_string_spelling_check_cb_set (471 ms)
[ RUN      ] EWK2UnitTestBase.ewk_text_checker_word_guesses_get_cb_set
/home/buildslave-1/webkit-buildslave/efl-linux-64-release-wk2/build/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:150: Failure
Value of: text
  Actual: &quot;aa &quot;
Expected: expectedMisspelledWord
Which is: &quot;aa&quot;
[  FAILED  ] EWK2UnitTestBase.ewk_text_checker_word_guesses_get_cb_set (471 ms)
[ RUN      ] EWK2UnitTestBase.ewk_text_checker_word_learn_cb_set
/home/buildslave-1/webkit-buildslave/efl-linux-64-release-wk2/build/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:150: Failure
Value of: text
  Actual: &quot;aa &quot;
Expected: expectedMisspelledWord
Which is: &quot;aa&quot;
[  FAILED  ] EWK2UnitTestBase.ewk_text_checker_word_learn_cb_set (472 ms)
[ RUN      ] EWK2UnitTestBase.ewk_text_checker_word_ignore_cb_set
/home/buildslave-1/webkit-buildslave/efl-linux-64-release-wk2/build/Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_text_checker.cpp:150: Failure
Value of: text
  Actual: &quot;aa &quot;
Expected: expectedMisspelledWord
Which is: &quot;aa&quot;
[  FAILED  ] EWK2UnitTestBase.ewk_text_checker_word_ignore_cb_set (470 ms)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819441</commentid>
    <comment_count>9</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-29 16:09:22 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 184215 [details])
&gt; According to WK2 review policy, the patch requires WK2 Owners review. Clearing Morrita&apos;s r+ :(

Wow, if I understand correctly, this patch doesn&apos;t need owners review.
The patch touches only port-specific part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819458</commentid>
    <comment_count>10</comment_count>
    <who name="Thiago Marcos P. Santos">tmpsantos</who>
    <bug_when>2013-01-29 16:23:41 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 184215 [details] [details])
&gt; &gt; According to WK2 review policy, the patch requires WK2 Owners review. Clearing Morrita&apos;s r+ :(
&gt; 
&gt; Wow, if I understand correctly, this patch doesn&apos;t need owners review.
&gt; The patch touches only port-specific part.

I asked about that on the mailing list and the answer was that even port specific bits needs &quot;owners&quot; review.

https://lists.webkit.org/pipermail/webkit-dev/2013-January/023263.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819566</commentid>
    <comment_count>11</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2013-01-29 17:25:51 -0800</bug_when>
    <thetext>Grzegorz, if you wanna land WK1 first, I think you can divide this patch between WK1 and WK2. We can land patch for WK1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819615</commentid>
    <comment_count>12</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-01-29 18:09:28 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; 
&gt; I asked about that on the mailing list and the answer was that even port specific bits needs &quot;owners&quot; review.
&gt; 
&gt; https://lists.webkit.org/pipermail/webkit-dev/2013-January/023263.html
Woa you&apos;re right. I overlooked this. Thanks for letting me know this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826315</commentid>
    <comment_count>13</comment_count>
      <attachid>186818</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-02-06 04:09:22 -0800</bug_when>
    <thetext>Created attachment 186818
don&apos;t call checkSpellingOfString for word separators

This patch doesn&apos;t call checkSpellingOfString method for the word separators (in compliance with wk-efl unit tests).

The word separators are skipped:
 - at the beginning of the given text, for example
       checkTextOfParagraph(&apos;  zz&apos;) -&gt; checkSpellingOfString(&apos;zz&apos;),

 - in the middle of string, generally chechSpellingOfString finishes checking at the word separators,
       checkTextOfParagraph(&apos;zz xx&apos;) -&gt; checkSpellingOfString(&apos;zz&apos;) and checkSpellingOfString(&apos;xx&apos;); (NOT checkSpellingOfString(&apos; xx&apos;))

 - for multiple operators
       checkTextOfParagraph(&apos;zz    xx&apos;) -&gt; checkSpellingOfString(&apos;zz&apos;) and checkSpellingOfString(&apos;xx&apos;)

 - at the end of the given string
       checkTextOfParagraph(&apos;zz    &apos;) -&gt; checkSpellingOfString(&apos;zz&apos;)

Morrita,
May I ask you once again to have a look at the patch. I&apos;d appreciate your review.
Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827095</commentid>
    <comment_count>14</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2013-02-07 00:04:09 -0800</bug_when>
    <thetext>The code looks good. 

By the way, here is what I heard before about spellchecking on chomium:

- It runs spellchecker in WebProcess (renderer in chromium&apos;s terminology)
   Some spellchecker can run inside the sandbox. If your spellchecker works like that,
   it helps reducing the delay.
- WebCore supports &quot;async&quot; spellchecking. We added it for mitigating the delay of IPC.
   It might be good idea to add it for WebKit2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827136</commentid>
    <comment_count>15</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-02-07 01:00:16 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; The code looks good. 

Thanks :) Hope WK&apos;2 owners will say the final word. Anders, Benjamin, Andreas?

&gt; By the way, here is what I heard before about spellchecking on chomium:
&gt; 
&gt; - It runs spellchecker in WebProcess (renderer in chromium&apos;s terminology)
&gt;    Some spellchecker can run inside the sandbox. If your spellchecker works like that,
&gt;    it helps reducing the delay.

In WK2, the spell checking is exposed to the UIProcess (spelling library related stuff - check spelling of text, get guesses, learning/ignoring words). See WKTextChecker.h (C API).

&gt; - WebCore supports &quot;async&quot; spellchecking. We added it for mitigating the delay of IPC.
&gt;    It might be good idea to add it for WebKit2.

Yes, definitely it&apos;s our goal in bug 108172. Asynchronous spell checking in WK2 requires some core changes in WK2 as WebProcess needs to send (async) request to UIProcess and WebProcess has to be notified when spell checking is finished (relevant  didSucceed() didCancel() from TextCheckingRequest).
Unified text checker is required to ensure async implementation (a lot of asserts in WebCore).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827186</commentid>
    <comment_count>16</comment_count>
      <attachid>186818</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-07 01:43:41 -0800</bug_when>
    <thetext>Comment on attachment 186818
don&apos;t call checkSpellingOfString for word separators

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

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:135
&gt; +    // FIXME: avoid creating textIterator object, it may be passed as parameter.
&gt; +    //        isTextBreak() as a side effect, modifies the iterator. This issue
&gt; +    //        describes ICU doc - ubrk_isBoundary. In specific cases, for many
&gt; +    //        separators the method doesn&apos;t properly determinie the boundaries
&gt; +    //        without reseting the iterator.

Lots of English issues. This wouldn&apos;t even pass a spell checker, which is what you are working on

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:155
&gt; +Vector&lt;TextCheckingResult&gt; TextChecker::checkTextOfParagraph(int64_t spellDocumentTag, const UChar* text, int length, uint64_t checkingTypes)

typeFlags? checkingTypes sounds a bit weird to me

&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:184
&gt; +            // Genrrally, we end up checking at the word seperator, move to the adjacent word.

Spelling

&gt; Source/WebKit2/WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:68
&gt; +void WebEditorClient::checkTextOfParagraph(const UChar* text, int length, WebCore::TextCheckingTypeMask checkingTypes, Vector&lt;TextCheckingResult&gt;&amp; results)
&gt; +{
&gt; +    m_page-&gt;sendSync(Messages::WebPageProxy::CheckTextOfParagraph(String(text, length), checkingTypes), Messages::WebPageProxy::CheckTextOfParagraph::Reply(results));
&gt; +}
&gt; +#endif

We really have no way to make this async? If it cannot check this fast enough, will this not block typing on vkb?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827310</commentid>
    <comment_count>17</comment_count>
      <attachid>186818</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-02-07 04:27:09 -0800</bug_when>
    <thetext>Comment on attachment 186818
don&apos;t call checkSpellingOfString for word separators

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

&gt;&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:135
&gt;&gt; +    //        without reseting the iterator.
&gt; 
&gt; Lots of English issues. This wouldn&apos;t even pass a spell checker, which is what you are working on

Thanks. Updated.

&gt;&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:155
&gt;&gt; +Vector&lt;TextCheckingResult&gt; TextChecker::checkTextOfParagraph(int64_t spellDocumentTag, const UChar* text, int length, uint64_t checkingTypes)
&gt; 
&gt; typeFlags? checkingTypes sounds a bit weird to me

Header files for both WK1/WK2 are using &apos;checkingTypes&apos;. I&apos;d prefer leave it as it is.

&gt;&gt; Source/WebKit2/UIProcess/efl/TextCheckerEfl.cpp:184
&gt;&gt; +            // Genrrally, we end up checking at the word seperator, move to the adjacent word.
&gt; 
&gt; Spelling

Thanks. Fixed

&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:68
&gt;&gt; +#endif
&gt; 
&gt; We really have no way to make this async? If it cannot check this fast enough, will this not block typing on vkb?

WK2 calls all spelling methods synchronously. My intention is to deliver async version of WebEditorClient::requestCheckingOfString(WebCore::TextCheckingRequest ). It should pass the request to the UIProcess and checkTextOfParagraph (unified text checker) should return vector as a result of spelling - all is done by UIProcess. I hope it won&apos;t block typing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827313</commentid>
    <comment_count>18</comment_count>
      <attachid>187061</attachid>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-02-07 04:29:55 -0800</bug_when>
    <thetext>Created attachment 187061
comments improvements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827688</commentid>
    <comment_count>19</comment_count>
      <attachid>187061</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-07 10:49:26 -0800</bug_when>
    <thetext>Comment on attachment 187061
comments improvements

Attachment 187061 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16429231</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828304</commentid>
    <comment_count>20</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-02-08 00:59:00 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 187061 [details])
&gt; Attachment 187061 [details] did not pass win-ews (win):
&gt; Output: http://queues.webkit.org/results/16429231

Seems unrelated. The patch doesn&apos;t touch Win code. It looks like there were some problems with build setup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831906</commentid>
    <comment_count>21</comment_count>
      <attachid>187061</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-02-13 07:55:26 -0800</bug_when>
    <thetext>Comment on attachment 187061
comments improvements

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

&gt; Source/WebKit2/WebProcess/WebCoreSupport/efl/WebEditorClientEfl.cpp:68
&gt; +#if USE(UNIFIED_TEXT_CHECKING)
&gt; +void WebEditorClient::checkTextOfParagraph(const UChar* text, int length, WebCore::TextCheckingTypeMask checkingTypes, Vector&lt;TextCheckingResult&gt;&amp; results)
&gt; +{
&gt; +    m_page-&gt;sendSync(Messages::WebPageProxy::CheckTextOfParagraph(String(text, length), checkingTypes), Messages::WebPageProxy::CheckTextOfParagraph::Reply(results));
&gt; +}
&gt; +#endif

If USE(UNIFIED_TEXT_CHECKING) is always 1 when building on EFL, I don&apos;t think this #if is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835306</commentid>
    <comment_count>22</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-02-18 03:36:29 -0800</bug_when>
    <thetext>Committed r143192: &lt;http://trac.webkit.org/changeset/143192&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>839824</commentid>
    <comment_count>23</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-22 12:39:07 -0800</bug_when>
    <thetext>Is it possible for any of this code to move to the enchant spell checking code in WebCore, so that it can be shared?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840767</commentid>
    <comment_count>24</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2013-02-25 00:41:06 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Is it possible for any of this code to move to the enchant spell checking code in WebCore, so that it can be shared?

Hi,
Basically the implementation doesn&apos;t invoke any spellcheker engine API (Enchant, Hunspell etc.) It just checks spelling through client&apos;s checkSpellingOfString() (in case of EFL it can be Enchant implementation or the client&apos;s implementation - similarly to GTK+ we expose callbacks to override the default implementation). I am not sure whether moving it to the WebCore::TextCheckerEnchant.{h/cpp} is a good idea.

I agree with you that sharing that code would be great. In fact, the EFL&apos;s TextChecker implementation (TextCheckerEfl.cpp) looks very similarly to GTK+ one. How about sharing this file? We could treat it as common one for EFL and GTK+, for example TextCheckerCommon.{h,cpp}.

CC&apos;ing Kenneth who was interested in refactoring spelling for EFL and Mario who implemented spelling for WebKit-GTK+.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184215</attachid>
            <date>2013-01-23 06:19:20 -0800</date>
            <delta_ts>2013-02-06 04:09:22 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>spelling-unified_text_checker.patch</filename>
            <type>text/plain</type>
            <size>8996</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzMjdhMzllLi4xOWVlMDM3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMDEt
MjMgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAg
ICAgICAgW0VGTF0gVW5pZmllZCB0ZXh0IGNoZWNrZXIgaW1wbGVtZW50YXRpb24uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc2ODIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2VmbC13
azIvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgU2tpcCBjb250ZXh0LW1lbnUtc3VnZ2VzdGlv
bnMuaHRtbCB1bnRpbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTA3Njg0IGxhbmRzLgorCiAyMDEzLTAxLTIzICBab2x0YW4gQXJ2YWkgIDx6YXJ2YWlA
aW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZCBnYXJkZW5pbmcuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwtd2syL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9lZmwtd2syL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNTIy
NzUxNC4uYjYyZmY0YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZWZsLXdrMi9U
ZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2VmbC13azIvVGVzdEV4
cGVjdGF0aW9ucwpAQCAtMjkyLDYgKzI5Miw5IEBAIHdlYmtpdC5vcmcvYi85MzQ3MCBmYXN0L2Rv
bS90aXRsZS1kaXJlY3Rpb25hbGl0eS5odG1sIFsgRmFpbHVyZSBdCiAjIFdlYktpdFRlc3RSdW5u
ZXIgc2V0VG91Y2hQb2ludFJhZGl1cygpIGlzIG5vdCBzdXBwb3J0ZWQKIEJ1ZyhFRkwpIGZhc3Qv
ZXZlbnRzL3RvdWNoL2Jhc2ljLXNpbmdsZS10b3VjaC1ldmVudHMuaHRtbCBbIEZhaWx1cmUgXQog
CisjIE9uIExpbnV4LCBzaG91bGQgYmUgYWJsZSB0byBnZXQgc3BlbGxpbmcgc3VnZ2VzdGlvbnMg
d2l0aG91dCBzZWxlY3RpbmcgdGhlIG1pc3NwZWxsZWQgd29yZCB3aGVuIHVuaWZpZWQgdGV4dCBj
aGVja2VyIGlzIGVuYWJsZWQuCit3ZWJraXQub3JnL2IvMTA3Njg0IGVkaXRpbmcvc3BlbGxpbmcv
Y29udGV4dC1tZW51LXN1Z2dlc3Rpb25zLmh0bWwgWyBGYWlsdXJlIF0KKwogIyBOZWVkcyBncmFt
bWFyIGNoZWNraW5nCiBCdWcoRUZMKSBlZGl0aW5nL3NwZWxsaW5nL2dyYW1tYXItZWRpdC13b3Jk
Lmh0bWwgWyBGYWlsdXJlIF0KIEJ1ZyhFRkwpIGVkaXRpbmcvc3BlbGxpbmcvbWFya2Vycy5odG1s
IFsgRmFpbHVyZSBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTA2ODVlNS4uZGIwOTM3NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2IEBACisyMDEzLTAxLTIyICBHcnplZ29yeiBDemFqa293c2tpICA8Zy5jemFq
a293c2tpQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdIFVuaWZpZWQgdGV4dCBjaGVja2Vy
IGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA3NjgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGVkaXRpbmcvc3BlbGxpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDaGVja2luZy5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIEVuYWJsaW5nIHVuaWZpZWQgdGV4dCBjaGVja2VyIGZlYXR1cmUgZm9y
IFdlYktpdC1FRkwuCisKIDIwMTMtMDEtMjMgIEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVy
ZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXSBBZGQgT3B1cyBNSU1FIHR5cGUg
dG8gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIG9uZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3RleHQvVGV4dENoZWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDaGVja2luZy5oCmluZGV4IDEzZGE1ZTkuLjM5N2RkNDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNraW5nLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tpbmcuaApAQCAtMzksNyArMzksNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNkZWZpbmUgV1RGX1VTRV9HUkFNTUFSX0NIRUNLSU5HIDEKIAot
I2lmIChQTEFURk9STShNQUMpICYmIChQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPj0gMTA2MCkpIHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaWYgKFBM
QVRGT1JNKE1BQykgJiYgKFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9S
RVFVSVJFRCA+PSAxMDYwKSkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oRUZM
KQogI2RlZmluZSBXVEZfVVNFX1VOSUZJRURfVEVYVF9DSEVDS0lORyAxCiAjZW5kaWYKICNpZiBQ
TEFURk9STShNQUMpICYmIChQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5f
UkVRVUlSRUQgPj0gMTA2MCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCAxZmJlZDQzLi4zOTZkYWFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTMtMDEtMjIgIEdyemVnb3J6IEN6
YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0gVW5p
ZmllZCB0ZXh0IGNoZWNrZXIgaW1wbGVtZW50YXRpb24uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc2ODIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYW4gZW1wdHkgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGggaW1wbGVtZW50YXRpb24gZm9yIFdLMS1FRkwKKyAgICAgICAgdG8gZG8gbm90IGJyZWFrIGJ1
aWxkIHdoZW4gV1RGX1VTRV9VTklGSUVEX1RFWFRfQ0hFQ0tJTkcKKyAgICAgICAgaXMgZW5hYmxl
ZC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEVmbC5oOgorICAgICAg
ICAoRWRpdG9yQ2xpZW50RWZsKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEVmbDo6
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorCiAyMDEzLTAxLTIyICBBbmRlcnMgQ2FybHNzb24gIDxh
bmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGEgcGxhdGZvcm9tIHN0cmF0ZWd5IGZv
ciBsb2NhbCBzdG9yYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRFZmwuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudEVmbC5oCmluZGV4IGMyY2RkYjUuLjEwYmJiYzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEVmbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEVmbC5oCkBAIC0xNDks
NiArMTQ5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RT
dGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxl
ZCk7CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PikgeyB9CisjaWYgVVNFKFVOSUZJRURf
VEVYVF9DSEVDS0lORykKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29u
c3QgVUNoYXIqLCBpbnQsIFRleHRDaGVja2luZ1R5cGVNYXNrLCBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiYpIHsgfQorI2VuZGlmCiAgICAgdmlydHVhbCBUZXh0Q2hlY2tlckNsaWVudCogdGV4
dENoZWNrZXIoKSB7IHJldHVybiB0aGlzOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNWQ2
MmQ5Zi4uZmNiZDQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEzLTAxLTIyICBH
cnplZ29yeiBDemFqa293c2tpICA8Zy5jemFqa293c2tpQHNhbXN1bmcuY29tPgorCisgICAgICAg
IFtFRkxdIFVuaWZpZWQgdGV4dCBjaGVja2VyIGltcGxlbWVudGF0aW9uLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NjgyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRD
aGVja2VyRWZsLmNwcDoKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRD
aGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIEFsbG93IHRvIGNoZWNrIHNw
ZWxsaW5nIGZvciBtdWx0aXBsZSB3b3JkcywKKyAgICAgICAgdGhlaXIgbWlzc3BlbGxpbmcgbG9j
YXRpb24gYW5kIGxlbmd0aCBhcmUgc2F2ZWQgdG8gdGhlIHZlY3Rvci4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9lZmwvV2ViRWRpdG9yQ2xpZW50RWZsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAg
ICAgIChXZWJLaXQpOgorICAgICAgICBBcyBzcGVsbGluZyBpbXBsZW1lbnRhdGlvbiBpcyBleHBv
c2VkIHRvIFVJUHJvY2VzcywKKyAgICAgICAgc2VuZCBhIG1lZXNhZ2UgdG8gVUlQcm9jZXNzIHRv
IGNhbGwgVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoLgorCiAyMDEzLTAxLTIyICBB
bmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIGEgcGxh
dGZvcm9tIHN0cmF0ZWd5IGZvciBsb2NhbCBzdG9yYWdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCmluZGV4IGQ1NjYwNmUuLmUxYjU1ZjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCkBA
IC0xMjQsNiArMTI0LDM5IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdp
dGhUYWcoaW50NjRfdCB0YWcpCiAjZW5kaWYKIH0KIAorI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hF
Q0tJTkcpCitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwg
aW50IGxlbmd0aCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcykKK3sKKyAgICBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiBwYXJhZ3JhcGhDaGVja2luZ1Jlc3VsdDsKKyNpZiBFTkFCTEUoU1BFTExD
SEVDSykKKyAgICBpZiAoY2hlY2tpbmdUeXBlcyAmIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZykg
eworICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAgd2hpbGUgKG9mZnNldCA8IGxlbmd0
aCkgeworICAgICAgICAgICAgaW50MzJfdCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAg
ICAgICAgICBpbnQzMl90IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGNoZWNr
U3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCB0ZXh0ICsgb2Zmc2V0LCBsZW5ndGgg
LSBvZmZzZXQsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAg
ICAgICAgIGlmICghbWlzc3BlbGxpbmdMZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIFRleHRDaGVja2luZ1Jlc3VsdCBtaXNzcGVsbGluZ1Jlc3VsdDsKKyAgICAg
ICAgICAgIG1pc3NwZWxsaW5nUmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7
CisgICAgICAgICAgICBtaXNzcGVsbGluZ1Jlc3VsdC5sb2NhdGlvbiA9IG9mZnNldCArIG1pc3Nw
ZWxsaW5nTG9jYXRpb247CisgICAgICAgICAgICBtaXNzcGVsbGluZ1Jlc3VsdC5sZW5ndGggPSBt
aXNzcGVsbGluZ0xlbmd0aDsKKyAgICAgICAgICAgIHBhcmFncmFwaENoZWNraW5nUmVzdWx0LmFw
cGVuZChtaXNzcGVsbGluZ1Jlc3VsdCk7CisKKyAgICAgICAgICAgIG9mZnNldCArPSBtaXNzcGVs
bGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGg7CisgICAgICAgIH0KKyAgICB9CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKKyAgICBVTlVTRURfUEFSQU0o
dGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNr
aW5nVHlwZXMpOworI2VuZGlmCisgICAgcmV0dXJuIHBhcmFncmFwaENoZWNraW5nUmVzdWx0Owor
fQorI2VuZGlmCisKIHZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2
NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgs
IGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3Ro
KQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggNjRm
NGExYi4uMjEwNDI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC0xMzcsNyArMTM3LDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVD
aGFyKiwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxs
aW5nTGVuZ3RoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1
Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNo
YXIqLCBpbnQgbGVuZ3RoLCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJh
ZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBPVkVSUklERTsKLSNpZiBQ
TEFURk9STShNQUMpCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShFRkwpCiAgICAgdmly
dHVhbCB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVu
Z3RoLCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8
V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykgT1ZFUlJJREU7CiAjZW5kaWYK
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0
IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKSBPVkVSUklERTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZWZsL1dlYkVk
aXRvckNsaWVudEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2VmbC9XZWJFZGl0b3JDbGllbnRFZmwuY3BwCmluZGV4IDdjYmZiZjYuLmY0ZDYzNGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZWZsL1dl
YkVkaXRvckNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9lZmwvV2ViRWRpdG9yQ2xpZW50RWZsLmNwcApAQCAtNjAsNCArNjAsOSBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZl
bnQqIGV2ZW50KQogICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAordm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0IFVDaGFyKiB0ZXh0
LCBpbnQgbGVuZ3RoLCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVz
LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3sKKyAgICBtX3BhZ2UtPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmlu
Zyh0ZXh0LCBsZW5ndGgpLCBjaGVja2luZ1R5cGVzKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
Q2hlY2tUZXh0T2ZQYXJhZ3JhcGg6OlJlcGx5KHJlc3VsdHMpKTsKK30KKwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186818</attachid>
            <date>2013-02-06 04:09:22 -0800</date>
            <delta_ts>2013-02-07 04:29:55 -0800</delta_ts>
            <desc>don&apos;t call checkSpellingOfString for word separators</desc>
            <filename>spelling-unified_text_checker.patch</filename>
            <type>text/plain</type>
            <size>9693</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2Mjc0MTljLi45YjYzYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTMtMDItMDYgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBVbmlmaWVkIHRleHQgY2hlY2tlciBpbXBsZW1l
bnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA3NjgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGVkaXRpbmcvc3BlbGxpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDaGVja2luZy5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIEVuYWJsaW5nIHVuaWZpZWQgdGV4dCBjaGVja2VyIGZlYXR1cmUgZm9yIFdlYktpdC1F
RkwuCisKIDIwMTMtMDEtMzEgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJlbmFtZSBXaGVlbEV2ZW50OjpHcmFudWxhcml0eSB0byBXaGVlbEV2ZW50OjpE
ZWx0YU1vZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENo
ZWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2luZy5oCmlu
ZGV4IDEzZGE1ZTkuLjM5N2RkNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENoZWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0Q2hlY2tpbmcuaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNk
ZWZpbmUgV1RGX1VTRV9HUkFNTUFSX0NIRUNLSU5HIDEKIAotI2lmIChQTEFURk9STShNQUMpICYm
IChQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA2
MCkpIHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaWYgKFBMQVRGT1JNKE1BQykgJiYgKFBMQVRG
T1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDYwKSkgfHwg
UExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oRUZMKQogI2RlZmluZSBXVEZfVVNFX1VO
SUZJRURfVEVYVF9DSEVDS0lORyAxCiAjZW5kaWYKICNpZiBQTEFURk9STShNQUMpICYmIChQTEFU
Rk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTA2MCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZwppbmRleCA0YWEwOTk4Li5iN2VjMDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTMtMDItMDYgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dz
a2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBVbmlmaWVkIHRleHQgY2hlY2tl
ciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA3NjgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIGFuIGVtcHR5IGNoZWNrVGV4dE9mUGFyYWdyYXBoIGltcGxlbWVudGF0aW9u
IGZvciBXSzEtRUZMCisgICAgICAgIHRvIGRvIG5vdCBicmVhayBidWlsZCB3aGVuIFdURl9VU0Vf
VU5JRklFRF9URVhUX0NIRUNLSU5HCisgICAgICAgIGlzIGVuYWJsZWQuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuaDoKKyAgICAgICAgKEVkaXRvckNsaWVudEVm
bCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmw6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKToKKwogMjAxMy0wMS0zMSAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFp
bC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE0MTExMC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEVmbC5o
IGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmgKaW5k
ZXggYzJjZGRiNS4uMTBiYmJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmgKQEAgLTE0OSw2ICsxNDksOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7CiAgICAgdmlydHVhbCB2
b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKTsKICAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVj
a2luZ1JlcXVlc3Q+KSB7IH0KKyNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAgIHZp
cnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBVQ2hhciosIGludCwgVGV4dENo
ZWNraW5nVHlwZU1hc2ssIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JikgeyB9CisjZW5kaWYK
ICAgICB2aXJ0dWFsIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpIHsgcmV0dXJuIHRo
aXM7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBkODMxMGNiLi5iNThjM2RkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTMtMDItMDYgIEdyemVnb3J6IEN6YWprb3dza2kgIDxn
LmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBVbmlmaWVkIHRl
eHQgY2hlY2tlciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NjgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Om5leHRXb3JkT2Zmc2V0KToKKyAgICAg
ICAgSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgd29yZCBvZmZzZXQgdG8gZG8gbm90
IGNhbGwKKyAgICAgICAgY2xpZW50J3MgY2hlY2tTcGVsbGluZ09mU3RyaW5nIGZvciB0aGUgd29y
ZCBzZXBhcmF0b3JzLgorCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1RleHRP
ZlBhcmFncmFwaCk6CisgICAgICAgIEFsbG93IHRvIGNoZWNrIHNwZWxsaW5nIGZvciBtdWx0aXBs
ZSB3b3JkcywKKyAgICAgICAgdGhlaXIgbWlzc3BlbGxpbmcgbG9jYXRpb24gYW5kIGxlbmd0aCBh
cmUgc2F2ZWQgdG8gdGhlIHZlY3Rvci4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisgICAgICAgIEFkZCBVTklGSUVEX1RFWFRfQ0hFQ0tJ
TkcgZ3VhcmQgdG8gY2hlY2tUZXh0T2ZQYXJhZ3JhcGguCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L2VmbC9XZWJFZGl0b3JDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2Vi
S2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFn
cmFwaCk6CisgICAgICAgIEFzIHNwZWxsaW5nIGltcGxlbWVudGF0aW9uIGlzIGV4cG9zZWQgdG8g
VUlQcm9jZXNzLAorICAgICAgICBzZW5kIGEgbWVlc2FnZSB0byBVSVByb2Nlc3MgdG8gY2FsbCBU
ZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGguCisKIDIwMTMtMDEtMzEgIE1pa2hhaWwg
UG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CiAKICAgICAgICAgW0VG
TF1bV0syXSBSZXF1ZXN0TWFuYWdlckNsaWVudEVmbCwgRG93bmxvYWRNYW5hZ2VyRWZsIGFuZCBD
b250ZXh0SGlzdG9yeUNsaWVudEVmbCBzaG91bGQgYmUgYmFzZWQgb24gQyBBUEkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKaW5kZXggZDU2NjA2
ZS4uMTc1ZmY5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0
Q2hlY2tlckVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hl
Y2tlckVmbC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJUZXh0Q2hlY2tlclN0YXRl
LmgiCiAKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIldlYlRleHRDaGVja2VyLmgiCiAjZW5kaWYKIApAQCAtMTI0LDYgKzEy
NSw3NiBAQCB2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0
X3QgdGFnKQogI2VuZGlmCiB9CiAKKyNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorc3Rh
dGljIGludCBuZXh0V29yZE9mZnNldChjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgaW50
IGN1cnJlbnRPZmZzZXQpCit7CisgICAgLy8gRklYTUU6IGF2b2lkIGNyZWF0aW5nIHRleHRJdGVy
YXRvciBvYmplY3QsIGl0IG1heSBiZSBwYXNzZWQgYXMgcGFyYW1ldGVyLgorICAgIC8vICAgICAg
ICBpc1RleHRCcmVhaygpIGFzIGEgc2lkZSBlZmZlY3QsIG1vZGlmaWVzIHRoZSBpdGVyYXRvci4g
VGhpcyBpc3N1ZQorICAgIC8vICAgICAgICBkZXNjcmliZXMgSUNVIGRvYyAtIHVicmtfaXNCb3Vu
ZGFyeS4gSW4gc3BlY2lmaWMgY2FzZXMsIGZvciBtYW55CisgICAgLy8gICAgICAgIHNlcGFyYXRv
cnMgdGhlIG1ldGhvZCBkb2Vzbid0IHByb3Blcmx5IGRldGVybWluaWUgdGhlIGJvdW5kYXJpZXMK
KyAgICAvLyAgICAgICAgd2l0aG91dCByZXNldGluZyB0aGUgaXRlcmF0b3IuCisgICAgVGV4dEJy
ZWFrSXRlcmF0b3IqIHRleHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0
aCk7CisgICAgaWYgKCF0ZXh0SXRlcmF0b3IpCisgICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0
OworCisgICAgaW50IHdvcmRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0OworICAgIHdoaWxlICh3b3Jk
T2Zmc2V0IDwgbGVuZ3RoICYmIGlzVGV4dEJyZWFrKHRleHRJdGVyYXRvciwgd29yZE9mZnNldCkp
CisgICAgICAgICsrd29yZE9mZnNldDsKKworICAgIC8vIERvIG5vdCB0cmVhdCB0aGUgd29yZCdz
IGJvdW5kYXJ5IGFzIGEgc2VwYXJhdG9yLgorICAgIGlmICghY3VycmVudE9mZnNldCAmJiB3b3Jk
T2Zmc2V0ID09IDEpCisgICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0OworCisgICAgLy8gT21p
dCBtdWx0aXBsZSBzZXBhcmF0b3JzLgorICAgIGlmICgod29yZE9mZnNldCAtIGN1cnJlbnRPZmZz
ZXQpID4gMSkKKyAgICAgICAgLS13b3JkT2Zmc2V0OworCisgICAgcmV0dXJuIHdvcmRPZmZzZXQ7
Cit9CisKK1ZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRP
ZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCBp
bnQgbGVuZ3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKQoreworICAgIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IHBhcmFncmFwaENoZWNraW5nUmVzdWx0OworI2lmIEVOQUJMRShTUEVMTENI
RUNLKQorICAgIGlmIChjaGVja2luZ1R5cGVzICYgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSB7
CisgICAgICAgIFRleHRCcmVha0l0ZXJhdG9yKiB0ZXh0SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVy
YXRvcih0ZXh0LCBsZW5ndGgpOworICAgICAgICBpZiAoIXRleHRJdGVyYXRvcikKKyAgICAgICAg
ICAgIHJldHVybiBwYXJhZ3JhcGhDaGVja2luZ1Jlc3VsdDsKKworICAgICAgICAvLyBPbWl0IHRo
ZSB3b3JkIHNlcGFyYXRvcnMgYXQgdGhlIGJlZ2lubmluZy9lbmQgb2YgdGhlIHRleHQgdG8gZG9u
J3QgdW5uZWNlc3NhcmlseQorICAgICAgICAvLyBpbnZvbHZlIHRoZSBjbGllbnQgdG8gY2hlY2sg
c3BlbGxpbmcgZm9yIHRoZW0uCisgICAgICAgIGludCBvZmZzZXQgPSBuZXh0V29yZE9mZnNldCh0
ZXh0LCBsZW5ndGgsIDApOworICAgICAgICBpbnQgbGVuZ3RoU3RyaXAgPSBsZW5ndGg7CisgICAg
ICAgIHdoaWxlIChsZW5ndGhTdHJpcCA+IDAgJiYgaXNUZXh0QnJlYWsodGV4dEl0ZXJhdG9yLCBs
ZW5ndGhTdHJpcCAtIDEpKQorICAgICAgICAgICAgLS1sZW5ndGhTdHJpcDsKKworICAgICAgICB3
aGlsZSAob2Zmc2V0ID49IDAgJiYgb2Zmc2V0IDwgbGVuZ3RoU3RyaXApIHsKKyAgICAgICAgICAg
IGludDMyX3QgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAgICAgICAgICAgaW50MzJfdCBt
aXNzcGVsbGluZ0xlbmd0aCA9IDA7CisgICAgICAgICAgICBjaGVja1NwZWxsaW5nT2ZTdHJpbmco
c3BlbGxEb2N1bWVudFRhZywgdGV4dCArIG9mZnNldCwgbGVuZ3RoU3RyaXAgLSBvZmZzZXQsIG1p
c3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICgh
bWlzc3BlbGxpbmdMZW5ndGgpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IFRleHRDaGVja2luZ1Jlc3VsdCBtaXNzcGVsbGluZ1Jlc3VsdDsKKyAgICAgICAgICAgIG1pc3Nw
ZWxsaW5nUmVzdWx0LnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CisgICAgICAgICAg
ICBtaXNzcGVsbGluZ1Jlc3VsdC5sb2NhdGlvbiA9IG9mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRp
b247CisgICAgICAgICAgICBtaXNzcGVsbGluZ1Jlc3VsdC5sZW5ndGggPSBtaXNzcGVsbGluZ0xl
bmd0aDsKKyAgICAgICAgICAgIHBhcmFncmFwaENoZWNraW5nUmVzdWx0LmFwcGVuZChtaXNzcGVs
bGluZ1Jlc3VsdCk7CisgICAgICAgICAgICBvZmZzZXQgKz0gbWlzc3BlbGxpbmdMb2NhdGlvbiAr
IG1pc3NwZWxsaW5nTGVuZ3RoOworICAgICAgICAgICAgLy8gR2VucnJhbGx5LCB3ZSBlbmQgdXAg
Y2hlY2tpbmcgYXQgdGhlIHdvcmQgc2VwZXJhdG9yLCBtb3ZlIHRvIHRoZSBhZGphY2VudCB3b3Jk
LgorICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dFdvcmRPZmZzZXQodGV4dCwgbGVuZ3RoU3RyaXAs
IG9mZnNldCk7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzcGVs
bERvY3VtZW50VGFnKTsKKyAgICBVTlVTRURfUEFSQU0odGV4dCk7CisgICAgVU5VU0VEX1BBUkFN
KGxlbmd0aCk7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNraW5nVHlwZXMpOworI2VuZGlmCisgICAg
cmV0dXJuIHBhcmFncmFwaENoZWNraW5nUmVzdWx0OworfQorI2VuZGlmCisKIHZvaWQgVGV4dENo
ZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9j
YXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQogewogI2lmIEVOQUJMRShTUEVMTENI
RUNLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggNjRmNGExYi4uM2NiOTJlYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5oCkBAIC0xMzcsNyArMTM3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZv
aWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgaW50KiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29y
ZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZv
aWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBWZWN0b3I8
V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBi
YWRHcmFtbWFyTGVuZ3RoKSBPVkVSUklERTsKLSNpZiBQTEFURk9STShNQUMpCisjaWYgVVNFKFVO
SUZJRURfVEVYVF9DSEVDS0lORykKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5
cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+
JiByZXN1bHRzKSBPVkVSUklERTsKICNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6R3Jh
bW1hckRldGFpbCYpIE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9lZmwvV2ViRWRpdG9yQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZWZsL1dlYkVkaXRvckNsaWVudEVmbC5j
cHAKaW5kZXggN2NiZmJmNi4uZWFmNTZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9lZmwvV2ViRWRpdG9yQ2xpZW50RWZsLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2VmbC9XZWJFZGl0b3JDbGll
bnRFZmwuY3BwCkBAIC02MCw0ICs2MCwxMSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxl
SW5wdXRNZXRob2RLZXlkb3duKEtleWJvYXJkRXZlbnQqIGV2ZW50KQogICAgICAgICBldmVudC0+
c2V0RGVmYXVsdEhhbmRsZWQoKTsKIH0KIAorI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcp
Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgVUNoYXIq
IHRleHQsIGludCBsZW5ndGgsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5n
VHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQoreworICAgIG1fcGFn
ZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
U3RyaW5nKHRleHQsIGxlbmd0aCksIGNoZWNraW5nVHlwZXMpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpDaGVja1RleHRPZlBhcmFncmFwaDo6UmVwbHkocmVzdWx0cykpOworfQorI2VuZGlmCisK
IH0K
</data>
<flag name="review"
          id="206398"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187061</attachid>
            <date>2013-02-07 04:29:55 -0800</date>
            <delta_ts>2013-02-13 07:55:26 -0800</delta_ts>
            <desc>comments improvements</desc>
            <filename>spelling-unified_text_checker.patch</filename>
            <type>text/plain</type>
            <size>9734</size>
            <attacher name="Grzegorz Czajkowski">g.czajkowski</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ODRhODJiLi4wZjVhYWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTMtMDItMDYgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBVbmlmaWVkIHRleHQgY2hlY2tlciBpbXBsZW1l
bnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA3NjgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLCBjb3ZlcmVkIGJ5IGVkaXRpbmcvc3BlbGxpbmcgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDaGVja2luZy5oOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIEVuYWJsaW5nIHVuaWZpZWQgdGV4dCBjaGVja2VyIGZlYXR1cmUgZm9yIFdlYktpdC1F
RkwuCisKIDIwMTMtMDItMDYgIE1hcmphIEjDtmx0dMOkICA8bWFyamFAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFRha2UgcmVmZXJyZXIgcG9saWN5IGludG8gYWNjb3VudCB3aGVuIGNsZWFyaW5n
IHRoZSByZWZlcnJlciBoZWFkZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENoZWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRD
aGVja2luZy5oCmluZGV4IDEzZGE1ZTkuLjM5N2RkNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0Q2hlY2tpbmcuaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNkZWZpbmUgV1RGX1VTRV9HUkFNTUFSX0NIRUNLSU5HIDEKIAotI2lmIChQTEFU
Rk9STShNQUMpICYmIChQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTA2MCkpIHx8IFBMQVRGT1JNKEJMQUNLQkVSUlkpCisjaWYgKFBMQVRGT1JNKE1B
QykgJiYgKFBMQVRGT1JNKElPUykgfHwgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+
PSAxMDYwKSkgfHwgUExBVEZPUk0oQkxBQ0tCRVJSWSkgfHwgUExBVEZPUk0oRUZMKQogI2RlZmlu
ZSBXVEZfVVNFX1VOSUZJRURfVEVYVF9DSEVDS0lORyAxCiAjZW5kaWYKICNpZiBQTEFURk9STShN
QUMpICYmIChQTEFURk9STShJT1MpIHx8IF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
Pj0gMTA2MCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCBkNDg0YTczLi4zMDYzM2YwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTMtMDItMDYgIEdyemVnb3J6IEN6YWprb3dza2kg
IDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW1dLMl1bRUZMXSBVbmlmaWVk
IHRleHQgY2hlY2tlciBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NjgyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGFuIGVtcHR5IGNoZWNrVGV4dE9mUGFyYWdyYXBoIGlt
cGxlbWVudGF0aW9uIGZvciBXSzEtRUZMCisgICAgICAgIHRvIGRvIG5vdCBicmVhayBidWlsZCB3
aGVuIFdURl9VU0VfVU5JRklFRF9URVhUX0NIRUNLSU5HCisgICAgICAgIGlzIGVuYWJsZWQuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuaDoKKyAgICAgICAgKEVk
aXRvckNsaWVudEVmbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmw6OmNoZWNr
VGV4dE9mUGFyYWdyYXBoKToKKwogMjAxMy0wMi0wNCAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3Vs
YWluQGFwcGxlLmNvbT4KIAogICAgICAgICBLaWxsIHN1c3BlbmRBbmltYXRpb24oKSwgcmVzdW1l
QW5pbWF0aW9uKCkgYW5kIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGZyb20gRFJUL1dUUjsg
dXNlIEludGVybmFscwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBv
cnQvRWRpdG9yQ2xpZW50RWZsLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9F
ZGl0b3JDbGllbnRFZmwuaAppbmRleCBhMTViNDE0Li5mMTYyZWNiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuaApAQCAtMTUxLDYg
KzE1MSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3Rh
dGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQp
OwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4pIHsgfQorI2lmIFVTRShVTklGSUVEX1RF
WFRfQ0hFQ0tJTkcpCisgICAgdmlydHVhbCB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNvbnN0
IFVDaGFyKiwgaW50LCBUZXh0Q2hlY2tpbmdUeXBlTWFzaywgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4mKSB7IH0KKyNlbmRpZgogICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRD
aGVja2VyKCkgeyByZXR1cm4gdGhpczsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDg3YjZh
ZTQuLjhlOGJhOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMy0wMi0wNiAgR3J6
ZWdvcnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4KKworICAgICAgICBb
V0syXVtFRkxdIFVuaWZpZWQgdGV4dCBjaGVja2VyIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDc2ODIKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9lZmwvVGV4
dENoZWNrZXJFZmwuY3BwOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6bmV4
dFdvcmRPZmZzZXQpOgorICAgICAgICBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoZSB3
b3JkIG9mZnNldCB0byBkbyBub3QgY2FsbAorICAgICAgICBjbGllbnQncyBjaGVja1NwZWxsaW5n
T2ZTdHJpbmcgZm9yIHRoZSB3b3JkIHNlcGFyYXRvcnMuCisKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgQWxsb3cgdG8gY2hlY2sg
c3BlbGxpbmcgZm9yIG11bHRpcGxlIHdvcmRzLAorICAgICAgICB0aGVpciBtaXNzcGVsbGluZyBs
b2NhdGlvbiBhbmQgbGVuZ3RoIGFyZSBzYXZlZCB0byB0aGUgdmVjdG9yLgorCisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKyAgICAgICAgQWRk
IFVOSUZJRURfVEVYVF9DSEVDS0lORyBndWFyZCB0byBjaGVja1RleHRPZlBhcmFncmFwaC4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZWZsL1dlYkVkaXRvckNsaWVudEVm
bC5jcHA6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGll
bnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgQXMgc3BlbGxpbmcgaW1wbGVtZW50
YXRpb24gaXMgZXhwb3NlZCB0byBVSVByb2Nlc3MsCisgICAgICAgIHNlbmQgYSBtZWVzYWdlIHRv
IFVJUHJvY2VzcyB0byBjYWxsIFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaC4KKwog
MjAxMy0wMi0wNiAgTWFyamEgSMO2bHR0w6QgIDxtYXJqYUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVGFrZSByZWZlcnJlciBwb2xpY3kgaW50byBhY2NvdW50IHdoZW4gY2xlYXJpbmcgdGhlIHJl
ZmVycmVyIGhlYWRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9U
ZXh0Q2hlY2tlckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVj
a2VyRWZsLmNwcAppbmRleCBkNTY2MDZlLi4yMzY0NzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIlRleHRDaGVja2VyU3RhdGUuaCIKIAogI2lmIEVOQUJMRShTUEVMTENIRUNLKQorI2lu
Y2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiV2ViVGV4dENoZWNrZXIuaCIK
ICNlbmRpZgogCkBAIC0xMjQsNiArMTI1LDc2IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3Bl
bGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiAjZW5kaWYKIH0KIAorI2lmIFVTRShVTklG
SUVEX1RFWFRfQ0hFQ0tJTkcpCitzdGF0aWMgaW50IG5leHRXb3JkT2Zmc2V0KGNvbnN0IFVDaGFy
KiB0ZXh0LCBpbnQgbGVuZ3RoLCBpbnQgY3VycmVudE9mZnNldCkKK3sKKyAgICAvLyBGSVhNRTog
YXZvaWQgY3JlYXRpbmcgdGV4dEl0ZXJhdG9yIG9iamVjdCBoZXJlLCBpdCBjb3VsZCBiZSBwYXNz
ZWQgYXMgYSBwYXJhbWV0ZXIuCisgICAgLy8gICAgICAgIGlzVGV4dEJyZWFrKCkgbGVhdmVzIHRo
ZSBpdGVyYXRvciBwb2ludGluZyB0byB0aGUgZmlyc3QgYm91bmRhcnkgcG9zaXRpb24gYXQKKyAg
ICAvLyAgICAgICAgb3IgYWZ0ZXIgIm9mZnNldCIgKHVicmtfaXNCb3VuZGFyeSBzaWRlIGVmZmVj
dCkuCisgICAgLy8gICAgICAgIEZvciBtYW55IHdvcmQgc2VwYXJhdG9ycywgdGhlIG1ldGhvZCBk
b2Vzbid0IHByb3Blcmx5IGRldGVybWluZSB0aGUgYm91bmRhcmllcworICAgIC8vICAgICAgICB3
aXRob3V0IHJlc2V0dGluZyB0aGUgaXRlcmF0b3IuCisgICAgVGV4dEJyZWFrSXRlcmF0b3IqIHRl
eHRJdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQsIGxlbmd0aCk7CisgICAgaWYgKCF0
ZXh0SXRlcmF0b3IpCisgICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0OworCisgICAgaW50IHdv
cmRPZmZzZXQgPSBjdXJyZW50T2Zmc2V0OworICAgIHdoaWxlICh3b3JkT2Zmc2V0IDwgbGVuZ3Ro
ICYmIGlzVGV4dEJyZWFrKHRleHRJdGVyYXRvciwgd29yZE9mZnNldCkpCisgICAgICAgICsrd29y
ZE9mZnNldDsKKworICAgIC8vIERvIG5vdCB0cmVhdCB0aGUgd29yZCdzIGJvdW5kYXJ5IGFzIGEg
c2VwYXJhdG9yLgorICAgIGlmICghY3VycmVudE9mZnNldCAmJiB3b3JkT2Zmc2V0ID09IDEpCisg
ICAgICAgIHJldHVybiBjdXJyZW50T2Zmc2V0OworCisgICAgLy8gT21pdCBtdWx0aXBsZSBzZXBh
cmF0b3JzLgorICAgIGlmICgod29yZE9mZnNldCAtIGN1cnJlbnRPZmZzZXQpID4gMSkKKyAgICAg
ICAgLS13b3JkT2Zmc2V0OworCisgICAgcmV0dXJuIHdvcmRPZmZzZXQ7Cit9CisKK1ZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2
NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50
NjRfdCBjaGVja2luZ1R5cGVzKQoreworICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHBh
cmFncmFwaENoZWNraW5nUmVzdWx0OworI2lmIEVOQUJMRShTUEVMTENIRUNLKQorICAgIGlmIChj
aGVja2luZ1R5cGVzICYgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSB7CisgICAgICAgIFRleHRC
cmVha0l0ZXJhdG9yKiB0ZXh0SXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0LCBsZW5n
dGgpOworICAgICAgICBpZiAoIXRleHRJdGVyYXRvcikKKyAgICAgICAgICAgIHJldHVybiBwYXJh
Z3JhcGhDaGVja2luZ1Jlc3VsdDsKKworICAgICAgICAvLyBPbWl0IHRoZSB3b3JkIHNlcGFyYXRv
cnMgYXQgdGhlIGJlZ2luaW5nL2VuZCBvZiB0aGUgdGV4dCB0byBkb24ndCB1bm5lY2Vzc2FyaWx5
CisgICAgICAgIC8vIGludm9sdmUgdGhlIGNsaWVudCB0byBjaGVjayBzcGVsbGluZyBmb3IgdGhl
bS4KKyAgICAgICAgaW50IG9mZnNldCA9IG5leHRXb3JkT2Zmc2V0KHRleHQsIGxlbmd0aCwgMCk7
CisgICAgICAgIGludCBsZW5ndGhTdHJpcCA9IGxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGxlbmd0
aFN0cmlwID4gMCAmJiBpc1RleHRCcmVhayh0ZXh0SXRlcmF0b3IsIGxlbmd0aFN0cmlwIC0gMSkp
CisgICAgICAgICAgICAtLWxlbmd0aFN0cmlwOworCisgICAgICAgIHdoaWxlIChvZmZzZXQgPj0g
MCAmJiBvZmZzZXQgPCBsZW5ndGhTdHJpcCkgeworICAgICAgICAgICAgaW50MzJfdCBtaXNzcGVs
bGluZ0xvY2F0aW9uID0gLTE7CisgICAgICAgICAgICBpbnQzMl90IG1pc3NwZWxsaW5nTGVuZ3Ro
ID0gMDsKKyAgICAgICAgICAgIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFn
LCB0ZXh0ICsgb2Zmc2V0LCBsZW5ndGhTdHJpcCAtIG9mZnNldCwgbWlzc3BlbGxpbmdMb2NhdGlv
biwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGluZ0xlbmd0
aCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgVGV4dENoZWNraW5nUmVz
dWx0IG1pc3NwZWxsaW5nUmVzdWx0OworICAgICAgICAgICAgbWlzc3BlbGxpbmdSZXN1bHQudHlw
ZSA9IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKKyAgICAgICAgICAgIG1pc3NwZWxsaW5nUmVz
dWx0LmxvY2F0aW9uID0gb2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsKKyAgICAgICAgICAg
IG1pc3NwZWxsaW5nUmVzdWx0Lmxlbmd0aCA9IG1pc3NwZWxsaW5nTGVuZ3RoOworICAgICAgICAg
ICAgcGFyYWdyYXBoQ2hlY2tpbmdSZXN1bHQuYXBwZW5kKG1pc3NwZWxsaW5nUmVzdWx0KTsKKyAg
ICAgICAgICAgIG9mZnNldCArPSBtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5n
dGg7CisgICAgICAgICAgICAvLyBHZW5lcmFsbHksIHdlIGVuZCB1cCBjaGVja2luZyBhdCB0aGUg
d29yZCBzZXBhcmF0b3IsIG1vdmUgdG8gdGhlIGFkamFjZW50IHdvcmQuCisgICAgICAgICAgICBv
ZmZzZXQgPSBuZXh0V29yZE9mZnNldCh0ZXh0LCBsZW5ndGhTdHJpcCwgb2Zmc2V0KTsKKyAgICAg
ICAgfQorICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRUYWcpOwor
ICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKKyAgICBV
TlVTRURfUEFSQU0oY2hlY2tpbmdUeXBlcyk7CisjZW5kaWYKKyAgICByZXR1cm4gcGFyYWdyYXBo
Q2hlY2tpbmdSZXN1bHQ7Cit9CisjZW5kaWYKKwogdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVs
bGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQs
IHVpbnQzMl90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYg
bWlzc3BlbGxpbmdMZW5ndGgpCiB7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaAppbmRleCBmY2Q4YzVmLi5iMjhjNzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKQEAg
LTEzOSw3ICsxMzksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRp
b24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3RyaW5n
IGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYg
bWlzc3BlbGxlZFdvcmQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJP
ZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFy
RGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgp
IE9WRVJSSURFOwotI2lmIFBMQVRGT1JNKE1BQykKKyNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKQogICAgIHZpcnR1YWwgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBVQ2hhciog
dGV4dCwgaW50IGxlbmd0aCwgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdU
eXBlcywgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpIE9WRVJS
SURFOwogI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgT1ZF
UlJJREU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2VmbC9XZWJFZGl0b3JDbGllbnRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9lZmwvV2ViRWRpdG9yQ2xpZW50RWZsLmNwcAppbmRleCA3Y2JmYmY2
Li5lYWY1NmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L2VmbC9XZWJFZGl0b3JDbGllbnRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZWZsL1dlYkVkaXRvckNsaWVudEVmbC5jcHAKQEAgLTYw
LDQgKzYwLDExIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVJbnB1dE1ldGhvZEtleWRv
d24oS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAgICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogfQogCisjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKK3ZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0
aCwgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCit7CisgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpDaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmcodGV4dCwgbGVu
Z3RoKSwgY2hlY2tpbmdUeXBlcyksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrVGV4dE9m
UGFyYWdyYXBoOjpSZXBseShyZXN1bHRzKSk7Cit9CisjZW5kaWYKKwogfQo=
</data>
<flag name="review"
          id="206731"
          type_id="1"
          status="+"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="206840"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>