<?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>57862</bug_id>
          
          <creation_ts>2011-04-05 10:32:38 -0700</creation_ts>
          <short_desc>WebKit2: Implement TextChecker on Windows</short_desc>
          <delta_ts>2011-04-11 14:35:47 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jessie Berlin">jberlin</reporter>
          <assigned_to name="Jessie Berlin">jberlin</assigned_to>
          <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>jberlin</cc>
    
    <cc>sfalken</cc>
    
    <cc>webkit-ews</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>379718</commentid>
    <comment_count>0</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-05 10:32:38 -0700</bug_when>
    <thetext>&lt;rdar://problem/8824396&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379837</commentid>
    <comment_count>1</comment_count>
      <attachid>88302</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-05 13:33:05 -0700</bug_when>
    <thetext>Created attachment 88302
Patch (Part 1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379973</commentid>
    <comment_count>2</comment_count>
      <attachid>88302</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-04-05 17:04:25 -0700</bug_when>
    <thetext>Comment on attachment 88302
Patch (Part 1)

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

&gt; Source/WebKit2/UIProcess/API/C/win/WKTextChecker.cpp:37
&gt; +WKTypeID WKTextCheckerGetTypeID()
&gt; +{
&gt; +    return toAPI(APIObject::TypeTextChecker);
&gt; +}

This function isn&apos;t needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380076</commentid>
    <comment_count>3</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-05 20:29:29 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 88302 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88302&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/win/WKTextChecker.cpp:37
&gt; &gt; +WKTypeID WKTextCheckerGetTypeID()
&gt; &gt; +{
&gt; &gt; +    return toAPI(APIObject::TypeTextChecker);
&gt; &gt; +}
&gt; 
&gt; This function isn&apos;t needed.

Removed. Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380388</commentid>
    <comment_count>4</comment_count>
      <attachid>88302</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-06 08:19:10 -0700</bug_when>
    <thetext>Comment on attachment 88302
Patch (Part 1)

Committed in http://trac.webkit.org/changeset/83050</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380625</commentid>
    <comment_count>5</comment_count>
      <attachid>88468</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-06 10:57:00 -0700</bug_when>
    <thetext>Created attachment 88468
Patch (Part 2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380708</commentid>
    <comment_count>6</comment_count>
      <attachid>88468</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-04-06 12:08:11 -0700</bug_when>
    <thetext>Comment on attachment 88468
Patch (Part 2)

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

&gt; Source/WebKit2/UIProcess/win/WebTextCheckerClient.cpp:73
&gt; +    if (!m_client.uniqueSpellDocumentTag)

Do we really need to check for null here?

&gt; Source/WebKit2/UIProcess/win/WebTextCheckerClient.cpp:81
&gt; +    if (!m_client.closeSpellDocumentWithTag)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380714</commentid>
    <comment_count>7</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-06 12:15:24 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 88468 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88468&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/win/WebTextCheckerClient.cpp:73
&gt; &gt; +    if (!m_client.uniqueSpellDocumentTag)
&gt; 
&gt; Do we really need to check for null here?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/win/WebTextCheckerClient.cpp:81
&gt; &gt; +    if (!m_client.closeSpellDocumentWithTag)
&gt; 
&gt; Ditto.

I talked with Anders on IRC and he said this was my call. I think I am going to leave the null checks in for parity with other clients and in case someone else ends up using it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380746</commentid>
    <comment_count>8</comment_count>
      <attachid>88468</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-06 12:59:28 -0700</bug_when>
    <thetext>Comment on attachment 88468
Patch (Part 2)

Committed in http://trac.webkit.org/changeset/83085</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381017</commentid>
    <comment_count>9</comment_count>
      <attachid>88552</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-06 18:02:46 -0700</bug_when>
    <thetext>Created attachment 88552
Patch (Part 3)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381024</commentid>
    <comment_count>10</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-04-06 18:12:48 -0700</bug_when>
    <thetext>Attachment 88552 did not build on qt:
Build output: http://queues.webkit.org/results/8347408</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381237</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-07 05:01:55 -0700</bug_when>
    <thetext>Looks like you need to fix Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381349</commentid>
    <comment_count>12</comment_count>
      <attachid>88640</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-07 08:12:33 -0700</bug_when>
    <thetext>Created attachment 88640
Patch (Part 3) Take 2 - attempt to fix Qt build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381465</commentid>
    <comment_count>13</comment_count>
      <attachid>88640</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-07 10:36:08 -0700</bug_when>
    <thetext>Comment on attachment 88640
Patch (Part 3) Take 2 - attempt to fix Qt build

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

Seems like there are really two things going on here:

1) Add USE(UNIFIED_TEXT_CHECKING) guards where appropriate
2) Plumb checkSpellingOfString through to the UI process

Separating those into two separate patches would be slightly clearer. But I&apos;ll review as-is.

&gt; Source/WebKit2/UIProcess/mac/TextCheckerMac.mm:303
&gt; +void TextChecker::checkSpellingOfString(int64_t, const UChar*, uint32_t, int32_t&amp;, int32_t&amp;)
&gt; +{
&gt; +    notImplemented();
&gt; +}

Will this ever be called on Mac (given that WebKit2 doesn&apos;t run on Leopard or Tiger)? If not, I&apos;d replace use ASSERT_NOT_REACHED() instead of notImplemented().

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp:401
&gt; -void WebEditorClient::checkSpellingOfString(const UChar*, int, int*, int*)
&gt; +void WebEditorClient::checkSpellingOfString(const UChar* text, int length, int* misspellingLocation, int* misspellingLength)

How is it possible to change this without making a similar change in the .h file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381485</commentid>
    <comment_count>14</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-07 10:49:57 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 88640 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88640&amp;action=review
&gt; 
&gt; Seems like there are really two things going on here:
&gt; 
&gt; 1) Add USE(UNIFIED_TEXT_CHECKING) guards where appropriate
&gt; 2) Plumb checkSpellingOfString through to the UI process
&gt; 
&gt; Separating those into two separate patches would be slightly clearer. But I&apos;ll review as-is.

My apologies. Thanks for reviewing!

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/TextCheckerMac.mm:303
&gt; &gt; +void TextChecker::checkSpellingOfString(int64_t, const UChar*, uint32_t, int32_t&amp;, int32_t&amp;)
&gt; &gt; +{
&gt; &gt; +    notImplemented();
&gt; &gt; +}
&gt; 
&gt; Will this ever be called on Mac (given that WebKit2 doesn&apos;t run on Leopard or Tiger)? If not, I&apos;d replace use ASSERT_NOT_REACHED() instead of notImplemented().

It may, because checkSpellingOfStrings is called from a bunch of places that are not compiled out even if USE(UNIFIED_TEXT_CHECKING) is false.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp:401
&gt; &gt; -void WebEditorClient::checkSpellingOfString(const UChar*, int, int*, int*)
&gt; &gt; +void WebEditorClient::checkSpellingOfString(const UChar* text, int length, int* misspellingLocation, int* misspellingLength)
&gt; 
&gt; How is it possible to change this without making a similar change in the .h file?

This signature matches that in the header file. I just filled in the parameter names :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381495</commentid>
    <comment_count>15</comment_count>
      <attachid>88640</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-07 11:06:33 -0700</bug_when>
    <thetext>Comment on attachment 88640
Patch (Part 3) Take 2 - attempt to fix Qt build

Committed in http://trac.webkit.org/changeset/83188</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381801</commentid>
    <comment_count>16</comment_count>
      <attachid>88719</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-07 15:50:12 -0700</bug_when>
    <thetext>Created attachment 88719
Patch (Part 4)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381856</commentid>
    <comment_count>17</comment_count>
      <attachid>88719</attachid>
    <who name="Brian Weinstein">bweinstein</who>
    <bug_when>2011-04-07 16:59:41 -0700</bug_when>
    <thetext>Comment on attachment 88719
Patch (Part 4)

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

&gt; Source/WebKit2/Shared/APIObject.h:110
&gt; +        TypeGrammarDetail

Is there any sorting to these? If so, GrammarDetail should go above TextChecker.

&gt; Source/WebKit2/UIProcess/API/C/win/WKTextChecker.h:44
&gt; +typedef void (*WKTextcheckerCheckGrammarOfString)(uint64_t tag, WKStringRef text, WKArrayRef* grammarDetails, int32_t* badGrammarLocation, int32_t* badGrammarLength, const void *clientInfo);

Missing a capital C in WKTextcheckerCheckGrammarOfString.

&gt; Source/WebKit2/UIProcess/API/C/win/WKTextChecker.h:57
&gt; +    WKTextcheckerCheckGrammarOfString                                       checkGrammarOfString;

Ditto about missing capital C.

&gt; Source/WebKit2/UIProcess/mac/TextCheckerMac.mm:307
&gt; +    notImplemented();

A note saying where Mac implements this would be nice, since it seems like the Mac could implement it here.

&gt; Source/WebKit2/UIProcess/win/WebTextCheckerClient.cpp:102
&gt; +{

Do you want to make sure that grammarDetails is empty when it is passed in? Or does it not matter?

&gt; Source/WebKit2/UIProcess/win/WebTextCheckerClient.cpp:103
&gt; +    if (!m_client.checkSpellingOfString)

This should probably be if (!m_client.checkGrammarOfString)

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp:420
&gt; +    int32_t resultLocation = -1;

Could we use the NotFound value in WTF/NotFound.h for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381870</commentid>
    <comment_count>18</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-07 17:16:32 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 88719 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88719&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/Shared/APIObject.h:110
&gt; &gt; +        TypeGrammarDetail
&gt; 
&gt; Is there any sorting to these? If so, GrammarDetail should go above TextChecker.

Not particularly (TypeView was already before TypeEditCommandProxy), but I sorted them (within each category).

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/win/WKTextChecker.h:44
&gt; &gt; +typedef void (*WKTextcheckerCheckGrammarOfString)(uint64_t tag, WKStringRef text, WKArrayRef* grammarDetails, int32_t* badGrammarLocation, int32_t* badGrammarLength, const void *clientInfo);
&gt; 
&gt; Missing a capital C in WKTextcheckerCheckGrammarOfString.

Whoops! Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/C/win/WKTextChecker.h:57
&gt; &gt; +    WKTextcheckerCheckGrammarOfString                                       checkGrammarOfString;
&gt; 
&gt; Ditto about missing capital C.

Fixed.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/mac/TextCheckerMac.mm:307
&gt; &gt; +    notImplemented();
&gt; 
&gt; A note saying where Mac implements this would be nice, since it seems like the Mac could implement it here.

The Mac does not implement this. Instead, it implements checkTextOfParagraph. I will add a comment here and in checkSpellingOfString.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/win/WebTextCheckerClient.cpp:102
&gt; &gt; +{
&gt; 
&gt; Do you want to make sure that grammarDetails is empty when it is passed in? Or does it not matter?

I don&apos;t think that matters.

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/win/WebTextCheckerClient.cpp:103
&gt; &gt; +    if (!m_client.checkSpellingOfString)
&gt; 
&gt; This should probably be if (!m_client.checkGrammarOfString)

Yes! Thanks for catching that. Fixed.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp:420
&gt; &gt; +    int32_t resultLocation = -1;
&gt; 
&gt; Could we use the NotFound value in WTF/NotFound.h for this?

Yes, also changed checkSpellingOfString to use this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381883</commentid>
    <comment_count>19</comment_count>
      <attachid>88719</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-07 17:44:15 -0700</bug_when>
    <thetext>Comment on attachment 88719
Patch (Part 4)

Committed in http://trac.webkit.org/changeset/83232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382192</commentid>
    <comment_count>20</comment_count>
      <attachid>88719</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-04-08 06:17:01 -0700</bug_when>
    <thetext>Comment on attachment 88719
Patch (Part 4)

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

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp:420
&gt;&gt;&gt; +    int32_t resultLocation = -1;
&gt;&gt; 
&gt;&gt; Could we use the NotFound value in WTF/NotFound.h for this?
&gt; 
&gt; Yes, also changed checkSpellingOfString to use this.

notFound is a size_t, not an int32_t. I wouldn&apos;t be surprised if this caused compiler warnings/errors on some platforms. But maybe it will be fine. At the very least it seems a little strange.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382203</commentid>
    <comment_count>21</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-08 06:50:54 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 88719 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88719&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebEditorClient.cpp:420
&gt; &gt;&gt;&gt; +    int32_t resultLocation = -1;
&gt; &gt;&gt; 
&gt; &gt;&gt; Could we use the NotFound value in WTF/NotFound.h for this?
&gt; &gt; 
&gt; &gt; Yes, also changed checkSpellingOfString to use this.
&gt; 
&gt; notFound is a size_t, not an int32_t. I wouldn&apos;t be surprised if this caused compiler warnings/errors on some platforms. But maybe it will be fine. At the very least it seems a little strange.

It did on Mac, and I changed it back to -1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382635</commentid>
    <comment_count>22</comment_count>
      <attachid>88892</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-08 16:19:58 -0700</bug_when>
    <thetext>Created attachment 88892
Patch (Part 5)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382672</commentid>
    <comment_count>23</comment_count>
      <attachid>88892</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-08 17:22:44 -0700</bug_when>
    <thetext>Comment on attachment 88892
Patch (Part 5)

Committed in http://trac.webkit.org/changeset/83363</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382990</commentid>
    <comment_count>24</comment_count>
      <attachid>88962</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-10 18:37:48 -0700</bug_when>
    <thetext>Created attachment 88962
Patch (Part 6)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383394</commentid>
    <comment_count>25</comment_count>
      <attachid>88962</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-11 12:52:25 -0700</bug_when>
    <thetext>Comment on attachment 88962
Patch (Part 6)

Committed in http://trac.webkit.org/changeset/83452</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383446</commentid>
    <comment_count>26</comment_count>
      <attachid>89071</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-11 13:40:35 -0700</bug_when>
    <thetext>Created attachment 89071
Part 7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383535</commentid>
    <comment_count>27</comment_count>
      <attachid>89071</attachid>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-11 14:34:25 -0700</bug_when>
    <thetext>Comment on attachment 89071
Part 7

Committed in http://trac.webkit.org/changeset/83496</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383537</commentid>
    <comment_count>28</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2011-04-11 14:35:47 -0700</bug_when>
    <thetext>Part 7 dealt with the last of the TextCheckerWin stubs. There are some remaining TextChecker bugs, but I will deal with those separately.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88302</attachid>
            <date>2011-04-05 13:33:05 -0700</date>
            <delta_ts>2011-04-06 08:19:10 -0700</delta_ts>
            <desc>Patch (Part 1)</desc>
            <filename>spellingGrammarWindowsOpensourcePart1.patch</filename>
            <type>text/plain</type>
            <size>26037</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyOTY3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTEtMDQtMDUgIEplc3NpZSBC
ZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBJbXBsZW1lbnQgVGV4dENoZWNrZXIgb24gV2lu
ZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4
NjIKKworICAgICAgICBQYXJ0IDE6IEdldCBhbmQgc2V0IHRoZSBzdGF0ZS4KKworICAgICAgICAq
IFNoYXJlZC9BUEkvYy93aW4vV0tCYXNlV2luLmg6CisgICAgICAgICogU2hhcmVkL0FQSU9iamVj
dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tBUElDYXN0V2luLmg6CisgCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1RleHRDaGVja2VyLmNwcDogQWRkZWQuCisg
ICAgICAgIChXS1RleHRDaGVja2VyR2V0VHlwZUlEKToKKyAgICAgICAgKFdLVGV4dENoZWNrZXJT
ZXRDbGllbnQpOgorICAgICAgICAoV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXS1RleHRDaGVja2VyR3JhbW1hckNoZWNr
aW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL3dpbi9X
S1RleHRDaGVja2VyLmg6IEFkZGVkLgorIAorICAgICAgICAqIFVJUHJvY2Vzcy9UZXh0Q2hlY2tl
ci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6c3RhdGUpOgorICAgICAgICBEbyB0aGUgaW5pdGFsaXph
dGlvbiBmb3IgdGhlIHN0YXRlIG9ubHkgb25jZSBzbyB0aGF0IGl0IGlzIG5vdCBuZWNlc3Nhcnkg
dG8gY2FsbCB0aGUgY2xpZW50CisgICAgICAgIGV2ZXJ5IHRpbWUgdGhlIHN0YXRlIGlzIHJlcXVl
c3RlZC4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdBbGxvd2VkKToKKyAgICAgICAgQ2FsbCB0aGUgY2xpZW50LgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKToKKyAgICAg
ICAgVXBkYXRlIHRoZSBzdGF0ZSBhbmQgdGVsbCB0aGUgY2xpZW50LgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgVXBkYXRlIHRoZSBzdGF0ZS4KKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQp
OgorICAgICAgICBVcGRhdGUgdGhlIHN0YXRlLgorCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9X
ZWJUZXh0Q2hlY2tlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKToKKyAgICAgICAgTWFrZSB0aGUgV2ViVGV4dENoZWNrZXIgYXZhaWxhYmxlIGds
b2JhbGx5LgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tlcjo6V2ViVGV4dENoZWNrZXIp
OgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tlcjo6c2V0Q2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6dXBkYXRlU3RhdGVGb3JBbGxXZWJQcm9jZXNzZXMpOgorICAgICAgICAoV2ViS2l0
OjpXZWJUZXh0Q2hlY2tlcjo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKToKKyAgICAgICAgVGVsbCB0aGUgVGV4dENoZWNrZXIgdGhhdCB0aGUgc3RhdGUgaGFzIGNo
YW5nZWQsIGFuZCB0aGVuIHRlbGwgdGhlCisgICAgICAgIFdlYlByb2Nlc3NQcm94aWVzIHRvIHNl
bmQgdGhlIG5ldyBzdGF0ZSB0byB0aGUgV2ViUHJvY2Vzc2VzLgorICAgICAgICAoV2ViS2l0OjpX
ZWJUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAg
ICAgIERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlRleHRDaGVja2VyOjpjbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJUZXh0Q2hlY2tlcjo6dHlwZSk6CisKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2lu
L1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlRl
eHRDaGVja2VyQ2xpZW50Ojpjb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tlckNsaWVudDo6Y29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNrZXJDbGllbnQ6OnNldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRleHRDaGVj
a2VyQ2xpZW50OjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VGV4dENoZWNrZXJDbGllbnQ6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaDogQWRkZWQuCisgCisgICAgICAg
ICogd2luL1dlYktpdDIudmNwcm9qOgorICAgICAgICBBZGQgV0tUZXh0Q2hlY2tlci5oLy5jcHAs
IFdlYlRleHRDaGVja2VyLmgvLmNwcCwgYW5kIFdlYlRleHRDaGVja2VyQ2xpZW50LmgvLmNwcC4K
KyAgICAgICAgKiB3aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlOgorICAgICAgICBDb3B5IG92ZXIg
V0tUZXh0Q2hlY2tlci5oLgorCiAyMDExLTA0LTA1ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxl
LmNvbT4KIAogICAgICAgICBEaXNhYmxlIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIG9uIFdpbmRv
d3MgbWFjaGluZXMgdGhhdCBkb24ndCBzdXBwb3J0IGl0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQVBJT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0FQ
SU9iamVjdC5oCShyZXZpc2lvbiA4Mjk0MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUElP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw4IEBAIHB1YmxpYzoKIAogICAg
ICAgICAvLyBQbGF0Zm9ybSBzcGVjaWZpYwogICAgICAgICBUeXBlVmlldywKLSAgICAgICAgVHlw
ZUVkaXRDb21tYW5kUHJveHkKKyAgICAgICAgVHlwZUVkaXRDb21tYW5kUHJveHksCisgICAgICAg
IFR5cGVUZXh0Q2hlY2tlcgogICAgIH07CiAKICAgICB2aXJ0dWFsIH5BUElPYmplY3QoKQpJbmRl
eDogU291cmNlL1dlYktpdDIvU2hhcmVkL0FQSS9jL3dpbi9XS0Jhc2VXaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQVBJL2Mvd2luL1dLQmFzZVdpbi5oCShyZXZpc2lv
biA4Mjk0MykKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9BUEkvYy93aW4vV0tCYXNlV2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDUgKzMyLDYgQEAKIAogdHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
T3BhcXVlV0tWaWV3KiBXS1ZpZXdSZWY7CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS0Vk
aXRDb21tYW5kKiBXS0VkaXRDb21tYW5kUmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVl
V0tUZXh0Q2hlY2tlciogV0tUZXh0Q2hlY2tlclJlZjsKIAogI2VuZGlmIC8qIFdLQmFzZVdpbl9o
ICovCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIuaAkocmV2aXNpb24g
ODI5NDMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNiArNTAsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBpc1Nt
YXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZCgpOwogICAgIHN0YXRpYyB2b2lkIHNldFNtYXJ0SW5zZXJ0
RGVsZXRlRW5hYmxlZChib29sKTsKKyNlbGlmIFBMQVRGT1JNKFdJTikKKyAgICBzdGF0aWMgdm9p
ZCBjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCk7CisgICAg
c3RhdGljIHZvaWQgZ3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKICNl
bmRpZgogCiAgICAgc3RhdGljIGludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZygpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0FQSUNhc3RXaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLQVBJQ2FzdFdp
bi5oCShyZXZpc2lvbiA4Mjk0MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93
aW4vV0tBUElDYXN0V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDExIEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJWaWV3OwogY2xhc3MgV2ViRWRpdENvbW1hbmRQcm94
eTsKK2NsYXNzIFdlYlRleHRDaGVja2VyOwogCiBXS19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVm
LCBXZWJWaWV3KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLRWRpdENvbW1hbmRSZWYsIFdlYkVkaXRD
b21tYW5kUHJveHkpCitXS19BRERfQVBJX01BUFBJTkcoV0tUZXh0Q2hlY2tlclJlZiwgV2ViVGV4
dENoZWNrZXIpCiAKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dp
bi9XS1RleHRDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS1RleHRDaGVja2VyLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXS1RleHRDaGVja2VyLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRl
ICJXZWJUZXh0Q2hlY2tlci5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitXS1R5cGVJ
RCBXS1RleHRDaGVja2VyR2V0VHlwZUlEKCkKK3sKKyAgICByZXR1cm4gdG9BUEkoQVBJT2JqZWN0
OjpUeXBlVGV4dENoZWNrZXIpOworfQorCit2b2lkIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoY29u
c3QgV0tUZXh0Q2hlY2tlckNsaWVudCogd2tDbGllbnQpCit7CisgICAgaWYgKHdrQ2xpZW50ICYm
IHdrQ2xpZW50LT52ZXJzaW9uKQorICAgICAgICByZXR1cm47CisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5zZXRDbGllbnQod2tDbGllbnQpOworfQorCit2b2lkIFdLVGV4dENoZWNrZXJD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQor
eworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y29udGludW91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZWQpOworfQorCit2b2lkIFdLVGV4dENoZWNrZXJHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQo
ZW5hYmxlZCk7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dL
VGV4dENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0Mvd2luL1dLVGV4dENoZWNrZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS1RleHRDaGVja2VyX2gKKyNkZWZpbmUgV0tU
ZXh0Q2hlY2tlcl9oCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCisjaWZkZWYgX19j
cGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8vIFRleHRDaGVja2VyIENsaWVudAor
dHlwZWRlZiBib29sICgqV0tUZXh0Q2hlY2tlckNvbnRpbm91c1NwZWxsQ2hlY2tpbmdBbGxvd2Vk
KShjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgYm9vbCAoKldLVGV4dENoZWNrZXJD
b250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCkoY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0
eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyU2V0Q29udGlub3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQpKGJvb2wgZW5hYmxlZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIGJvb2wg
KCpXS1RleHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5hYmxlZCkoY29uc3Qgdm9pZCAqY2xpZW50
SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyU2V0R3JhbW1hckNoZWNraW5nRW5h
YmxlZCkoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKKworc3RydWN0IFdL
VGV4dENoZWNrZXJDbGllbnQgeworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb247CisgICAgY29u
c3Qgdm9pZCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xpZW50SW5mbzsKKyAgICBXS1RleHRDaGVja2VyQ29udGlub3VzU3BlbGxD
aGVja2luZ0FsbG93ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51b3VzU3Bl
bGxDaGVja2luZ0FsbG93ZWQ7CisgICAgV0tUZXh0Q2hlY2tlckNvbnRpbm91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkOworICAgIFdLVGV4dENoZWNrZXJTZXRDb250aW5vdXNTcGVsbENoZWNraW5n
RW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZDsKKyAgICBXS1RleHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5hYmxlZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyQ2hlY2tpbmdFbmFibGVkOwor
ICAgIFdLVGV4dENoZWNrZXJTZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQ7Cit9OwordHlwZWRl
ZiBzdHJ1Y3QgV0tUZXh0Q2hlY2tlckNsaWVudCBXS1RleHRDaGVja2VyQ2xpZW50OworCitXS19F
WFBPUlQgV0tUeXBlSUQgV0tUZXh0Q2hlY2tlckdldFR5cGVJRCgpOworCitXS19FWFBPUlQgdm9p
ZCBXS1RleHRDaGVja2VyU2V0Q2xpZW50KGNvbnN0IFdLVGV4dENoZWNrZXJDbGllbnQqIGNsaWVu
dCk7CisKK1dLX0VYUE9SVCB2b2lkIFdLVGV4dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCk7CitXS19FWFBPUlQgdm9pZCBXS1RleHRDaGVja2Vy
R3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFdLVGV4dENoZWNrZXJfaCAqLwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHAJKHJl
dmlzaW9uIDgyOTQzKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tl
cldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJUZXh0
Q2hlY2tlci5oIgogCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgorI2luY2x1ZGUgIldl
YlRleHRDaGVja2VyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTM3LDI2ICszOCw0OCBAQCBzdGF0aWMgVGV4dENo
ZWNrZXJTdGF0ZSB0ZXh0Q2hlY2tlclN0YXRlCiAKIGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIFRl
eHRDaGVja2VyOjpzdGF0ZSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzdGF0aWMg
Ym9vbCBkaWRJbml0aWFsaXplU3RhdGU7CisgICAgaWYgKGRpZEluaXRpYWxpemVTdGF0ZSkKKyAg
ICAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7CisKKyAgICBXZWJUZXh0Q2hlY2tlckNsaWVu
dCYgY2xpZW50ID0gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKTsKKyAgICB0ZXh0
Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmNv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkID0gIGNsaWVudC5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7
CisKKyAgICBkaWRJbml0aWFsaXplU3RhdGUgPSB0cnVlOwogCiAgICAgcmV0dXJuIHRleHRDaGVj
a2VyU3RhdGU7CiB9CiAgIAogYm9vbCBUZXh0Q2hlY2tlcjo6aXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0FsbG93ZWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY29udGlu
dW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnNldENv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKHN0YXRlKCkuaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQpCisgICAgICAgIHJldHVybjsKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQ7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpOwog
fQogCiB2b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYg
KHN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09IGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOworICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQpOworfQorCit2b2lkIFRleHRDaGVja2VyOjpjb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQoreworICAgIHRleHRD
aGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBlbmFibGVkOwor
fQorCit2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2Vk
KGJvb2wgZW5hYmxlZCkKK3sKKyAgICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCA9IGVuYWJsZWQ7CiB9CiAKIGludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxs
RG9jdW1lbnRUYWcoKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0
Q2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9X
ZWJUZXh0Q2hlY2tlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3Mvd2luL1dlYlRleHRDaGVja2VyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJUZXh0Q2hlY2tl
ci5oIgorCisjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKKyNpbmNsdWRlICJXZWJDb250ZXh0Lmgi
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViVGV4
dENoZWNrZXIqIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKQoreworICAgIHN0YXRpYyBXZWJUZXh0
Q2hlY2tlciogdGV4dENoZWNrZXIgPSBhZG9wdFJlZihuZXcgV2ViVGV4dENoZWNrZXIpLmxlYWtS
ZWYoKTsKKyAgICByZXR1cm4gdGV4dENoZWNrZXI7Cit9CisKK1dlYlRleHRDaGVja2VyOjpXZWJU
ZXh0Q2hlY2tlcigpCit7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXI6OnNldENsaWVudChjb25z
dCBXS1RleHRDaGVja2VyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9jbGllbnQuaW5pdGlhbGl6
ZShjbGllbnQpOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVTdGF0ZUZvckFsbFdlYlByb2Nlc3Nl
cygpCit7CisgICAgY29uc3QgVmVjdG9yPFdlYkNvbnRleHQqPiYgY29udGV4dHMgPSBXZWJDb250
ZXh0OjphbGxDb250ZXh0cygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udGV4dHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgV2ViUHJvY2Vzc1Byb3h5KiB3ZWJQcm9jZXNzID0gY29u
dGV4dHNbaV0tPnByb2Nlc3MoKTsKKyAgICAgICAgaWYgKCF3ZWJQcm9jZXNzKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIHdlYlByb2Nlc3MtPnVwZGF0ZVRleHRDaGVja2VyU3RhdGUo
KTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXI6OmNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCit7CisgICAgVGV4dENoZWNrZXI6
OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKKyAg
ICB1cGRhdGVTdGF0ZUZvckFsbFdlYlByb2Nlc3NlcygpOworfQorCit2b2lkIFdlYlRleHRDaGVj
a2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKK3sK
KyAgICBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFi
bGVkKTsKKyAgICB1cGRhdGVTdGF0ZUZvckFsbFdlYlByb2Nlc3NlcygpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4
dENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YlRleHRDaGVja2VyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
d2luL1dlYlRleHRDaGVja2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlRleHRDaGVja2VyX2gKKyNkZWZpbmUgV2ViVGV4dENoZWNrZXJf
aAorCisjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgor
I2luY2x1ZGUgIldlYlRleHRDaGVja2VyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlRleHRDaGVja2VyIDogcHVibGlj
IEFQSU9iamVjdCB7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5
cGVUZXh0Q2hlY2tlcjsKKworICAgIHN0YXRpYyBXZWJUZXh0Q2hlY2tlciogc2hhcmVkKCk7CisK
KyAgICB2b2lkIHNldENsaWVudChjb25zdCBXS1RleHRDaGVja2VyQ2xpZW50Kik7CisgICAgV2Vi
VGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CisKKyAgICB2
b2lkIGNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKKyAg
ICB2b2lkIGdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCk7CisKK3ByaXZh
dGU6CisgICAgV2ViVGV4dENoZWNrZXIoKTsKKworICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29u
c3QgeyByZXR1cm4gQVBJVHlwZTsgfQorCisgICAgV2ViVGV4dENoZWNrZXJDbGllbnQgbV9jbGll
bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlRleHRDaGVj
a2VyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJD
bGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
VGV4dENoZWNrZXJDbGllbnQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
VGV4dENoZWNrZXJDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Jvb2wgV2ViVGV4
dENoZWNrZXJDbGllbnQ6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpCit7CisgICAg
aWYgKCFtX2NsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX2NsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2lu
Z0FsbG93ZWQobV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK2Jvb2wgV2ViVGV4dENoZWNrZXJD
bGllbnQ6OmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCit7CisgICAgaWYgKCFtX2Ns
aWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiBtX2NsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
bV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OnNl
dENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgaWYg
KCFtX2NsaWVudC5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY2xpZW50LnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChl
bmFibGVkLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKworYm9vbCBXZWJUZXh0Q2hlY2tlckNs
aWVudDo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZCgpCit7CisgICAgaWYgKCFtX2NsaWVudC5ncmFt
bWFyQ2hlY2tpbmdFbmFibGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4g
bV9jbGllbnQuZ3JhbW1hckNoZWNraW5nRW5hYmxlZChtX2NsaWVudC5jbGllbnRJbmZvKTsKK30K
Kwordm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChi
b29sIGVuYWJsZWQpCit7CisgICAgaWYgKCFtX2NsaWVudC5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5zZXRHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKGVuYWJsZWQsIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNr
ZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YlRleHRDaGVja2VyQ2xpZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRleHRDaGVja2VyQ2xpZW50X2gKKyNkZWZp
bmUgV2ViVGV4dENoZWNrZXJDbGllbnRfaAorCisjaW5jbHVkZSAiQVBJQ2xpZW50LmgiCisjaW5j
bHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYlRleHRDaGVja2VyQ2xpZW50IDogcHVibGljIEFQSUNs
aWVudDxXS1RleHRDaGVja2VyQ2xpZW50PiB7CitwdWJsaWM6CisgICAgYm9vbCBjb250aW51b3Vz
U3BlbGxDaGVja2luZ0FsbG93ZWQoKTsKKyAgICBib29sIGNvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpOworICAgIHZvaWQgc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJv
b2wpOworICAgIGJvb2wgZ3JhbW1hckNoZWNraW5nRW5hYmxlZCgpOworICAgIHZvaWQgc2V0R3Jh
bW1hckNoZWNraW5nRW5hYmxlZChib29sKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gV2ViVGV4dENoZWNrZXJDbGllbnRfaApJbmRleDogU291cmNlL1dlYktpdDIv
d2luL1dlYktpdDIudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJL
aXQyLnZjcHJvagkocmV2aXNpb24gODI5NDMpCisrKyBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0
Mi52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3NjcsMTUgKzI3NjcsMTUgQEAKIAkJCQk+CiAJ
CQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXFdlYklj
b25EYXRhYmFzZUNsaWVudC5jcHAiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2Vi
SWNvbkRhdGFiYXNlLm1lc3NhZ2VzLmluIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9j
ZXNzXFdlYkljb25EYXRhYmFzZS5tZXNzYWdlcy5pbiIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJ
UHJvY2Vzc1xXZWJJY29uRGF0YWJhc2VDbGllbnQuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQpAQCAtMzI0OCw2ICszMjQ4LDE0IEBACiAJCQkJCQkJPgogCQkJCQkJPC9GaWxlPgogCQkJ
CQkJPEZpbGUKKwkJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tU
ZXh0Q2hlY2tlci5jcHAiCisJCQkJCQkJPgorCQkJCQkJPC9GaWxlPgorCQkJCQkJPEZpbGUKKwkJ
CQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tUZXh0Q2hlY2tlci5o
IgorCQkJCQkJCT4KKwkJCQkJCTwvRmlsZT4KKwkJCQkJCTxGaWxlCiAJCQkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdLVmlldy5jcHAiCiAJCQkJCQkJPgogCQkJCQkJ
PC9GaWxlPgpAQCAtMzQxOCw2ICszNDI2LDIyIEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJ
PEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3Ncd2luXFdlYlRleHRDaGVja2Vy
LmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXFVJUHJvY2Vzc1x3aW5cV2ViVGV4dENoZWNrZXIuaCIKKwkJCQkJPgorCQkJCTwvRmlsZT4K
KwkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1x3aW5cV2ViVGV4dENo
ZWNrZXJDbGllbnQuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJl
bGF0aXZlUGF0aD0iLi5cVUlQcm9jZXNzXHdpblxXZWJUZXh0Q2hlY2tlckNsaWVudC5oIgorCQkJ
CQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cVUlQcm9j
ZXNzXHdpblxXZWJVbmRvQ2xpZW50LmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyR2VuZXJhdGVkLm1ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvd2luL1dlYktpdDJHZW5lcmF0ZWQubWFrZQkocmV2aXNpb24gODI5NDMpCisr
KyBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlCSh3b3JraW5nIGNvcHkp
CkBAIC03NSw2ICs3NSw3IEBAIGFsbDoKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQ
SVxDXFdLUHJvdGVjdGlvblNwYWNlVHlwZXMuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGlu
Y2x1ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLUmVz
b3VyY2VDYWNoZU1hbmFnZXIuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2Vi
S2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXHdpblxXS0NvbnRleHRQ
cml2YXRlV2luLmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCisg
ICAgeGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tUZXh0Q2hlY2tlci5oIiAi
JUNvbmZpZ3VyYXRpb25CdWlsZERpciVcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9k
ICIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdLVmlldy5oIiAiJUNvbmZpZ3VyYXRpb25CdWlsZERp
ciVcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENc
d2luXFdLVmlld1ByaXZhdGUuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2Vi
S2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxjcHBcV0tSZXRhaW5QdHIu
aCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88468</attachid>
            <date>2011-04-06 10:57:00 -0700</date>
            <delta_ts>2011-04-06 12:59:28 -0700</delta_ts>
            <desc>Patch (Part 2)</desc>
            <filename>spellingGrammarWindowsOpensourcePart2.patch</filename>
            <type>text/plain</type>
            <size>4774</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMDY3KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDQtMDYgIEplc3NpZSBC
ZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBJbXBsZW1lbnQgVGV4dENoZWNrZXIgb24gV2lu
ZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4
NjIKKworICAgICAgICBQYXJ0IDI6IEltcGxlbWVudCB1bmlxdWVTcGVsbERvY3VtZW50VGFnIGFu
ZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9D
L3dpbi9XS1RleHRDaGVja2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tl
cldpbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3Vt
ZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVu
dFdpdGhUYWcpOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tlckNsaWVudDo6dW5pcXVlU3BlbGxE
b2N1bWVudFRhZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlRleHRDaGVja2VyQ2xpZW50OjpjbG9z
ZVNwZWxsRG9jdW1lbnRXaXRoVGFnKToKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlRleHRD
aGVja2VyQ2xpZW50Lmg6CisKIDIwMTEtMDQtMDYgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5o
CShyZXZpc2lvbiA4MzA1MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4v
V0tUZXh0Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw4IEBAIHR5cGVkZWYg
Ym9vbCAoKldLVGV4dENoZWNrZXJDb250aW5vdXNTcGUKIHR5cGVkZWYgdm9pZCAoKldLVGV4dENo
ZWNrZXJTZXRDb250aW5vdXNTcGVsbENoZWNraW5nRW5hYmxlZCkoYm9vbCBlbmFibGVkLCBjb25z
dCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYgYm9vbCAoKldLVGV4dENoZWNrZXJHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKShjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYgdm9pZCAo
KldLVGV4dENoZWNrZXJTZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKShib29sIGVuYWJsZWQsIGNv
bnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB1aW50NjRfdCAoKldLVGV4dENoZWNrZXJV
bmlxdWVTcGVsbERvY3VtZW50VGFnKShjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYg
dm9pZCAoKldLVGV4dENoZWNrZXJDbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKSh1aW50NjRfdCB0
YWcsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwogCiBzdHJ1Y3QgV0tUZXh0Q2hlY2tlckNsaWVu
dCB7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjsKQEAgLTQ3LDYgKzQ5LDggQEAgc3RydWN0
IFdLVGV4dENoZWNrZXJDbGllbnQgewogICAgIFdLVGV4dENoZWNrZXJTZXRDb250aW5vdXNTcGVs
bENoZWNraW5nRW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZDsKICAgICBXS1RleHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5h
YmxlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyQ2hlY2tpbmdF
bmFibGVkOwogICAgIFdLVGV4dENoZWNrZXJTZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQ7Cisg
ICAgV0tUZXh0Q2hlY2tlclVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdW5pcXVlU3BlbGxEb2N1bWVudFRhZzsKKyAgICBXS1RleHRDaGVj
a2VyQ2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnOwogfTsKIHR5cGVkZWYgc3RydWN0IFdLVGV4
dENoZWNrZXJDbGllbnQgV0tUZXh0Q2hlY2tlckNsaWVudDsKIApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHAJKHJldmlzaW9uIDgzMDUy
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg0LDEzICs4NCwxMiBAQCB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFy
Q2hlY2tpbmdFbmFibGVkCiAKIGludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1l
bnRUYWcoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVu
dFRhZygpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFn
KGludDY0X3QpCit2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGlu
dDY0X3QgdGFnKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CiB9CiAK
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFn
cmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVu
Z3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHAJKHJldmlzaW9uIDgz
MDUyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDQgKzY4LDIwIEBAIHZvaWQgV2ViVGV4dENoZWNr
ZXJDbGllbnQ6OnNldEdyYW1tYXJDaGUKICAgICBtX2NsaWVudC5zZXRHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKGVuYWJsZWQsIG1fY2xpZW50LmNsaWVudEluZm8pOwogfQogCit1aW50NjRfdCBXZWJU
ZXh0Q2hlY2tlckNsaWVudDo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZygpCit7CisgICAgaWYgKCFt
X2NsaWVudC51bmlxdWVTcGVsbERvY3VtZW50VGFnKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBtX2NsaWVudC51bmlxdWVTcGVsbERvY3VtZW50VGFnKG1fY2xpZW50LmNsaWVudElu
Zm8pOworfQorCit2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjpjbG9zZVNwZWxsRG9jdW1lbnRX
aXRoVGFnKHVpbnQ2NF90IHRhZykKK3sKKyAgICBpZiAoIW1fY2xpZW50LmNsb3NlU3BlbGxEb2N1
bWVudFdpdGhUYWcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LmNsb3NlU3BlbGxE
b2N1bWVudFdpdGhUYWcodGFnLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRD
aGVja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJUZXh0Q2hlY2tlckNsaWVudC5oCShyZXZpc2lvbiA4MzA1MikKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzksNiArMzksOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoYm9vbCk7CiAgICAgYm9vbCBncmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CiAg
ICAgdm9pZCBzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wpOworICAgIHVpbnQ2NF90IHVu
aXF1ZVNwZWxsRG9jdW1lbnRUYWcoKTsKKyAgICB2b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhU
YWcodWludDY0X3QpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88552</attachid>
            <date>2011-04-06 18:02:46 -0700</date>
            <delta_ts>2011-04-07 08:12:33 -0700</delta_ts>
            <desc>Patch (Part 3)</desc>
            <filename>spellingGrammarWindowsOpensourcePart3.patch</filename>
            <type>text/plain</type>
            <size>14541</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMTI1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMDQtMDYgIEplc3NpZSBC
ZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBJbXBsZW1lbnQgVGV4dENoZWNrZXIgb24gV2lu
ZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4
NjIKKyAKKyAgICAgICAgUGFydCAzOiBJbXBsZW1lbnQgY2hlY2tTcGVsbGluZ09mU3RyaW5nCisK
KyAgICAgICAgSW4gV2ViQ29yZSwgY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaXMgb25seSBkZWZpbmVk
IGFuZCB1c2VkIG9uIHBsYXRmb3JtcyB3aGVyZQorICAgICAgICBXVEZfVVNFX1VOSUZJRURfVEVY
VF9DSEVDS0lORyBpcyBkZWZpbmVkICh3aGljaCByaWdodCBub3cgaXMgb25seSBub24tTGVvcGFy
ZCBhbmQgbm9uLVRpZ2VyCisgICAgICAgIE1hYyBidWlsZHMpLgorIAorICAgICAgICBPbiBvdGhl
ciBwbGF0Zm9ybXMsIGNoZWNrU3BlbGxpbmdPZlN0cmluZyBhbmQgY2hlY2tHcmFtbWFyT2ZTdHJp
bmcgKGNvbWluZyBpbiBhIHNlcGFyYXRlCisgICAgICAgIHBhdGNoIGluIGFuIGF0dGVtcHQgdG8g
a2VlcCB0aGluZ3MgZWFzaWVyIHRvIHJldmlldykgYXJlIHVzZWQuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvVGV4
dENoZWNrZXIuaDoKKyAgICAgICAgU3Vycm91bmQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGggYnkgI2lm
IFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpIGFuZCBhZGQKKyAgICAgICAgY2hlY2tTcGVsbGlu
Z09mU3RyaW5nLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAg
ICBTdXJyb3VuZCB0aGlzIGJ5ICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAg
ICBDYWxsIHRocm91Z2ggdG8gdGhlIGNsaWVudC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoK
KyAgICAgICAgU3Vycm91bmQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGggYnkgI2lmIFVTRShVTklGSUVE
X1RFWFRfQ0hFQ0tJTkcpIGFuZCBhZGQKKyAgICAgICAgY2hlY2tTcGVsbGluZ09mU3RyaW5nLgor
CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICBDYWxs
IHRocm91Z2ggdG8gdGhlIFdlYlRleHRDaGVja2VyQ2xpZW50LgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvVGV4dENoZWNrZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpj
aGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIFN1cnJvdW5kIHRoaXMgYnkgI2lmIFVTRShV
TklGSUVEX1RFWFRfQ0hFQ0tJTkcpIGZvciBjbGFyaXR5LgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgQWRkIGEgY2FsbCB0byBu
b3RJbXBsZW1lbnRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgor
ICAgICAgICBEaXR0bywgYW5kIHJlbW92ZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGNoZWNrVGV4
dE9mUGFyYWdyYXBoLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToK
KyAgICAgICAgRGl0dG8uCisKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2Vy
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNrZXJDbGllbnQ6OmNoZWNr
U3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tl
ckNsaWVudC5oOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyk6CisgICAgICAgIFNlbmQgYSBzeW5jIG1lc3NhZ2UgdG8gdGhlIFVJIFBy
b2Nlc3MgKHNpbWlsYXIgdG8gdGhlIHN5bmMgbWVzc2FnZSB1c2VkIGZvcgorICAgICAgICBjaGVj
a1RleHRPZlBhcmFncmFwaCkuCisKIDIwMTEtMDQtMDYgIFNpZGRoYXJ0aCBNYXRodXIgIDxzaWRk
aGFydGgubWF0aHVyQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQ
b3VsYWluLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgJKHJldmlz
aW9uIDgzMTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbnQ2
NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoKTsKICAgICBzdGF0aWMgdm9pZCBjbG9zZVNwZWxs
RG9jdW1lbnRXaXRoVGFnKGludDY0X3QpOwotCisjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lO
RykKICAgICBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4
dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CisjZW5kaWYKKyAgICBzdGF0
aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBj
b25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCk7CiAgICAgc3RhdGljIHZvaWQgdXBk
YXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRX
b3JkKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
Y29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0
YWlsJik7CiAgICAgc3RhdGljIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERv
Y3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVj
dG9yPFN0cmluZz4mIGd1ZXNzZXMpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDgzMTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNjEsMTEgKzIzNjEsMjAg
QEAgaW50NjRfdCBXZWJQYWdlUHJveHk6OnNwZWxsRG9jdW1lbnRUYWcoKQogICAgIHJldHVybiBt
X3NwZWxsRG9jdW1lbnRUYWc7CiB9CiAKKyNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQor
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgU3RyaW5nJiB0
ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYg
cmVzdWx0cykKIHsKICAgICByZXN1bHRzID0gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKHNwZWxsRG9jdW1lbnRUYWcoKSwgdGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCks
IGNoZWNraW5nVHlwZXMpOwogfQogCisjZW5kaWYKKwordm9pZCBXZWJQYWdlUHJveHk6OmNoZWNr
U3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5n
TG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQoreworICAgIFRleHRDaGVja2Vy
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZygpLCB0ZXh0LmNoYXJhY3Rl
cnMoKSwgdGV4dC5sZW5ndGgoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5n
dGgpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVs
bGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewogICAgIFRleHRDaGVja2Vy
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDgzMTI0
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MzUsNyArNjM1LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBTcGVsbGluZyBhbmQg
Z3JhbW1hci4KICAgICBpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcoKTsKKyNpZiBVU0UoVU5JRklF
RF9URVhUX0NIRUNLSU5HKQogICAgIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgU3Ry
aW5nJiB0ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8V2ViQ29yZTo6VGV4dENo
ZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CisjZW5kaWYKKyAgICB2b2lkIGNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24s
IGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7CiAgICAgdm9p
ZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRHcmFt
bWFyUGhyYXNlLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CiAgICAgdm9pZCBnZXRH
dWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwg
VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiA4MzEyNCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTE3Nyw3ICsxNzcsMTAgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAg
ICBSZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUodWludDY0X3QgZ2VvbG9jYXRp
b25JRCwgdWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJpbmcgb3JpZ2luSWRlbnRpZmllcikKIAog
ICAgICMgU3BlbGxpbmcgYW5kIGdyYW1tYXIgbWVzc2FnZXMKKyNpZiBVU0UoVU5JRklFRF9URVhU
X0NIRUNLSU5HKSAgCiAgICAgQ2hlY2tUZXh0T2ZQYXJhZ3JhcGgoV1RGOjpTdHJpbmcgdGV4dCwg
dWludDY0X3QgY2hlY2tpbmdUeXBlcykgLT4gKFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IHJlc3VsdHMpCisjZW5kaWYKKyAgICBDaGVja1NwZWxsaW5nT2ZTdHJpbmcoV1RGOjpT
dHJpbmcgdGV4dCkgLT4gKGludDMyX3QgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCBtaXNz
cGVsbGluZ0xlbmd0aCkKICAgICBVcGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKFdU
Rjo6U3RyaW5nIG1pc3NwZWxsZWRXb3JkKQogICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyhXVEY6OlN0cmluZyBiYWRHcmFtbWFyUGhyYXNlLCBXZWJDb3JlOjpHcmFtbWFyRGV0
YWlsIGdyYW1tYXJEZXRhaWwpCiAgICAgR2V0R3Vlc3Nlc0ZvcldvcmQoV1RGOjpTdHJpbmcgd29y
ZCwgV1RGOjpTdHJpbmcgY29udGV4dCkgLT4gKFZlY3RvcjxXVEY6OlN0cmluZz4gZ3Vlc3NlcykK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0
Q2hlY2tlci5oCShyZXZpc2lvbiA4MzEyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBA
IHR5cGVkZWYgYm9vbCAoKldLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2sKIHR5cGVkZWYgdm9pZCAo
KldLVGV4dENoZWNrZXJTZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKShib29sIGVuYWJsZWQsIGNv
bnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlwZWRlZiB1aW50NjRfdCAoKldLVGV4dENoZWNrZXJV
bmlxdWVTcGVsbERvY3VtZW50VGFnKShjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYg
dm9pZCAoKldLVGV4dENoZWNrZXJDbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKSh1aW50NjRfdCB0
YWcsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tl
ckNoZWNrU3BlbGxpbmdPZlN0cmluZykodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBp
bnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiAKIHN0cnVjdCBXS1RleHRDaGVja2VyQ2xpZW50IHsK
ICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOwpAQCAtNTEsNiArNTIsNyBAQCBzdHJ1Y3QgV0tU
ZXh0Q2hlY2tlckNsaWVudCB7CiAgICAgV0tUZXh0Q2hlY2tlclNldEdyYW1tYXJDaGVja2luZ0Vu
YWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0R3JhbW1hckNoZWNraW5n
RW5hYmxlZDsKICAgICBXS1RleHRDaGVja2VyVW5pcXVlU3BlbGxEb2N1bWVudFRhZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVTcGVsbERvY3VtZW50VGFnOwogICAg
IFdLVGV4dENoZWNrZXJDbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWc7CisgICAgV0tUZXh0Q2hl
Y2tlckNoZWNrU3BlbGxpbmdPZlN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hlY2tTcGVsbGluZ09mU3RyaW5nOwogfTsKIHR5cGVkZWYgc3RydWN0IFdLVGV4dENo
ZWNrZXJDbGllbnQgV0tUZXh0Q2hlY2tlckNsaWVudDsKIApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAJKHJldmlzaW9uIDgzMTI0KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDEwICs2OSw5IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxE
b2N1bWVudFdpdGgKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1WZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hl
Y2tpbmdUeXBlcykKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2
NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90JiwgaW50MzJfdCYpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2lu
Z1Jlc3VsdD4oKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhN
aXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCShyZXZpc2lvbiA4
MzEyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIlRleHRDaGVja2VyLmgi
CiAKICNpbXBvcnQgIlRleHRDaGVja2VyU3RhdGUuaCIKKyNpbXBvcnQgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmbmRlZiBCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQKQEAgLTIwNSw2ICsyMDYsOCBAQCB2b2lkIFRleHRDaGVja2VyOjpj
bG9zZVNwZWxsRG9jdW1lbnRXaXRoCiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWc6dGFnXTsKIH0KIAorI2lmIFVTRShVTklG
SUVEX1RFWFRfQ0hFQ0tJTkcpCisKIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVj
a2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKQogewogICAg
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CkBAIC0yOTIsNiArMjk1LDEzIEBA
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjoKICAgICByZXR1cm4gcmVz
dWx0czsKIH0KIAorI2VuZGlmCisKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90JiwgaW50MzJfdCYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3Jk
KQogewogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVTcGVs
bGluZ1BhbmVsV2l0aE1pc3NwZWxsZWRXb3JkOm1pc3NwZWxsZWRXb3JkXTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UZXh0Q2hlY2tlclF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAJKHJldmlzaW9uIDgz
MTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MCwxMCArNzAsOSBAQCB2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNw
ZWxsRG9jdW1lbnRXaXRoCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIHVpbnQ2NF90
IGNoZWNraW5nVHlwZXMpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmco
aW50NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdSZXN1bHQ+KCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwCShyZXZp
c2lvbiA4MzEyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMCArOTIsOSBAQCB2b2lkIFRleHRDaGVja2Vy
OjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoCiAgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5j
bGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CiB9CiAKLVZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50NjRf
dCBjaGVja2luZ1R5cGVzKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5n
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxl
bmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdM
ZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVmVjdG9yPFdlYkNv
cmU6OlRleHRDaGVja2luZ1Jlc3VsdD4oKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmco
dGV4dCwgbGVuZ3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwog
fQogCiB2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3Jk
KGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcAkocmV2aXNpb24g
ODMxMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xp
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldlYlRleHRDaGVja2VyQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJXS0FQ
SUNhc3QuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGJvb2wgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nQWxsb3dlZCgpCkBAIC04NCw0ICs4NywxMiBAQCB2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50
OjpjbG9zZVNwZWxsRG9jCiAgICAgbV9jbGllbnQuY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh0
YWcsIG1fY2xpZW50LmNsaWVudEluZm8pOwogfQogCit2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHRleHQs
IGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3Ro
KQoreworICAgIGlmICghbV9jbGllbnQuY2hlY2tTcGVsbGluZ09mU3RyaW5nKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NsaWVudC5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodGFnLCB0b0FQSSh0
ZXh0LmltcGwoKSksICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgsIG1f
Y2xpZW50LmNsaWVudEluZm8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50
LmgJKHJldmlzaW9uIDgzMTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJU
ZXh0Q2hlY2tlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
bmNsdWRlICJBUElDbGllbnQuaCIKICNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewpAQCAtNDEsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKGJvb2wpOwogICAgIHVpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWco
KTsKICAgICB2b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodWludDY0X3QpOworICAgIHZv
aWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0
LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0
aCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAJKHJldmlzaW9uIDgzMTI0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsOSAr
Mzk4LDExIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpsZWFybldvcmQoY29uc3QgU3QKICAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TGVhcm5Xb3JkKHdvcmQpKTsKIH0K
IAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hh
ciosIGludCwgaW50KiwgaW50KikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdM
b2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlIGlmIHdlIHdvdWxkbid0IGhhdmUgdG8g
Y29weSB0aGUgdGV4dCBoZXJlLgorICAgIG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6Q2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZyh0ZXh0LCBsZW5ndGgpKSwKKyAg
ICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hlY2tTcGVsbGluZ09mU3RyaW5nOjpSZXBs
eShzdGF0aWNfY2FzdDxpbnQzMl90PigqbWlzc3BlbGxpbmdMb2NhdGlvbiksIHN0YXRpY19jYXN0
PGludDMyX3Q+KCptaXNzcGVsbGluZ0xlbmd0aCkpKTsKIH0KIAogU3RyaW5nIFdlYkVkaXRvckNs
aWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3Ry
aW5nJikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88640</attachid>
            <date>2011-04-07 08:12:33 -0700</date>
            <delta_ts>2011-04-07 11:06:33 -0700</delta_ts>
            <desc>Patch (Part 3) Take 2 - attempt to fix Qt build</desc>
            <filename>spellingGrammarWindowsOpensourcePart3Take2.patch</filename>
            <type>text/plain</type>
            <size>14634</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMTI1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTggQEAKKzIwMTEtMDQtMDYgIEplc3NpZSBC
ZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBJbXBsZW1lbnQgVGV4dENoZWNrZXIgb24gV2lu
ZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4
NjIKKyAKKyAgICAgICAgUGFydCAzOiBJbXBsZW1lbnQgY2hlY2tTcGVsbGluZ09mU3RyaW5nCisK
KyAgICAgICAgSW4gV2ViQ29yZSwgY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaXMgb25seSBkZWZpbmVk
IGFuZCB1c2VkIG9uIHBsYXRmb3JtcyB3aGVyZQorICAgICAgICBXVEZfVVNFX1VOSUZJRURfVEVY
VF9DSEVDS0lORyBpcyBkZWZpbmVkICh3aGljaCByaWdodCBub3cgaXMgb25seSBub24tTGVvcGFy
ZCBhbmQgbm9uLVRpZ2VyCisgICAgICAgIE1hYyBidWlsZHMpLgorIAorICAgICAgICBPbiBvdGhl
ciBwbGF0Zm9ybXMsIGNoZWNrU3BlbGxpbmdPZlN0cmluZyBhbmQgY2hlY2tHcmFtbWFyT2ZTdHJp
bmcgKGNvbWluZyBpbiBhIHNlcGFyYXRlCisgICAgICAgIHBhdGNoIGluIGFuIGF0dGVtcHQgdG8g
a2VlcCB0aGluZ3MgZWFzaWVyIHRvIHJldmlldykgYXJlIHVzZWQuCisKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvVGV4
dENoZWNrZXIuaDoKKyAgICAgICAgU3Vycm91bmQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGggYnkgI2lm
IFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpIGFuZCBhZGQKKyAgICAgICAgY2hlY2tTcGVsbGlu
Z09mU3RyaW5nLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAg
ICBTdXJyb3VuZCB0aGlzIGJ5ICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAg
ICBDYWxsIHRocm91Z2ggdG8gdGhlIGNsaWVudC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoK
KyAgICAgICAgU3Vycm91bmQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGggYnkgI2lmIFVTRShVTklGSUVE
X1RFWFRfQ0hFQ0tJTkcpIGFuZCBhZGQKKyAgICAgICAgY2hlY2tTcGVsbGluZ09mU3RyaW5nLgor
CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICBDYWxs
IHRocm91Z2ggdG8gdGhlIFdlYlRleHRDaGVja2VyQ2xpZW50LgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvVGV4dENoZWNrZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpj
aGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgIFN1cnJvdW5kIHRoaXMgYnkgI2lmIFVTRShV
TklGSUVEX1RFWFRfQ0hFQ0tJTkcpIGZvciBjbGFyaXR5LgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgQWRkIGEgY2FsbCB0byBu
b3RJbXBsZW1lbnRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgor
ICAgICAgICBEaXR0bywgYW5kIHJlbW92ZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGNoZWNrVGV4
dE9mUGFyYWdyYXBoLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToK
KyAgICAgICAgRGl0dG8uCisKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2Vy
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNrZXJDbGllbnQ6OmNoZWNr
U3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tl
ckNsaWVudC5oOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyk6CisgICAgICAgIFNlbmQgYSBzeW5jIG1lc3NhZ2UgdG8gdGhlIFVJIFBy
b2Nlc3MgKHNpbWlsYXIgdG8gdGhlIHN5bmMgbWVzc2FnZSB1c2VkIGZvcgorICAgICAgICBjaGVj
a1RleHRPZlBhcmFncmFwaCkuCisKIDIwMTEtMDQtMDYgIFNpZGRoYXJ0aCBNYXRodXIgIDxzaWRk
aGFydGgubWF0aHVyQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCZW5qYW1pbiBQ
b3VsYWluLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgJKHJldmlz
aW9uIDgzMTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDEwIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBpbnQ2
NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoKTsKICAgICBzdGF0aWMgdm9pZCBjbG9zZVNwZWxs
RG9jdW1lbnRXaXRoVGFnKGludDY0X3QpOwotCisjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lO
RykKICAgICBzdGF0aWMgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4
dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcyk7CisjZW5kaWYKKyAgICBzdGF0
aWMgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBj
b25zdCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCk7CiAgICAgc3RhdGljIHZvaWQgdXBk
YXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRX
b3JkKTsKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
Y29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0
YWlsJik7CiAgICAgc3RhdGljIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERv
Y3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVj
dG9yPFN0cmluZz4mIGd1ZXNzZXMpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDgzMTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNjEsMTEgKzIzNjEsMjAg
QEAgaW50NjRfdCBXZWJQYWdlUHJveHk6OnNwZWxsRG9jdW1lbnRUYWcoKQogICAgIHJldHVybiBt
X3NwZWxsRG9jdW1lbnRUYWc7CiB9CiAKKyNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQor
CiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgU3RyaW5nJiB0
ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYg
cmVzdWx0cykKIHsKICAgICByZXN1bHRzID0gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKHNwZWxsRG9jdW1lbnRUYWcoKSwgdGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCks
IGNoZWNraW5nVHlwZXMpOwogfQogCisjZW5kaWYKKwordm9pZCBXZWJQYWdlUHJveHk6OmNoZWNr
U3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5n
TG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQoreworICAgIFRleHRDaGVja2Vy
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZygpLCB0ZXh0LmNoYXJhY3Rl
cnMoKSwgdGV4dC5sZW5ndGgoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5n
dGgpOworfQorCiB2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVs
bGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewogICAgIFRleHRDaGVja2Vy
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDgzMTI0
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MzUsNyArNjM1LDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBTcGVsbGluZyBhbmQg
Z3JhbW1hci4KICAgICBpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcoKTsKKyNpZiBVU0UoVU5JRklF
RF9URVhUX0NIRUNLSU5HKQogICAgIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgU3Ry
aW5nJiB0ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5cGVzLCBWZWN0b3I8V2ViQ29yZTo6VGV4dENo
ZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CisjZW5kaWYKKyAgICB2b2lkIGNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24s
IGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7CiAgICAgdm9p
ZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRHcmFt
bWFyUGhyYXNlLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CiAgICAgdm9pZCBnZXRH
dWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwg
VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiA4MzEyNCkKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTE3Nyw3ICsxNzcsMTAgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAg
ICBSZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUodWludDY0X3QgZ2VvbG9jYXRp
b25JRCwgdWludDY0X3QgZnJhbWVJRCwgV1RGOjpTdHJpbmcgb3JpZ2luSWRlbnRpZmllcikKIAog
ICAgICMgU3BlbGxpbmcgYW5kIGdyYW1tYXIgbWVzc2FnZXMKKyNpZiBVU0UoVU5JRklFRF9URVhU
X0NIRUNLSU5HKSAgCiAgICAgQ2hlY2tUZXh0T2ZQYXJhZ3JhcGgoV1RGOjpTdHJpbmcgdGV4dCwg
dWludDY0X3QgY2hlY2tpbmdUeXBlcykgLT4gKFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IHJlc3VsdHMpCisjZW5kaWYKKyAgICBDaGVja1NwZWxsaW5nT2ZTdHJpbmcoV1RGOjpT
dHJpbmcgdGV4dCkgLT4gKGludDMyX3QgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCBtaXNz
cGVsbGluZ0xlbmd0aCkKICAgICBVcGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKFdU
Rjo6U3RyaW5nIG1pc3NwZWxsZWRXb3JkKQogICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyhXVEY6OlN0cmluZyBiYWRHcmFtbWFyUGhyYXNlLCBXZWJDb3JlOjpHcmFtbWFyRGV0
YWlsIGdyYW1tYXJEZXRhaWwpCiAgICAgR2V0R3Vlc3Nlc0ZvcldvcmQoV1RGOjpTdHJpbmcgd29y
ZCwgV1RGOjpTdHJpbmcgY29udGV4dCkgLT4gKFZlY3RvcjxXVEY6OlN0cmluZz4gZ3Vlc3NlcykK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0
Q2hlY2tlci5oCShyZXZpc2lvbiA4MzEyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBA
IHR5cGVkZWYgYm9vbCAoKldLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2sKIHR5cGVkZWYgdm9pZCAo
KldLVGV4dENoZWNrZXJTZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKShib29sIGVuYWJsZWQsIGNv
bnN0IHZvaWQgKmNsaWVudEluZm8pOwogdHlwZWRlZiB1aW50NjRfdCAoKldLVGV4dENoZWNrZXJV
bmlxdWVTcGVsbERvY3VtZW50VGFnKShjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYg
dm9pZCAoKldLVGV4dENoZWNrZXJDbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKSh1aW50NjRfdCB0
YWcsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tl
ckNoZWNrU3BlbGxpbmdPZlN0cmluZykodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBp
bnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwg
Y29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiAKIHN0cnVjdCBXS1RleHRDaGVja2VyQ2xpZW50IHsK
ICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOwpAQCAtNTEsNiArNTIsNyBAQCBzdHJ1Y3QgV0tU
ZXh0Q2hlY2tlckNsaWVudCB7CiAgICAgV0tUZXh0Q2hlY2tlclNldEdyYW1tYXJDaGVja2luZ0Vu
YWJsZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0R3JhbW1hckNoZWNraW5n
RW5hYmxlZDsKICAgICBXS1RleHRDaGVja2VyVW5pcXVlU3BlbGxEb2N1bWVudFRhZyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlxdWVTcGVsbERvY3VtZW50VGFnOwogICAg
IFdLVGV4dENoZWNrZXJDbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWc7CisgICAgV0tUZXh0Q2hl
Y2tlckNoZWNrU3BlbGxpbmdPZlN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hlY2tTcGVsbGluZ09mU3RyaW5nOwogfTsKIHR5cGVkZWYgc3RydWN0IFdLVGV4dENo
ZWNrZXJDbGllbnQgV0tUZXh0Q2hlY2tlckNsaWVudDsKIApJbmRleDogU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAJKHJldmlzaW9uIDgzMTI0KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDEwICs2OSw5IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxE
b2N1bWVudFdpdGgKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1WZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hl
Y2tpbmdUeXBlcykKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2
NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90JiwgaW50MzJfdCYpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2lu
Z1Jlc3VsdD4oKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhN
aXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQpJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCShyZXZpc2lvbiA4
MzEyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIlRleHRDaGVja2VyLmgi
CiAKICNpbXBvcnQgIlRleHRDaGVja2VyU3RhdGUuaCIKKyNpbXBvcnQgPFdlYkNvcmUvTm90SW1w
bGVtZW50ZWQuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmbmRlZiBCVUlMRElO
R19PTl9TTk9XX0xFT1BBUkQKQEAgLTIwNSw2ICsyMDYsOCBAQCB2b2lkIFRleHRDaGVja2VyOjpj
bG9zZVNwZWxsRG9jdW1lbnRXaXRoCiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENo
ZWNrZXJdIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWc6dGFnXTsKIH0KIAorI2lmIFVTRShVTklG
SUVEX1RFWFRfQ0hFQ0tJTkcpCisKIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVj
a2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKQogewogICAg
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CkBAIC0yOTIsNiArMjk1LDEzIEBA
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjoKICAgICByZXR1cm4gcmVz
dWx0czsKIH0KIAorI2VuZGlmCisKK3ZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90JiwgaW50MzJfdCYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3Jk
KQogewogICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVTcGVs
bGluZ1BhbmVsV2l0aE1pc3NwZWxsZWRXb3JkOm1pc3NwZWxsZWRXb3JkXTsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UZXh0Q2hlY2tlclF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAJKHJldmlzaW9uIDgz
MTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MCwxMCArNzAsOSBAQCB2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNw
ZWxsRG9jdW1lbnRXaXRoCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3Qg
c3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIHVpbnQ2NF90
IGNoZWNraW5nVHlwZXMpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmco
aW50NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hl
Y2tpbmdSZXN1bHQ+KCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwCShyZXZp
c2lvbiA4MzEyNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxMCArOTIsOSBAQCB2b2lkIFRleHRDaGVja2Vy
OjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoCiAgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5j
bGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CiB9CiAKLVZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50NjRf
dCBjaGVja2luZ1R5cGVzKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5n
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxl
bmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdM
ZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVmVjdG9yPFdlYkNv
cmU6OlRleHRDaGVja2luZ1Jlc3VsdD4oKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmco
dGV4dCwgbGVuZ3RoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwog
fQogCiB2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3Jk
KGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcAkocmV2aXNpb24g
ODMxMjQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xp
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldlYlRleHRDaGVja2VyQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJXS0FQ
SUNhc3QuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIGJvb2wgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmNvbnRpbnVvdXNTcGVsbENoZWNr
aW5nQWxsb3dlZCgpCkBAIC04NCw0ICs4NywxMiBAQCB2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50
OjpjbG9zZVNwZWxsRG9jCiAgICAgbV9jbGllbnQuY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh0
YWcsIG1fY2xpZW50LmNsaWVudEluZm8pOwogfQogCit2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHRleHQs
IGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3Ro
KQoreworICAgIGlmICghbV9jbGllbnQuY2hlY2tTcGVsbGluZ09mU3RyaW5nKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NsaWVudC5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodGFnLCB0b0FQSSh0
ZXh0LmltcGwoKSksICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgsIG1f
Y2xpZW50LmNsaWVudEluZm8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50
LmgJKHJldmlzaW9uIDgzMTI0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJU
ZXh0Q2hlY2tlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
bmNsdWRlICJBUElDbGllbnQuaCIKICNpbmNsdWRlICJXS1RleHRDaGVja2VyLmgiCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewpAQCAtNDEsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKGJvb2wpOwogICAgIHVpbnQ2NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWco
KTsKICAgICB2b2lkIGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodWludDY0X3QpOworICAgIHZv
aWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0
LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0
aCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAJKHJldmlzaW9uIDgzMTI0KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsOSAr
Mzk4LDE1IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpsZWFybldvcmQoY29uc3QgU3QKICAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TGVhcm5Xb3JkKHdvcmQpKTsKIH0K
IAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hh
ciosIGludCwgaW50KiwgaW50KikKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdM
b2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIGludDMyX3QgcmVzdWx0TG9jYXRpb24gPSAtMTsKKyAgICBpbnQzMl90IHJlc3VsdExl
bmd0aCA9IDA7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2Ugd291bGRuJ3Qg
aGF2ZSB0byBjb3B5IHRoZSB0ZXh0IGhlcmUuCisgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpDaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nKHRleHQsIGxlbmd0
aCkpLAorICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVja1NwZWxsaW5nT2ZTdHJp
bmc6OlJlcGx5KHJlc3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpKTsKKyAgICAqbWlzc3BlbGxp
bmdMb2NhdGlvbiA9IHJlc3VsdExvY2F0aW9uOworICAgICptaXNzcGVsbGluZ0xlbmd0aCA9IHJl
c3VsdExlbmd0aDsKIH0KIAogU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RT
dWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88719</attachid>
            <date>2011-04-07 15:50:12 -0700</date>
            <delta_ts>2011-04-08 06:17:01 -0700</delta_ts>
            <desc>Patch (Part 4)</desc>
            <filename>spellingGrammarWindowsOpensourcePart4.patch</filename>
            <type>text/plain</type>
            <size>28149</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMjE1KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTEtMDQtMDcgIEplc3NpZSBC
ZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBJbXBsZW1lbnQgVGV4dENoZWNrZXIgb24gV2lu
ZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4
NjIKKworICAgICAgICBQYXJ0IDQ6IEltcGxlbWVudCBjaGVja0dyYW1tYXJPZlN0cmluZy4KKwor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weToKKyAgICAgICAgVGhlIGdlbmVy
YXRlZCBmaWxlcyBzaG91bGQgaW5jbHVkZSBUZXh0Q2hlY2tlckNsaWVudC5oIGZvciBXZWJDb3Jl
OjpHcmFtbWFyRGV0YWlsLgorCisgICAgICAgICogU2hhcmVkL0FQSS9jL3dpbi9XS0Jhc2VXaW4u
aDoKKyAgICAgICAgKiBTaGFyZWQvQVBJT2JqZWN0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL3dpbi9XS0FQSUNhc3RXaW4uaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy93aW4v
V0tHcmFtbWFyRGV0YWlsLmNwcDogQWRkZWQuCisgICAgICAgIChXS0dyYW1tYXJEZXRhaWxHZXRU
eXBlSUQpOgorICAgICAgICAoV0tHcmFtbWFyRGV0YWlsQ3JlYXRlKToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0Mvd2luL1dLR3JhbW1hckRldGFpbC5oOiBBZGRlZC4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oOgorICAgICAgICBBZGQgdGhlIGNoZWNr
R3JhbW1hck9mU3RyaW5nIFdLVGV4dENoZWNrZXJDbGllbnQgZnVuY3Rpb24uCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisK
KyAgICAgICAgKiBVSVByb2Nlc3MvVGV4dENoZWNrZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
d2luL1RleHRDaGVja2VyV2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNo
ZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgQ2FsbCB0aGUgVGV4dENoZWNrZXJDbGllbnQu
CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIENhbGwg
bm90SW1wbGVtZW50ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5t
bToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToK
KyAgICAgICAgRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOgor
ICAgICAgICBEaXR0by4KKworICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViR3JhbW1hckRldGFp
bC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFtbWFyRGV0YWlsOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJHcmFtbWFyRGV0YWlsOjpXZWJHcmFtbWFyRGV0YWlsKToK
KyAgICAgICAgSW5pdGlhbGl6ZSB0aGUgdW5kZXJseWluZyBXZWJDb3JlOjpHcmFtbWFyRGV0YWls
LgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViR3JhbW1hckRldGFpbC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6V2ViR3JhbW1hckRldGFpbDo6Z3JhbW1hckRldGFpbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkdyYW1tYXJEZXRhaWw6OnR5cGUpOgorCisgICAgICAgICogVUlQcm9jZXNz
L3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlRleHRD
aGVja2VyQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIFBvcHVsYXRlIHRo
ZSBWZWN0b3Igb2YgV2ViQ29yZTo6R3JhbW1hckRldGFpbHMgd2l0aCB0aGUgV2ViR3JhbW1hckRl
dGFpbHMuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5oOgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KToKKyAgICAgICAgU2VuZCBhIHN5bmMgbWVzc2FnZSB0byB0aGUgVUkgUHJvY2VzcyAoc2ltaWxh
ciB0byBjaGVja1NwZWxsaW5nT2ZTdHJpbmcgYW5kIGNoZWNrVGV4dE9mUGFyYWdyYXBoKS4KKwor
ICAgICAgICAqIHdpbi9XZWJLaXQyLnZjcHJvajoKKyAgICAgICAgQWRkIFdLR3JhbW1hckRldGFp
bC5oLy5jcHAgYW5kIFdlYkdyYW1tYXJEZXRhaWwuaC8uY3BwLgorICAgICAgICAqIHdpbi9XZWJL
aXQyR2VuZXJhdGVkLm1ha2U6CisgICAgICAgIENvcHkgb3ZlciBXS0dyYW1tYXJEZXRhaWwuaC4K
KwogMjAxMS0wNC0wNyAgIEFtcnV0aCBSYWogIDxhbXJ1dGhyYWpAbW90b3JvbGEuY29tPiBhbmQg
TWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9T
Y3JpcHRzL3dlYmtpdDIvbWVzc2FnZXMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
U2NyaXB0cy93ZWJraXQyL21lc3NhZ2VzLnB5CShyZXZpc2lvbiA4MzE4OSkKKysrIFNvdXJjZS9X
ZWJLaXQyL1NjcmlwdHMvd2Via2l0Mi9tZXNzYWdlcy5weQkod29ya2luZyBjb3B5KQpAQCAtNDMz
LDYgKzQzMyw3IEBAIGRlZiBoZWFkZXJzX2Zvcl90eXBlKHR5cGUpOgogICAgIHNwZWNpYWxfY2Fz
ZXMgPSB7CiAgICAgICAgICdXVEY6OlN0cmluZyc6ICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+JywK
ICAgICAgICAgJ1dlYkNvcmU6OkNvbXBvc2l0aW9uVW5kZXJsaW5lJzogJzxXZWJDb3JlL0VkaXRv
ci5oPicsCisgICAgICAgICdXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJzogJzxXZWJDb3JlL1RleHRD
aGVja2VyQ2xpZW50Lmg+JywKICAgICAgICAgJ1dlYkNvcmU6OktleXByZXNzQ29tbWFuZCc6ICc8
V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+JywKICAgICAgICAgJ1dlYkNvcmU6OlBsdWdpbkluZm8n
OiAnPFdlYkNvcmUvUGx1Z2luRGF0YS5oPicsCiAgICAgICAgICdXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdSZXN1bHQnOiAnPFdlYkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4nLApJbmRleDogU291cmNl
L1dlYktpdDIvU2hhcmVkL0FQSU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9BUElPYmplY3QuaAkocmV2aXNpb24gODMxODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvQVBJT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsOCBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIFBsYXRmb3JtIHNwZWNpZmljCiAgICAgICAgIFR5cGVWaWV3LAogICAg
ICAgICBUeXBlRWRpdENvbW1hbmRQcm94eSwKLSAgICAgICAgVHlwZVRleHRDaGVja2VyCisgICAg
ICAgIFR5cGVUZXh0Q2hlY2tlciwKKyAgICAgICAgVHlwZUdyYW1tYXJEZXRhaWwKICAgICB9Owog
CiAgICAgdmlydHVhbCB+QVBJT2JqZWN0KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9B
UEkvYy93aW4vV0tCYXNlV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVk
L0FQSS9jL3dpbi9XS0Jhc2VXaW4uaAkocmV2aXNpb24gODMxODkpCisrKyBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvQVBJL2Mvd2luL1dLQmFzZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw1ICsz
Myw2IEBACiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1ZpZXcqIFdLVmlld1JlZjsKIHR5
cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZVdLRWRpdENvbW1hbmQqIFdLRWRpdENvbW1hbmRSZWY7
CiB0eXBlZGVmIGNvbnN0IHN0cnVjdCBPcGFxdWVXS1RleHRDaGVja2VyKiBXS1RleHRDaGVja2Vy
UmVmOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgT3BhcXVlV0tHcmFtbWFyRGV0YWlsKiBXS0dyYW1t
YXJEZXRhaWxSZWY7CiAKICNlbmRpZiAvKiBXS0Jhc2VXaW5faCAqLwpJbmRleDogU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgJKHJldmlzaW9uIDgzMTg5KQorKysgU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYx
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVz
dWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKTsKICNlbmRp
ZgogICAgIHN0YXRpYyB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIGludDMyX3QmIG1p
c3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICBzdGF0
aWMgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFy
RGV0YWlsPiYsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1h
ckxlbmd0aCk7CiAgICAgc3RhdGljIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKICAgICBzdGF0aWMgdm9pZCB1cGRh
dGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhy
YXNlLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CiAgICAgc3RhdGljIHZvaWQgZ2V0
R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdv
cmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDgz
MTg5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzNzUsNiArMjM3NSwxMSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2hlY2tT
cGVsbGluZ09mU3RyaW5nCiAgICAgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhz
cGVsbERvY3VtZW50VGFnKCksIHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpLCBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJhZEdyYW1tYXJM
b2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKK3sKKyAgICBUZXh0Q2hlY2tlcjo6
Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZygpLCB0ZXh0LmNoYXJhY3RlcnMo
KSwgdGV4dC5sZW5ndGgoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFk
R3JhbW1hckxlbmd0aCk7Cit9CisKIHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7CiAgICAg
VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxl
ZFdvcmQpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2
aXNpb24gODMxODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzOSw2ICs2MzksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgoY29uc3QgU3RyaW5nJiB0ZXh0LCB1aW50NjRfdCBjaGVja2luZ1R5
cGVzLCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CiAjZW5k
aWYKICAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIGlu
dDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKTsK
KyAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9y
PFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBp
bnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKTsKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7CiAgICAgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFy
UGhyYXNlLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJik7CiAgICAgdm9pZCBnZXRHdWVz
c2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVj
dG9yPFN0cmluZz4mIGd1ZXNzZXMpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCShyZXZpc2lvbiA4MzE4OSkKKysrIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTE4MSw2ICsxODEsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIENo
ZWNrVGV4dE9mUGFyYWdyYXBoKFdURjo6U3RyaW5nIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlw
ZXMpIC0+IChWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzKQogI2Vu
ZGlmCiAgICAgQ2hlY2tTcGVsbGluZ09mU3RyaW5nKFdURjo6U3RyaW5nIHRleHQpIC0+IChpbnQz
Ml90IG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QgbWlzc3BlbGxpbmdMZW5ndGgpCisgICAg
Q2hlY2tHcmFtbWFyT2ZTdHJpbmcoV1RGOjpTdHJpbmcgdGV4dCkgLT4gKFZlY3RvcjxXZWJDb3Jl
OjpHcmFtbWFyRGV0YWlsPiByZXN1bHRzLCBpbnQzMl90IGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50
MzJfdCBiYWRHcmFtbWFyTGVuZ3RoKQogICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxl
ZFdvcmQoV1RGOjpTdHJpbmcgbWlzc3BlbGxlZFdvcmQpCiAgICAgVXBkYXRlU3BlbGxpbmdVSVdp
dGhHcmFtbWFyU3RyaW5nKFdURjo6U3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UsIFdlYkNvcmU6Okdy
YW1tYXJEZXRhaWwgZ3JhbW1hckRldGFpbCkKICAgICBHZXRHdWVzc2VzRm9yV29yZChXVEY6OlN0
cmluZyB3b3JkLCBXVEY6OlN0cmluZyBjb250ZXh0KSAtPiAoVmVjdG9yPFdURjo6U3RyaW5nPiBn
dWVzc2VzKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0FQSUNh
c3RXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2lu
L1dLQVBJQ2FzdFdpbi5oCShyZXZpc2lvbiA4MzE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQy93aW4vV0tBUElDYXN0V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICsz
NSwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYlZpZXc7CiBjbGFzcyBXZWJFZGl0
Q29tbWFuZFByb3h5OwogY2xhc3MgV2ViVGV4dENoZWNrZXI7CitjbGFzcyBXZWJHcmFtbWFyRGV0
YWlsOwogCiBXS19BRERfQVBJX01BUFBJTkcoV0tWaWV3UmVmLCBXZWJWaWV3KQogV0tfQUREX0FQ
SV9NQVBQSU5HKFdLRWRpdENvbW1hbmRSZWYsIFdlYkVkaXRDb21tYW5kUHJveHkpCiBXS19BRERf
QVBJX01BUFBJTkcoV0tUZXh0Q2hlY2tlclJlZiwgV2ViVGV4dENoZWNrZXIpCitXS19BRERfQVBJ
X01BUFBJTkcoV0tHcmFtbWFyRGV0YWlsUmVmLCBXZWJHcmFtbWFyRGV0YWlsKQogCiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tHcmFtbWFyRGV0YWlsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLR3Jh
bW1hckRldGFpbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0Mvd2luL1dLR3JhbW1hckRldGFpbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tHcmFtbWFy
RGV0YWlsLmgiCisKKyNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3Qu
aCIKKyNpbmNsdWRlICJXZWJHcmFtbWFyRGV0YWlsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK1dLVHlwZUlEIFdLR3JhbW1hckRldGFpbEdldFR5cGVJRCgpCit7CisgICAgcmV0dXJu
IHRvQVBJKEFQSU9iamVjdDo6VHlwZUdyYW1tYXJEZXRhaWwpOworfQorCitXS0dyYW1tYXJEZXRh
aWxSZWYgV0tHcmFtbWFyRGV0YWlsQ3JlYXRlKGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgV0tB
cnJheVJlZiBndWVzc2VzLCBXS1N0cmluZ1JlZiB1c2VyRGVzY3JpcHRpb24pCit7CisgICAgUmVm
UHRyPFdlYkdyYW1tYXJEZXRhaWw+IGRldGFpbCA9IFdlYkdyYW1tYXJEZXRhaWw6OmNyZWF0ZShs
b2NhdGlvbiwgbGVuZ3RoLCB0b0ltcGwoZ3Vlc3NlcyksIHRvV1RGU3RyaW5nKHVzZXJEZXNjcmlw
dGlvbikpOworICAgIHJldHVybiB0b0FQSShkZXRhaWwucmVsZWFzZSgpLnJlbGVhc2VSZWYoKSk7
Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLR3JhbW1hckRl
dGFpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4v
V0tHcmFtbWFyRGV0YWlsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0Mvd2luL1dLR3JhbW1hckRldGFpbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXS0dyYW1tYXJEZXRhaWxfaAorI2RlZmluZSBXS0dy
YW1tYXJEZXRhaWxfaAorCisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKworI2lmZGVmIF9f
Y3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitXS19FWFBPUlQgV0tUeXBlSUQgV0tH
cmFtbWFyRGV0YWlsR2V0VHlwZUlEKCk7CitXS19FWFBPUlQgV0tHcmFtbWFyRGV0YWlsUmVmIFdL
R3JhbW1hckRldGFpbENyZWF0ZShpbnQgbG9jYXRpb24sIGludCBsZW5ndGgsIFdLQXJyYXlSZWYg
Z3Vlc3NlcywgV0tTdHJpbmdSZWYgdXNlckRlc2NyaXB0aW9uKTsKKworI2lmZGVmIF9fY3BsdXNw
bHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIFdLR3JhbW1hckRldGFpbF9oICovCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIu
aAkocmV2aXNpb24gODMxODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2lu
L1dLVGV4dENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCB0eXBlZGVm
IHZvaWQgKCpXS1RleHRDaGVja2VyU2V0R3JhbW1hckNoCiB0eXBlZGVmIHVpbnQ2NF90ICgqV0tU
ZXh0Q2hlY2tlclVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpKGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
OwogdHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlckNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcp
KHVpbnQ2NF90IHRhZywgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiB0eXBlZGVmIHZvaWQgKCpX
S1RleHRDaGVja2VyQ2hlY2tTcGVsbGluZ09mU3RyaW5nKSh1aW50NjRfdCB0YWcsIFdLU3RyaW5n
UmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3NwZWxs
aW5nTGVuZ3RoLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLVGV4
dGNoZWNrZXJDaGVja0dyYW1tYXJPZlN0cmluZykodWludDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0
ZXh0LCBXS0FycmF5UmVmKiBncmFtbWFyRGV0YWlscywgaW50MzJfdCogYmFkR3JhbW1hckxvY2F0
aW9uLCBpbnQzMl90KiBiYWRHcmFtbWFyTGVuZ3RoLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsK
IAogc3RydWN0IFdLVGV4dENoZWNrZXJDbGllbnQgewogICAgIGludCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNp
b247CkBAIC01Myw2ICs1NCw3IEBAIHN0cnVjdCBXS1RleHRDaGVja2VyQ2xpZW50IHsKICAgICBX
S1RleHRDaGVja2VyVW5pcXVlU3BlbGxEb2N1bWVudFRhZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bmlxdWVTcGVsbERvY3VtZW50VGFnOwogICAgIFdLVGV4dENoZWNrZXJD
bG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWc7CiAgICAgV0tUZXh0Q2hlY2tlckNoZWNrU3BlbGxp
bmdPZlN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tTcGVs
bGluZ09mU3RyaW5nOworICAgIFdLVGV4dGNoZWNrZXJDaGVja0dyYW1tYXJPZlN0cmluZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrR3JhbW1hck9mU3RyaW5nOwog
fTsKIHR5cGVkZWYgc3RydWN0IFdLVGV4dENoZWNrZXJDbGllbnQgV0tUZXh0Q2hlY2tlckNsaWVu
dDsKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tl
ckd0ay5jcHAJKHJldmlzaW9uIDgzMTg5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9UZXh0Q2hlY2tlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc0LDExIEBAIHZv
aWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZygKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCit2b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90
LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4m
LCBpbnQzMl90JiwgaW50MzJfdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9p
ZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBT
dHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0JKHJldmlz
aW9uIDgzMTg5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAyLDYgKzMwMiwxMSBAQCB2b2lkIFRleHRDaGVja2Vy
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9p
ZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNoYXIq
LCB1aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYsIGlu
dDMyX3QmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgVGV4dENoZWNrZXI6
OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVs
bGVkV29yZCkKIHsKICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gdXBk
YXRlU3BlbGxpbmdQYW5lbFdpdGhNaXNzcGVsbGVkV29yZDptaXNzcGVsbGVkV29yZF07CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENoZWNrZXJRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwCShyZXZp
c2lvbiA4MzE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UZXh0Q2hlY2tlclF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsNiArNzUsMTEgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6
Y2hlY2tTcGVsbGluZ09mU3RyaW5nKAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQg
VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFyKiwg
dWludDMyX3QsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQz
Ml90JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIFRleHRDaGVja2VyOjp1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxl
ZFdvcmQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwCShyZXZpc2lvbiA4MzE4OSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Nyw2ICs5NywxMSBAQCB2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoCiAgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCksIG1p
c3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKIH0KIAordm9pZCBUZXh0Q2hl
Y2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBVQ2hhciogdGV4dCwgdWludDMyX3QgbGVuZ3RoLCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRl
dGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMy
X3QmIGJhZEdyYW1tYXJMZW5ndGgpCit7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5j
bGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBTdHJpbmcodGV4
dCwgbGVuZ3RoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1h
ckxlbmd0aCk7Cit9CisKIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFtbWFy
RGV0YWlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YkdyYW1tYXJEZXRhaWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWlsLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJHcmFtbWFy
RGV0YWlsLmgiCisKKyNpbmNsdWRlICJJbW11dGFibGVBcnJheS5oIgorI2luY2x1ZGUgIldLR3Jh
bW1hckRldGFpbC5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworUGFzc1JlZlB0cjxXZWJHcmFtbWFyRGV0YWlsPiBXZWJHcmFtbWFyRGV0YWlsOjpjcmVh
dGUoaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoLCBJbW11dGFibGVBcnJheSogZ3Vlc3NlcywgY29u
c3QgU3RyaW5nJiB1c2VyRGVzY3JpcHRpb24pCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
ZWJHcmFtbWFyRGV0YWlsKGxvY2F0aW9uLCBsZW5ndGgsIGd1ZXNzZXMsIHVzZXJEZXNjcmlwdGlv
bikpOworfQorCitXZWJHcmFtbWFyRGV0YWlsOjpXZWJHcmFtbWFyRGV0YWlsKGludCBsb2NhdGlv
biwgaW50IGxlbmd0aCwgSW1tdXRhYmxlQXJyYXkqIGd1ZXNzZXMsIGNvbnN0IFN0cmluZyYgdXNl
ckRlc2NyaXB0aW9uKQoreworICAgIG1fZ3JhbW1hckRldGFpbC5sb2NhdGlvbiA9IGxvY2F0aW9u
OworICAgIG1fZ3JhbW1hckRldGFpbC5sZW5ndGggPSBsZW5ndGg7CisKKyAgICBzaXplX3QgbnVt
R3Vlc3NlcyA9IGd1ZXNzZXMtPnNpemUoKTsKKyAgICBtX2dyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5y
ZXNlcnZlQ2FwYWNpdHkobnVtR3Vlc3Nlcyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1HdWVzc2VzOyArK2kpCisgICAgICAgIG1fZ3JhbW1hckRldGFpbC5ndWVzc2VzLnVuY2hlY2tl
ZEFwcGVuZChndWVzc2VzLT5hdDxXZWJTdHJpbmc+KGkpLT5zdHJpbmcoKSk7CisKKyAgICBtX2dy
YW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9uID0gdXNlckRlc2NyaXB0aW9uOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
R3JhbW1hckRldGFpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93
aW4vV2ViR3JhbW1hckRldGFpbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWlsLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkdyYW1tYXJEZXRhaWxfaAorI2RlZmluZSBXZWJH
cmFtbWFyRGV0YWlsX2gKKworI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvVGV4dENoZWNrZXJDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBJbW11
dGFibGVBcnJheTsKKworY2xhc3MgV2ViR3JhbW1hckRldGFpbCA6IHB1YmxpYyBBUElPYmplY3Qg
eworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBUeXBlIEFQSVR5cGUgPSBUeXBlR3JhbW1hckRl
dGFpbDsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHcmFtbWFyRGV0YWlsPiBjcmVhdGUoaW50
IGxvY2F0aW9uLCBpbnQgbGVuZ3RoLCBJbW11dGFibGVBcnJheSogZ3Vlc3NlcywgY29uc3QgU3Ry
aW5nJiB1c2VyRGVzY3JpcHRpb24pOworCisgICAgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFp
bCYgZ3JhbW1hckRldGFpbCgpIHsgcmV0dXJuIG1fZ3JhbW1hckRldGFpbDsgfQorCitwcml2YXRl
OgorICAgIFdlYkdyYW1tYXJEZXRhaWwoaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoLCBJbW11dGFi
bGVBcnJheSogZ3Vlc3NlcywgY29uc3QgU3RyaW5nJiB1c2VyRGVzY3JpcHRpb24pOworCisgICAg
dmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CisKKyAgICBXZWJD
b3JlOjpHcmFtbWFyRGV0YWlsIG1fZ3JhbW1hckRldGFpbDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gV2ViR3JhbW1hckRldGFpbF9oCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcAko
cmV2aXNpb24gODMxODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRD
aGVja2VyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsMTAgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlckNsaWVudC5oIgogCisjaW5j
bHVkZSAiSW1tdXRhYmxlQXJyYXkuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRl
ICJXS1NoYXJlZEFQSUNhc3QuaCIKKyNpbmNsdWRlICJXZWJHcmFtbWFyRGV0YWlsLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtOTUs
NCArOTgsMTggQEAgdm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6Y2hlY2tTcGVsbGluZwogICAg
IG1fY2xpZW50LmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0YWcsIHRvQVBJKHRleHQuaW1wbCgpKSwg
Jm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCwgbV9jbGllbnQuY2xpZW50
SW5mbyk7CiB9CiAKK3ZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3Ry
aW5nKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6R3Jh
bW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24s
IGludDMyX3QmIGJhZEdyYW1tYXJMZW5ndGgpCit7CisgICAgaWYgKCFtX2NsaWVudC5jaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFdLQXJyYXlSZWYgd2tHcmFt
bWFyRGV0YWlsc1JlZiA9IDA7CisgICAgbV9jbGllbnQuY2hlY2tHcmFtbWFyT2ZTdHJpbmcodGFn
LCB0b0FQSSh0ZXh0LmltcGwoKSksICZ3a0dyYW1tYXJEZXRhaWxzUmVmLCAmYmFkR3JhbW1hckxv
Y2F0aW9uLCAmYmFkR3JhbW1hckxlbmd0aCwgbV9jbGllbnQuY2xpZW50SW5mbyk7CisKKyAgICBS
ZWZQdHI8SW1tdXRhYmxlQXJyYXk+IHdrR3JhbW1hckRldGFpbHMgPSBhZG9wdFJlZih0b0ltcGwo
d2tHcmFtbWFyRGV0YWlsc1JlZikpOworICAgIHNpemVfdCBudW1HcmFtbWFyRGV0YWlscyA9IHdr
R3JhbW1hckRldGFpbHMtPnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUdy
YW1tYXJEZXRhaWxzOyArK2kpCisgICAgICAgIGdyYW1tYXJEZXRhaWxzLmFwcGVuZCh3a0dyYW1t
YXJEZXRhaWxzLT5hdDxXZWJHcmFtbWFyRGV0YWlsPihpKS0+Z3JhbW1hckRldGFpbCgpKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
d2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5oCShyZXZpc2lvbiA4MzE4OSkKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQVBJQ2xpZW50LmgiCiAj
aW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNrZXJD
bGllbnQuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIApAQCAtNDMsNiArNDQsNyBAQCBwdWJsaWM6CiAgICAgdWludDY0X3QgdW5pcXVlU3BlbGxE
b2N1bWVudFRhZygpOwogICAgIHZvaWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh1aW50NjRf
dCk7CiAgICAgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcodWludDY0X3QgdGFnLCBjb25zdCBT
dHJpbmcmIHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3Nw
ZWxsaW5nTGVuZ3RoKTsKKyAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKHVpbnQ2NF90IHRh
ZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBp
bnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QmIGJhZEdyYW1tYXJMZW5ndGgpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
CShyZXZpc2lvbiA4MzE4OSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE1LDkgKzQxNSwx
NSBAQCBTdHJpbmcgV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1CiAgICAgcmV0dXJu
IFN0cmluZygpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJp
bmcoY29uc3QgVUNoYXIqLCBpbnQsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCosIGludCop
Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIq
IHRleHQsIGludCBsZW5ndGgsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYgZ3JhbW1h
ckRldGFpbHMsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpbnQzMl90IHJlc3VsdExvY2F0aW9uID0g
LTE7CisgICAgaW50MzJfdCByZXN1bHRMZW5ndGggPSAwOworICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBuaWNlIGlmIHdlIHdvdWxkbid0IGhhdmUgdG8gY29weSB0aGUgdGV4dCBoZXJlLgorICAg
IG1fcGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hlY2tHcmFtbWFyT2ZT
dHJpbmcoU3RyaW5nKHRleHQsIGxlbmd0aCkpLAorICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpDaGVja0dyYW1tYXJPZlN0cmluZzo6UmVwbHkoZ3JhbW1hckRldGFpbHMsIHJlc3VsdExv
Y2F0aW9uLCByZXN1bHRMZW5ndGgpKTsKKyAgICAqYmFkR3JhbW1hckxvY2F0aW9uID0gcmVzdWx0
TG9jYXRpb247CisgICAgKmJhZEdyYW1tYXJMZW5ndGggPSByZXN1bHRMZW5ndGg7CiB9CiAKIHZv
aWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29u
c3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBncmFtbWFy
RGV0YWlsKQpJbmRleDogU291cmNlL1dlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL3dpbi9XZWJLaXQyLnZjcHJvagkocmV2aXNpb24gODMxODkp
CisrKyBTb3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0Mi52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAg
LTMyNTIsNiArMzI1MiwxNCBAQAogCQkJCQkJCT4KIAkJCQkJCTwvRmlsZT4KIAkJCQkJCTxGaWxl
CisJCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdLR3JhbW1hckRl
dGFpbC5jcHAiCisJCQkJCQkJPgorCQkJCQkJPC9GaWxlPgorCQkJCQkJPEZpbGUKKwkJCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tHcmFtbWFyRGV0YWlsLmgiCisJ
CQkJCQkJPgorCQkJCQkJPC9GaWxlPgorCQkJCQkJPEZpbGUKIAkJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tUZXh0Q2hlY2tlci5jcHAiCiAJCQkJCQkJPgogCQkJ
CQkJPC9GaWxlPgpAQCAtMzQxNCw2ICszNDIyLDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJ
CQkJPEZpbGUKKwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3Ncd2luXFdlYkdyYW1tYXJE
ZXRhaWwuY3BwIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZl
UGF0aD0iLi5cVUlQcm9jZXNzXHdpblxXZWJHcmFtbWFyRGV0YWlsLmgiCisJCQkJCT4KKwkJCQk8
L0ZpbGU+CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxVSVByb2Nlc3Ncd2luXFdl
Ykluc3BlY3RvclByb3h5V2luLmNwcCIKIAkJCQkJPgogCQkJCTwvRmlsZT4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL3dpbi9XZWJLaXQyR2VuZXJhdGVkLm1ha2UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvd2luL1dlYktpdDJHZW5lcmF0ZWQubWFrZQkocmV2aXNpb24gODMxODkpCisrKyBT
b3VyY2UvV2ViS2l0Mi93aW4vV2ViS2l0MkdlbmVyYXRlZC5tYWtlCSh3b3JraW5nIGNvcHkpCkBA
IC03NSw2ICs3NSw3IEBAIGFsbDoKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxD
XFdLUHJvdGVjdGlvblNwYWNlVHlwZXMuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1
ZGVcV2ViS2l0MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXFdLUmVzb3Vy
Y2VDYWNoZU1hbmFnZXIuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0
MiIKICAgICB4Y29weSAveSAvZCAiLi5cVUlQcm9jZXNzXEFQSVxDXHdpblxXS0NvbnRleHRQcml2
YXRlV2luLmgiICIlQ29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCisgICAg
eGNvcHkgL3kgL2QgIi4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tHcmFtbWFyRGV0YWlsLmgiICIl
Q29uZmlndXJhdGlvbkJ1aWxkRGlyJVxpbmNsdWRlXFdlYktpdDIiCiAgICAgeGNvcHkgL3kgL2Qg
Ii4uXFVJUHJvY2Vzc1xBUElcQ1x3aW5cV0tUZXh0Q2hlY2tlci5oIiAiJUNvbmZpZ3VyYXRpb25C
dWlsZERpciVcaW5jbHVkZVxXZWJLaXQyIgogICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3Nc
QVBJXENcd2luXFdLVmlldy5oIiAiJUNvbmZpZ3VyYXRpb25CdWlsZERpciVcaW5jbHVkZVxXZWJL
aXQyIgogICAgIHhjb3B5IC95IC9kICIuLlxVSVByb2Nlc3NcQVBJXENcd2luXFdLVmlld1ByaXZh
dGUuaCIgIiVDb25maWd1cmF0aW9uQnVpbGREaXIlXGluY2x1ZGVcV2ViS2l0MiIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88892</attachid>
            <date>2011-04-08 16:19:58 -0700</date>
            <delta_ts>2011-04-08 17:22:44 -0700</delta_ts>
            <desc>Patch (Part 5)</desc>
            <filename>spellingGrammarWindowsOpensourcePart5.patch</filename>
            <type>text/plain</type>
            <size>14450</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzMzUyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDQtMDggIEplc3NpZSBC
ZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBJbXBsZW1lbnQgVGV4dENoZWNrZXIgb24gV2lu
ZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4
NjIKKworICAgICAgICBQYXJ0IDU6IEltcGxlbWVudCB0aGUgY29kZSBzaG93IGFuZCBoaWRlIHRo
ZSBTcGVsbGluZyBVSSB2aWEgdGhlIGNvbnRleHQgbWVudSBpdGVtIChib3RoCisgICAgICAgIFdp
bmRvd3MgYW5kIE1hYykuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENo
ZWNrZXIuaDoKKyAgICAgICAgQWRkIHRoZSBuZXcgV0tUZXh0Q2hlY2tlckNsaWVudCBmdW50aW9u
cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbToKKyAgICAgICAgKC1b
V0tWaWV3IHZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW06XSk6CisgICAgICAgIFRoZSB0aXRsZSBv
ZiB0aGUgY29udGV4dCBtZW51IGl0ZW0gc2hvdWxkIGJlIG9wcG9zaXRlIG9mIHdoZXRoZXIgb3Ig
bm90IHRoZSBzcGVsbGluZyBwYW5lbAorICAgICAgICBpcyB2aXNpYmxlLgorCisgICAgICAgICog
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94
eTo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICBJZiB0aGUgIlNob3cvSGlkZSBT
cGVsbGluZyBhbmQgR3JhbW1hciIgaXRlbSBpcyBzZWxlY3RlZCwgY2FsbCB0b2dnbGVTcGVsbGlu
Z1VJSXNTaG93aW5nLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnNwZWxsaW5nVUlJ
c1Nob3dpbmcpOgorICAgICAgICBDYWxsIHRocm91Z2ggdG8gVGV4dENoZWNrZXIuCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkubWVzc2FnZXMuaW46CisKKyAgICAgICAgKiBVSVByb2Nlc3MvVGV4dENoZWNrZXIuaDoK
KyAgICAgICAqIFVJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwOgorICAgICAgICAoV2Vi
S2l0OjpUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIENhbGwgdGhl
IFRleHRDaGVja2VyQ2xpZW50LgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dG9nZ2xl
U3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vz
cy9tYWMvVGV4dENoZWNrZXJNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpz
cGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgQXNrIHRoZSBzaGFyZWQgTlNTcGVsbENoZWNr
ZXIgaWYgdGhlIHNwZWxsaW5nUGFuZWwgaXMgdmlzaWJsZS4KKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpOgorICAgICAgICBPcmRlciB0aGUg
c3BlbGxpbmdQYW5lbCBvdXQgb3IgZnJvbnQgKGNvcGllZCBmcm9tIFdLVmlldy5tbSkuCisgICAg
ICAgICogVUlQcm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwOgorICAgICAgICAoV2ViS2l0OjpU
ZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIENhbGwgbm90SW1wbGVt
ZW50ZWQuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNT
aG93aW5nKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9UZXh0Q2hl
Y2tlckd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNT
aG93aW5nKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp0
b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgRGl0dG8uCisgCisgICAgICAgICog
VUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlRleHRDaGVja2VyQ2xpZW50OjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgQ2Fs
bCB0aGUgY2xpZW50LgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tlckNsaWVudDo6dG9n
Z2xlU3BlbGxpbmdVSUlzU2hvd2luZyk6CisgICAgICAgIERpdHRvLgorICAgICAgICAqIFVJUHJv
Y2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaDoKKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
RWRpdG9yQ2xpZW50OjpzcGVsbGluZ1VJSXNTaG93aW5nKToKKyAgICAgICAgU2VuZCBhIHN5bmMg
bWVzc2FnZSB0byB0aGUgVUkgcHJvY2VzcyB0byBmaW5kIG91dC4KKyAgICAgICAgSXQgbmVlZHMg
dG8gYmUgc3luYyBiZWNhdXNlIHRoZSBFZGl0b3IgY29kZSByZWxpZXMgb24gdGhlIHZhbHVlIHJl
dHVybmVkLgorCiAyMDExLTA0LTA4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oCShyZXZpc2lvbiA4MzI5MikKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw4
IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHN0YXRpYyB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmlu
ZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBs
ZW5ndGgsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5n
TGVuZ3RoKTsKICAgICBzdGF0aWMgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90IHNw
ZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIFZlY3Rv
cjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwg
aW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCk7CisgICAgc3RhdGljIGJvb2wgc3BlbGxpbmdVSUlz
U2hvd2luZygpOworICAgIHN0YXRpYyB2b2lkIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsK
ICAgICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0
IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0
IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKICAgICBzdGF0aWMgdm9pZCBnZXRHdWVzc2VzRm9y
V29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3Qg
U3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlcyk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNpb24gODMyOTIpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI3OSw2ICsyMjc5LDEwIEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpjb250ZXh0TWVudUl0ZW1T
ZWxlY3QKICAgICAgICAgcHJvY2VzcygpLT51cGRhdGVUZXh0Q2hlY2tlclN0YXRlKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKGl0ZW0uYWN0aW9uKCkgPT0gQ29udGV4dE1lbnVJ
dGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwpIHsKKyAgICAgICAgVGV4dENoZWNrZXI6OnRvZ2dsZVNw
ZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBpZiAoaXRl
bS5hY3Rpb24oKSA9PSBDb250ZXh0TWVudUl0ZW1UYWdMZWFyblNwZWxsaW5nIHx8IGl0ZW0uYWN0
aW9uKCkgPT0gQ29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcpCiAgICAgICAgICsrbV9w
ZW5kaW5nTGVhcm5Pcklnbm9yZVdvcmRNZXNzYWdlQ291bnQ7CiAKQEAgLTIzOTMsNiArMjM5Nywx
MSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoCiAgICAgVGV4dENo
ZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcoKSwgdGV4dC5jaGFy
YWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRp
b24sIGJhZEdyYW1tYXJMZW5ndGgpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6c3BlbGxpbmdV
SUlzU2hvd2luZyhib29sJiBpc1Nob3dpbmcpCit7CisgICAgaXNTaG93aW5nID0gVGV4dENoZWNr
ZXI6OnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKK30KKwogdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0
ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29y
ZCkKIHsKICAgICBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29y
ZChtaXNzcGVsbGVkV29yZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCShyZXZpc2lvbiA4MzI5MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNjQ0LDYgKzY0NCw3IEBAIHByaXZhdGU6CiAj
ZW5kaWYKICAgICB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQs
IGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3Ro
KTsKICAgICB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVj
dG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9u
LCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICB2b2lkIHNwZWxsaW5nVUlJc1Nob3dp
bmcoYm9vbCYpOwogICAgIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChj
b25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKICAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IFdl
YkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKICAgICB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0
IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vl
c3Nlcyk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkubWVzc2FnZXMuaW4JKHJldmlzaW9uIDgzMjkyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTg0LDYgKzE4
NCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAjZW5kaWYKICAgICBDaGVja1NwZWxs
aW5nT2ZTdHJpbmcoV1RGOjpTdHJpbmcgdGV4dCkgLT4gKGludDMyX3QgbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgaW50MzJfdCBtaXNzcGVsbGluZ0xlbmd0aCkKICAgICBDaGVja0dyYW1tYXJPZlN0cmlu
ZyhXVEY6OlN0cmluZyB0ZXh0KSAtPiAoVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+IHJl
c3VsdHMsIGludDMyX3QgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90IGJhZEdyYW1tYXJMZW5n
dGgpCisgICAgU3BlbGxpbmdVSUlzU2hvd2luZygpIC0+IChib29sIGlzU2hvd2luZykKICAgICBV
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKFdURjo6U3RyaW5nIG1pc3NwZWxsZWRX
b3JkKQogICAgIFVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhXVEY6OlN0cmluZyBi
YWRHcmFtbWFyUGhyYXNlLCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWwpCiAg
ICAgR2V0R3Vlc3Nlc0ZvcldvcmQoV1RGOjpTdHJpbmcgd29yZCwgV1RGOjpTdHJpbmcgY29udGV4
dCkgLT4gKFZlY3RvcjxXVEY6OlN0cmluZz4gZ3Vlc3NlcykKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oCShyZXZpc2lvbiA4
MzI5MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw4IEBAIHR5cGVkZWYgdWludDY0X3QgKCpX
S1RleHRDaGVja2VyVW5pcXVlU3AKIHR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJDbG9zZVNw
ZWxsRG9jdW1lbnRXaXRoVGFnKSh1aW50NjRfdCB0YWcsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
OwogdHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlckNoZWNrU3BlbGxpbmdPZlN0cmluZykodWlu
dDY0X3QgdGFnLCBXS1N0cmluZ1JlZiB0ZXh0LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xvY2F0aW9u
LCBpbnQzMl90KiBtaXNzcGVsbGluZ0xlbmd0aCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiB0
eXBlZGVmIHZvaWQgKCpXS1RleHRDaGVja2VyQ2hlY2tHcmFtbWFyT2ZTdHJpbmcpKHVpbnQ2NF90
IHRhZywgV0tTdHJpbmdSZWYgdGV4dCwgV0tBcnJheVJlZiogZ3JhbW1hckRldGFpbHMsIGludDMy
X3QqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCogYmFkR3JhbW1hckxlbmd0aCwgY29uc3Qg
dm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIGJvb2wgKCpXS1RleHRDaGVja2VyU3BlbGxpbmdV
SUlzU2hvd2luZykoY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7Cit0eXBlZGVmIHZvaWQgKCpXS1Rl
eHRDaGVja2VyVG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZykoY29uc3Qgdm9pZCAqY2xpZW50SW5m
byk7CiAKIHN0cnVjdCBXS1RleHRDaGVja2VyQ2xpZW50IHsKICAgICBpbnQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
ZXJzaW9uOwpAQCAtNTUsNiArNTcsOCBAQCBzdHJ1Y3QgV0tUZXh0Q2hlY2tlckNsaWVudCB7CiAg
ICAgV0tUZXh0Q2hlY2tlckNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZzsKICAgICBXS1RleHRD
aGVja2VyQ2hlY2tTcGVsbGluZ09mU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGVja1NwZWxsaW5nT2ZTdHJpbmc7CiAgICAgV0tUZXh0Q2hlY2tlckNoZWNrR3Jh
bW1hck9mU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tH
cmFtbWFyT2ZTdHJpbmc7CisgICAgV0tUZXh0Q2hlY2tlclNwZWxsaW5nVUlJc1Nob3dpbmcgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdVSUlzU2hvd2luZzsK
KyAgICBXS1RleHRDaGVja2VyVG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nOwogfTsKIHR5cGVk
ZWYgc3RydWN0IFdLVGV4dENoZWNrZXJDbGllbnQgV0tUZXh0Q2hlY2tlckNsaWVudDsKIApJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9tYWMvV0tWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvbWFjL1dLVmlldy5tbQkocmV2aXNpb24g
ODMyOTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL21hYy9XS1ZpZXcubW0JKHdv
cmtpbmcgY29weSkKQEAgLTYxNSw3ICs2MTUsNyBAQCAtIChCT09MKXZhbGlkYXRlVXNlckludGVy
ZmFjZUl0ZW06KGlkIDxOCiAKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihzaG93R3Vlc3NQ
YW5lbDopKSB7CiAgICAgICAgIGlmIChOU01lbnVJdGVtICptZW51SXRlbSA9IDo6bWVudUl0ZW0o
aXRlbSkpCi0gICAgICAgICAgICBbbWVudUl0ZW0gc2V0VGl0bGU6Y29udGV4dE1lbnVJdGVtVGFn
U2hvd1NwZWxsaW5nUGFuZWwoW1tbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBz
cGVsbGluZ1BhbmVsXSBpc1Zpc2libGVdKV07CisgICAgICAgICAgICBbbWVudUl0ZW0gc2V0VGl0
bGU6Y29udGV4dE1lbnVJdGVtVGFnU2hvd1NwZWxsaW5nUGFuZWwoIVtbW05TU3BlbGxDaGVja2Vy
IHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3BlbGxpbmdQYW5lbF0gaXNWaXNpYmxlXSldOwogICAgICAg
ICByZXR1cm4gX2RhdGEtPl9wYWdlLT5zZWxlY3Rpb25TdGF0ZSgpLmlzQ29udGVudEVkaXRhYmxl
OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tl
ckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0
Q2hlY2tlckd0ay5jcHAJKHJldmlzaW9uIDgzMjkyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDE3
IEBAIHZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGkKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCitib29sIFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBU
ZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwogdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNz
cGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2Vy
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENo
ZWNrZXJNYWMubW0JKHJldmlzaW9uIDgzMjkyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9UZXh0Q2hlY2tlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzA5LDYgKzMwOSwyMCBA
QCB2b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAorYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZygpCit7
CisgICAgcmV0dXJuIFtbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gc3BlbGxp
bmdQYW5lbF0gaXNWaXNpYmxlXTsKK30KKwordm9pZCBUZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxp
bmdVSUlzU2hvd2luZygpCit7CisgICAgTlNQYW5lbCAqc3BlbGxpbmdQYW5lbCA9IFtbTlNTcGVs
bENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBzcGVsbGluZ1BhbmVsXTsKKyAgICBpZiAoW3Nw
ZWxsaW5nUGFuZWwgaXNWaXNpYmxlXSkKKyAgICAgICAgW3NwZWxsaW5nUGFuZWwgb3JkZXJPdXQ6
bmlsXTsKKyAgICBlbHNlCisgICAgICAgIFtzcGVsbGluZ1BhbmVsIG9yZGVyRnJvbnQ6bmlsXTsK
K30KKwogdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29y
ZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewogICAgIFtbTlNTcGVsbENoZWNrZXIg
c2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVTcGVsbGluZ1BhbmVsV2l0aE1pc3NwZWxsZWRXb3Jk
Om1pc3NwZWxsZWRXb3JkXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UZXh0
Q2hlY2tlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQv
VGV4dENoZWNrZXJRdC5jcHAJKHJldmlzaW9uIDgzMjkyKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCwx
NyBAQCB2b2lkIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpCiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAorYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdVSUlzU2hvd2luZygp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tl
cldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9UZXh0
Q2hlY2tlcldpbi5jcHAJKHJldmlzaW9uIDgzMjkyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIs
MTYgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaQogICAgIFdlYlRl
eHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tHcmFtbWFyT2ZTdHJpbmcoc3BlbGxE
b2N1bWVudFRhZywgU3RyaW5nKHRleHQsIGxlbmd0aCksIGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFt
bWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOwogfQogCitib29sIFRleHRDaGVja2VyOjpz
cGVsbGluZ1VJSXNTaG93aW5nKCkKK3sKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJl
ZCgpLT5jbGllbnQoKS5zcGVsbGluZ1VJSXNTaG93aW5nKCk7Cit9CisKK3ZvaWQgVGV4dENoZWNr
ZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQoreworICAgIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOworfQorCiB2b2lk
IFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0
cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGll
bnQuY3BwCShyZXZpc2lvbiA4MzI5MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4v
V2ViVGV4dENoZWNrZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNCArMTEyLDIw
IEBAIHZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6OmNoZWNrR3JhbW1hck8KICAgICAgICAgZ3Jh
bW1hckRldGFpbHMuYXBwZW5kKHdrR3JhbW1hckRldGFpbHMtPmF0PFdlYkdyYW1tYXJEZXRhaWw+
KGkpLT5ncmFtbWFyRGV0YWlsKCkpOwogfQogCitib29sIFdlYlRleHRDaGVja2VyQ2xpZW50Ojpz
cGVsbGluZ1VJSXNTaG93aW5nKCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LnNwZWxsaW5nVUlJc1No
b3dpbmcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX2NsaWVudC5zcGVs
bGluZ1VJSXNTaG93aW5nKG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2b2lkIFdlYlRleHRD
aGVja2VyQ2xpZW50Ojp0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCkKK3sKKyAgICBpZiAoIW1f
Y2xpZW50LnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IHJldHVybiBtX2NsaWVudC50b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKG1fY2xpZW50LmNsaWVu
dEluZm8pOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmgJKHJldmlzaW9u
IDgzMjkyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNs
aWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodWludDY0X3QpOwogICAgIHZvaWQgY2hlY2tTcGVs
bGluZ09mU3RyaW5nKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQzMl90JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCk7CiAgICAgdm9p
ZCBjaGVja0dyYW1tYXJPZlN0cmluZyh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgdGV4dCwg
VmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0
aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICBib29sIHNwZWxsaW5nVUlJc1No
b3dpbmcoKTsKKyAgICB2b2lkIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNp
b24gODMyOTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0OCw4ICs0NDgsOSBAQCB2b2lk
IFdlYkVkaXRvckNsaWVudDo6c2hvd1NwZWxsaW5nVUkoYm9vCiAKIGJvb2wgV2ViRWRpdG9yQ2xp
ZW50OjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBmYWxzZTsKKyAgICBib29sIGlzU2hvd2luZyA9IGZhbHNlOworICAgIG1fcGFnZS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U3BlbGxpbmdVSUlzU2hvd2luZygpLCBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTcGVsbGluZ1VJSXNTaG93aW5nOjpSZXBseShpc1Nob3dp
bmcpKTsKKyAgICByZXR1cm4gaXNTaG93aW5nOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6
Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRl
eHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88962</attachid>
            <date>2011-04-10 18:37:48 -0700</date>
            <delta_ts>2011-04-11 12:52:25 -0700</delta_ts>
            <desc>Patch (Part 6)</desc>
            <filename>spellingGrammarWindowsOpensourcePart6.patch</filename>
            <type>text/plain</type>
            <size>27358</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNDA4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEtMDQtMTAgIEplc3NpZSBC
ZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBJbXBsZW1lbnQgVGV4dENoZWNrZXIgb24gV2lu
ZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4
NjIKKworICAgICAgICBQYXJ0IDY6IFVwZGF0ZSB0aGUgU3BlbGxpbmcgVUkgd2l0aCB0aGUgc3Bl
bGxpbmcgYW5kIGdyYW1tYXIgbWlzdGFrZXMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mv
d2luL1dLQVBJQ2FzdFdpbi5oOgorICAgICAgICAoV2ViS2l0Ojp0b0FQSSk6CisgICAgICAgIE1h
a2UgaXQgcG9zc2libGUgdG8gZ28gZnJvbSBhIFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwgdG8gYSBX
ZWJHcmFtbWFyRGV0YWlsLgorIAorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tHcmFt
bWFyRGV0YWlsLmNwcDoKKyAgICAgICAgKFdLR3JhbW1hckRldGFpbENyZWF0ZSk6CisgICAgICAg
IChXS0dyYW1tYXJEZXRhaWxHZXRMb2NhdGlvbik6CisgICAgICAgIChXS0dyYW1tYXJEZXRhaWxH
ZXRMZW5ndGgpOgorICAgICAgICAoV0tHcmFtbWFyRGV0YWlsQ29weUd1ZXNzZXMpOgorICAgICAg
ICAoV0tHcmFtbWFyRGV0YWlsQ29weVVzZXJEZXNjcmlwdGlvbik6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9DL3dpbi9XS0dyYW1tYXJEZXRhaWwuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy93aW4vV0tUZXh0Q2hlY2tlci5jcHA6CisgICAgICAgIChXS1RleHRDaGVja2VyQ2hlY2tT
cGVsbGluZyk6CisgICAgICAgIFRlbGwgdGhlIFdlYlRleHRDaGVja2VyLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oOgorCisgICAgICAgICogVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQpOgorICAgICAgICBJZiB0aGUgc2hvdy9oaWRlIHNwZWxsaW5nIFVJ
IGlzIHNlbGVjdGVkIGFuZCB0aGUgc3BlbGxpbmcgVUkgaXMgbm90IHNob3dpbmcsIG1ha2Ugc3Vy
ZSB0bworICAgICAgICBhZHZhbmNlIHRvIHRoZSBuZXh0IG1pc3NwZWxsaW5nIChpbiB0aGlzIGNh
c2UsIHRoZSBmaXJzdCkuCisgICAgICAgIFRoaXMgYmVoYXZpb3IgbWF0Y2hlcyB0aGF0IGluIFdl
YkNvcmUgYW5kIFdLVmlldy5tbS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjphZHZh
bmNlVG9OZXh0TWlzc3BlbGxpbmcpOgorICAgICAgICBNYWtlIHRoaXMgZnVuY3Rpb24gY29uc3Qg
c2luY2UgaXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBXZWJQYWdlUHJveHkgYW5kIG1ha2luZyBpdCBj
b25zdAorICAgICAgICBhbGxvd3MgV2ViVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmcgdG8gdGFr
ZSBhIGNvbnN0IFdlYlBhZ2VQcm94eS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpz
cGVsbERvY3VtZW50VGFnKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojp1cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKworICAgICAgICAqIFVJUHJvY2Vzcy9UZXh0Q2hlY2tlci5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJXaW4uY3BwOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAgIFRl
bGwgdGhlIFRleHRDaGVja2VyQ2xpZW50IHdoaWNoIFdlYlBhZ2VQcm94eSB0aGlzIHRhZyBpcyBm
b3IuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKToKKyAgICAgICAgVGVsbCB0aGUgVGV4dENoZWNrZXJDbGllbnQuCisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcpOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1RleHRDaGVja2Vy
TWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVu
dFRhZyk6CisgICAgICAgIEFkZCB0aGUgbmV3IGFyZ3VtZW50IHRoYXQgaXMgdW51c2VkIGJ5IHRo
aXMgcG9ydC4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIERp
dHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAg
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAgICAgRGl0
dG8uCisgICAgICAgICogVUlQcm9jZXNzL3F0L1RleHRDaGVja2VyUXQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyk6CisgICAgICAgIERp
dHRvLgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhN
aXNzcGVsbGVkV29yZCk6CisgICAgICAgIERpdHRvLgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hl
Y2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAgICAgRGl0dG8u
CisKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYkdyYW1tYXJEZXRhaWwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJHcmFtbWFyRGV0YWlsOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJHcmFtbWFyRGV0YWlsOjpXZWJHcmFtbWFyRGV0YWlsKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhbW1hckRldGFpbDo6Z3Vlc3Nlcyk6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJHcmFt
bWFyRGV0YWlsLmg6CisgICAgICAgIChXZWJLaXQ6OldlYkdyYW1tYXJEZXRhaWw6OmxvY2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViR3JhbW1hckRldGFpbDo6bGVuZ3RoKToKKyAgICAgICAg
KFdlYktpdDo6V2ViR3JhbW1hckRldGFpbDo6dXNlckRlc2NyaXB0aW9uKToKKworICAgICAgICAq
IFVJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJU
ZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZyk6CisgICAgICAgIFRlbGwgdGhlIHBhZ2UgdG8gYWR2
YW5jZSB0byB0aGUgbmV4dCBtaXNzcGVsbGluZy4gVGhpcyBtYXRjaGVzIHRoZSBXSzEgV2ViVmll
dy5jcHAgbG9naWMuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyLmg6
CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlRleHRDaGVja2VyQ2xpZW50Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFn
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVGV4dENoZWNrZXJDbGllbnQ6OnRvZ2dsZVNwZWxsaW5n
VUlJc1Nob3dpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tlckNsaWVudDo6dXBk
YXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRl
eHRDaGVja2VyQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAg
ICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaDoKKwogMjAxMS0wNC0w
OSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIE5vdCByZXZp
ZXdlZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oCShyZXZpc2lv
biA4MzQwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFz
cyBXZWJQYWdlUHJveHk7CiBzdHJ1Y3QgVGV4dENoZWNrZXJTdGF0ZTsKIAogY2xhc3MgVGV4dENo
ZWNrZXIgewpAQCAtNTgsNyArNTksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZ3JhbW1h
ckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKICNlbmRpZgogCi0gICAgc3RhdGlj
IGludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZygpOworICAgIHN0YXRpYyBpbnQ2NF90IHVu
aXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5Kik7CiAgICAgc3RhdGljIHZvaWQgY2xv
c2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90KTsKICNpZiBVU0UoVU5JRklFRF9URVhUX0NI
RUNLSU5HKQogICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiBj
aGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFy
KiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKTsKQEAgLTY3LDggKzY4
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0
X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQzMl90IGxlbmd0aCwg
VmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0
aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKTsKICAgICBzdGF0aWMgYm9vbCBzcGVsbGlu
Z1VJSXNTaG93aW5nKCk7CiAgICAgc3RhdGljIHZvaWQgdG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2lu
ZygpOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQo
Y29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7Ci0gICAgc3RhdGljIHZvaWQgdXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwg
Y29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNw
ZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25z
dCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKICAg
ICBzdGF0aWMgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcs
IGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5n
PiYgZ3Vlc3Nlcyk7CiAgICAgc3RhdGljIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYgd29y
ZCk7CiAgICAgc3RhdGljIHZvaWQgaWdub3JlV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcs
IGNvbnN0IFN0cmluZyYgd29yZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAkocmV2aXNpb24gODM0MDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMwNyw2ICsyMzA3LDggQEAg
dm9pZCBXZWJQYWdlUHJveHk6OmNvbnRleHRNZW51SXRlbVNlbGVjdAogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmIChpdGVtLmFjdGlvbigpID09IENvbnRleHRNZW51SXRlbVRhZ1Nob3dT
cGVsbGluZ1BhbmVsKSB7CisgICAgICAgIGlmICghVGV4dENoZWNrZXI6OnNwZWxsaW5nVUlJc1No
b3dpbmcoKSkKKyAgICAgICAgICAgIGFkdmFuY2VUb05leHRNaXNzcGVsbGluZyh0cnVlKTsKICAg
ICAgICAgVGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KQEAgLTIzNDgsNyArMjM1MCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpk
aWRDYW5jZWxGb3JPcGVuUGFuZWwKICAgICBtX29wZW5QYW5lbFJlc3VsdExpc3RlbmVyID0gMDsK
IH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0
YXJ0QmVmb3JlU2VsZWN0aW9uKQordm9pZCBXZWJQYWdlUHJveHk6OmFkdmFuY2VUb05leHRNaXNz
cGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKSBjb25zdAogewogICAgIHByb2Nlc3Mo
KS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6QWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKHN0YXJ0
QmVmb3JlU2VsZWN0aW9uKSwgbV9wYWdlSUQpOwogfQpAQCAtMjM5OCw3ICsyNDAwLDcgQEAgYm9v
bCBXZWJQYWdlUHJveHk6OmlzVmFsaWRFZGl0Q29tbWFuZChXZQogaW50NjRfdCBXZWJQYWdlUHJv
eHk6OnNwZWxsRG9jdW1lbnRUYWcoKQogewogICAgIGlmICghbV9oYXNTcGVsbERvY3VtZW50VGFn
KSB7Ci0gICAgICAgIG1fc3BlbGxEb2N1bWVudFRhZyA9IFRleHRDaGVja2VyOjp1bmlxdWVTcGVs
bERvY3VtZW50VGFnKCk7CisgICAgICAgIG1fc3BlbGxEb2N1bWVudFRhZyA9IFRleHRDaGVja2Vy
Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKHRoaXMpOwogICAgICAgICBtX2hhc1NwZWxsRG9jdW1l
bnRUYWcgPSB0cnVlOwogICAgIH0KIApAQCAtMjQzMSwxMiArMjQzMywxMiBAQCB2b2lkIFdlYlBh
Z2VQcm94eTo6c3BlbGxpbmdVSUlzU2hvd2luZyhiCiAKIHZvaWQgV2ViUGFnZVByb3h5Ojp1cGRh
dGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdv
cmQpCiB7Ci0gICAgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdv
cmQobWlzc3BlbGxlZFdvcmQpOworICAgIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0
aE1pc3NwZWxsZWRXb3JkKHNwZWxsRG9jdW1lbnRUYWcoKSwgbWlzc3BlbGxlZFdvcmQpOwogfQog
CiB2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNv
bnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1h
ckRldGFpbCkKIHsKLSAgICBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFy
U3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOworICAgIFRleHRDaGVja2Vy
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoc3BlbGxEb2N1bWVudFRhZygpLCBi
YWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6
OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250
ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDgzNDA4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NDYsNyArNDQ2LDcgQEAg
cHVibGljOgogICAgIHZvaWQgZmluZFpvb21hYmxlQXJlYUZvclBvaW50KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50Jik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5n
KGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pOworICAgIHZvaWQgYWR2YW5jZVRvTmV4dE1pc3Nw
ZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pIGNvbnN0OwogICAgIHZvaWQgY2hhbmdl
U3BlbGxpbmdUb1dvcmQoY29uc3QgU3RyaW5nJiB3b3JkKTsKICAgICB2b2lkIHVubWFya0FsbE1p
c3NwZWxsaW5ncygpOwogICAgIHZvaWQgdW5tYXJrQWxsQmFkR3JhbW1hcigpOwpJbmRleDogU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9XS0FQSUNhc3RXaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLQVBJQ2FzdFdpbi5oCShy
ZXZpc2lvbiA4MzQwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tB
UElDYXN0V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE4ICszMCwyNSBAQAogI2Vycm9yICJQ
bGVhc2UgI2luY2x1ZGUgXCJXS0FQSUNhc3QuaFwiIGluc3RlYWQgb2YgdGhpcyBmaWxlIGRpcmVj
dGx5LiIKICNlbmRpZgogCisjaW5jbHVkZSAiV2ViR3JhbW1hckRldGFpbC5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvVGV4dENoZWNrZXJDbGllbnQuaD4KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIFdlYlZpZXc7CiBjbGFzcyBXZWJFZGl0Q29tbWFuZFByb3h5OwogY2xhc3MgV2ViVGV4dENo
ZWNrZXI7Ci1jbGFzcyBXZWJHcmFtbWFyRGV0YWlsOwogCiBXS19BRERfQVBJX01BUFBJTkcoV0tW
aWV3UmVmLCBXZWJWaWV3KQogV0tfQUREX0FQSV9NQVBQSU5HKFdLRWRpdENvbW1hbmRSZWYsIFdl
YkVkaXRDb21tYW5kUHJveHkpCiBXS19BRERfQVBJX01BUFBJTkcoV0tUZXh0Q2hlY2tlclJlZiwg
V2ViVGV4dENoZWNrZXIpCiBXS19BRERfQVBJX01BUFBJTkcoV0tHcmFtbWFyRGV0YWlsUmVmLCBX
ZWJHcmFtbWFyRGV0YWlsKQogCitpbmxpbmUgUHJveHlpbmdSZWZQdHI8V2ViR3JhbW1hckRldGFp
bD4gdG9BUEkoY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKK3sK
KyAgICByZXR1cm4gUHJveHlpbmdSZWZQdHI8V2ViR3JhbW1hckRldGFpbD4oV2ViR3JhbW1hckRl
dGFpbDo6Y3JlYXRlKGdyYW1tYXJEZXRhaWwpKTsKIH0KIAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKICNlbmRpZiAvLyBXS0FQSUNhc3RXaW5faApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL3dpbi9XS0dyYW1tYXJEZXRhaWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tHcmFtbWFyRGV0YWlsLmNwcAkocmV2aXNpb24g
ODM0MDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLR3JhbW1hckRl
dGFpbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJXS0dy
YW1tYXJEZXRhaWwuaCIKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgorI2luY2x1ZGUgIkltbXV0
YWJsZUFycmF5LmgiCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCiAjaW5jbHVkZSAiV2ViR3JhbW1h
ckRldGFpbC5oIgogCkBAIC00MiwzICs0MywyMyBAQCBXS0dyYW1tYXJEZXRhaWxSZWYgV0tHcmFt
bWFyRGV0YWlsQ3JlYXRlCiAgICAgUmVmUHRyPFdlYkdyYW1tYXJEZXRhaWw+IGRldGFpbCA9IFdl
YkdyYW1tYXJEZXRhaWw6OmNyZWF0ZShsb2NhdGlvbiwgbGVuZ3RoLCB0b0ltcGwoZ3Vlc3Nlcyks
IHRvV1RGU3RyaW5nKHVzZXJEZXNjcmlwdGlvbikpOwogICAgIHJldHVybiB0b0FQSShkZXRhaWwu
cmVsZWFzZSgpLnJlbGVhc2VSZWYoKSk7CiB9CisKK2ludCBXS0dyYW1tYXJEZXRhaWxHZXRMb2Nh
dGlvbihXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZikKK3sKKyAgICByZXR1cm4g
dG9JbXBsKGdyYW1tYXJEZXRhaWxSZWYpLT5sb2NhdGlvbigpOworfQorCitpbnQgV0tHcmFtbWFy
RGV0YWlsR2V0TGVuZ3RoKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKQorewor
ICAgIHJldHVybiB0b0ltcGwoZ3JhbW1hckRldGFpbFJlZiktPmxlbmd0aCgpOworfQorCitXS0Fy
cmF5UmVmIFdLR3JhbW1hckRldGFpbENvcHlHdWVzc2VzKFdLR3JhbW1hckRldGFpbFJlZiBncmFt
bWFyRGV0YWlsUmVmKQoreworICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZ3JhbW1hckRldGFpbFJl
ZiktPmd1ZXNzZXMoKS5sZWFrUmVmKCkpOworfQorCitXS1N0cmluZ1JlZiBXS0dyYW1tYXJEZXRh
aWxDb3B5VXNlckRlc2NyaXB0aW9uKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVm
KQoreworICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoZ3JhbW1hckRldGFpbFJlZiktPnVz
ZXJEZXNjcmlwdGlvbigpKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy93aW4vV0tHcmFtbWFyRGV0YWlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL3dpbi9XS0dyYW1tYXJEZXRhaWwuaAkocmV2aXNpb24gODM0MDgpCisrKyBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLR3JhbW1hckRldGFpbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw2ICszNSwxMSBAQCBleHRlcm4gIkMiIHsKIFdLX0VYUE9SVCBXS1R5
cGVJRCBXS0dyYW1tYXJEZXRhaWxHZXRUeXBlSUQoKTsKIFdLX0VYUE9SVCBXS0dyYW1tYXJEZXRh
aWxSZWYgV0tHcmFtbWFyRGV0YWlsQ3JlYXRlKGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCwgV0tB
cnJheVJlZiBndWVzc2VzLCBXS1N0cmluZ1JlZiB1c2VyRGVzY3JpcHRpb24pOwogCitXS19FWFBP
UlQgaW50IFdLR3JhbW1hckRldGFpbEdldExvY2F0aW9uKFdLR3JhbW1hckRldGFpbFJlZiBncmFt
bWFyRGV0YWlsUmVmKTsKK1dLX0VYUE9SVCBpbnQgV0tHcmFtbWFyRGV0YWlsR2V0TGVuZ3RoKFdL
R3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKTsKK1dLX0VYUE9SVCBXS0FycmF5UmVm
IFdLR3JhbW1hckRldGFpbENvcHlHdWVzc2VzKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0
YWlsUmVmKTsKK1dLX0VYUE9SVCBXS1N0cmluZ1JlZiBXS0dyYW1tYXJEZXRhaWxDb3B5VXNlckRl
c2NyaXB0aW9uKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKTsKKwogI2lmZGVm
IF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy93aW4vV0tUZXh0Q2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL3dpbi9XS1RleHRDaGVja2VyLmNwcAkocmV2aXNpb24gODM0MDgpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiV0tUZXh0Q2hlY2tlci5o
IgogCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViVGV4dENoZWNrZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKQEAg
LTQ3LDMgKzQ4LDggQEAgdm9pZCBXS1RleHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5hYmxlZAog
ewogICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0
YXRlQ2hhbmdlZChlbmFibGVkKTsKIH0KKwordm9pZCBXS1RleHRDaGVja2VyQ2hlY2tTcGVsbGlu
ZyhXS1BhZ2VSZWYgcGFnZSwgYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKK3sKKyAgICBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNoZWNrU3BlbGxpbmcodG9JbXBsKHBhZ2UpLCBzdGFydEJl
Zm9yZVNlbGVjdGlvbik7Cit9CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
d2luL1dLVGV4dENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaAkocmV2aXNpb24gODM0MDgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMTIgKzM4LDE0IEBAIHR5cGVkZWYgYm9vbCAoKldLVGV4dENoZWNrZXJDb250aW5v
dXNTcGUKIHR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJTZXRDb250aW5vdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCkoYm9vbCBlbmFibGVkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVk
ZWYgYm9vbCAoKldLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKShjb25zdCB2b2lk
ICpjbGllbnRJbmZvKTsKIHR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJTZXRHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKShib29sIGVuYWJsZWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwotdHlw
ZWRlZiB1aW50NjRfdCAoKldLVGV4dENoZWNrZXJVbmlxdWVTcGVsbERvY3VtZW50VGFnKShjb25z
dCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgdWludDY0X3QgKCpXS1RleHRDaGVja2VyVW5p
cXVlU3BlbGxEb2N1bWVudFRhZykoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pOwogdHlwZWRlZiB2b2lkICgqV0tUZXh0Q2hlY2tlckNsb3NlU3BlbGxEb2N1bWVudFdpdGhU
YWcpKHVpbnQ2NF90IHRhZywgY29uc3Qgdm9pZCAqY2xpZW50SW5mbyk7CiB0eXBlZGVmIHZvaWQg
KCpXS1RleHRDaGVja2VyQ2hlY2tTcGVsbGluZ09mU3RyaW5nKSh1aW50NjRfdCB0YWcsIFdLU3Ry
aW5nUmVmIHRleHQsIGludDMyX3QqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QqIG1pc3Nw
ZWxsaW5nTGVuZ3RoLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYgdm9pZCAoKldL
VGV4dENoZWNrZXJDaGVja0dyYW1tYXJPZlN0cmluZykodWludDY0X3QgdGFnLCBXS1N0cmluZ1Jl
ZiB0ZXh0LCBXS0FycmF5UmVmKiBncmFtbWFyRGV0YWlscywgaW50MzJfdCogYmFkR3JhbW1hckxv
Y2F0aW9uLCBpbnQzMl90KiBiYWRHcmFtbWFyTGVuZ3RoLCBjb25zdCB2b2lkICpjbGllbnRJbmZv
KTsKIHR5cGVkZWYgYm9vbCAoKldLVGV4dENoZWNrZXJTcGVsbGluZ1VJSXNTaG93aW5nKShjb25z
dCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJUb2dnbGVT
cGVsbGluZ1VJSXNTaG93aW5nKShjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9p
ZCAoKldLVGV4dENoZWNrZXJVcGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKSh1aW50
NjRfdCB0YWcsIFdLU3RyaW5nUmVmIG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkICpjbGllbnRJ
bmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJVcGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgYmFkR3JhbW1hclBocmFzZSwg
V0tHcmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWwsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
OwogCiBzdHJ1Y3QgV0tUZXh0Q2hlY2tlckNsaWVudCB7CiAgICAgaW50ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVy
c2lvbjsKQEAgLTU5LDYgKzYxLDggQEAgc3RydWN0IFdLVGV4dENoZWNrZXJDbGllbnQgewogICAg
IFdLVGV4dENoZWNrZXJDaGVja0dyYW1tYXJPZlN0cmluZyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNoZWNrR3JhbW1hck9mU3RyaW5nOwogICAgIFdLVGV4dENoZWNrZXJT
cGVsbGluZ1VJSXNTaG93aW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNwZWxsaW5nVUlJc1Nob3dpbmc7CiAgICAgV0tUZXh0Q2hlY2tlclRvZ2dsZVNwZWxsaW5nVUlJ
c1Nob3dpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlU3BlbGxpbmdV
SUlzU2hvd2luZzsKKyAgICBXS1RleHRDaGVja2VyVXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVs
bGVkV29yZCAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkOworICAgIFdLVGV4dENoZWNrZXJVcGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZzsKIH07CiB0eXBlZGVmIHN0cnVjdCBXS1RleHRDaGVja2VyQ2xpZW50IFdLVGV4dENo
ZWNrZXJDbGllbnQ7CiAKQEAgLTY3LDYgKzcxLDggQEAgV0tfRVhQT1JUIHZvaWQgV0tUZXh0Q2hl
Y2tlclNldENsaWVudChjbwogV0tfRVhQT1JUIHZvaWQgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKTsKIFdLX0VYUE9SVCB2b2lkIFdL
VGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wpOwogCitX
S19FWFBPUlQgdm9pZCBXS1RleHRDaGVja2VyQ2hlY2tTcGVsbGluZyhXS1BhZ2VSZWYgcGFnZSwg
Ym9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbik7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1RleHRDaGVja2Vy
R3RrLmNwcAkocmV2aXNpb24gODM0MDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1RleHRDaGVja2VyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCB2b2lk
IFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFiCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZygpCitp
bnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSop
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKQEAgLTkwLDEyICs5MCwx
MiBAQCB2b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhN
aXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQordm9pZCBUZXh0Q2hl
Y2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBjb25zdCBT
dHJpbmcmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6
OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1t
YXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCit2b2lkIFRleHRD
aGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3Qg
U3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1h
Yy5tbQkocmV2aXNpb24gODM0MDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Rl
eHRDaGVja2VyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNyArMjExLDcgQEAgdm9pZCBU
ZXh0Q2hlY2tlcjo6dG9nZ2xlU3Vic3RpdHV0aW9uc1BhbgogICAgIFtzdWJzdGl0dXRpb25zUGFu
ZWwgb3JkZXJGcm9udDpuaWxdOwogfQogCi1pbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVs
bERvY3VtZW50VGFnKCkKK2ludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRU
YWcoV2ViUGFnZVByb3h5KikKIHsKICAgICByZXR1cm4gW05TU3BlbGxDaGVja2VyIHVuaXF1ZVNw
ZWxsRG9jdW1lbnRUYWddOwogfQpAQCAtMzM4LDEyICszMzgsMTIgQEAgdm9pZCBUZXh0Q2hlY2tl
cjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvdwogICAgICAgICBbc3BlbGxpbmdQYW5lbCBvcmRlckZy
b250Om5pbF07CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKK3ZvaWQgVGV4dENoZWNr
ZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCwgY29uc3QgU3Ry
aW5nJiBtaXNzcGVsbGVkV29yZCkKIHsKICAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxs
Q2hlY2tlcl0gdXBkYXRlU3BlbGxpbmdQYW5lbFdpdGhNaXNzcGVsbGVkV29yZDptaXNzcGVsbGVk
V29yZF07CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyhjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRh
aWwmIGdyYW1tYXJEZXRhaWwpCit2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBj
b25zdCBHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQogewogICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gY29ycmVjdGlvbnMoQWRvcHROUywgW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JhbW1hckRldGFpbC5ndWVzc2Vz
LnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENo
ZWNrZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3F0L1Rl
eHRDaGVja2VyUXQuY3BwCShyZXZpc2lvbiA4MzQwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9xdC9UZXh0Q2hlY2tlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBA
QCB2b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFiCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRh
ZygpCitpbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQ
cm94eSopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKQEAgLTkxLDEy
ICs5MSwxMiBAQCB2b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQordm9pZCBU
ZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90LCBj
b25zdCBTdHJpbmcmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGV4dENo
ZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmIGJh
ZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCit2b2lk
IFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwg
Y29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vVGV4dENoZWNrZXJX
aW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vVGV4dENo
ZWNrZXJXaW4uY3BwCShyZXZpc2lvbiA4MzQwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy93aW4vVGV4dENoZWNrZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw5ICs4Miw5IEBA
IHZvaWQgVGV4dENoZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWQKICAgICB0ZXh0Q2hlY2tl
clN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGVuYWJsZWQ7CiB9CiAKLWludDY0X3Qg
VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoKQoraW50NjRfdCBUZXh0Q2hlY2tl
cjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgcmV0
dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVu
dFRhZygpOworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVu
aXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmNsb3Nl
U3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCkBAIC0xMTIsMTQgKzExMiwxNCBAQCB2
b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93CiAgICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS50b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCk7CiB9CiAK
LXZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29u
c3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkKK3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBT
dHJpbmcmIG1pc3NwZWxsZWRXb3JkKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgV2Vi
VGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIG1pc3NwZWxsZWRXb3JkKTsKIH0KIAotdm9pZCBU
ZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkK
K3ZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhpbnQ2
NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29u
c3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdV
SVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIGJhZEdyYW1tYXJQaHJhc2UsIGdy
YW1tYXJEZXRhaWwpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChp
bnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5n
JiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy93aW4vV2ViR3JhbW1hckRldGFpbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWlsLmNwcAkocmV2aXNpb24gODM0
MDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYkdyYW1tYXJEZXRhaWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMSBAQCBQYXNzUmVmUHRyPFdlYkdyYW1tYXJE
ZXRhaWw+IFdlYkdyYW1tYXJECiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHcmFtbWFyRGV0
YWlsKGxvY2F0aW9uLCBsZW5ndGgsIGd1ZXNzZXMsIHVzZXJEZXNjcmlwdGlvbikpOwogfQogCitQ
YXNzUmVmUHRyPFdlYkdyYW1tYXJEZXRhaWw+IFdlYkdyYW1tYXJEZXRhaWw6OmNyZWF0ZShjb25z
dCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQoreworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViR3JhbW1hckRldGFpbChncmFtbWFyRGV0YWlsKSk7Cit9CisKIFdlYkdy
YW1tYXJEZXRhaWw6OldlYkdyYW1tYXJEZXRhaWwoaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoLCBJ
bW11dGFibGVBcnJheSogZ3Vlc3NlcywgY29uc3QgU3RyaW5nJiB1c2VyRGVzY3JpcHRpb24pCiB7
CiAgICAgbV9ncmFtbWFyRGV0YWlsLmxvY2F0aW9uID0gbG9jYXRpb247CkBAIC01MCw0ICs1NSwy
MSBAQCBXZWJHcmFtbWFyRGV0YWlsOjpXZWJHcmFtbWFyRGV0YWlsKGludCBsCiAgICAgbV9ncmFt
bWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9IHVzZXJEZXNjcmlwdGlvbjsKIH0KIAorUGFzc1Jl
ZlB0cjxJbW11dGFibGVBcnJheT4gV2ViR3JhbW1hckRldGFpbDo6Z3Vlc3NlcygpIGNvbnN0Cit7
CisgICAgc2l6ZV90IG51bUd1ZXNzZXMgPSBtX2dyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5zaXplKCk7
CisgICAgVmVjdG9yPFJlZlB0cjxBUElPYmplY3Q+ID4gd2tHdWVzc2VzOworICAgIHdrR3Vlc3Nl
cy5yZXNlcnZlQ2FwYWNpdHkobnVtR3Vlc3Nlcyk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bUd1ZXNzZXM7ICsraSkKKyAgICAgICAgd2tHdWVzc2VzLnVuY2hlY2tlZEFw
cGVuZChXZWJTdHJpbmc6OmNyZWF0ZShtX2dyYW1tYXJEZXRhaWwuZ3Vlc3Nlc1tpXSkpOworICAg
IAorICAgIHJldHVybiBJbW11dGFibGVBcnJheTo6YWRvcHQod2tHdWVzc2VzKTsKK30KKworV2Vi
R3JhbW1hckRldGFpbDo6V2ViR3JhbW1hckRldGFpbChjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0
YWlsJiBncmFtbWFyRGV0YWlsKQorICAgIDogbV9ncmFtbWFyRGV0YWlsKGdyYW1tYXJEZXRhaWwp
Cit7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWlsLmgJKHJldmlzaW9uIDgzNDA4KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJHcmFtbWFyRGV0YWlsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDExICszOSwxOCBAQCBjbGFzcyBXZWJHcmFtbWFyRGV0YWlsIDogcHVibGlj
IEFQSU9iamVjCiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVH
cmFtbWFyRGV0YWlsOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdyYW1tYXJEZXRhaWw+IGNy
ZWF0ZShpbnQgbG9jYXRpb24sIGludCBsZW5ndGgsIEltbXV0YWJsZUFycmF5KiBndWVzc2VzLCBj
b25zdCBTdHJpbmcmIHVzZXJEZXNjcmlwdGlvbik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
R3JhbW1hckRldGFpbD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKKwor
ICAgIGludCBsb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhbW1hckRldGFpbC5sb2NhdGlv
bjsgfQorICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2dyYW1tYXJEZXRhaWwubGVu
Z3RoOyB9CisgICAgUGFzc1JlZlB0cjxJbW11dGFibGVBcnJheT4gZ3Vlc3NlcygpIGNvbnN0Owor
ICAgIGNvbnN0IFN0cmluZyYgdXNlckRlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9ncmFt
bWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbjsgfQogCiAgICAgY29uc3QgV2ViQ29yZTo6R3JhbW1h
ckRldGFpbCYgZ3JhbW1hckRldGFpbCgpIHsgcmV0dXJuIG1fZ3JhbW1hckRldGFpbDsgfQogCiBw
cml2YXRlOgogICAgIFdlYkdyYW1tYXJEZXRhaWwoaW50IGxvY2F0aW9uLCBpbnQgbGVuZ3RoLCBJ
bW11dGFibGVBcnJheSogZ3Vlc3NlcywgY29uc3QgU3RyaW5nJiB1c2VyRGVzY3JpcHRpb24pOwor
ICAgIFdlYkdyYW1tYXJEZXRhaWwoY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOwogCiAg
ICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXIuY3BwCShy
ZXZpc2lvbiA4MzQwOCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENo
ZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw0ICs3MCw5IEBAIHZvaWQgV2ViVGV4dENo
ZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWIKICAgICB1cGRhdGVTdGF0ZUZvckFsbFdlYlByb2Nl
c3NlcygpOwogfQogCit2b2lkIFdlYlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nKGNvbnN0IFdl
YlBhZ2VQcm94eSogcGFnZSwgYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKK3sKKyAgICBwYWdl
LT5hZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoc3RhcnRCZWZvcmVTZWxlY3Rpb24pOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4v
V2ViVGV4dENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
d2luL1dlYlRleHRDaGVja2VyLmgJKHJldmlzaW9uIDgzNDA4KQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBXZWJQYWdlUHJveHk7CisKIGNs
YXNzIFdlYlRleHRDaGVja2VyIDogcHVibGljIEFQSU9iamVjdCB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIGNvbnN0IFR5cGUgQVBJVHlwZSA9IFR5cGVUZXh0Q2hlY2tlcjsKQEAgLTQ1LDYgKzQ3LDgg
QEAgcHVibGljOgogICAgIHZvaWQgY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVD
aGFuZ2VkKGJvb2wpOwogICAgIHZvaWQgZ3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdl
ZChib29sKTsKIAorICAgIHZvaWQgY2hlY2tTcGVsbGluZyhjb25zdCBXZWJQYWdlUHJveHkqLCBi
b29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsKKwogcHJpdmF0ZToKICAgICBXZWJUZXh0Q2hlY2tl
cigpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2Vy
Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dl
YlRleHRDaGVja2VyQ2xpZW50LmNwcAkocmV2aXNpb24gODM0MDgpCisrKyBTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldLU2hh
cmVkQVBJQ2FzdC5oIgogI2luY2x1ZGUgIldlYkdyYW1tYXJEZXRhaWwuaCIKKyNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CkBAIC03NCwxMiArNzUsMTIgQEAgdm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVu
dDo6c2V0R3JhbW1hckNoZQogICAgIG1fY2xpZW50LnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQo
ZW5hYmxlZCwgbV9jbGllbnQuY2xpZW50SW5mbyk7CiB9CiAKLXVpbnQ2NF90IFdlYlRleHRDaGVj
a2VyQ2xpZW50Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKCkKK3VpbnQ2NF90IFdlYlRleHRDaGVj
a2VyQ2xpZW50Ojp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKIHsK
ICAgICBpZiAoIW1fY2xpZW50LnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgcmV0dXJuIG1fY2xpZW50LnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcobV9jbGll
bnQuY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIG1fY2xpZW50LnVuaXF1ZVNwZWxsRG9jdW1lbnRU
YWcodG9BUEkocGFnZSksIG1fY2xpZW50LmNsaWVudEluZm8pOwogfQogCiB2b2lkIFdlYlRleHRD
aGVja2VyQ2xpZW50OjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHVpbnQ2NF90IHRhZykKQEAg
LTEyOCw0ICsxMjksMjAgQEAgdm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6dG9nZ2xlU3BlbGxp
bgogICAgIHJldHVybiBtX2NsaWVudC50b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKG1fY2xpZW50
LmNsaWVudEluZm8pOwogfQogCit2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50Ojp1cGRhdGVTcGVs
bGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiBtaXNz
cGVsbGVkV29yZCkKK3sKKyAgICBpZiAoIW1fY2xpZW50LnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlz
c3BlbGxlZFdvcmQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LnVwZGF0ZVNwZWxs
aW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQodGFnLCB0b0FQSShtaXNzcGVsbGVkV29yZC5pbXBsKCkp
LCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwordm9pZCBXZWJUZXh0Q2hlY2tlckNsaWVudDo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHVpbnQ2NF90IHRhZywgY29uc3QgU3Ry
aW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBncmFt
bWFyRGV0YWlsKQoreworICAgIGlmICghbV9jbGllbnQudXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFt
bWFyU3RyaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC51cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcodGFnLCB0b0FQSShiYWRHcmFtbWFyUGhyYXNlLmltcGwoKSks
IHRvQVBJKGdyYW1tYXJEZXRhaWwpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRl
eHRDaGVja2VyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5oCShyZXZpc2lvbiA4MzQwOCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsOCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xhc3MgV2ViUGFn
ZVByb3h5OworCiBjbGFzcyBXZWJUZXh0Q2hlY2tlckNsaWVudCA6IHB1YmxpYyBBUElDbGllbnQ8
V0tUZXh0Q2hlY2tlckNsaWVudD4gewogcHVibGljOgogICAgIGJvb2wgY29udGludW91c1NwZWxs
Q2hlY2tpbmdBbGxvd2VkKCk7CkBAIC00MSwxMiArNDMsMTQgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wpOwogICAgIGJvb2wgZ3JhbW1h
ckNoZWNraW5nRW5hYmxlZCgpOwogICAgIHZvaWQgc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChi
b29sKTsKLSAgICB1aW50NjRfdCB1bmlxdWVTcGVsbERvY3VtZW50VGFnKCk7CisgICAgdWludDY0
X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqKTsKICAgICB2b2lkIGNsb3Nl
U3BlbGxEb2N1bWVudFdpdGhUYWcodWludDY0X3QpOwogICAgIHZvaWQgY2hlY2tTcGVsbGluZ09m
U3RyaW5nKHVpbnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQzMl90JiBtaXNzcGVs
bGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCk7CiAgICAgdm9pZCBjaGVj
a0dyYW1tYXJPZlN0cmluZyh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9y
PFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBp
bnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKTsKICAgICBib29sIHNwZWxsaW5nVUlJc1Nob3dpbmco
KTsKICAgICB2b2lkIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyAgICB2b2lkIHVwZGF0
ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcm
IG1pc3NwZWxsZWRXb3JkKTsKKyAgICB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0
cmluZyh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3Qg
V2ViQ29yZTo6R3JhbW1hckRldGFpbCYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89071</attachid>
            <date>2011-04-11 13:40:35 -0700</date>
            <delta_ts>2011-04-11 14:34:25 -0700</delta_ts>
            <desc>Part 7</desc>
            <filename>spellingGrammarWindowsOpensourcePart7.patch</filename>
            <type>text/plain</type>
            <size>13023</size>
            <attacher name="Jessie Berlin">jberlin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNDg2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDQtMTEgIEplc3NpZSBC
ZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBXZWJLaXQyOiBJbXBsZW1lbnQgVGV4dENoZWNrZXIgb24gV2lu
ZG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4
NjIKKworICAgICAgICBQYXJ0IDc6IEltcGxlbWVudCBnZXRHdWVzc2VzRm9yV29yZCwgbGVhcm5X
b3JkLCBhbmQgaWdub3JlV29yZC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tU
ZXh0Q2hlY2tlci5jcHA6CisgICAgICAgIChXS1RleHRDaGVja2VyQ2hhbmdlU3BlbGxpbmdUb1dv
cmQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oOgorCisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6Y2hhbmdlU3BlbGxpbmdUb1dvcmQpOgorICAgICAgICBNYWtlIHRoaXMgZnVu
Y3Rpb24gY29uc3Qgc2luY2UgaXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBXZWJQYWdlUHJveHkgYW5k
IG1ha2luZyBpdCBjb25zdAorICAgICAgICBhbGxvd3MgV2ViVGV4dENoZWNrZXI6OmNoYW5nZVNw
ZWxsaW5nVG9Xb3JkIHRvIHRha2UgYSBjb25zdCBXZWJQYWdlUHJveHkuCisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2VQcm94eTo6bGVhcm5Xb3JkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lmg6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvVGV4dENoZWNrZXIuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3Mvd2luL1RleHRDaGVja2VyV2luLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgQXNrIHRoZSBUZXh0Q2hlY2tl
ckNsaWVudCBmb3IgdGhlIGd1ZXNzZXMuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjps
ZWFybldvcmQpOgorICAgICAgICBUZWxsIHRoZSBUZXh0Q2hlY2tlckNsaWVudC4KKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNrZXI6Omlnbm9yZVdvcmQpOgorICAgICAgICBEaXR0by4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
VGV4dENoZWNrZXI6OmxlYXJuV29yZCk6CisgICAgICAgIEFkZCBhbiB1bnVzZWQgcGFyYW0gdGhh
dCBpcyBuZWNlc3NhcnkgZm9yIFdpbmRvd3MuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9UZXh0
Q2hlY2tlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmxlYXJuV29yZCk6
CisgICAgICAgIERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9xdC9UZXh0Q2hlY2tlclF0LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmxlYXJuV29yZCk6CisgICAgICAgIERp
dHRvLgorCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlci5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlRleHRDaGVja2VyOjpjaGFuZ2VTcGVsbGluZ1RvV29yZCk6CisgICAg
ICAgIFRlbGwgdGhlIHBhZ2UuCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tl
ci5oOgorCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlRleHRDaGVja2VyQ2xpZW50OjpndWVzc2VzRm9yV29yZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRleHRDaGVja2VyQ2xpZW50OjpsZWFybldvcmQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUZXh0Q2hlY2tlckNsaWVudDo6aWdub3JlV29yZCk6CisgICAgICAg
ICogVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNsaWVudC5oOgorCiAyMDExLTA0LTExICBB
bmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU2FtIFdlaW5pZy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5o
CShyZXZpc2lvbiA4MzQ1MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
dm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3Qgc3BlbGxEb2N1
bWVudFRhZywgY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCk7CiAgICAgc3RhdGljIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRh
ZywgY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFy
RGV0YWlsJik7CiAgICAgc3RhdGljIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwg
VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpOwotICAgIHN0YXRpYyB2b2lkIGxlYXJuV29yZChjb25z
dCBTdHJpbmcmIHdvcmQpOworICAgIHN0YXRpYyB2b2lkIGxlYXJuV29yZChpbnQ2NF90IHNwZWxs
RG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCk7CiAgICAgc3RhdGljIHZvaWQgaWdub3Jl
V29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCk7CiB9Owog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAkocmV2aXNp
b24gODM0NTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM1NSw3ICsyMzU1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmFk
dmFuY2VUb05leHRNaXNzcGVsbAogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6QWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKHN0YXJ0QmVmb3JlU2VsZWN0aW9uKSwgbV9wYWdl
SUQpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6Y2hhbmdlU3BlbGxpbmdUb1dvcmQoY29uc3Qg
U3RyaW5nJiB3b3JkKQordm9pZCBXZWJQYWdlUHJveHk6OmNoYW5nZVNwZWxsaW5nVG9Xb3JkKGNv
bnN0IFN0cmluZyYgd29yZCkgY29uc3QKIHsKICAgICBpZiAod29yZC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTI0NTEsNyArMjQ1MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpsZWFy
bldvcmQoY29uc3QgU3RyaW4KICAgICBNRVNTQUdFX0NIRUNLKG1fcGVuZGluZ0xlYXJuT3JJZ25v
cmVXb3JkTWVzc2FnZUNvdW50KTsKICAgICAtLW1fcGVuZGluZ0xlYXJuT3JJZ25vcmVXb3JkTWVz
c2FnZUNvdW50OwogCi0gICAgVGV4dENoZWNrZXI6OmxlYXJuV29yZCh3b3JkKTsKKyAgICBUZXh0
Q2hlY2tlcjo6bGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcoKSwgd29yZCk7CiB9CiAKIHZvaWQg
V2ViUGFnZVByb3h5OjppZ25vcmVXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDgzNDUyKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NDcsNyArNDQ3LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICB2b2lkIGFkdmFuY2VUb05leHRN
aXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKSBjb25zdDsKLSAgICB2b2lkIGNo
YW5nZVNwZWxsaW5nVG9Xb3JkKGNvbnN0IFN0cmluZyYgd29yZCk7CisgICAgdm9pZCBjaGFuZ2VT
cGVsbGluZ1RvV29yZChjb25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0OwogICAgIHZvaWQgdW5tYXJr
QWxsTWlzc3BlbGxpbmdzKCk7CiAgICAgdm9pZCB1bm1hcmtBbGxCYWRHcmFtbWFyKCk7CiAjaWYg
UExBVEZPUk0oTUFDKQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL3dpbi9X
S1RleHRDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0Mvd2luL1dLVGV4dENoZWNrZXIuY3BwCShyZXZpc2lvbiA4MzQ1MikKKysrIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDMgKzUzLDggQEAgdm9pZCBXS1RleHRDaGVja2VyQ2hlY2tTcGVsbGluZyhXS1Bh
Z2VSZQogewogICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2hlY2tTcGVsbGluZyh0b0lt
cGwocGFnZSksIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsKIH0KKwordm9pZCBXS1RleHRDaGVja2Vy
Q2hhbmdlU3BlbGxpbmdUb1dvcmQoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHdvcmQpCit7
CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jaGFuZ2VTcGVsbGluZ1RvV29yZCh0b0lt
cGwocGFnZSksIHRvV1RGU3RyaW5nKHdvcmQpKTsKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5oCShyZXZpc2lvbiA4MzQ1
MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy93aW4vV0tUZXh0Q2hlY2tlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw5IEBAIHR5cGVkZWYgYm9vbCAoKldLVGV4dENo
ZWNrZXJTcGVsbGluZ1VJSXMKIHR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJUb2dnbGVTcGVs
bGluZ1VJSXNTaG93aW5nKShjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKIHR5cGVkZWYgdm9pZCAo
KldLVGV4dENoZWNrZXJVcGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKSh1aW50NjRf
dCB0YWcsIFdLU3RyaW5nUmVmIG1pc3NwZWxsZWRXb3JkLCBjb25zdCB2b2lkICpjbGllbnRJbmZv
KTsKIHR5cGVkZWYgdm9pZCAoKldLVGV4dENoZWNrZXJVcGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1t
YXJTdHJpbmcpKHVpbnQ2NF90IHRhZywgV0tTdHJpbmdSZWYgYmFkR3JhbW1hclBocmFzZSwgV0tH
cmFtbWFyRGV0YWlsUmVmIGdyYW1tYXJEZXRhaWwsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwor
dHlwZWRlZiBXS0FycmF5UmVmICgqV0tUZXh0Q2hlY2tlckd1ZXNzZXNGb3JXb3JkKSh1aW50NjRf
dCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pOwordHlwZWRl
ZiB2b2lkICgqV0tUZXh0Q2hlY2tlckxlYXJuV29yZCkodWludDY0X3QgdGFnLCBXS1N0cmluZ1Jl
ZiB3b3JkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLVGV4dENo
ZWNrZXJJZ25vcmVXb3JkKSh1aW50NjRfdCB0YWcsIFdLU3RyaW5nUmVmIHdvcmQsIGNvbnN0IHZv
aWQgKmNsaWVudEluZm8pOwogCiBzdHJ1Y3QgV0tUZXh0Q2hlY2tlckNsaWVudCB7CiAgICAgaW50
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmVyc2lvbjsKQEAgLTYzLDYgKzY2LDkgQEAgc3RydWN0IFdLVGV4dENoZWNr
ZXJDbGllbnQgewogICAgIFdLVGV4dENoZWNrZXJUb2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmc7
CiAgICAgV0tUZXh0Q2hlY2tlclVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQgICAg
ICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZDsK
ICAgICBXS1RleHRDaGVja2VyVXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmc7Cisg
ICAgV0tUZXh0Q2hlY2tlckd1ZXNzZXNGb3JXb3JkICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3Vlc3Nlc0ZvcldvcmQ7CisgICAgV0tUZXh0Q2hlY2tlckxlYXJu
V29yZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVh
cm5Xb3JkOworICAgIFdLVGV4dENoZWNrZXJJZ25vcmVXb3JkICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZVdvcmQ7CiB9OwogdHlwZWRlZiBzdHJ1
Y3QgV0tUZXh0Q2hlY2tlckNsaWVudCBXS1RleHRDaGVja2VyQ2xpZW50OwogCkBAIC03Miw2ICs3
OCw3IEBAIFdLX0VYUE9SVCB2b2lkIFdLVGV4dENoZWNrZXJDb250aW51b3VzU3AKIFdLX0VYUE9S
VCB2b2lkIFdLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJv
b2wpOwogCiBXS19FWFBPUlQgdm9pZCBXS1RleHRDaGVja2VyQ2hlY2tTcGVsbGluZyhXS1BhZ2VS
ZWYgcGFnZSwgYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbik7CitXS19FWFBPUlQgdm9pZCBXS1Rl
eHRDaGVja2VyQ2hhbmdlU3BlbGxpbmdUb1dvcmQoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVm
IHdvcmQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwCShyZXZpc2lvbiA4MzQ1MikKKysr
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0Zv
cldvcmQoaW50NgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6
OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHdvcmQpCit2b2lkIFRleHRDaGVja2VyOjpsZWFybldv
cmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJ
bmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFjLm1t
CShyZXZpc2lvbiA4MzQ1MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENo
ZWNrZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3Nyw3ICszNzcsNyBAQCB2b2lkIFRleHRD
aGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2CiAgICAgICAgIGd1ZXNzZXMuYXBwZW5kKGd1
ZXNzKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYgd29y
ZCkKK3ZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90LCBjb25zdCBTdHJpbmcmIHdv
cmQpCiB7CiAgICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGxlYXJuV29y
ZDp3b3JkXTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9xdC9UZXh0Q2hlY2tl
clF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvcXQvVGV4dENo
ZWNrZXJRdC5jcHAJKHJldmlzaW9uIDgzNDUyKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3F0L1RleHRDaGVja2VyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNyArMTA2LDcgQEAg
dm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NgogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHdv
cmQpCit2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCwgY29uc3QgU3RyaW5nJikK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHAJKHJldmlzaW9uIDgzNDUyKQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9UZXh0Q2hlY2tlcldpbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNCwxNyArMTI0LDE3IEBAIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3IKIAogdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBz
cGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4
dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxs
RG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpsZWFy
bldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQordm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5sZWFy
bldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6Omln
bm9yZVdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNs
aWVudCgpLmlnbm9yZVdvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0
Q2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9X
ZWJUZXh0Q2hlY2tlci5jcHAJKHJldmlzaW9uIDgzNDUyKQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJXZWJUZXh0Q2hlY2tlci5oIgogCiAjaW5jbHVkZSAiVGV4dENoZWNr
ZXIuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCkBAIC03NSw0ICs3Niw5IEBAIHZvaWQgV2ViVGV4dENo
ZWNrZXI6OmNoZWNrU3BlbGxpbmcoY29uc3QKICAgICBwYWdlLT5hZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcoc3RhcnRCZWZvcmVTZWxlY3Rpb24pOwogfQogCit2b2lkIFdlYlRleHRDaGVja2VyOjpj
aGFuZ2VTcGVsbGluZ1RvV29yZChjb25zdCBXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IFN0cmlu
ZyYgdGV4dCkKK3sKKyAgICBwYWdlLT5jaGFuZ2VTcGVsbGluZ1RvV29yZCh0ZXh0KTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2lu
L1dlYlRleHRDaGVja2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3dpbi9XZWJUZXh0Q2hlY2tlci5oCShyZXZpc2lvbiA4MzQ1MikKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiAr
NDgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKGJvb2wpOwogCiAgICAgdm9pZCBjaGVja1NwZWxsaW5nKGNvbnN0IFdlYlBhZ2VQcm94eSos
IGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pOworICAgIHZvaWQgY2hhbmdlU3BlbGxpbmdUb1dv
cmQoY29uc3QgV2ViUGFnZVByb3h5KiwgY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6CiAgICAg
V2ViVGV4dENoZWNrZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2Vi
VGV4dENoZWNrZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuY3BwCShyZXZpc2lvbiA4MzQ1MikKKysrIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViVGV4dENoZWNrZXJDbGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNDUsNCArMTQ1LDMxIEBAIHZvaWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6
OnVwZGF0ZVNwZWxsaW4KICAgICBtX2NsaWVudC51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcodGFnLCB0b0FQSShiYWRHcmFtbWFyUGhyYXNlLmltcGwoKSksIHRvQVBJKGdyYW1tYXJE
ZXRhaWwpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKIH0KIAordm9pZCBXZWJUZXh0Q2hlY2tlckNs
aWVudDo6Z3Vlc3Nlc0ZvcldvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIFZl
Y3RvcjxTdHJpbmc+JiBndWVzc2VzKQoreworICAgIGlmICghbV9jbGllbnQuZ3Vlc3Nlc0Zvcldv
cmQpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbW11dGFibGVBcnJheT4gd2tHdWVz
c2VzID0gYWRvcHRSZWYodG9JbXBsKG1fY2xpZW50Lmd1ZXNzZXNGb3JXb3JkKHRhZywgdG9BUEko
d29yZC5pbXBsKCkpLCBtX2NsaWVudC5jbGllbnRJbmZvKSkpOworICAgIHNpemVfdCBudW1HdWVz
c2VzID0gd2tHdWVzc2VzLT5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1H
dWVzc2VzOyArK2kpCisgICAgICAgIGd1ZXNzZXMuYXBwZW5kKHdrR3Vlc3Nlcy0+YXQ8V2ViU3Ry
aW5nPihpKS0+c3RyaW5nKCkpOworfQorCit2b2lkIFdlYlRleHRDaGVja2VyQ2xpZW50OjpsZWFy
bldvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCit7CisgICAgaWYgKCFtX2Ns
aWVudC5sZWFybldvcmQpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY2xpZW50LmxlYXJuV29y
ZCh0YWcsIHRvQVBJKHdvcmQuaW1wbCgpKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3Zv
aWQgV2ViVGV4dENoZWNrZXJDbGllbnQ6Omlnbm9yZVdvcmQodWludDY0X3QgdGFnLCBjb25zdCBT
dHJpbmcmIHdvcmQpCit7CisgICAgaWYgKCFtX2NsaWVudC5pZ25vcmVXb3JkKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NsaWVudC5pZ25vcmVXb3JkKHRhZywgdG9BUEkod29yZC5pbXBsKCkp
LCBtX2NsaWVudC5jbGllbnRJbmZvKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlRleHRDaGVja2VyQ2xpZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJUZXh0Q2hlY2tlckNs
aWVudC5oCShyZXZpc2lvbiA4MzQ1MikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4v
V2ViVGV4dENoZWNrZXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCk7CiAgICAgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHVpbnQ2NF90IHRhZywgY29uc3QgU3Ry
aW5nJiBtaXNzcGVsbGVkV29yZCk7CiAgICAgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1t
YXJTdHJpbmcodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNv
bnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKTsKKyAgICB2b2lkIGd1ZXNzZXNGb3JXb3JkKHVp
bnQ2NF90IHRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlcyk7
CisgICAgdm9pZCBsZWFybldvcmQodWludDY0X3QgdGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpOwor
ICAgIHZvaWQgaWdub3JlV29yZCh1aW50NjRfdCB0YWcsIGNvbnN0IFN0cmluZyYgd29yZCk7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
      

    </bug>

</bugzilla>