<?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>25677</bug_id>
          
          <creation_ts>2009-05-10 15:14:37 -0700</creation_ts>
          <short_desc>[GTK] Implement support for get_character_extents and get_range_extents</short_desc>
          <delta_ts>2010-08-02 10:53:25 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>30883</dependson>
          <blocked>25531</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Joanmarie Diggs">jdiggs</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mario</cc>
    
    <cc>walker.willie</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>120579</commentid>
    <comment_count>0</comment_count>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-05-10 15:14:37 -0700</bug_when>
    <thetext>The accessible text interface includes methods to get the extents of a given character (get_character_extents) and a range of characters (get_range_extents). For more information please see http://library.gnome.org/devel/atk/unstable/AtkText.html.

There are various and sundry reasons why an AT might need to know the extents of a character or range of characters. The most immediate needs in terms of Orca are:

1. Determining if two characters from different objects happen to be on the same line or not for the purpose of accurately presenting the line contents to a user. 

2. Identifying the extents of a character, word, or line for the purpose of drawing a rectangle around the block of text being &quot;reviewed&quot; in Orca&apos;s Flat Review mode.

Currently the two methods in question always return extents of (0, 0, 0, 0).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169182</commentid>
    <comment_count>1</comment_count>
      <attachid>44386</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-12-06 22:34:38 -0800</bug_when>
    <thetext>Created attachment 44386
work in progress (lacks test)

Presumably I will be asked to create a test for this. I&apos;m still mulling over what that test should be, as the nature of the functionality is highly dependent upon font, window size, and window position. I&apos;ll come up with something.... Anyhoo, I&apos;m not bothering to ask for a review yet due to the testlessness.

That said.... I wouldn&apos;t mind a reality check/informal review of this to make sure I&apos;m not out in left field. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175093</commentid>
    <comment_count>2</comment_count>
      <attachid>45535</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-12-27 14:35:28 -0800</bug_when>
    <thetext>Created attachment 45535
proposed fix, includes unit test

Essentially [1] the same patch as before, but with a unit test added.

Notes:

1. The change to the code proper between the previous version and this version is the addition of some sanity checking for two possible conditions:

a. A call to atk_text_get_range_extents() is made with an end offset of -1 (to represent the last character). This is extremely likely to occur. I wasn&apos;t handling it before. That having been said, now that it&apos;s being handled here, it turns out that we&apos;re claiming some pretty bogus extents for end offset of -1. After much hair pulling, I started examining the values from other applications (e.g. Gedit, Firefox) under the same conditions. The results were equally (and in some cases more) bogus. So this is not a WebKit bug. Once I track down the true source of this bug (gail perhaps?) and it gets fixed, I believe we will automatically start doing the right thing here.

b. A call to atk_text_get_range_extents() is made with an end offset that is greater than the last character. Our choices are (0, 0, 0, 0) and to assume that the caller erred but wants the extents for the range of text beginning with the start offset provided through the final character.  Personally, I think we should go with the latter, and have done so in this version of the patch. If anyone feels strongly otherwise, I can rip that bit out.

2. Since unit tests are designed (as I understand it) to test platform-specific API calls, this new functionality seemed to call out for a unit test rather than a layout test. I believe you&apos;ll find that the unit test I wrote is quite thorough and that it avoids (I hope) the potential for inconsistent results based on the environment of the individual (or bot) running the test.

The disadvantage seems to be that we can&apos;t test the coordinate type of ATK_XY_SCREEN; just ATK_XY_WINDOW. When I attempt to add ATK_XY_SCREEN to the unit test, the test aborts with the following error:

~~~~~
Gdk-CRITICAL **: gdk_window_get_origin: assertion `GDK_IS_WINDOW (window)&apos; failed
aborting...
~~~~~

I presume this is because unit tests don&apos;t cause an actual window to be rendered. :-)

a. Is it possible to write a unit test which forces an actual window to be rendered?

b. Do we care?

On the latter front, I&apos;m not convinced it&apos;s a big deal given that we will be thoroughly testing the window-based extents via the included unit test. And I think that it might be more trouble than it&apos;s worth to generate a layout test which presumably has the potential for inconsistent results (i.e. failures) based on the environment of the individual (or bot) running the test. But, I&apos;ll of course do whatever y&apos;all suggest.

Finally, I just added my test to testatk.c. I&apos;m not sure at what point it might be worth splitting the Atk unit tests up. If now is the time, please let me know. If now is not the time.... I&apos;m guessing that the style queue bot is going to spit up on this patch due to the new test adhering to the style guidelines for C++ and not the style guidelines for C. Last time this issue came up, Xan said to not change the test and to disregard the style bot in this particular instance. I&apos;m sticking with that advice until I hear otherwise. :-)

Please review. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>175094</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-27 14:40:16 -0800</bug_when>
    <thetext>Attachment 45535 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/gtk/tests/testatk.c:369:  test_webkit_atk_get_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/gtk/tests/testatk.c:371:  Declaration has space between * and variable name in WebKitWebView* webView  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:372:  Declaration has space between * and variable name in AtkObject* obj  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:373:  Declaration has space between * and variable name in GMainLoop* loop  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:390:  Declaration has space between * and variable name in AtkText* text_obj_line1  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:390:  text_obj_line1 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/gtk/tests/testatk.c:392:  Declaration has space between * and variable name in AtkText* text_obj_line2  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:392:  text_obj_line2 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/gtk/tests/testatk.c:394:  Declaration has space between * and variable name in AtkText* text_obj_line3  [whitespace/declaration] [3]
WebKit/gtk/tests/testatk.c:394:  text_obj_line3 is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/gtk/tests/testatk.c:398:  rect1_window is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/gtk/tests/testatk.c:398:  rect2_window is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/gtk/tests/testatk.c:398:  rect3_window is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1002:  webkit_accessible_text_get_character_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1011:  webkit_accessible_text_get_range_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 15</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176117</commentid>
    <comment_count>4</comment_count>
      <attachid>45535</attachid>
    <who name="Joanmarie Diggs">jdiggs</who>
    <bug_when>2009-12-30 19:52:22 -0800</bug_when>
    <thetext>Comment on attachment 45535
proposed fix, includes unit test

Clearing the review flag as the test -- and possibly the fix itself -- may be impacted by the fix for bug 30883.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256886</commentid>
    <comment_count>5</comment_count>
      <attachid>62755</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-07-27 15:21:33 -0700</bug_when>
    <thetext>Created attachment 62755
Patch proposal + unit tests

Attaching a new patch to address this issue, based on the original one provided by Joanmarie + addressing the following issues:

  - Adapted code to work with all the changes that have happened since the original one was written, that is, as Joanmarie calls it... The Great Flattening (I love this name) :-)
  - Adapted unit tests in the testatk.c file to test the get_character_extents() and get_range_extents() functions for the AtkText interface, after all the changes that were done
  - Checked how it works with non &quot;pure text&quot; node, such as links, headings, groups or webareas

Eager to read some feedback on it, but now time to go to bed.

Greetings from GUADEC!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256888</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-27 15:24:11 -0700</bug_when>
    <thetext>Attachment 62755 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;WebKit/gtk/tests/testatk.c&quot;
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1290:  webkit_accessible_text_get_character_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1299:  webkit_accessible_text_get_range_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>256889</commentid>
    <comment_count>7</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-07-27 15:26:04 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Attachment 62755 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
&gt; WARNING: File exempt from style guide. Skipping: &quot;WebKit/gtk/tests/testatk.c&quot;
&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1290:  webkit_accessible_text_get_character_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1299:  webkit_accessible_text_get_range_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; Total errors found: 2 in 6 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

Same problem always... can&apos;t fix this because that&apos;s the common naming style policy in that file, sorry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257763</commentid>
    <comment_count>8</comment_count>
      <attachid>62755</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-29 10:57:56 -0700</bug_when>
    <thetext>Comment on attachment 62755
Patch proposal + unit tests

WebCore/accessibility/AccessibilityObject.cpp:380
 +  
you could do here
if (!textLength) {
   Node* node = node();
   if (node) {
      RenderText* renderText = toRenderText(node-&gt;renderer());
  }


WebCore/accessibility/AccessibilityObject.cpp:381
 +          // Plain text a11y object first
don&apos;t use made up words like a11y. make sure to write full sentences for your comments

WebCore/accessibility/AccessibilityObject.cpp:386
 +          if (isWebArea() || isGroup() || isLink() || isHeading()) {
this should be else if, no?

WebCore/accessibility/AccessibilityObject.cpp:389
 +              textLength = textValue.length();
can&apos;t you do textLength = textUnderElement().length();

WebCore/accessibility/AccessibilityObject.cpp:387
 +              // Check composite objects just in case
this comment should go above the if and should be a full sentence. you should also enumerate what &quot;just in case&quot; means

WebCore/accessibility/AccessibilityRenderObject.cpp:2414
 +  #else
you also check isWebArea in the other locations. do you not want to do it here?

WebCore/accessibility/AccessibilityObject.cpp:387
 +              // Check composite objects just in case
make sure to end comments with a period

WebCore/accessibility/AccessibilityRenderObject.cpp:2676
 +      bool isTextObject =  isTextControl() || m_renderer-&gt;isText()
too much white space

WebCore/accessibility/AccessibilityRenderObject.cpp:2680
 +  #endif
instead of doing this PLATFORM stuff and enumerating in each instance, i think you should have a platform specific method on AccessibilityObject, like

AccessibilityObject::allowsTextRanges() or something appropriate

then in your AccessibilityObjectGTK.cpp you can override. for the other platforms you can have the default impl live in AccessibilityObject and do what it does now

WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1270
 +          rangeLength = textLength;
if the rangelength == 0 are you sure you want to reset to the text length?

WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1276
 +  
i don&apos;t see renderObject being used anywhere</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>257765</commentid>
    <comment_count>9</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-07-29 10:58:33 -0700</bug_when>
    <thetext>formatting of this review seems messed up. sorry bout that

(In reply to comment #8)
&gt; (From update of attachment 62755 [details])
&gt; WebCore/accessibility/AccessibilityObject.cpp:380
&gt;  +  
&gt; you could do here
&gt; if (!textLength) {
&gt;    Node* node = node();
&gt;    if (node) {
&gt;       RenderText* renderText = toRenderText(node-&gt;renderer());
&gt;   }
&gt; 
&gt; 
&gt; WebCore/accessibility/AccessibilityObject.cpp:381
&gt;  +          // Plain text a11y object first
&gt; don&apos;t use made up words like a11y. make sure to write full sentences for your comments
&gt; 
&gt; WebCore/accessibility/AccessibilityObject.cpp:386
&gt;  +          if (isWebArea() || isGroup() || isLink() || isHeading()) {
&gt; this should be else if, no?
&gt; 
&gt; WebCore/accessibility/AccessibilityObject.cpp:389
&gt;  +              textLength = textValue.length();
&gt; can&apos;t you do textLength = textUnderElement().length();
&gt; 
&gt; WebCore/accessibility/AccessibilityObject.cpp:387
&gt;  +              // Check composite objects just in case
&gt; this comment should go above the if and should be a full sentence. you should also enumerate what &quot;just in case&quot; means
&gt; 
&gt; WebCore/accessibility/AccessibilityRenderObject.cpp:2414
&gt;  +  #else
&gt; you also check isWebArea in the other locations. do you not want to do it here?
&gt; 
&gt; WebCore/accessibility/AccessibilityObject.cpp:387
&gt;  +              // Check composite objects just in case
&gt; make sure to end comments with a period
&gt; 
&gt; WebCore/accessibility/AccessibilityRenderObject.cpp:2676
&gt;  +      bool isTextObject =  isTextControl() || m_renderer-&gt;isText()
&gt; too much white space
&gt; 
&gt; WebCore/accessibility/AccessibilityRenderObject.cpp:2680
&gt;  +  #endif
&gt; instead of doing this PLATFORM stuff and enumerating in each instance, i think you should have a platform specific method on AccessibilityObject, like
&gt; 
&gt; AccessibilityObject::allowsTextRanges() or something appropriate
&gt; 
&gt; then in your AccessibilityObjectGTK.cpp you can override. for the other platforms you can have the default impl live in AccessibilityObject and do what it does now
&gt; 
&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1270
&gt;  +          rangeLength = textLength;
&gt; if the rangelength == 0 are you sure you want to reset to the text length?
&gt; 
&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1276
&gt;  +  
&gt; i don&apos;t see renderObject being used anywhere</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258779</commentid>
    <comment_count>10</comment_count>
      <attachid>63189</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-08-02 04:30:06 -0700</bug_when>
    <thetext>Created attachment 63189
Patch proposal + unit tests

(In reply to comment #8)
&gt; (From update of attachment 62755 [details])
&gt; WebCore/accessibility/AccessibilityObject.cpp:380
&gt;  +  
&gt; you could do here
&gt; if (!textLength) {
&gt;    Node* node = node();
&gt;    if (node) {
&gt;       RenderText* renderText = toRenderText(node-&gt;renderer());
&gt;   }

True. Done.

&gt; WebCore/accessibility/AccessibilityObject.cpp:381
&gt;  +          // Plain text a11y object first
&gt; don&apos;t use made up words like a11y. make sure to write full sentences for your comments

Fixed, sorry.

&gt; WebCore/accessibility/AccessibilityObject.cpp:386
&gt;  +          if (isWebArea() || isGroup() || isLink() || isHeading()) {
&gt; this should be else if, no?

Not really, because I want to enter even if I entered the previous if branch, when textLength keeps being zero.

However it&apos;s true something was missing there, an extra check for !textLengh:

   [...]
   if (renderText)
       textLength = renderText-&gt;textLength();

   // Get the text length from the elements under the
   // accessibility object if not a RenderText object.
   if (!textLength &amp;&amp; allowsTextRanges())
       textLength = textUnderElement().length();
   [...]

&gt; WebCore/accessibility/AccessibilityObject.cpp:389
&gt;  +              textLength = textValue.length();
&gt; can&apos;t you do textLength = textUnderElement().length();

Done, as you can see in the snipped above.

&gt; WebCore/accessibility/AccessibilityObject.cpp:387
&gt;  +              // Check composite objects just in case
&gt; this comment should go above the if and should be a full sentence. you should also enumerate what &quot;just in case&quot; means

Done, as you can see in the snipped above.
 
&gt; WebCore/accessibility/AccessibilityRenderObject.cpp:2414
&gt;  +  #else
&gt; you also check isWebArea in the other locations. do you not want to do it here?

You were right. Fixed in the new AccessibilityObject::allowsTextRange() function

&gt; WebCore/accessibility/AccessibilityObject.cpp:387
&gt;  +              // Check composite objects just in case
&gt; make sure to end comments with a period

Done
 
&gt; WebCore/accessibility/AccessibilityRenderObject.cpp:2676
&gt;  +      bool isTextObject =  isTextControl() || m_renderer-&gt;isText()
&gt; too much white space

Fixed

&gt; WebCore/accessibility/AccessibilityRenderObject.cpp:2680
&gt;  +  #endif
&gt; instead of doing this PLATFORM stuff and enumerating in each instance, i think you should have a platform specific method on AccessibilityObject, like
&gt; 
&gt; AccessibilityObject::allowsTextRanges() or something appropriate
&gt; 
&gt; then in your AccessibilityObjectGTK.cpp you can override. for the other platforms you can have the default impl live in AccessibilityObject and do what it does now

Fixed, by creating such a function as you suggessted (I agree it&apos;s better that way).

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1270
&gt;  +          rangeLength = textLength;
&gt; if the rangelength == 0 are you sure you want to reset to the text length?

Technically, that never will happen (as code inside ATK library won&apos;t allow that), but I agree with you it&apos;s strange to do it so, so I&apos;ve changed that &lt;= to just &lt;.

&gt; WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1276
&gt;  +  
&gt; i don&apos;t see renderObject being used anywhere

True, looks like it belongs to some previous version of the patch and I&apos;ve just overlooked it. Sorry for the noise

Now attaching a new version of the patch addressing all these issues. Thanks for the feedback, Chris</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258781</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-02 04:32:23 -0700</bug_when>
    <thetext>Attachment 63189 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;WebKit/gtk/tests/testatk.c&quot;
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1286:  webkit_accessible_text_get_character_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1295:  webkit_accessible_text_get_range_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258784</commentid>
    <comment_count>12</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-08-02 04:36:29 -0700</bug_when>
    <thetext>Attachment 63189 did not build on qt:
Build output: http://queues.webkit.org/results/3590797</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258812</commentid>
    <comment_count>13</comment_count>
      <attachid>63202</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2010-08-02 05:40:51 -0700</bug_when>
    <thetext>Created attachment 63202
Patch proposal + unit tests

(In reply to comment #12)
&gt; Attachment 63189 [details] did not build on qt:
&gt; Build output: http://queues.webkit.org/results/3590797

Attached new version of this patch fixing this issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258814</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-02 05:44:18 -0700</bug_when>
    <thetext>Attachment 63202 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WARNING: File exempt from style guide. Skipping: &quot;WebKit/gtk/tests/testatk.c&quot;
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1286:  webkit_accessible_text_get_character_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:1295:  webkit_accessible_text_get_range_extents is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258937</commentid>
    <comment_count>15</comment_count>
      <attachid>63202</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2010-08-02 10:00:05 -0700</bug_when>
    <thetext>Comment on attachment 63202
Patch proposal + unit tests

Thanks
r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258979</commentid>
    <comment_count>16</comment_count>
      <attachid>63202</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-02 10:53:19 -0700</bug_when>
    <thetext>Comment on attachment 63202
Patch proposal + unit tests

Clearing flags on attachment: 63202

Committed r64475: &lt;http://trac.webkit.org/changeset/64475&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>258980</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-02 10:53:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44386</attachid>
            <date>2009-12-06 22:34:38 -0800</date>
            <delta_ts>2009-12-27 14:35:28 -0800</delta_ts>
            <desc>work in progress (lacks test)</desc>
            <filename>25677-1.patch</filename>
            <type>text/plain</type>
            <size>6885</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">RnJvbSA4MjgzY2RiZjU2MTBmMGU3MmNkYjc1MzI2N2IzZjcwNzcyYjBkYTcyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FubWFyaWUgRGlnZ3MgPGpvYW5tYXJpZS5kaWdnc0BnbWFp
bC5jb20+CkRhdGU6IE1vbiwgNyBEZWMgMjAwOSAwMToyMzowMiAtMDUwMApTdWJqZWN0OiBbUEFU
Q0hdIDIwMDktMTItMDcgIEpvYW5tYXJpZSBEaWdncyAgPGpvYW5tYXJpZS5kaWdnc0BnbWFpbC5j
b20+CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU2NzcKICAgICAgICBbR1RLXSBJbXBs
ZW1lbnQgc3VwcG9ydCBmb3IgZ2V0X2NoYXJhY3Rlcl9leHRlbnRzIGFuZCBnZXRfcmFuZ2VfZXh0
ZW50cwoKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQXRrLmNwcDoKICAgICAgICAodGV4dEV4dGVudHMpOgogICAgICAgICh3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyk6CiAgICAgICAgKHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMpOgogICAgICAgIChhdGtfdGV4dF9pbnRlcmZhY2Vf
aW5pdCk6CiAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgog
ICAgICAgIChBY2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdl
KToKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6
CiAgICAgICAgKEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5nZSk6
Ci0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDE3ICsrKysrKysrKysrKwogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwICAgICAgfCAgIDExICsrKysrKystCiAuLi4vYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcCAgICB8ICAgIDcgKysrKy0KIC4uLi9ndGsvQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwICAgICAgICAgIHwgICAyNyArKysrKysrKysrKysrKy0t
LS0tCiA0IGZpbGVzIGNoYW5nZWQsIDUzIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4
MmY1Mjg1Li40NjJiZDYwIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDA5LTEyLTA3ICBKb2FubWFyaWUgRGln
Z3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNTY3NworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgZ2V0X2No
YXJhY3Rlcl9leHRlbnRzIGFuZCBnZXRfcmFuZ2VfZXh0ZW50cworCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAgICAgICAo
dGV4dEV4dGVudHMpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFj
dGVyX2V4dGVudHMpOgorICAgICAgICAod2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfcmFuZ2Vf
ZXh0ZW50cyk6CisgICAgICAgIChhdGtfdGV4dF9pbnRlcmZhY2VfaW5pdCk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKEFjY2Vzc2li
aWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2UpOgorCiAyMDA5LTEyLTA2
ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
TWFjaWVqIFN0YWNob3dpYWsuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKaW5kZXggNTg1ZTRjYi4uN2ZjMGJkNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtMzY5LDcgKzM2OSwxNiBAQCBWaXNp
YmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHlsZVJhbmdlRm9yUG9zaXRp
b24oY29uc3QgVmlzaWJsZVBvcwogLy8gTk9URTogQ29uc2lkZXIgcHJvdmlkaW5nIHRoaXMgdXRp
bGl0eSBtZXRob2QgYXMgQVggQVBJCiBWaXNpYmxlUG9zaXRpb25SYW5nZSBBY2Nlc3NpYmlsaXR5
T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdl
JiByYW5nZSkgY29uc3QKIHsKLSAgICBpZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPiB0
ZXh0KCkubGVuZ3RoKCkpCisgICAgdW5zaWduZWQgdGV4dExlbmd0aCA9IHRleHQoKS5sZW5ndGgo
KTsKKyNpZiBQTEFURk9STShHVEspCisgICAgLy8gR3RrIEFUcyBuZWVkIHRoaXMgZm9yIGFsbCB0
ZXh0IG9iamVjdHM7IG5vdCBqdXN0IHRleHQgY29udHJvbHMuCisgICAgaWYgKCF0ZXh0TGVuZ3Ro
ICYmIGlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKSB7CisgICAgICAgIFJlbmRlclRleHQq
IHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQoc3RhdGljX2Nhc3Q8Y29uc3QgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdCo+KHRoaXMpLT5yZW5kZXJlcigpKTsKKyAgICAgICAgaWYgKHJlbmRlclRl
eHQpCisgICAgICAgICAgICB0ZXh0TGVuZ3RoID0gcmVuZGVyVGV4dC0+dGV4dExlbmd0aCgpOwor
ICAgIH0KKyNlbmRpZgorICAgIGlmIChyYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCA+IHRleHRM
ZW5ndGgpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOwogCiAgICAgVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5n
ZS5zdGFydCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKaW5kZXggYzU3ZGQ5Mi4uZWNhNWRlZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMjM1MSw3
ICsyMzUxLDEyIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYU3RyaW5n
Rm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlCiAvLyBvbiB0aGUgZGlzcGxheSBz
Y3JlZW4sIGluIHBpeGVscy4KIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9B
WEJvdW5kc0ZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAg
ICBpZiAoaXNUZXh0Q29udHJvbCgpKQorI2lmIFBMQVRGT1JNKEdUSykKKyAgICBib29sIGlzVGV4
dE9iamVjdCA9IGlzVGV4dENvbnRyb2woKSB8fCBpc1dlYkFyZWEoKSB8fCByZW5kZXJlcigpLT5p
c1RleHQoKTsKKyNlbHNlCisgICAgYm9vbCBpc1RleHRPYmplY3QgPSBpc1RleHRDb250cm9sKCk7
CisjZW5kaWYKKyAgICBpZiAoaXNUZXh0T2JqZWN0KQogICAgICAgICByZXR1cm4gYm91bmRzRm9y
VmlzaWJsZVBvc2l0aW9uUmFuZ2UodmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShyYW5nZSkp
OwogICAgIHJldHVybiBJbnRSZWN0KCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDMw
ODAwN2MuLmZlYjRhZGUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC05NDEsMjkgKzk0MSw0
MSBAQCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9k
ZWZhdWx0X2F0dHJpYnV0ZXMoQXRrVGV4dCogdAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMg
dm9pZCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhBdGtUZXh0
KiB0ZXh0LCBnaW50IG9mZnNldCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGgsIGdpbnQq
IGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkcykKK3N0YXRpYyBJbnRSZWN0IHRleHRFeHRlbnRz
KEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgQXRrQ29v
cmRUeXBlIGNvb3JkcykKIHsKLSAgICBJbnRSZWN0IGV4dGVudHMgPSBjb3JlKHRleHQpLT5kb0FY
Qm91bmRzRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uob2Zmc2V0LCAxKSk7Ci0gICAgLy8gRklYTUU6
IFVzZSB0aGUgQXRrQ29vcmRUeXBlCi0gICAgLy8gUmVxdWlyZXMgV2ViQ29yZTo6U2Nyb2xsVmll
dzo6Y29udGVudHNUb1NjcmVlbigpIHRvIGJlIGltcGxlbWVudGVkCisgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgSW50UmVjdCBleHRlbnRzID0g
Y29yZU9iamVjdC0+ZG9BWEJvdW5kc0ZvclJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0T2Zmc2V0
LCBsZW5ndGgpKTsKIAotI2lmIDAKICAgICBzd2l0Y2goY29vcmRzKSB7CiAgICAgY2FzZSBBVEtf
WFlfU0NSRUVOOgotICAgICAgICBleHRlbnRzID0gY29yZSh0ZXh0KS0+ZG9jdW1lbnQoKS0+dmll
dygpLT5jb250ZW50c1RvU2NyZWVuKGV4dGVudHMpOworICAgICAgICBleHRlbnRzID0gY29yZU9i
amVjdC0+ZG9jdW1lbnQoKS0+dmlldygpLT5jb250ZW50c1RvU2NyZWVuKGV4dGVudHMpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIEFUS19YWV9XSU5ET1c6CiAgICAgICAgIC8vIE5vLW9wCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSNlbmRpZgogCisgICAgcmV0dXJuIGV4dGVudHM7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRz
KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0
aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUgY29vcmRzKQoreworICAgIEludFJlY3QgZXh0
ZW50cyA9IHRleHRFeHRlbnRzKHRleHQsIG9mZnNldCwgMSwgY29vcmRzKTsKICAgICAqeCA9IGV4
dGVudHMueCgpOwogICAgICp5ID0gZXh0ZW50cy55KCk7CiAgICAgKndpZHRoID0gZXh0ZW50cy53
aWR0aCgpOwogICAgICpoZWlnaHQgPSBleHRlbnRzLmhlaWdodCgpOwogfQogCitzdGF0aWMgdm9p
ZCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9yYW5nZV9leHRlbnRzKEF0a1RleHQqIHRleHQs
IGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0LCBBdGtDb29yZFR5cGUgY29vcmRzLCBB
dGtUZXh0UmVjdGFuZ2xlKiByZWN0KQoreworICAgIEludFJlY3QgZXh0ZW50cyA9IHRleHRFeHRl
bnRzKHRleHQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCArIDEsIGNvb3Jk
cyk7CisgICAgcmVjdC0+eCA9IGV4dGVudHMueCgpOworICAgIHJlY3QtPnkgPSBleHRlbnRzLnko
KTsKKyAgICByZWN0LT53aWR0aCA9IGV4dGVudHMud2lkdGgoKTsKKyAgICByZWN0LT5oZWlnaHQg
PSBleHRlbnRzLmhlaWdodCgpOworfQorCiBzdGF0aWMgZ2ludCB3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQoQXRrVGV4dCogdGV4dCkKIHsKICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKQEAgLTEwNzMsNiArMTA4NSw3IEBA
IHN0YXRpYyB2b2lkIGF0a190ZXh0X2ludGVyZmFjZV9pbml0KEF0a1RleHRJZmFjZSogaWZhY2Up
CiAgICAgaWZhY2UtPmdldF9ydW5fYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRf
Z2V0X3J1bl9hdHRyaWJ1dGVzOwogICAgIGlmYWNlLT5nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzID0g
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzOwogICAgIGlmYWNl
LT5nZXRfY2hhcmFjdGVyX2V4dGVudHMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFy
YWN0ZXJfZXh0ZW50czsKKyAgICBpZmFjZS0+Z2V0X3JhbmdlX2V4dGVudHMgPSB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X2dldF9yYW5nZV9leHRlbnRzOwogICAgIGlmYWNlLT5nZXRfY2hhcmFjdGVy
X2NvdW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50OwogICAg
IGlmYWNlLT5nZXRfb2Zmc2V0X2F0X3BvaW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRf
b2Zmc2V0X2F0X3BvaW50OwogICAgIGlmYWNlLT5nZXRfbl9zZWxlY3Rpb25zID0gd2Via2l0X2Fj
Y2Vzc2libGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zOwotLSAKMS42LjMuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45535</attachid>
            <date>2009-12-27 14:35:28 -0800</date>
            <delta_ts>2010-06-10 20:02:36 -0700</delta_ts>
            <desc>proposed fix, includes unit test</desc>
            <filename>25677-2.patch</filename>
            <type>text/plain</type>
            <size>13088</size>
            <attacher name="Joanmarie Diggs">jdiggs</attacher>
            
              <data encoding="base64">RnJvbSBhMDQ1ZDYyMjFiYWIxYmE1NGE0N2JhMzdjYmJiMGQwODgzNzAyZDAyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2FubWFyaWUgRGlnZ3MgPGpkQHZibG9ja2hlYWQuKG5vbmUp
PgpEYXRlOiBTdW4sIDI3IERlYyAyMDA5IDE3OjIyOjQzIC0wNTAwClN1YmplY3Q6IFtQQVRDSF0g
MjAwOS0xMi0yNyAgSm9hbm1hcmllIERpZ2dzICA8am9hbm1hcmllLmRpZ2dzQGdtYWlsLmNvbT4K
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTY3NwogICAgICAgIFtHVEtdIEltcGxlbWVu
dCBzdXBwb3J0IGZvciBnZXRfY2hhcmFjdGVyX2V4dGVudHMgYW5kIGdldF9yYW5nZV9leHRlbnRz
CgogICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJB
dGsuY3BwOgogICAgICAgICh0ZXh0RXh0ZW50cyk6CiAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxl
X3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKToKICAgICAgICAod2Via2l0X2FjY2Vzc2libGVf
dGV4dF9nZXRfcmFuZ2VfZXh0ZW50cyk6CiAgICAgICAgKGF0a190ZXh0X2ludGVyZmFjZV9pbml0
KToKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CiAgICAg
ICAgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UpOgog
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKICAg
ICAgICAoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BWEJvdW5kc0ZvclJhbmdlKToKLS0t
CiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTcgKysrKwogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwICAg
ICAgfCAgIDExICsrLQogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAgICAgfCAgICA3ICsrLQogLi4uL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0
ay5jcHAgICAgICAgICAgfCAgIDMxICsrKysrLS0KIFdlYktpdC9ndGsvQ2hhbmdlTG9nICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMSArKysKIFdlYktpdC9ndGsvdGVzdHMvdGVz
dGF0ay5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4OSArKysrKysrKysrKysrKysrKysr
KwogNiBmaWxlcyBjaGFuZ2VkLCAxNTcgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU5
ZWM2MzcuLmQ1MzQzYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMTItMjcgIEpvYW5tYXJpZSBEaWdn
cyAgPGpvYW5tYXJpZS5kaWdnc0BnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTI1Njc3CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBzdXBwb3J0IGZvciBnZXRfY2hh
cmFjdGVyX2V4dGVudHMgYW5kIGdldF9yYW5nZV9leHRlbnRzCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHA6CisgICAgICAgICh0
ZXh0RXh0ZW50cyk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0
ZXJfZXh0ZW50cyk6CisgICAgICAgICh3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9yYW5nZV9l
eHRlbnRzKToKKyAgICAgICAgKGF0a190ZXh0X2ludGVyZmFjZV9pbml0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhCb3VuZHNGb3JSYW5nZSk6CisKIDIwMDktMTItMjcg
IE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwCmluZGV4IGNlOTEwMjYuLjIwNGM4YWUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTM2OSw3ICszNjksMTYgQEAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3R5bGVSYW5nZUZvclBv
c2l0aW9uKGNvbnN0IFZpc2libGVQb3MKIC8vIE5PVEU6IENvbnNpZGVyIHByb3ZpZGluZyB0aGlz
IHV0aWxpdHkgbWV0aG9kIGFzIEFYIEFQSQogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJp
bGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGFpblRleHRS
YW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgaWYgKHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3Ro
ID4gdGV4dCgpLmxlbmd0aCgpKQorICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0KCkubGVu
Z3RoKCk7CisjaWYgUExBVEZPUk0oR1RLKQorICAgIC8vIEd0ayBBVHMgbmVlZCB0aGlzIGZvciBh
bGwgdGV4dCBvYmplY3RzOyBub3QganVzdCB0ZXh0IGNvbnRyb2xzLgorICAgIGlmICghdGV4dExl
bmd0aCAmJiBpc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkgeworICAgICAgICBSZW5kZXJU
ZXh0KiByZW5kZXJUZXh0ID0gdG9SZW5kZXJUZXh0KHN0YXRpY19jYXN0PGNvbnN0IEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QqPih0aGlzKS0+cmVuZGVyZXIoKSk7CisgICAgICAgIGlmIChyZW5k
ZXJUZXh0KQorICAgICAgICAgICAgdGV4dExlbmd0aCA9IHJlbmRlclRleHQtPnRleHRMZW5ndGgo
KTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPiB0
ZXh0TGVuZ3RoKQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKIAogICAg
IFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgo
cmFuZ2Uuc3RhcnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDA1Yjk3MGQuLmQ3ODE4ODMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTIz
OTEsNyArMjM5MSwxMiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BWFN0
cmluZ0ZvclJhbmdlKGNvbnN0IFBsYWluVGV4dFJhbmdlJiByYW5nZQogLy8gb24gdGhlIGRpc3Bs
YXkgc2NyZWVuLCBpbiBwaXhlbHMuCiBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmRvQVhCb3VuZHNGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7
Ci0gICAgaWYgKGlzVGV4dENvbnRyb2woKSkKKyNpZiBQTEFURk9STShHVEspCisgICAgYm9vbCBp
c1RleHRPYmplY3QgPSBpc1RleHRDb250cm9sKCkgfHwgaXNXZWJBcmVhKCkgfHwgcmVuZGVyZXIo
KS0+aXNUZXh0KCk7CisjZWxzZQorICAgIGJvb2wgaXNUZXh0T2JqZWN0ID0gaXNUZXh0Q29udHJv
bCgpOworI2VuZGlmCisgICAgaWYgKGlzVGV4dE9iamVjdCkKICAgICAgICAgcmV0dXJuIGJvdW5k
c0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UocmFu
Z2UpKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAgYi9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAppbmRl
eCAxNmVhOTQ4Li41ZTI4YTFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3Rr
L0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtOTc4LDI5ICs5
NzgsNDUgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKEF0a1RleHQqIHQKICAgICByZXR1cm4gMDsKIH0KIAotc3Rh
dGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoQXRr
VGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIGdpbnQqIHgsIGdpbnQqIHksIGdpbnQqIHdpZHRoLCBn
aW50KiBoZWlnaHQsIEF0a0Nvb3JkVHlwZSBjb29yZHMpCitzdGF0aWMgSW50UmVjdCB0ZXh0RXh0
ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGxlbmd0aCwgQXRrQ29v
cmRUeXBlIGNvb3JkcykKIHsKLSAgICBJbnRSZWN0IGV4dGVudHMgPSBjb3JlKHRleHQpLT5kb0FY
Qm91bmRzRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uob2Zmc2V0LCAxKSk7Ci0gICAgLy8gRklYTUU6
IFVzZSB0aGUgQXRrQ29vcmRUeXBlCi0gICAgLy8gUmVxdWlyZXMgV2ViQ29yZTo6U2Nyb2xsVmll
dzo6Y29udGVudHNUb1NjcmVlbigpIHRvIGJlIGltcGxlbWVudGVkCisgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CisgICAgZ2ludCB0ZXh0TGVuZ3RoID0g
Y29yZU9iamVjdC0+c3RyaW5nVmFsdWUoKS5sZW5ndGgoKTsKKyAgICAvLyBUaGUgZmlyc3QgY2Fz
ZSAoZW5kT2Zmc2V0IG9mIC0xKSBzaG91bGQgd29yaywgYnV0IHNlZW1zIGJyb2tlbiBmb3IgYWxs
IEd0aysgYXBwcy4KKyAgICBpZiAobGVuZ3RoIDw9IDAgfHwgbGVuZ3RoIC0gc3RhcnRPZmZzZXQg
PiB0ZXh0TGVuZ3RoKQorICAgICAgICBsZW5ndGggPSB0ZXh0TGVuZ3RoIC0gc3RhcnRPZmZzZXQ7
CiAKLSNpZiAwCisgICAgSW50UmVjdCBleHRlbnRzID0gY29yZU9iamVjdC0+ZG9BWEJvdW5kc0Zv
clJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCBsZW5ndGgpKTsKICAgICBzd2l0Y2go
Y29vcmRzKSB7CiAgICAgY2FzZSBBVEtfWFlfU0NSRUVOOgotICAgICAgICBleHRlbnRzID0gY29y
ZSh0ZXh0KS0+ZG9jdW1lbnQoKS0+dmlldygpLT5jb250ZW50c1RvU2NyZWVuKGV4dGVudHMpOwor
ICAgICAgICBleHRlbnRzID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKS0+dmlldygpLT5jb250ZW50
c1RvU2NyZWVuKGV4dGVudHMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFUS19YWV9XSU5E
T1c6CiAgICAgICAgIC8vIE5vLW9wCiAgICAgICAgIGJyZWFrOwogICAgIH0KLSNlbmRpZgogCisg
ICAgcmV0dXJuIGV4dGVudHM7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3Rl
eHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50
KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUgY29v
cmRzKQoreworICAgIEludFJlY3QgZXh0ZW50cyA9IHRleHRFeHRlbnRzKHRleHQsIG9mZnNldCwg
MSwgY29vcmRzKTsKICAgICAqeCA9IGV4dGVudHMueCgpOwogICAgICp5ID0gZXh0ZW50cy55KCk7
CiAgICAgKndpZHRoID0gZXh0ZW50cy53aWR0aCgpOwogICAgICpoZWlnaHQgPSBleHRlbnRzLmhl
aWdodCgpOwogfQogCitzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9yYW5n
ZV9leHRlbnRzKEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0
LCBBdGtDb29yZFR5cGUgY29vcmRzLCBBdGtUZXh0UmVjdGFuZ2xlKiByZWN0KQoreworICAgIElu
dFJlY3QgZXh0ZW50cyA9IHRleHRFeHRlbnRzKHRleHQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQg
LSBzdGFydE9mZnNldCArIDEsIGNvb3Jkcyk7CisgICAgcmVjdC0+eCA9IGV4dGVudHMueCgpOwor
ICAgIHJlY3QtPnkgPSBleHRlbnRzLnkoKTsKKyAgICByZWN0LT53aWR0aCA9IGV4dGVudHMud2lk
dGgoKTsKKyAgICByZWN0LT5oZWlnaHQgPSBleHRlbnRzLmhlaWdodCgpOworfQorCiBzdGF0aWMg
Z2ludCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQoQXRrVGV4dCog
dGV4dCkKIHsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0
KTsKQEAgLTExMTAsNiArMTEyNiw3IEBAIHN0YXRpYyB2b2lkIGF0a190ZXh0X2ludGVyZmFjZV9p
bml0KEF0a1RleHRJZmFjZSogaWZhY2UpCiAgICAgaWZhY2UtPmdldF9ydW5fYXR0cmlidXRlcyA9
IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3J1bl9hdHRyaWJ1dGVzOwogICAgIGlmYWNlLT5n
ZXRfZGVmYXVsdF9hdHRyaWJ1dGVzID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfZGVmYXVs
dF9hdHRyaWJ1dGVzOwogICAgIGlmYWNlLT5nZXRfY2hhcmFjdGVyX2V4dGVudHMgPSB3ZWJraXRf
YWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50czsKKyAgICBpZmFjZS0+Z2V0X3Jh
bmdlX2V4dGVudHMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9yYW5nZV9leHRlbnRzOwog
ICAgIGlmYWNlLT5nZXRfY2hhcmFjdGVyX2NvdW50ID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfY2hhcmFjdGVyX2NvdW50OwogICAgIGlmYWNlLT5nZXRfb2Zmc2V0X2F0X3BvaW50ID0gd2Vi
a2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfb2Zmc2V0X2F0X3BvaW50OwogICAgIGlmYWNlLT5nZXRf
bl9zZWxlY3Rpb25zID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfbl9zZWxlY3Rpb25zOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpp
bmRleCA2ZmQyZmQzLi41Yzk2NjNlIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwor
KysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDA5LTEyLTI3ICBK
b2FubWFyaWUgRGlnZ3MgIDxqb2FubWFyaWUuZGlnZ3NAZ21haWwuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNTY3NworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgc3VwcG9y
dCBmb3IgZ2V0X2NoYXJhY3Rlcl9leHRlbnRzIGFuZCBnZXRfcmFuZ2VfZXh0ZW50cworCisgICAg
ICAgICogdGVzdHMvdGVzdGF0ay5jCisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X2V4dGVu
dHMpOgorICAgICAgICAobWFpbik6CisKIDIwMDktMTItMjAgIEd1c3Rhdm8gTm9yb25oYSBTaWx2
YSAgPGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgWGFuIExvcGV6LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMgYi9X
ZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwppbmRleCBjNWY0ZGIzLi5kZDc0NzZiIDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rl
c3RhdGsuYwpAQCAtMzQsNiArMzQsOCBAQCBzdGF0aWMgY29uc3QgY2hhciogY29udGVudHNJblRl
eHRhcmVhID0gIjxodG1sPjxib2R5Pjx0ZXh0YXJlYSBjb2xzPSc4MCc+VGhpcyBpcwogCiBzdGF0
aWMgY29uc3QgY2hhciogY29udGVudHNJblRleHRJbnB1dCA9ICI8aHRtbD48Ym9keT48aW5wdXQg
dHlwZT0ndGV4dCcgc2l6ZT0nODAnIHZhbHVlPSdUaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUg
c2Vjb25kIHNlbnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuJy8+PC9ib2R5PjwvaHRtbD4iOwog
CitzdGF0aWMgY29uc3QgY2hhciogY2VudGVyZWRDb250ZW50cyA9ICI8aHRtbD48Ym9keT48cCBz
dHlsZT0ndGV4dC1hbGlnbjogY2VudGVyOyc+U2hvcnQgbGluZTxiciAvPk1lZGl1bS1zaXplZCBs
aW5lPGJyIC8+U2hvcnQgbGluZTwvcD48L2JvZHk+PC9odG1sPiI7CisKIHN0YXRpYyBnYm9vbGVh
biBiYWlsX291dChHTWFpbkxvb3AqIGxvb3ApCiB7CiAgICAgaWYgKGdfbWFpbl9sb29wX2lzX3J1
bm5pbmcobG9vcCkpCkBAIC0zNjQsNiArMzY2LDkyIEBAIHN0YXRpYyB2b2lkIHRlc3Rfd2Via2l0
X2F0a19nZXRfdGV4dF9hdF9vZmZzZXRfdGV4dF9pbnB1dCh2b2lkKQogICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYlZpZXcpOwogfQogCitzdGF0aWMgdm9pZCB0ZXN0X3dlYmtpdF9hdGtfZ2V0X2V4dGVu
dHModm9pZCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgIEF0a09iamVjdCog
b2JqOworICAgIEdNYWluTG9vcCogbG9vcDsKKworICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKKyAgICBnX29iamVjdF9yZWZfc2luayh3ZWJWaWV3
KTsKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jID0geyAwLCAwLCA4MDAsIDYwMCB9OworICAgIGd0
a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShHVEtfV0lER0VUKHdlYlZpZXcpLCAmYWxsb2MpOworICAg
IHdlYmtpdF93ZWJfdmlld19sb2FkX3N0cmluZyh3ZWJWaWV3LCBjZW50ZXJlZENvbnRlbnRzLCBO
VUxMLCBOVUxMLCBOVUxMKTsKKyAgICBsb29wID0gZ19tYWluX2xvb3BfbmV3KE5VTEwsIFRSVUUp
OworCisgICAgZ190aW1lb3V0X2FkZCgxMDAsIChHU291cmNlRnVuYyliYWlsX291dCwgbG9vcCk7
CisgICAgZ19tYWluX2xvb3BfcnVuKGxvb3ApOworCisgICAgb2JqID0gZ3RrX3dpZGdldF9nZXRf
YWNjZXNzaWJsZShHVEtfV0lER0VUKHdlYlZpZXcpKTsKKyAgICBnX2Fzc2VydChvYmopOworICAg
IG9iaiA9IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCAwKTsKKyAgICBnX2Fz
c2VydChvYmopOworCisgICAgQXRrVGV4dCogdGV4dF9vYmpfbGluZTEgPSBBVEtfVEVYVChhdGtf
b2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMCkpOworICAgIGdfYXNzZXJ0KEFUS19J
U19URVhUKHRleHRfb2JqX2xpbmUxKSk7CisgICAgQXRrVGV4dCogdGV4dF9vYmpfbGluZTIgPSBB
VEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMSkpOworICAgIGdf
YXNzZXJ0KEFUS19JU19URVhUKHRleHRfb2JqX2xpbmUyKSk7CisgICAgQXRrVGV4dCogdGV4dF9v
YmpfbGluZTMgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwg
MikpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHRleHRfb2JqX2xpbmUzKSk7CisKKyAgICAv
LyBTdGFydCB3aXRoIHdpbmRvdyBleHRlbnRzLgorICAgIEF0a1RleHRSZWN0YW5nbGUgcmVjdDFf
d2luZG93LCByZWN0Ml93aW5kb3csIHJlY3QzX3dpbmRvdzsKKyAgICBhdGtfdGV4dF9nZXRfcmFu
Z2VfZXh0ZW50cyh0ZXh0X29ial9saW5lMSwgMCwgMTAsIEFUS19YWV9XSU5ET1csICZyZWN0MV93
aW5kb3cpOworICAgIGF0a190ZXh0X2dldF9yYW5nZV9leHRlbnRzKHRleHRfb2JqX2xpbmUyLCAw
LCAxNywgQVRLX1hZX1dJTkRPVywgJnJlY3QyX3dpbmRvdyk7CisgICAgYXRrX3RleHRfZ2V0X3Jh
bmdlX2V4dGVudHModGV4dF9vYmpfbGluZTMsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmcmVjdDNf
d2luZG93KTsKKworICAgIC8vIENoZWNrIHZlcnRpY2FsIGxpbmUgcG9zaXRpb24uCisgICAgZ19h
c3NlcnRfY21waW50KHJlY3QxX3dpbmRvdy55ICsgcmVjdDFfd2luZG93LmhlaWdodCwgPD0sIHJl
Y3QyX3dpbmRvdy55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQocmVjdDJfd2luZG93LnkgKyByZWN0
Ml93aW5kb3cuaGVpZ2h0LCA8PSwgcmVjdDNfd2luZG93LnkpOworCisgICAgLy8gTGluZXMgMSBh
bmQgMyBoYXZlIGlkZW50aWNhbCB0ZXh0IGFuZCBhbGlnbm1lbnQuCisgICAgZ19hc3NlcnRfY21w
aW50KHJlY3QxX3dpbmRvdy54LCA9PSwgcmVjdDNfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2Nt
cGludChyZWN0MV93aW5kb3cud2lkdGgsID09LCByZWN0M193aW5kb3cud2lkdGgpOworICAgIGdf
YXNzZXJ0X2NtcGludChyZWN0MV93aW5kb3cuaGVpZ2h0LCA9PSwgcmVjdDNfd2luZG93LmhlaWdo
dCk7CisKKyAgICAvLyBBbGwgbGluZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGhlaWdodDsgbGluZSAy
IGlzIHRoZSB3aWRlc3QgbGluZS4KKyAgICBnX2Fzc2VydF9jbXBpbnQocmVjdDFfd2luZG93Lmhl
aWdodCwgPT0sIHJlY3QyX3dpbmRvdy5oZWlnaHQpOworICAgIGdfYXNzZXJ0X2NtcGludChyZWN0
MV93aW5kb3cud2lkdGgsIDwsIHJlY3QyX3dpbmRvdy53aWR0aCk7CisKKyAgICAvLyBNYWtlIHN1
cmUgdGhlIGNoYXJhY3RlciBleHRlbnRzIGppdmUgd2l0aCB0aGUgcmFuZ2UgZXh0ZW50cy4KKyAg
ICBnaW50IHgsIHksIHdpZHRoLCBoZWlnaHQ7CisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9l
eHRlbnRzKHRleHRfb2JqX2xpbmUxLCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZ
X1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCByZWN0MV93aW5kb3cueCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHksID09LCByZWN0MV93aW5kb3cueSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGhlaWdodCwgPT0sIHJlY3QxX3dpbmRvdy5oZWlnaHQpOworCisgICAgYXRrX3RleHRf
Z2V0X2NoYXJhY3Rlcl9leHRlbnRzKHRleHRfb2JqX2xpbmUxLCA5LCAmeCwgJnksICZ3aWR0aCwg
JmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCByZWN0
MV93aW5kb3cueCArIHJlY3QxX3dpbmRvdy53aWR0aCAtIHdpZHRoKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoeSwgPT0sIHJlY3QxX3dpbmRvdy55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0
LCA9PSwgcmVjdDFfd2luZG93LmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVy
X2V4dGVudHModGV4dF9vYmpfbGluZTIsIDAsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtf
WFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHJlY3QyX3dpbmRvdy54KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHJlY3QyX3dpbmRvdy55KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoaGVpZ2h0LCA9PSwgcmVjdDJfd2luZG93LmhlaWdodCk7CisKKyAgICBhdGtfdGV4
dF9nZXRfY2hhcmFjdGVyX2V4dGVudHModGV4dF9vYmpfbGluZTIsIDE2LCAmeCwgJnksICZ3aWR0
aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBy
ZWN0Ml93aW5kb3cueCArIHJlY3QyX3dpbmRvdy53aWR0aCAtIHdpZHRoKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoeSwgPT0sIHJlY3QyX3dpbmRvdy55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVp
Z2h0LCA9PSwgcmVjdDJfd2luZG93LmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFj
dGVyX2V4dGVudHModGV4dF9vYmpfbGluZTMsIDAsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBB
VEtfWFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHJlY3QzX3dpbmRvdy54
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIHJlY3QzX3dpbmRvdy55KTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgcmVjdDNfd2luZG93LmhlaWdodCk7CisKKyAgICBhdGtf
dGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHModGV4dF9vYmpfbGluZTMsIDksICZ4LCAmeSwgJndp
ZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0s
IHJlY3QzX3dpbmRvdy54ICsgcmVjdDNfd2luZG93LndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNz
ZXJ0X2NtcGludCh5LCA9PSwgcmVjdDNfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludCho
ZWlnaHQsID09LCByZWN0M193aW5kb3cuaGVpZ2h0KTsKKworICAgIGdfb2JqZWN0X3VucmVmKHRl
eHRfb2JqX2xpbmUxKTsKKyAgICBnX29iamVjdF91bnJlZih0ZXh0X29ial9saW5lMik7CisgICAg
Z19vYmplY3RfdW5yZWYodGV4dF9vYmpfbGluZTMpOworICAgIGdfb2JqZWN0X3VucmVmKG9iaik7
CisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlldyk7Cit9CisKIGludCBtYWluKGludCBhcmdjLCBj
aGFyKiogYXJndikKIHsKICAgICBnX3RocmVhZF9pbml0KE5VTEwpOwpAQCAtMzc1LDYgKzQ2Myw3
IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBnX3Rlc3RfYWRkX2Z1bmMo
Ii93ZWJraXQvYXRrL2dldF90ZXh0X2F0X29mZnNldF9uZXdsaW5lcyIsIHRlc3Rfd2Via2l0X2F0
a19nZXRfdGV4dF9hdF9vZmZzZXRfbmV3bGluZXMpOwogICAgIGdfdGVzdF9hZGRfZnVuYygiL3dl
YmtpdC9hdGsvZ2V0X3RleHRfYXRfb2Zmc2V0X3RleHRhcmVhIiwgdGVzdF93ZWJraXRfYXRrX2dl
dF90ZXh0X2F0X29mZnNldF90ZXh0YXJlYSk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2F0ay9nZXRfdGV4dF9hdF9vZmZzZXRfdGV4dF9pbnB1dCIsIHRlc3Rfd2Via2l0X2F0a19nZXRf
dGV4dF9hdF9vZmZzZXRfdGV4dF9pbnB1dCk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0
L2F0ay9nZXRfZXh0ZW50cyIsIHRlc3Rfd2Via2l0X2F0a19nZXRfZXh0ZW50cyk7CiAgICAgcmV0
dXJuIGdfdGVzdF9ydW4gKCk7CiB9CiAKLS0gCjEuNi41Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62755</attachid>
            <date>2010-07-27 15:21:33 -0700</date>
            <delta_ts>2010-08-02 04:30:06 -0700</delta_ts>
            <desc>Patch proposal + unit tests</desc>
            <filename>0001-2010-07-27-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>17206</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBjNWEzOWYxMTUyNjE0YTlkNjM1NzA0OTI0YjFiNTNkYmQzYzAwZDEwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDI4IEp1bCAyMDEwIDAwOjEzOjExICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMC0wNy0yNyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgoKICAgICAgICBbR1RLXSBJbXBs
ZW1lbnQgc3VwcG9ydCBmb3IgZ2V0X2NoYXJhY3Rlcl9leHRlbnRzIGFuZCBnZXRfcmFuZ2VfZXh0
ZW50cwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTY3
NwoKICAgICAgICBJbXBsZW1lbnQgZ2V0X3JhbmdlX2V4dGVudHMoKSBhbmQgbW9kaWZ5IGdldF9j
aGFyYWN0ZXJfZXh0ZW50cygpCiAgICAgICAgdG8gcHJvcGVybHkgd29yayBhZnRlciBUaGUgR3Jl
YXQgRmxhdHRlbmluZyBvY2N1cnJlZCBpbiB0aGUgQVRLCiAgICAgICAgb2JqZWN0cyBoaWVyYXJj
aHksIHNvbWUgbW9udGhzIGFnby4gRnJvbSBub3cgb24sIG5vdCBqdXN0IHRoZSB0ZXh0CiAgICAg
ICAgY29udHJvbHMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBpdCBjb21lcyB0byB0aGVzZSBm
dW5jdGlvbnMgYnV0CiAgICAgICAgdmlydHVhbGx5IGFueSBvYmplY3QgdGhhdCB3b3VsZCBiZSBl
eHBvc2VkIHRvIEFUSyBhcyBhbiBBdGtUZXh0CiAgICAgICAgb2JqZWN0LCBhbmQgdGhhdCBpbmNs
dWRlcyBncm91cHMsIGhlYWRpbmdzIGFuZCBsaW5rcywgZm9yIGluc3RhbmNlLgoKICAgICAgICBC
YXNlZCBvbiBhIHByZXZpb3VzIHBhdGNoIGJ5IEpvYW5tYXJpZSBEaWdncy4KCiAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgogICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKToKICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CiAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnZpc2libGVQb3NpdGlvbkZvcklu
ZGV4KToKICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BWEJv
dW5kc0ZvclJhbmdlKToKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyQXRrLmNwcDoKICAgICAgICAodGV4dEV4dGVudHMpOgogICAgICAgICh3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyk6CiAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMpOgogICAgICAgIChhdGtfdGV4dF9p
bnRlcmZhY2VfaW5pdCk6CgoyMDEwLTA3LTI3ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNo
ZXpAaWdhbGlhLmNvbT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAg
ICAgIFtHVEtdIEltcGxlbWVudCBzdXBwb3J0IGZvciBnZXRfY2hhcmFjdGVyX2V4dGVudHMgYW5k
IGdldF9yYW5nZV9leHRlbnRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTI1Njc3CgogICAgICAgIEFkZGVkIG5ldyB1bml0IHRlc3RzIHRvIGNoZWNrIGdl
dF9jaGFyYWN0ZXJfZXh0ZW50cyBhbmQKICAgICAgICBnZXRfcmFuZ2VfZXh0ZW50cyBmdW5jdGlv
bnMgZm9yIHRoZSBBVEtfVEVYVCBpbnRlcmZhY2UKCiAgICAgICAgQmFzZWQgb24gYSBwcmV2aW91
cyBwYXRjaCBieSBKb2FubWFyaWUgRGlnZ3MuCgogICAgICAgICogdGVzdHMvdGVzdGF0ay5jOgog
ICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X2V4dGVudHMpOgogICAgICAgIChtYWluKToKLS0t
CiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MjcgKysrKysKIFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCAg
ICAgIHwgICAxOSArKysrLQogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAgICAgfCAgIDE4ICsrKy0KIC4uLi9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBdGsuY3BwICAgICAgICAgIHwgICAzOCArKysrKystLQogV2ViS2l0L2d0ay9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE2ICsrKwogV2ViS2l0L2d0ay90ZXN0
cy90ZXN0YXRrLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTA2ICsrKysrKysrKysrKysr
KysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDIxMyBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGVkNGJhYzguLjEzZTA3ZGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTAtMDctMjcgIE1hcmlvIFNh
bmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBzdXBwb3J0IGZvciBn
ZXRfY2hhcmFjdGVyX2V4dGVudHMgYW5kIGdldF9yYW5nZV9leHRlbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTY3NworCisgICAgICAgIEltcGxl
bWVudCBnZXRfcmFuZ2VfZXh0ZW50cygpIGFuZCBtb2RpZnkgZ2V0X2NoYXJhY3Rlcl9leHRlbnRz
KCkKKyAgICAgICAgdG8gcHJvcGVybHkgd29yayBhZnRlciBUaGUgR3JlYXQgRmxhdHRlbmluZyBv
Y2N1cnJlZCBpbiB0aGUgQVRLCisgICAgICAgIG9iamVjdHMgaGllcmFyY2h5LCBzb21lIG1vbnRo
cyBhZ28uIEZyb20gbm93IG9uLCBub3QganVzdCB0aGUgdGV4dAorICAgICAgICBjb250cm9scyBz
aG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIGl0IGNvbWVzIHRvIHRoZXNlIGZ1bmN0aW9ucyBidXQK
KyAgICAgICAgdmlydHVhbGx5IGFueSBvYmplY3QgdGhhdCB3b3VsZCBiZSBleHBvc2VkIHRvIEFU
SyBhcyBhbiBBdGtUZXh0CisgICAgICAgIG9iamVjdCwgYW5kIHRoYXQgaW5jbHVkZXMgZ3JvdXBz
LCBoZWFkaW5ncyBhbmQgbGlua3MsIGZvciBpbnN0YW5jZS4KKworICAgICAgICBCYXNlZCBvbiBh
IHByZXZpb3VzIHBhdGNoIGJ5IEpvYW5tYXJpZSBEaWdncy4KKworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9BWEJvdW5k
c0ZvclJhbmdlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlckF0ay5jcHA6CisgICAgICAgICh0ZXh0RXh0ZW50cyk6CisgICAgICAgICh3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyk6CisgICAgICAgICh3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X2dldF9yYW5nZV9leHRlbnRzKToKKyAgICAgICAgKGF0a190ZXh0
X2ludGVyZmFjZV9pbml0KToKKwogMjAxMC0wNy0yNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZp
bG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
IGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IGEw
OTU5ZTYuLmRjMzgxM2UgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKQEAgLTM3Myw3ICszNzMsMjQgQEAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6c3R5bGVSYW5nZUZvclBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3MK
IC8vIE5PVEU6IENvbnNpZGVyIHByb3ZpZGluZyB0aGlzIHV0aWxpdHkgbWV0aG9kIGFzIEFYIEFQ
SQogVmlzaWJsZVBvc2l0aW9uUmFuZ2UgQWNjZXNzaWJpbGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0
aW9uUmFuZ2VGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0g
ICAgaWYgKHJhbmdlLnN0YXJ0ICsgcmFuZ2UubGVuZ3RoID4gdGV4dCgpLmxlbmd0aCgpKQorICAg
IHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0KCkubGVuZ3RoKCk7CisjaWYgUExBVEZPUk0oR1RL
KQorICAgIC8vIEd0ayBBVHMgbmVlZCB0aGlzIGZvciBhbGwgdGV4dCBvYmplY3RzOyBub3QganVz
dCB0ZXh0IGNvbnRyb2xzLgorICAgIGlmICghdGV4dExlbmd0aCAmJiBpc0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QoKSkgeworCisgICAgICAgIC8vIFBsYWluIHRleHQgYTExeSBvYmplY3QgZmly
c3QKKyAgICAgICAgUmVuZGVyVGV4dCogcmVuZGVyVGV4dCA9IHRvUmVuZGVyVGV4dChzdGF0aWNf
Y2FzdDxjb25zdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4odGhpcyktPnJlbmRlcmVyKCkp
OworICAgICAgICBpZiAocmVuZGVyVGV4dCkKKyAgICAgICAgICAgIHRleHRMZW5ndGggPSByZW5k
ZXJUZXh0LT50ZXh0TGVuZ3RoKCk7CisKKyAgICAgICAgaWYgKGlzV2ViQXJlYSgpIHx8IGlzR3Jv
dXAoKSB8fCBpc0xpbmsoKSB8fCBpc0hlYWRpbmcoKSkgeworICAgICAgICAgICAgLy8gQ2hlY2sg
Y29tcG9zaXRlIG9iamVjdHMganVzdCBpbiBjYXNlCisgICAgICAgICAgICBTdHJpbmcgdGV4dFZh
bHVlID0gdGhpcy0+dGV4dFVuZGVyRWxlbWVudCgpOworICAgICAgICAgICAgdGV4dExlbmd0aCA9
IHRleHRWYWx1ZS5sZW5ndGgoKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGlmIChy
YW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCA+IHRleHRMZW5ndGgpCiAgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZSgpOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRp
b24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChyYW5nZS5zdGFydCk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggZmVj
YjE2Yy4uNGZkZTEyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMjQwNiw5ICsyNDA2LDE1IEBAIFZpc2libGVQb3Np
dGlvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChp
bnQgaW5kZXgpIGNvCiAgICAgCiAgICAgaWYgKGlzTmF0aXZlVGV4dENvbnRyb2woKSkKICAgICAg
ICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wobV9yZW5kZXJlciktPnZpc2libGVQb3NpdGlv
bkZvckluZGV4KGluZGV4KTsKLSAgICAKLSAgICBpZiAoIWlzVGV4dENvbnRyb2woKSAmJiAhbV9y
ZW5kZXJlci0+aXNUZXh0KCkpCisKKyAgICBpZiAoIWlzVGV4dENvbnRyb2woKSAmJiAhbV9yZW5k
ZXJlci0+aXNUZXh0KCkpIHsKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIGlmICghaXNHcm91
cCgpICYmICFpc0xpbmsoKSAmJiAhaXNIZWFkaW5nKCkpCisgICAgICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7CisjZWxzZQogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7
CisjZW5kaWYKKyAgICB9CiAgICAgCiAgICAgTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUo
KTsKICAgICBpZiAoIW5vZGUpCkBAIC0yNjY2LDcgKzI2NzIsMTMgQEAgU3RyaW5nIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhTdHJpbmdGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5n
ZSYgcmFuZ2UKIC8vIG9uIHRoZSBkaXNwbGF5IHNjcmVlbiwgaW4gcGl4ZWxzLgogSW50UmVjdCBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2UoY29uc3QgUGxhaW5U
ZXh0UmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGlmIChpc1RleHRDb250cm9sKCkpCisjaWYg
UExBVEZPUk0oR1RLKQorICAgIGJvb2wgaXNUZXh0T2JqZWN0ID0gIGlzVGV4dENvbnRyb2woKSB8
fCBtX3JlbmRlcmVyLT5pc1RleHQoKQorICAgICAgICB8fCBpc1dlYkFyZWEoKSB8fCBpc0dyb3Vw
KCkgfHwgaXNMaW5rKCkgfHwgaXNIZWFkaW5nKCk7CisjZWxzZQorICAgIGJvb2wgaXNUZXh0T2Jq
ZWN0ID0gaXNUZXh0Q29udHJvbCgpOworI2VuZGlmCisgICAgaWYgKGlzVGV4dE9iamVjdCkKICAg
ICAgICAgcmV0dXJuIGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3NpdGlv
blJhbmdlRm9yUmFuZ2UocmFuZ2UpKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5jcHAgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyQXRrLmNwcAppbmRleCAzZDdlNzEyLi4yYjY5YjYxIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcAorKysg
Yi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRr
LmNwcApAQCAtMTI1OSwyOSArMTI1OSw1MiBAQCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJr
aXRfYWNjZXNzaWJsZV90ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXMoQXRrVGV4dCogdAogICAg
IHJldHVybiBnZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3Qp
OwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJf
ZXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgZ2ludCogeCwgZ2ludCogeSwgZ2lu
dCogd2lkdGgsIGdpbnQqIGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkcykKK3N0YXRpYyBJbnRS
ZWN0IHRleHRFeHRlbnRzKEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgbGVu
Z3RoLCBBdGtDb29yZFR5cGUgY29vcmRzKQogewotICAgIEludFJlY3QgZXh0ZW50cyA9IGNvcmUo
dGV4dCktPmRvQVhCb3VuZHNGb3JSYW5nZShQbGFpblRleHRSYW5nZShvZmZzZXQsIDEpKTsKLSAg
ICAvLyBGSVhNRTogVXNlIHRoZSBBdGtDb29yZFR5cGUKLSAgICAvLyBSZXF1aXJlcyBXZWJDb3Jl
OjpTY3JvbGxWaWV3Ojpjb250ZW50c1RvU2NyZWVuKCkgdG8gYmUgaW1wbGVtZW50ZWQKKyAgICBn
Y2hhciogdGV4dENvbnRlbnQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF90ZXh0KHRleHQs
IHN0YXJ0T2Zmc2V0LCAtMSk7CisgICAgZ2ludCB0ZXh0TGVuZ3RoID0gZ191dGY4X3N0cmxlbih0
ZXh0Q29udGVudCwgLTEpOworCisgICAgLy8gVGhlIGZpcnN0IGNhc2UgKGVuZE9mZnNldCBvZiAt
MSkgc2hvdWxkIHdvcmssIGJ1dCBzZWVtcyBicm9rZW4gZm9yIGFsbCBHdGsrIGFwcHMuCisgICAg
Z2ludCByYW5nZUxlbmd0aCA9IGxlbmd0aDsKKyAgICBpZiAocmFuZ2VMZW5ndGggPD0gMCB8fCBy
YW5nZUxlbmd0aCA+IHRleHRMZW5ndGgpCisgICAgICAgIHJhbmdlTGVuZ3RoID0gdGV4dExlbmd0
aDsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKKyAg
ICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Q7CiAKLSNpZiAwCisgICAg
aWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQorICAgICAgICBy
ZW5kZXJPYmplY3QgPSBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Kj4oY29y
ZU9iamVjdCk7CisKKyAgICBJbnRSZWN0IGV4dGVudHMgPSBjb3JlT2JqZWN0LT5kb0FYQm91bmRz
Rm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRPZmZzZXQsIHJhbmdlTGVuZ3RoKSk7CiAgICAg
c3dpdGNoKGNvb3JkcykgewogICAgIGNhc2UgQVRLX1hZX1NDUkVFTjoKLSAgICAgICAgZXh0ZW50
cyA9IGNvcmUodGV4dCktPmRvY3VtZW50KCktPnZpZXcoKS0+Y29udGVudHNUb1NjcmVlbihleHRl
bnRzKTsKKyAgICAgICAgZXh0ZW50cyA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCktPnZpZXcoKS0+
Y29udGVudHNUb1NjcmVlbihleHRlbnRzKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBVEtf
WFlfV0lORE9XOgogICAgICAgICAvLyBOby1vcAogICAgICAgICBicmVhazsKICAgICB9Ci0jZW5k
aWYKIAorICAgIHJldHVybiBleHRlbnRzOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IG9mZnNl
dCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGgsIGdpbnQqIGhlaWdodCwgQXRrQ29vcmRU
eXBlIGNvb3JkcykKK3sKKyAgICBJbnRSZWN0IGV4dGVudHMgPSB0ZXh0RXh0ZW50cyh0ZXh0LCBv
ZmZzZXQsIDEsIGNvb3Jkcyk7CiAgICAgKnggPSBleHRlbnRzLngoKTsKICAgICAqeSA9IGV4dGVu
dHMueSgpOwogICAgICp3aWR0aCA9IGV4dGVudHMud2lkdGgoKTsKICAgICAqaGVpZ2h0ID0gZXh0
ZW50cy5oZWlnaHQoKTsKIH0KIAorc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9n
ZXRfcmFuZ2VfZXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50IHN0YXJ0T2Zmc2V0LCBnaW50IGVu
ZE9mZnNldCwgQXRrQ29vcmRUeXBlIGNvb3JkcywgQXRrVGV4dFJlY3RhbmdsZSogcmVjdCkKK3sK
KyAgICBJbnRSZWN0IGV4dGVudHMgPSB0ZXh0RXh0ZW50cyh0ZXh0LCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0IC0gc3RhcnRPZmZzZXQgKyAxLCBjb29yZHMpOworICAgIHJlY3QtPnggPSBleHRlbnRz
LngoKTsKKyAgICByZWN0LT55ID0gZXh0ZW50cy55KCk7CisgICAgcmVjdC0+d2lkdGggPSBleHRl
bnRzLndpZHRoKCk7CisgICAgcmVjdC0+aGVpZ2h0ID0gZXh0ZW50cy5oZWlnaHQoKTsKK30KKwog
c3RhdGljIGdpbnQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2NvdW50KEF0
a1RleHQqIHRleHQpCiB7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNv
cmUodGV4dCk7CkBAIC0xMzkxLDYgKzE0MTQsNyBAQCBzdGF0aWMgdm9pZCBhdGtfdGV4dF9pbnRl
cmZhY2VfaW5pdChBdGtUZXh0SWZhY2UqIGlmYWNlKQogICAgIGlmYWNlLT5nZXRfcnVuX2F0dHJp
YnV0ZXMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9ydW5fYXR0cmlidXRlczsKICAgICBp
ZmFjZS0+Z2V0X2RlZmF1bHRfYXR0cmlidXRlcyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0
X2RlZmF1bHRfYXR0cmlidXRlczsKICAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9leHRlbnRzID0g
d2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHM7CisgICAgaWZhY2Ut
PmdldF9yYW5nZV9leHRlbnRzID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfcmFuZ2VfZXh0
ZW50czsKICAgICBpZmFjZS0+Z2V0X2NoYXJhY3Rlcl9jb3VudCA9IHdlYmtpdF9hY2Nlc3NpYmxl
X3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudDsKICAgICBpZmFjZS0+Z2V0X29mZnNldF9hdF9wb2lu
dCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X29mZnNldF9hdF9wb2ludDsKICAgICBpZmFj
ZS0+Z2V0X25fc2VsZWN0aW9ucyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X25fc2VsZWN0
aW9uczsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKaW5kZXggODAzYmYxMi4uYTlmMjdlMCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0w
Ny0yNyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50
IHN1cHBvcnQgZm9yIGdldF9jaGFyYWN0ZXJfZXh0ZW50cyBhbmQgZ2V0X3JhbmdlX2V4dGVudHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1Njc3CisK
KyAgICAgICAgQWRkZWQgbmV3IHVuaXQgdGVzdHMgdG8gY2hlY2sgZ2V0X2NoYXJhY3Rlcl9leHRl
bnRzIGFuZAorICAgICAgICBnZXRfcmFuZ2VfZXh0ZW50cyBmdW5jdGlvbnMgZm9yIHRoZSBBVEtf
VEVYVCBpbnRlcmZhY2UKKworICAgICAgICBCYXNlZCBvbiBhIHByZXZpb3VzIHBhdGNoIGJ5IEpv
YW5tYXJpZSBEaWdncy4KKworICAgICAgICAqIHRlc3RzL3Rlc3RhdGsuYzoKKyAgICAgICAgKHRl
c3Rfd2Via2l0X2F0a19nZXRfZXh0ZW50cyk6CisgICAgICAgIChtYWluKToKKwogMjAxMC0wNy0x
NiAgWmhlIFN1ICA8c3V6aGVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMgYi9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwppbmRleCA4ZjEzYTk1Li5lMTU5ZjhhIDEwMDY0NAotLS0g
YS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3Rh
dGsuYwpAQCAtMjYsNiArMjYsOCBAQAogCiAjaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsIDE2LCAw
KSAmJiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkKIAorc3RhdGljIGNvbnN0IGNoYXIqIGNl
bnRlcmVkQ29udGVudHMgPSAiPGh0bWw+PGJvZHk+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRl
cjsnPlNob3J0IGxpbmU8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPkxvbmctc2l6
ZSBsaW5lIHdpdGggc29tZSBmb28gYmFyIGJheiBjb250ZW50PC9wPjxwIHN0eWxlPSd0ZXh0LWFs
aWduOiBjZW50ZXI7Jz5TaG9ydCBsaW5lPC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7
Jz5UaGlzIGlzIGEgbXVsdGktbGluZSBwYXJhZ3JhcGg8YnIgLz53aGVyZSB0aGUgZmlyc3QgbGlu
ZTxiciAvPmlzIHRoZSBiaWdnZXN0IG9uZTwvcD48L2JvZHk+PC9odG1sPiI7CisKIHN0YXRpYyBj
b25zdCBjaGFyKiBjb250ZW50cyA9ICI8aHRtbD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC4gVGhp
cyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuPC9wPjwvYm9keT48
L2h0bWw+IjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzV2l0aE5ld2xpbmVzID0gIjxo
dG1sPjxib2R5PjxwPlRoaXMgaXMgYSB0ZXN0LiBcblxuVGhpc1xuIGlzIHRoZSBzZWNvbmQgc2Vu
dGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC48L3A+PC9ib2R5PjwvaHRtbD4iOwpAQCAtNzM4LDYg
Kzc0MCwxMDkgQEAgc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRBdHRyaWJ1dGVzKHZvaWQp
CiAgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQzKTsKIH0KIAorc3RhdGljIHZvaWQgdGVz
dF93ZWJraXRfYXRrX2dldF9leHRlbnRzKHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2Vi
VmlldzsKKyAgICBBdGtPYmplY3QqIG9iajsKKyAgICBHTWFpbkxvb3AqIGxvb3A7CisKKyAgICB3
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19v
YmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvYyA9IHsgMCwg
MCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3
ZWJWaWV3KSwgJmFsbG9jKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmll
dywgY2VudGVyZWRDb250ZW50cywgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgbG9vcCA9IGdfbWFp
bl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJj
ZUZ1bmMpYmFpbF9vdXQsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAg
IG9iaiA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7Cisg
ICAgZ19hc3NlcnQob2JqKTsKKworICAgIEF0a1RleHQqIHNob3J0X3RleHQxID0gQVRLX1RFWFQo
YXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDApKTsKKyAgICBnX2Fzc2VydChB
VEtfSVNfVEVYVChzaG9ydF90ZXh0MSkpOworICAgIEF0a1RleHQqIGxvbmdfdGV4dCA9IEFUS19U
RVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCAxKSk7CisgICAgZ19hc3Nl
cnQoQVRLX0lTX1RFWFQobG9uZ190ZXh0KSk7CisgICAgQXRrVGV4dCogc2hvcnRfdGV4dDIgPSBB
VEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMikpOworICAgIGdf
YXNzZXJ0KEFUS19JU19URVhUKHNob3J0X3RleHQyKSk7CisgICAgQXRrVGV4dCogbXVsdGlsaW5l
X3RleHQgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMykp
OworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKG11bHRpbGluZV90ZXh0KSk7CisKKyAgICAvLyBT
dGFydCB3aXRoIHdpbmRvdyBleHRlbnRzLgorICAgIEF0a1RleHRSZWN0YW5nbGUgc2xpbmVfd2lu
ZG93MSwgc2xpbmVfd2luZG93MiwgbGxpbmVfd2luZG93LCBtbGluZV93aW5kb3c7CisgICAgYXRr
X3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoc2hvcnRfdGV4dDEsIDAsIDEwLCBBVEtfWFlfV0lORE9X
LCAmc2xpbmVfd2luZG93MSk7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobG9uZ190
ZXh0LCAwLCA0NCwgQVRLX1hZX1dJTkRPVywgJmxsaW5lX3dpbmRvdyk7CisgICAgYXRrX3RleHRf
Z2V0X3JhbmdlX2V4dGVudHMoc2hvcnRfdGV4dDIsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmc2xp
bmVfd2luZG93Mik7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lX3Rl
eHQsIDAsIDYwLCBBVEtfWFlfV0lORE9XLCAmbWxpbmVfd2luZG93KTsKKworICAgIC8vIENoZWNr
IHZlcnRpY2FsIGxpbmUgcG9zaXRpb24uCisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRv
dzEueSArIHNsaW5lX3dpbmRvdzEuaGVpZ2h0LCA8PSwgbGxpbmVfd2luZG93LnkpOworICAgIGdf
YXNzZXJ0X2NtcGludChsbGluZV93aW5kb3cueSArIGxsaW5lX3dpbmRvdy5oZWlnaHQgKyBzbGlu
ZV93aW5kb3cyLmhlaWdodCwgPD0sIG1saW5lX3dpbmRvdy55KTsKKworICAgIC8vIFBhcmFncmFw
aHMgMSBhbmQgMyBoYXZlIGlkZW50aWNhbCB0ZXh0IGFuZCBhbGlnbm1lbnQuCisgICAgZ19hc3Nl
cnRfY21waW50KHNsaW5lX3dpbmRvdzEueCwgPT0sIHNsaW5lX3dpbmRvdzIueCk7CisgICAgZ19h
c3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEud2lkdGgsID09LCBzbGluZV93aW5kb3cyLndpZHRo
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS5oZWlnaHQsID09LCBzbGluZV93
aW5kb3cyLmhlaWdodCk7CisKKyAgICAvLyBBbGwgbGluZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGhl
aWdodDsgbGluZSAyIGlzIHRoZSB3aWRlc3QgbGluZS4KKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xp
bmVfd2luZG93MS5oZWlnaHQsID09LCBsbGluZV93aW5kb3cuaGVpZ2h0KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoc2xpbmVfd2luZG93MS53aWR0aCwgPCwgbGxpbmVfd2luZG93LndpZHRoKTsKKwor
ICAgIC8vIE1ha2Ugc3VyZSB0aGUgY2hhcmFjdGVyIGV4dGVudHMgaml2ZSB3aXRoIHRoZSByYW5n
ZSBleHRlbnRzLgorICAgIGdpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKKworICAgIC8vIEZpcnN0
IHBhcmFncmFwaCAoc2hvcnQgdGV4dCkKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVu
dHMoc2hvcnRfdGV4dDEsIDAsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9X
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRvdzEueCk7CisgICAgZ19h
c3NlcnRfY21waW50KHksID09LCBzbGluZV93aW5kb3cxLnkpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChoZWlnaHQsID09LCBzbGluZV93aW5kb3cxLmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRf
Y2hhcmFjdGVyX2V4dGVudHMoc2hvcnRfdGV4dDEsIDksICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0
LCBBVEtfWFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRv
dzEueCArIHNsaW5lX3dpbmRvdzEud2lkdGggLSB3aWR0aCk7CisgICAgZ19hc3NlcnRfY21waW50
KHksID09LCBzbGluZV93aW5kb3cxLnkpOworICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09
LCBzbGluZV93aW5kb3cxLmhlaWdodCk7CisKKyAgICAvLyBTZWNvbmQgcGFyYWdyYXBoIChsb25n
IHRleHQpCisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKGxvbmdfdGV4dCwgMCwg
JngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2Nt
cGludCh4LCA9PSwgbGxpbmVfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwg
bGxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBsbGluZV93
aW5kb3cuaGVpZ2h0KTsKKworICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhsb25n
X3RleHQsIDQzLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAg
Z19hc3NlcnRfY21waW50KHgsID09LCBsbGluZV93aW5kb3cueCArIGxsaW5lX3dpbmRvdy53aWR0
aCAtIHdpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIGxsaW5lX3dpbmRvdy55KTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgbGxpbmVfd2luZG93LmhlaWdodCk7CisK
KyAgICAvLyBUaGlyZCBwYXJhZ3JhcGggKHNob3J0IHRleHQpCisgICAgYXRrX3RleHRfZ2V0X2No
YXJhY3Rlcl9leHRlbnRzKHNob3J0X3RleHQyLCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwg
QVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cy
LngpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOworCisgICAg
YXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0X3RleHQyLCA5LCAmeCwgJnksICZ3
aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09
LCBzbGluZV93aW5kb3cyLnggKyBzbGluZV93aW5kb3cyLndpZHRoIC0gd2lkdGgpOworICAgIGdf
YXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOworCisgICAgLy8gRm91ciBwYXJh
Z3JhcGggKDMgbGluZXMgbXVsdGktbGluZSB0ZXh0KQorICAgIGF0a190ZXh0X2dldF9jaGFyYWN0
ZXJfZXh0ZW50cyhtdWx0aWxpbmVfdGV4dCwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFU
S19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgbWxpbmVfd2luZG93Lngp
OworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbWxpbmVfd2luZG93LnkpOworICAgIGdfYXNz
ZXJ0X2NtcGludCgzICogaGVpZ2h0LCA9PSwgbWxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICBh
dGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobXVsdGlsaW5lX3RleHQsIDU5LCAmeCwgJnks
ICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgLy8gTGFzdCBsaW5lIHdvbid0
IGZpbGwgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUKKyAgICBnX2Fzc2VydF9jbXBp
bnQoeCwgPD0sIG1saW5lX3dpbmRvdy54ICsgbWxpbmVfd2luZG93LndpZHRoIC0gd2lkdGgpOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbWxpbmVfd2luZG93LnkgKyBtbGluZV93aW5kb3cu
aGVpZ2h0IC0gaGVpZ2h0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA8PSwgbWxpbmVf
d2luZG93LmhlaWdodCk7CisKKyAgICBnX29iamVjdF91bnJlZihzaG9ydF90ZXh0MSk7CisgICAg
Z19vYmplY3RfdW5yZWYoc2hvcnRfdGV4dDIpOworICAgIGdfb2JqZWN0X3VucmVmKGxvbmdfdGV4
dCk7CisgICAgZ19vYmplY3RfdW5yZWYobXVsdGlsaW5lX3RleHQpOworICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYlZpZXcpOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAg
ICAgZ190aHJlYWRfaW5pdChOVUxMKTsKQEAgLTc1NCw2ICs4NTksNyBAQCBpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRU
ZXh0SW5UYWJsZSIsIHRlc3RXZWJraXRBdGtHZXRUZXh0SW5UYWJsZSk7CiAgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRIZWFkZXJzSW5UYWJsZSIsIHRlc3RXZWJraXRBdGtHZXRI
ZWFkZXJzSW5UYWJsZSk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0QXR0
cmlidXRlcyIsIHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyk7CisgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L2F0ay9nZXRfZXh0ZW50cyIsIHRlc3Rfd2Via2l0X2F0a19nZXRfZXh0ZW50
cyk7CiAgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7CiB9CiAKLS0gCjEuNy4wLjQKCg==
</data>
<flag name="review"
          id="50994"
          type_id="1"
          status="-"
          setter="cfleizach"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63189</attachid>
            <date>2010-08-02 04:30:06 -0700</date>
            <delta_ts>2010-08-02 05:40:51 -0700</delta_ts>
            <desc>Patch proposal + unit tests</desc>
            <filename>0001-2010-08-02-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>18967</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA2Mjk4OWZkMzYxNTkxOWI4YjlmNTdiZTEyZWI4NmZmNjBkMTdhMDc5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBNb24sIDIgQXVnIDIwMTAgMTM6MTk6NTUgKzAyMDAKU3ViamVjdDogW1BBVENI
XSAyMDEwLTA4LTAyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4K
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHVEtdIEltcGxl
bWVudCBzdXBwb3J0IGZvciBnZXRfY2hhcmFjdGVyX2V4dGVudHMgYW5kIGdldF9yYW5nZV9leHRl
bnRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1Njc3
CgogICAgICAgIEltcGxlbWVudCBnZXRfcmFuZ2VfZXh0ZW50cygpIGFuZCBtb2RpZnkgZ2V0X2No
YXJhY3Rlcl9leHRlbnRzKCkKICAgICAgICB0byBwcm9wZXJseSB3b3JrIGFmdGVyICJUaGUgR3Jl
YXQgRmxhdHRlbmluZyIgb2NjdXJyZWQgaW4gdGhlIEFUSwogICAgICAgIG9iamVjdHMgaGllcmFy
Y2h5LCBzb21lIG1vbnRocyBhZ28uCgogICAgICAgIEluIHRoZSBjYXNlIG9mIHRoZSBHVEsgcG9y
dCwgbm90IGp1c3QgdGhlIHRleHQgY29udHJvbHMgc2hvdWxkIGJlCiAgICAgICAgY29uc2lkZXJl
ZCB3aGVuIGl0IGNvbWVzIHRvIHRoZXNlIGZ1bmN0aW9ucyBidXQgYWxzbyB0aG9zZQogICAgICAg
IGNvbXBvc2l0ZSBvYmplY3RzIHRoYXQgd291bGQgYWxzbyBhbGxvdyB0byB3b3JrIHdpdGggdGV4
dCByYW5nZXMsCiAgICAgICAgc3VjaCBhcyBoZWFkaW5ncyBhbmQgbGlua3MuIFRvIHRha2UgY2Fy
ZSBvZiB0aGlzLCBhIG5ldyBmdW5jdGlvbgogICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFs
bG93c1RleHRSYW5nZXMoKSB3YXMgZGVmaW5lZCB3aXRoIGEgZGVmYXVsdAogICAgICAgIGltcGxl
bWVudGF0aW9uIGluIHRoZSBoZWFkZXIgZmlsZSBhbmQgYW4gc3BlY2lmaWMgb25lIGZvciBHVEsg
aW4KICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcC4KCiAgICAgICAgQmFzZWQgb24g
YSBwcmV2aW91cyBwYXRjaCBieSBKb2FubWFyaWUgRGlnZ3MuCgogICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSk6CiAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6YWxsb3dzVGV4dFJhbmdlcyk6IE5ldwogICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgpOgogICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2Up
OgogICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHA6
CiAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93c1RleHRSYW5nZXMp
OiBOZXcKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQXRrLmNwcDoKICAgICAgICAodGV4dEV4dGVudHMpOgogICAgICAgICh3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyk6CiAgICAgICAgKHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMpOgogICAgICAgIChhdGtfdGV4dF9pbnRlcmZhY2Vf
aW5pdCk6CgoyMDEwLTA4LTAyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlh
LmNvbT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHVEtd
IEltcGxlbWVudCBzdXBwb3J0IGZvciBnZXRfY2hhcmFjdGVyX2V4dGVudHMgYW5kIGdldF9yYW5n
ZV9leHRlbnRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI1Njc3CgogICAgICAgIEFkZGVkIG5ldyB1bml0IHRlc3RzIHRvIGNoZWNrIGdldF9jaGFyYWN0
ZXJfZXh0ZW50cyBhbmQKICAgICAgICBnZXRfcmFuZ2VfZXh0ZW50cyBmdW5jdGlvbnMgZm9yIHRo
ZSBBVEtfVEVYVCBpbnRlcmZhY2UKCiAgICAgICAgQmFzZWQgb24gYSBwcmV2aW91cyBwYXRjaCBi
eSBKb2FubWFyaWUgRGlnZ3MuCgogICAgICAgICogdGVzdHMvdGVzdGF0ay5jOgogICAgICAgICh0
ZXN0X3dlYmtpdF9hdGtfZ2V0X2V4dGVudHMpOgogICAgICAgIChtYWluKToKLS0tCiBXZWJDb3Jl
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzYgKysrKysr
KwogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwICAgICAgfCAg
IDE5ICsrKystCiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oICAg
ICAgICB8ICAgIDIgKwogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAgICAgfCAgICA2ICstCiAuLi4vYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdEF0ay5jcHAgICB8ICAgIDUgKwogLi4uL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5jcHAgICAgICAgICAgfCAgIDM0ICsrKysrLS0KIFdlYktpdC9ndGsvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNiArKysKIFdlYktpdC9ndGsvdGVzdHMv
dGVzdGF0ay5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwNiArKysrKysrKysrKysrKysr
KysrKwogOCBmaWxlcyBjaGFuZ2VkLCAyMTMgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0p
CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA1MzZiNDIyLi41YWZiNzYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEwLTA4LTAyICBNYXJpbyBTYW5j
aGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgZ2V0
X2NoYXJhY3Rlcl9leHRlbnRzIGFuZCBnZXRfcmFuZ2VfZXh0ZW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU2NzcKKworICAgICAgICBJbXBsZW1l
bnQgZ2V0X3JhbmdlX2V4dGVudHMoKSBhbmQgbW9kaWZ5IGdldF9jaGFyYWN0ZXJfZXh0ZW50cygp
CisgICAgICAgIHRvIHByb3Blcmx5IHdvcmsgYWZ0ZXIgIlRoZSBHcmVhdCBGbGF0dGVuaW5nIiBv
Y2N1cnJlZCBpbiB0aGUgQVRLCisgICAgICAgIG9iamVjdHMgaGllcmFyY2h5LCBzb21lIG1vbnRo
cyBhZ28uCisKKyAgICAgICAgSW4gdGhlIGNhc2Ugb2YgdGhlIEdUSyBwb3J0LCBub3QganVzdCB0
aGUgdGV4dCBjb250cm9scyBzaG91bGQgYmUKKyAgICAgICAgY29uc2lkZXJlZCB3aGVuIGl0IGNv
bWVzIHRvIHRoZXNlIGZ1bmN0aW9ucyBidXQgYWxzbyB0aG9zZQorICAgICAgICBjb21wb3NpdGUg
b2JqZWN0cyB0aGF0IHdvdWxkIGFsc28gYWxsb3cgdG8gd29yayB3aXRoIHRleHQgcmFuZ2VzLAor
ICAgICAgICBzdWNoIGFzIGhlYWRpbmdzIGFuZCBsaW5rcy4gVG8gdGFrZSBjYXJlIG9mIHRoaXMs
IGEgbmV3IGZ1bmN0aW9uCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93c1RleHRS
YW5nZXMoKSB3YXMgZGVmaW5lZCB3aXRoIGEgZGVmYXVsdAorICAgICAgICBpbXBsZW1lbnRhdGlv
biBpbiB0aGUgaGVhZGVyIGZpbGUgYW5kIGFuIHNwZWNpZmljIG9uZSBmb3IgR1RLIGluCisgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwLgorCisgICAgICAgIEJhc2VkIG9uIGEgcHJl
dmlvdXMgcGF0Y2ggYnkgSm9hbm1hcmllIERpZ2dzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6YWxsb3dzVGV4dFJhbmdlcyk6IE5ldworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFu
Z2UpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YWxsb3dzVGV4dFJh
bmdlcyk6IE5ldworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHRleHRFeHRlbnRzKToKKyAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKToKKyAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMpOgorICAgICAgICAoYXRrX3RleHRf
aW50ZXJmYWNlX2luaXQpOgorCiAyMDEwLTA4LTAxICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemlt
bWVybWFubkByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBi
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBhMDk1
OWU2Li5iMGFlODZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCkBAIC0zNzMsNyArMzczLDI0IEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zCiAv
LyBOT1RFOiBDb25zaWRlciBwcm92aWRpbmcgdGhpcyB1dGlsaXR5IG1ldGhvZCBhcyBBWCBBUEkK
IFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlv
blJhbmdlRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAg
IGlmIChyYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCA+IHRleHQoKS5sZW5ndGgoKSkKKyAgICB1
bnNpZ25lZCB0ZXh0TGVuZ3RoID0gdGV4dCgpLmxlbmd0aCgpOworI2lmIFBMQVRGT1JNKEdUSykK
KyAgICAvLyBHdGsgQVRzIG5lZWQgdGhpcyBmb3IgYWxsIHRleHQgb2JqZWN0czsgbm90IGp1c3Qg
dGV4dCBjb250cm9scy4KKyAgICBpZiAoIXRleHRMZW5ndGgpIHsKKyAgICAgICAgTm9kZSogbm9k
ZSA9IHRoaXMtPm5vZGUoKTsKKyAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgIFJlbmRl
clRleHQqIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQobm9kZS0+cmVuZGVyZXIoKSk7CisgICAg
ICAgICAgICBpZiAocmVuZGVyVGV4dCkKKyAgICAgICAgICAgICAgICB0ZXh0TGVuZ3RoID0gcmVu
ZGVyVGV4dC0+dGV4dExlbmd0aCgpOworCisgICAgICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVu
Z3RoIGZyb20gdGhlIGVsZW1lbnRzIHVuZGVyIHRoZQorICAgICAgICAgICAgLy8gYWNjZXNzaWJp
bGl0eSBvYmplY3QgaWYgbm90IGEgUmVuZGVyVGV4dCBvYmplY3QuCisgICAgICAgICAgICBpZiAo
IXRleHRMZW5ndGggJiYgYWxsb3dzVGV4dFJhbmdlcygpKQorICAgICAgICAgICAgICAgIHRleHRM
ZW5ndGggPSB0ZXh0VW5kZXJFbGVtZW50KCkubGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9Cisj
ZW5kaWYKKyAgICBpZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPiB0ZXh0TGVuZ3RoKQog
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKIAogICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uuc3RhcnQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggYjhi
MDg3NS4uMDM4ZmY4MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5oCkBAIC01MzksMTIgKzUzOSwxNCBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oR1RLKQog
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyKCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKik7CisgICAgYm9vbCBhbGxv
d3NUZXh0UmFuZ2VzKCkgY29uc3Q7CiAjZWxzZQogICAgIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyKiB3cmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV93cmFwcGVyLmdldCgpOyB9CiAgICAgdm9p
ZCBzZXRXcmFwcGVyKEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyKSAKICAgICB7
CiAgICAgICAgIG1fd3JhcHBlciA9IHdyYXBwZXI7CiAgICAgfQorICAgIGJvb2wgYWxsb3dzVGV4
dFJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIGlzVGV4dENvbnRyb2woKTsgfQogI2VuZGlmCiAjZW5k
aWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCmluZGV4IDUxNDQ5NTAuLmE1ZTFjYzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTIzOTMsOCArMjM5
Myw4IEBAIFZpc2libGVQb3NpdGlvbiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxl
UG9zaXRpb25Gb3JJbmRleChpbnQgaW5kZXgpIGNvCiAgICAgCiAgICAgaWYgKGlzTmF0aXZlVGV4
dENvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIHRvUmVuZGVyVGV4dENvbnRyb2wobV9yZW5kZXJl
ciktPnZpc2libGVQb3NpdGlvbkZvckluZGV4KGluZGV4KTsKLSAgICAKLSAgICBpZiAoIWlzVGV4
dENvbnRyb2woKSAmJiAhbV9yZW5kZXJlci0+aXNUZXh0KCkpCisKKyAgICBpZiAoIWFsbG93c1Rl
eHRSYW5nZXMoKSAmJiAhbV9yZW5kZXJlci0+aXNUZXh0KCkpCiAgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsKICAgICAKICAgICBOb2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgp
OwpAQCAtMjY1Myw3ICsyNjUzLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmRvQVhTdHJpbmdGb3JSYW5nZShjb25zdCBQbGFpblRleHRSYW5nZSYgcmFuZ2UKIC8vIG9uIHRo
ZSBkaXNwbGF5IHNjcmVlbiwgaW4gcGl4ZWxzLgogSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlKSBj
b25zdAogewotICAgIGlmIChpc1RleHRDb250cm9sKCkpCisgICAgaWYgKGFsbG93c1RleHRSYW5n
ZXMoKSkKICAgICAgICAgcmV0dXJuIGJvdW5kc0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHZpc2li
bGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UocmFuZ2UpKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVj
dEF0ay5jcHAKaW5kZXggZTMyMzQwYS4uZDAwNTc0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAorKysgYi9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCkBAIC05Myw2ICs5Mywx
MSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNldFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIqIHdyYXBwZXIpCiAgICAgICAgIGdfb2JqZWN0X3JlZihtX3dyYXBwZXIpOwog
fQogCitib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93c1RleHRSYW5nZXMoKSBjb25zdAor
eworICAgIHJldHVybiBpc1RleHRDb250cm9sKCkgfHwgaXNXZWJBcmVhKCkgfHwgaXNHcm91cCgp
IHx8IGlzTGluaygpIHx8IGlzSGVhZGluZygpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKICNlbmRpZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmlu
ZGV4IDNkN2U3MTIuLjcxNjE4OGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9n
dGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCkBAIC0xMjU5LDI5
ICsxMjU5LDQ4IEBAIHN0YXRpYyBBdGtBdHRyaWJ1dGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3Rl
eHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhBdGtUZXh0KiB0CiAgICAgcmV0dXJuIGdldEF0dHJp
YnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QoY29yZU9iamVjdCk7CiB9CiAKLXN0YXRpYyB2
b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKEF0a1RleHQq
IHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2ludCog
aGVpZ2h0LCBBdGtDb29yZFR5cGUgY29vcmRzKQorc3RhdGljIEludFJlY3QgdGV4dEV4dGVudHMo
QXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBsZW5ndGgsIEF0a0Nvb3JkVHlw
ZSBjb29yZHMpCiB7Ci0gICAgSW50UmVjdCBleHRlbnRzID0gY29yZSh0ZXh0KS0+ZG9BWEJvdW5k
c0ZvclJhbmdlKFBsYWluVGV4dFJhbmdlKG9mZnNldCwgMSkpOwotICAgIC8vIEZJWE1FOiBVc2Ug
dGhlIEF0a0Nvb3JkVHlwZQotICAgIC8vIFJlcXVpcmVzIFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNv
bnRlbnRzVG9TY3JlZW4oKSB0byBiZSBpbXBsZW1lbnRlZAorICAgIGdjaGFyKiB0ZXh0Q29udGVu
dCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3RleHQodGV4dCwgc3RhcnRPZmZzZXQsIC0x
KTsKKyAgICBnaW50IHRleHRMZW5ndGggPSBnX3V0Zjhfc3RybGVuKHRleHRDb250ZW50LCAtMSk7
CisKKyAgICAvLyBUaGUgZmlyc3QgY2FzZSAoZW5kT2Zmc2V0IG9mIC0xKSBzaG91bGQgd29yaywg
YnV0IHNlZW1zIGJyb2tlbiBmb3IgYWxsIEd0aysgYXBwcy4KKyAgICBnaW50IHJhbmdlTGVuZ3Ro
ID0gbGVuZ3RoOworICAgIGlmIChyYW5nZUxlbmd0aCA8IDAgfHwgcmFuZ2VMZW5ndGggPiB0ZXh0
TGVuZ3RoKQorICAgICAgICByYW5nZUxlbmd0aCA9IHRleHRMZW5ndGg7CisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7CiAKLSNpZiAwCisgICAgSW50UmVj
dCBleHRlbnRzID0gY29yZU9iamVjdC0+ZG9BWEJvdW5kc0ZvclJhbmdlKFBsYWluVGV4dFJhbmdl
KHN0YXJ0T2Zmc2V0LCByYW5nZUxlbmd0aCkpOwogICAgIHN3aXRjaChjb29yZHMpIHsKICAgICBj
YXNlIEFUS19YWV9TQ1JFRU46Ci0gICAgICAgIGV4dGVudHMgPSBjb3JlKHRleHQpLT5kb2N1bWVu
dCgpLT52aWV3KCktPmNvbnRlbnRzVG9TY3JlZW4oZXh0ZW50cyk7CisgICAgICAgIGV4dGVudHMg
PSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzVG9TY3JlZW4oZXh0ZW50
cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQVRLX1hZX1dJTkRPVzoKICAgICAgICAgLy8g
Tm8tb3AKICAgICAgICAgYnJlYWs7CiAgICAgfQotI2VuZGlmCiAKKyAgICByZXR1cm4gZXh0ZW50
czsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVy
X2V4dGVudHMoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIGdpbnQqIHgsIGdpbnQqIHksIGdp
bnQqIHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0a0Nvb3JkVHlwZSBjb29yZHMpCit7CisgICAgSW50
UmVjdCBleHRlbnRzID0gdGV4dEV4dGVudHModGV4dCwgb2Zmc2V0LCAxLCBjb29yZHMpOwogICAg
ICp4ID0gZXh0ZW50cy54KCk7CiAgICAgKnkgPSBleHRlbnRzLnkoKTsKICAgICAqd2lkdGggPSBl
eHRlbnRzLndpZHRoKCk7CiAgICAgKmhlaWdodCA9IGV4dGVudHMuaGVpZ2h0KCk7CiB9CiAKK3N0
YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoQXRrVGV4
dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQsIEF0a0Nvb3JkVHlwZSBj
b29yZHMsIEF0a1RleHRSZWN0YW5nbGUqIHJlY3QpCit7CisgICAgSW50UmVjdCBleHRlbnRzID0g
dGV4dEV4dGVudHModGV4dCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0ICsg
MSwgY29vcmRzKTsKKyAgICByZWN0LT54ID0gZXh0ZW50cy54KCk7CisgICAgcmVjdC0+eSA9IGV4
dGVudHMueSgpOworICAgIHJlY3QtPndpZHRoID0gZXh0ZW50cy53aWR0aCgpOworICAgIHJlY3Qt
PmhlaWdodCA9IGV4dGVudHMuaGVpZ2h0KCk7Cit9CisKIHN0YXRpYyBnaW50IHdlYmtpdF9hY2Nl
c3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudChBdGtUZXh0KiB0ZXh0KQogewogICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwpAQCAtMTM5MSw2ICsx
NDEwLDcgQEAgc3RhdGljIHZvaWQgYXRrX3RleHRfaW50ZXJmYWNlX2luaXQoQXRrVGV4dElmYWNl
KiBpZmFjZSkKICAgICBpZmFjZS0+Z2V0X3J1bl9hdHRyaWJ1dGVzID0gd2Via2l0X2FjY2Vzc2li
bGVfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXM7CiAgICAgaWZhY2UtPmdldF9kZWZhdWx0X2F0dHJp
YnV0ZXMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXM7CiAg
ICAgaWZhY2UtPmdldF9jaGFyYWN0ZXJfZXh0ZW50cyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRf
Z2V0X2NoYXJhY3Rlcl9leHRlbnRzOworICAgIGlmYWNlLT5nZXRfcmFuZ2VfZXh0ZW50cyA9IHdl
YmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHM7CiAgICAgaWZhY2UtPmdldF9j
aGFyYWN0ZXJfY291bnQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfY291
bnQ7CiAgICAgaWZhY2UtPmdldF9vZmZzZXRfYXRfcG9pbnQgPSB3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X2dldF9vZmZzZXRfYXRfcG9pbnQ7CiAgICAgaWZhY2UtPmdldF9uX3NlbGVjdGlvbnMgPSB3
ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9uX3NlbGVjdGlvbnM7CmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGViZTc3YzIuLjkz
Y2FmY2YgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDgtMDIgIE1hcmlvIFNhbmNoZXogUHJh
ZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBzdXBwb3J0IGZvciBnZXRfY2hhcmFj
dGVyX2V4dGVudHMgYW5kIGdldF9yYW5nZV9leHRlbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTY3NworCisgICAgICAgIEFkZGVkIG5ldyB1bml0
IHRlc3RzIHRvIGNoZWNrIGdldF9jaGFyYWN0ZXJfZXh0ZW50cyBhbmQKKyAgICAgICAgZ2V0X3Jh
bmdlX2V4dGVudHMgZnVuY3Rpb25zIGZvciB0aGUgQVRLX1RFWFQgaW50ZXJmYWNlCisKKyAgICAg
ICAgQmFzZWQgb24gYSBwcmV2aW91cyBwYXRjaCBieSBKb2FubWFyaWUgRGlnZ3MuCisKKyAgICAg
ICAgKiB0ZXN0cy90ZXN0YXRrLmM6CisgICAgICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X2V4dGVu
dHMpOgorICAgICAgICAobWFpbik6CisKIDIwMTAtMDctMjcgIEx1aXogQWdvc3RpbmkgIDxsdWl6
LmFnb3N0aW5pQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlz
aGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay90ZXN0cy90ZXN0YXRrLmMgYi9XZWJLaXQvZ3Rr
L3Rlc3RzL3Rlc3RhdGsuYwppbmRleCA4ZjEzYTk1Li5lMTU5ZjhhIDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwpA
QCAtMjYsNiArMjYsOCBAQAogCiAjaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsIDE2LCAwKSAmJiBH
VEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkKIAorc3RhdGljIGNvbnN0IGNoYXIqIGNlbnRlcmVk
Q29udGVudHMgPSAiPGh0bWw+PGJvZHk+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlNo
b3J0IGxpbmU8L3A+PHAgc3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPkxvbmctc2l6ZSBsaW5l
IHdpdGggc29tZSBmb28gYmFyIGJheiBjb250ZW50PC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBj
ZW50ZXI7Jz5TaG9ydCBsaW5lPC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5UaGlz
IGlzIGEgbXVsdGktbGluZSBwYXJhZ3JhcGg8YnIgLz53aGVyZSB0aGUgZmlyc3QgbGluZTxiciAv
PmlzIHRoZSBiaWdnZXN0IG9uZTwvcD48L2JvZHk+PC9odG1sPiI7CisKIHN0YXRpYyBjb25zdCBj
aGFyKiBjb250ZW50cyA9ICI8aHRtbD48Ym9keT48cD5UaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0
aGUgc2Vjb25kIHNlbnRlbmNlLiBBbmQgdGhpcyB0aGUgdGhpcmQuPC9wPjwvYm9keT48L2h0bWw+
IjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnRlbnRzV2l0aE5ld2xpbmVzID0gIjxodG1sPjxi
b2R5PjxwPlRoaXMgaXMgYSB0ZXN0LiBcblxuVGhpc1xuIGlzIHRoZSBzZWNvbmQgc2VudGVuY2Uu
IEFuZCB0aGlzIHRoZSB0aGlyZC48L3A+PC9ib2R5PjwvaHRtbD4iOwpAQCAtNzM4LDYgKzc0MCwx
MDkgQEAgc3RhdGljIHZvaWQgdGVzdFdlYmtpdEF0a1RleHRBdHRyaWJ1dGVzKHZvaWQpCiAgICAg
YXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQzKTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdF93ZWJr
aXRfYXRrX2dldF9leHRlbnRzKHZvaWQpCit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsK
KyAgICBBdGtPYmplY3QqIG9iajsKKyAgICBHTWFpbkxvb3AqIGxvb3A7CisKKyAgICB3ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3Rf
cmVmX3Npbmsod2ViVmlldyk7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvYyA9IHsgMCwgMCwgODAw
LCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3
KSwgJmFsbG9jKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY2Vu
dGVyZWRDb250ZW50cywgTlVMTCwgTlVMTCwgTlVMTCk7CisgICAgbG9vcCA9IGdfbWFpbl9sb29w
X25ldyhOVUxMLCBUUlVFKTsKKworICAgIGdfdGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMp
YmFpbF9vdXQsIGxvb3ApOworICAgIGdfbWFpbl9sb29wX3J1bihsb29wKTsKKworICAgIG9iaiA9
IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUoR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ19h
c3NlcnQob2JqKTsKKworICAgIEF0a1RleHQqIHNob3J0X3RleHQxID0gQVRLX1RFWFQoYXRrX29i
amVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChvYmosIDApKTsKKyAgICBnX2Fzc2VydChBVEtfSVNf
VEVYVChzaG9ydF90ZXh0MSkpOworICAgIEF0a1RleHQqIGxvbmdfdGV4dCA9IEFUS19URVhUKGF0
a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQob2JqLCAxKSk7CisgICAgZ19hc3NlcnQoQVRL
X0lTX1RFWFQobG9uZ190ZXh0KSk7CisgICAgQXRrVGV4dCogc2hvcnRfdGV4dDIgPSBBVEtfVEVY
VChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMikpOworICAgIGdfYXNzZXJ0
KEFUS19JU19URVhUKHNob3J0X3RleHQyKSk7CisgICAgQXRrVGV4dCogbXVsdGlsaW5lX3RleHQg
PSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxlX2NoaWxkKG9iaiwgMykpOworICAg
IGdfYXNzZXJ0KEFUS19JU19URVhUKG11bHRpbGluZV90ZXh0KSk7CisKKyAgICAvLyBTdGFydCB3
aXRoIHdpbmRvdyBleHRlbnRzLgorICAgIEF0a1RleHRSZWN0YW5nbGUgc2xpbmVfd2luZG93MSwg
c2xpbmVfd2luZG93MiwgbGxpbmVfd2luZG93LCBtbGluZV93aW5kb3c7CisgICAgYXRrX3RleHRf
Z2V0X3JhbmdlX2V4dGVudHMoc2hvcnRfdGV4dDEsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmc2xp
bmVfd2luZG93MSk7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobG9uZ190ZXh0LCAw
LCA0NCwgQVRLX1hZX1dJTkRPVywgJmxsaW5lX3dpbmRvdyk7CisgICAgYXRrX3RleHRfZ2V0X3Jh
bmdlX2V4dGVudHMoc2hvcnRfdGV4dDIsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmc2xpbmVfd2lu
ZG93Mik7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMobXVsdGlsaW5lX3RleHQsIDAs
IDYwLCBBVEtfWFlfV0lORE9XLCAmbWxpbmVfd2luZG93KTsKKworICAgIC8vIENoZWNrIHZlcnRp
Y2FsIGxpbmUgcG9zaXRpb24uCisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEueSAr
IHNsaW5lX3dpbmRvdzEuaGVpZ2h0LCA8PSwgbGxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0
X2NtcGludChsbGluZV93aW5kb3cueSArIGxsaW5lX3dpbmRvdy5oZWlnaHQgKyBzbGluZV93aW5k
b3cyLmhlaWdodCwgPD0sIG1saW5lX3dpbmRvdy55KTsKKworICAgIC8vIFBhcmFncmFwaHMgMSBh
bmQgMyBoYXZlIGlkZW50aWNhbCB0ZXh0IGFuZCBhbGlnbm1lbnQuCisgICAgZ19hc3NlcnRfY21w
aW50KHNsaW5lX3dpbmRvdzEueCwgPT0sIHNsaW5lX3dpbmRvdzIueCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHNsaW5lX3dpbmRvdzEud2lkdGgsID09LCBzbGluZV93aW5kb3cyLndpZHRoKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS5oZWlnaHQsID09LCBzbGluZV93aW5kb3cy
LmhlaWdodCk7CisKKyAgICAvLyBBbGwgbGluZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGhlaWdodDsg
bGluZSAyIGlzIHRoZSB3aWRlc3QgbGluZS4KKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2lu
ZG93MS5oZWlnaHQsID09LCBsbGluZV93aW5kb3cuaGVpZ2h0KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoc2xpbmVfd2luZG93MS53aWR0aCwgPCwgbGxpbmVfd2luZG93LndpZHRoKTsKKworICAgIC8v
IE1ha2Ugc3VyZSB0aGUgY2hhcmFjdGVyIGV4dGVudHMgaml2ZSB3aXRoIHRoZSByYW5nZSBleHRl
bnRzLgorICAgIGdpbnQgeCwgeSwgd2lkdGgsIGhlaWdodDsKKworICAgIC8vIEZpcnN0IHBhcmFn
cmFwaCAoc2hvcnQgdGV4dCkKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hv
cnRfdGV4dDEsIDAsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRvdzEueCk7CisgICAgZ19hc3NlcnRf
Y21waW50KHksID09LCBzbGluZV93aW5kb3cxLnkpOworICAgIGdfYXNzZXJ0X2NtcGludChoZWln
aHQsID09LCBzbGluZV93aW5kb3cxLmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFj
dGVyX2V4dGVudHMoc2hvcnRfdGV4dDEsIDksICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtf
WFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRvdzEueCAr
IHNsaW5lX3dpbmRvdzEud2lkdGggLSB3aWR0aCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09
LCBzbGluZV93aW5kb3cxLnkpOworICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGlu
ZV93aW5kb3cxLmhlaWdodCk7CisKKyAgICAvLyBTZWNvbmQgcGFyYWdyYXBoIChsb25nIHRleHQp
CisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKGxvbmdfdGV4dCwgMCwgJngsICZ5
LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4
LCA9PSwgbGxpbmVfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbGxpbmVf
d2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBsbGluZV93aW5kb3cu
aGVpZ2h0KTsKKworICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhsb25nX3RleHQs
IDQzLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3Nl
cnRfY21waW50KHgsID09LCBsbGluZV93aW5kb3cueCArIGxsaW5lX3dpbmRvdy53aWR0aCAtIHdp
ZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeSwgPT0sIGxsaW5lX3dpbmRvdy55KTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgbGxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICAv
LyBUaGlyZCBwYXJhZ3JhcGggKHNob3J0IHRleHQpCisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rl
cl9leHRlbnRzKHNob3J0X3RleHQyLCAwLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZ
X1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cyLngpOwor
ICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOworCisgICAgYXRrX3Rl
eHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0X3RleHQyLCA5LCAmeCwgJnksICZ3aWR0aCwg
JmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGlu
ZV93aW5kb3cyLnggKyBzbGluZV93aW5kb3cyLndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0
X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93Mi55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVp
Z2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWlnaHQpOworCisgICAgLy8gRm91ciBwYXJhZ3JhcGgg
KDMgbGluZXMgbXVsdGktbGluZSB0ZXh0KQorICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0
ZW50cyhtdWx0aWxpbmVfdGV4dCwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9X
SU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgbWxpbmVfd2luZG93LngpOworICAg
IGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbWxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2Nt
cGludCgzICogaGVpZ2h0LCA9PSwgbWxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICBhdGtfdGV4
dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobXVsdGlsaW5lX3RleHQsIDU5LCAmeCwgJnksICZ3aWR0
aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgLy8gTGFzdCBsaW5lIHdvbid0IGZpbGwg
dGhlIHdob2xlIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwg
PD0sIG1saW5lX3dpbmRvdy54ICsgbWxpbmVfd2luZG93LndpZHRoIC0gd2lkdGgpOworICAgIGdf
YXNzZXJ0X2NtcGludCh5LCA9PSwgbWxpbmVfd2luZG93LnkgKyBtbGluZV93aW5kb3cuaGVpZ2h0
IC0gaGVpZ2h0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93
LmhlaWdodCk7CisKKyAgICBnX29iamVjdF91bnJlZihzaG9ydF90ZXh0MSk7CisgICAgZ19vYmpl
Y3RfdW5yZWYoc2hvcnRfdGV4dDIpOworICAgIGdfb2JqZWN0X3VucmVmKGxvbmdfdGV4dCk7Cisg
ICAgZ19vYmplY3RfdW5yZWYobXVsdGlsaW5lX3RleHQpOworICAgIGdfb2JqZWN0X3VucmVmKHdl
YlZpZXcpOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgZ190
aHJlYWRfaW5pdChOVUxMKTsKQEAgLTc1NCw2ICs4NTksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0SW5U
YWJsZSIsIHRlc3RXZWJraXRBdGtHZXRUZXh0SW5UYWJsZSk7CiAgICAgZ190ZXN0X2FkZF9mdW5j
KCIvd2Via2l0L2F0ay9nZXRIZWFkZXJzSW5UYWJsZSIsIHRlc3RXZWJraXRBdGtHZXRIZWFkZXJz
SW5UYWJsZSk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay90ZXh0QXR0cmlidXRl
cyIsIHRlc3RXZWJraXRBdGtUZXh0QXR0cmlidXRlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIv
d2Via2l0L2F0ay9nZXRfZXh0ZW50cyIsIHRlc3Rfd2Via2l0X2F0a19nZXRfZXh0ZW50cyk7CiAg
ICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7CiB9CiAKLS0gCjEuNy4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63202</attachid>
            <date>2010-08-02 05:40:51 -0700</date>
            <delta_ts>2010-08-02 10:53:19 -0700</delta_ts>
            <desc>Patch proposal + unit tests</desc>
            <filename>0001-2010-08-02-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>18883</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBiNjM5NGYzY2VjZjMzMmY5OWYyZTM5MTlkOWVhNjRiNTFmYWVlNmNmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBNb24sIDIgQXVnIDIwMTAgMTM6MTk6NTUgKzAyMDAKU3ViamVjdDogW1BBVENI
XSAyMDEwLTA4LTAyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4K
CiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHVEtdIEltcGxl
bWVudCBzdXBwb3J0IGZvciBnZXRfY2hhcmFjdGVyX2V4dGVudHMgYW5kIGdldF9yYW5nZV9leHRl
bnRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI1Njc3
CgogICAgICAgIEltcGxlbWVudCBnZXRfcmFuZ2VfZXh0ZW50cygpIGFuZCBtb2RpZnkgZ2V0X2No
YXJhY3Rlcl9leHRlbnRzKCkKICAgICAgICB0byBwcm9wZXJseSB3b3JrIGFmdGVyICJUaGUgR3Jl
YXQgRmxhdHRlbmluZyIgb2NjdXJyZWQgaW4gdGhlIEFUSwogICAgICAgIG9iamVjdHMgaGllcmFy
Y2h5LCBzb21lIG1vbnRocyBhZ28uCgogICAgICAgIEluIHRoZSBjYXNlIG9mIHRoZSBHVEsgcG9y
dCwgbm90IGp1c3QgdGhlIHRleHQgY29udHJvbHMgc2hvdWxkIGJlCiAgICAgICAgY29uc2lkZXJl
ZCB3aGVuIGl0IGNvbWVzIHRvIHRoZXNlIGZ1bmN0aW9ucyBidXQgYWxzbyB0aG9zZQogICAgICAg
IGNvbXBvc2l0ZSBvYmplY3RzIHRoYXQgd291bGQgYWxzbyBhbGxvdyB0byB3b3JrIHdpdGggdGV4
dCByYW5nZXMsCiAgICAgICAgc3VjaCBhcyBoZWFkaW5ncyBhbmQgbGlua3MuIFRvIHRha2UgY2Fy
ZSBvZiB0aGlzLCBhIG5ldyBmdW5jdGlvbgogICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFs
bG93c1RleHRSYW5nZXMoKSB3YXMgZGVmaW5lZCB3aXRoIGEgZGVmYXVsdAogICAgICAgIGltcGxl
bWVudGF0aW9uIGluIHRoZSBoZWFkZXIgZmlsZSBhbmQgYW4gc3BlY2lmaWMgb25lIGZvciBHVEsg
aW4KICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcC4KCiAgICAgICAgQmFzZWQgb24g
YSBwcmV2aW91cyBwYXRjaCBieSBKb2FubWFyaWUgRGlnZ3MuCgogICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdDo6dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZSk6CiAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6YWxsb3dzVGV4dFJhbmdlcyk6IE5ldwogICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgpOgogICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2Up
OgogICAgICAgICogYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHA6
CiAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93c1RleHRSYW5nZXMp
OiBOZXcKICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyQXRrLmNwcDoKICAgICAgICAodGV4dEV4dGVudHMpOgogICAgICAgICh3ZWJraXRfYWNjZXNz
aWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyk6CiAgICAgICAgKHdlYmtpdF9hY2Nlc3Np
YmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMpOgogICAgICAgIChhdGtfdGV4dF9pbnRlcmZhY2Vf
aW5pdCk6CgoyMDEwLTA4LTAyICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlh
LmNvbT4KCiAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHVEtd
IEltcGxlbWVudCBzdXBwb3J0IGZvciBnZXRfY2hhcmFjdGVyX2V4dGVudHMgYW5kIGdldF9yYW5n
ZV9leHRlbnRzCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI1Njc3CgogICAgICAgIEFkZGVkIG5ldyB1bml0IHRlc3RzIHRvIGNoZWNrIGdldF9jaGFyYWN0
ZXJfZXh0ZW50cyBhbmQKICAgICAgICBnZXRfcmFuZ2VfZXh0ZW50cyBmdW5jdGlvbnMgZm9yIHRo
ZSBBVEtfVEVYVCBpbnRlcmZhY2UKCiAgICAgICAgQmFzZWQgb24gYSBwcmV2aW91cyBwYXRjaCBi
eSBKb2FubWFyaWUgRGlnZ3MuCgogICAgICAgICogdGVzdHMvdGVzdGF0ay5jOgogICAgICAgICh0
ZXN0X3dlYmtpdF9hdGtfZ2V0X2V4dGVudHMpOgogICAgICAgIChtYWluKToKLS0tCiBXZWJDb3Jl
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzYgKysrKysr
KwogV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwICAgICAgfCAg
IDE5ICsrKystCiBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oICAg
ICAgICB8ICAgIDYgKwogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAgICAgfCAgICA2ICstCiAuLi4vYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdEF0ay5jcHAgICB8ICAgIDUgKwogLi4uL2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5jcHAgICAgICAgICAgfCAgIDM0ICsrKysrLS0KIFdlYktpdC9ndGsvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNiArKysKIFdlYktpdC9ndGsvdGVzdHMv
dGVzdGF0ay5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwNiArKysrKysrKysrKysrKysr
KysrKwogOCBmaWxlcyBjaGFuZ2VkLCAyMTcgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0p
CgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA1MzZiNDIyLi41YWZiNzYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEwLTA4LTAyICBNYXJpbyBTYW5j
aGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgZ2V0
X2NoYXJhY3Rlcl9leHRlbnRzIGFuZCBnZXRfcmFuZ2VfZXh0ZW50cworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjU2NzcKKworICAgICAgICBJbXBsZW1l
bnQgZ2V0X3JhbmdlX2V4dGVudHMoKSBhbmQgbW9kaWZ5IGdldF9jaGFyYWN0ZXJfZXh0ZW50cygp
CisgICAgICAgIHRvIHByb3Blcmx5IHdvcmsgYWZ0ZXIgIlRoZSBHcmVhdCBGbGF0dGVuaW5nIiBv
Y2N1cnJlZCBpbiB0aGUgQVRLCisgICAgICAgIG9iamVjdHMgaGllcmFyY2h5LCBzb21lIG1vbnRo
cyBhZ28uCisKKyAgICAgICAgSW4gdGhlIGNhc2Ugb2YgdGhlIEdUSyBwb3J0LCBub3QganVzdCB0
aGUgdGV4dCBjb250cm9scyBzaG91bGQgYmUKKyAgICAgICAgY29uc2lkZXJlZCB3aGVuIGl0IGNv
bWVzIHRvIHRoZXNlIGZ1bmN0aW9ucyBidXQgYWxzbyB0aG9zZQorICAgICAgICBjb21wb3NpdGUg
b2JqZWN0cyB0aGF0IHdvdWxkIGFsc28gYWxsb3cgdG8gd29yayB3aXRoIHRleHQgcmFuZ2VzLAor
ICAgICAgICBzdWNoIGFzIGhlYWRpbmdzIGFuZCBsaW5rcy4gVG8gdGFrZSBjYXJlIG9mIHRoaXMs
IGEgbmV3IGZ1bmN0aW9uCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93c1RleHRS
YW5nZXMoKSB3YXMgZGVmaW5lZCB3aXRoIGEgZGVmYXVsdAorICAgICAgICBpbXBsZW1lbnRhdGlv
biBpbiB0aGUgaGVhZGVyIGZpbGUgYW5kIGFuIHNwZWNpZmljIG9uZSBmb3IgR1RLIGluCisgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwLgorCisgICAgICAgIEJhc2VkIG9uIGEgcHJl
dmlvdXMgcGF0Y2ggYnkgSm9hbm1hcmllIERpZ2dzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6OnZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6YWxsb3dzVGV4dFJhbmdlcyk6IE5ldworICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFu
Z2UpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YWxsb3dzVGV4dFJh
bmdlcyk6IE5ldworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHRleHRFeHRlbnRzKToKKyAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKToKKyAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMpOgorICAgICAgICAoYXRrX3RleHRf
aW50ZXJmYWNlX2luaXQpOgorCiAyMDEwLTA4LTAxICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuemlt
bWVybWFubkByaW0uY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBi
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBhMDk1
OWU2Li5iMGFlODZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKKysrIGIvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCkBAIC0zNzMsNyArMzczLDI0IEBAIFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OnN0eWxlUmFuZ2VGb3JQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zCiAv
LyBOT1RFOiBDb25zaWRlciBwcm92aWRpbmcgdGhpcyB1dGlsaXR5IG1ldGhvZCBhcyBBWCBBUEkK
IFZpc2libGVQb3NpdGlvblJhbmdlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnZpc2libGVQb3NpdGlv
blJhbmdlRm9yUmFuZ2UoY29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAg
IGlmIChyYW5nZS5zdGFydCArIHJhbmdlLmxlbmd0aCA+IHRleHQoKS5sZW5ndGgoKSkKKyAgICB1
bnNpZ25lZCB0ZXh0TGVuZ3RoID0gdGV4dCgpLmxlbmd0aCgpOworI2lmIFBMQVRGT1JNKEdUSykK
KyAgICAvLyBHdGsgQVRzIG5lZWQgdGhpcyBmb3IgYWxsIHRleHQgb2JqZWN0czsgbm90IGp1c3Qg
dGV4dCBjb250cm9scy4KKyAgICBpZiAoIXRleHRMZW5ndGgpIHsKKyAgICAgICAgTm9kZSogbm9k
ZSA9IHRoaXMtPm5vZGUoKTsKKyAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgIFJlbmRl
clRleHQqIHJlbmRlclRleHQgPSB0b1JlbmRlclRleHQobm9kZS0+cmVuZGVyZXIoKSk7CisgICAg
ICAgICAgICBpZiAocmVuZGVyVGV4dCkKKyAgICAgICAgICAgICAgICB0ZXh0TGVuZ3RoID0gcmVu
ZGVyVGV4dC0+dGV4dExlbmd0aCgpOworCisgICAgICAgICAgICAvLyBHZXQgdGhlIHRleHQgbGVu
Z3RoIGZyb20gdGhlIGVsZW1lbnRzIHVuZGVyIHRoZQorICAgICAgICAgICAgLy8gYWNjZXNzaWJp
bGl0eSBvYmplY3QgaWYgbm90IGEgUmVuZGVyVGV4dCBvYmplY3QuCisgICAgICAgICAgICBpZiAo
IXRleHRMZW5ndGggJiYgYWxsb3dzVGV4dFJhbmdlcygpKQorICAgICAgICAgICAgICAgIHRleHRM
ZW5ndGggPSB0ZXh0VW5kZXJFbGVtZW50KCkubGVuZ3RoKCk7CisgICAgICAgIH0KKyAgICB9Cisj
ZW5kaWYKKyAgICBpZiAocmFuZ2Uuc3RhcnQgKyByYW5nZS5sZW5ndGggPiB0ZXh0TGVuZ3RoKQog
ICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsKIAogICAgIFZpc2libGVQb3Np
dGlvbiBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgocmFuZ2Uuc3RhcnQp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggYjhi
MDg3NS4uYzUxNzg1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5oCkBAIC01NzEsNiArNTcxLDEyIEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXJDaGlsZHJlbigpOwogICAgIHZpcnR1YWwgYm9vbCBpc0RldGFjaGVkKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICBib29sIGFsbG93c1Rl
eHRSYW5nZXMoKSBjb25zdDsKKyNlbHNlCisgICAgYm9vbCBhbGxvd3NUZXh0UmFuZ2VzKCkgY29u
c3QgeyByZXR1cm4gaXNUZXh0Q29udHJvbCgpOyB9CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKE1B
QykKICAgICBSZXRhaW5QdHI8QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXI+IG1fd3JhcHBlcjsK
ICNlbGlmIFBMQVRGT1JNKFdJTikgJiYgIU9TKFdJTkNFKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDUxNDQ5NTAuLmE1
ZTFjYzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdC5jcHAKQEAgLTIzOTMsOCArMjM5Myw4IEBAIFZpc2libGVQb3NpdGlvbiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbnQgaW5kZXgp
IGNvCiAgICAgCiAgICAgaWYgKGlzTmF0aXZlVGV4dENvbnRyb2woKSkKICAgICAgICAgcmV0dXJu
IHRvUmVuZGVyVGV4dENvbnRyb2wobV9yZW5kZXJlciktPnZpc2libGVQb3NpdGlvbkZvckluZGV4
KGluZGV4KTsKLSAgICAKLSAgICBpZiAoIWlzVGV4dENvbnRyb2woKSAmJiAhbV9yZW5kZXJlci0+
aXNUZXh0KCkpCisKKyAgICBpZiAoIWFsbG93c1RleHRSYW5nZXMoKSAmJiAhbV9yZW5kZXJlci0+
aXNUZXh0KCkpCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKICAgICAKICAgICBO
b2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpOwpAQCAtMjY1Myw3ICsyNjUzLDcgQEAgU3Ry
aW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRvQVhTdHJpbmdGb3JSYW5nZShjb25zdCBQ
bGFpblRleHRSYW5nZSYgcmFuZ2UKIC8vIG9uIHRoZSBkaXNwbGF5IHNjcmVlbiwgaW4gcGl4ZWxz
LgogSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb0FYQm91bmRzRm9yUmFuZ2Uo
Y29uc3QgUGxhaW5UZXh0UmFuZ2UmIHJhbmdlKSBjb25zdAogewotICAgIGlmIChpc1RleHRDb250
cm9sKCkpCisgICAgaWYgKGFsbG93c1RleHRSYW5nZXMoKSkKICAgICAgICAgcmV0dXJuIGJvdW5k
c0ZvclZpc2libGVQb3NpdGlvblJhbmdlKHZpc2libGVQb3NpdGlvblJhbmdlRm9yUmFuZ2UocmFu
Z2UpKTsKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHAKaW5kZXggZTMyMzQwYS4uZDAw
NTc0YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0QXRrLmNwcAorKysgYi9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxp
dHlPYmplY3RBdGsuY3BwCkBAIC05Myw2ICs5MywxMSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnNldFdyYXBwZXIoQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHdyYXBwZXIpCiAgICAg
ICAgIGdfb2JqZWN0X3JlZihtX3dyYXBwZXIpOwogfQogCitib29sIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmFsbG93c1RleHRSYW5nZXMoKSBjb25zdAoreworICAgIHJldHVybiBpc1RleHRDb250cm9s
KCkgfHwgaXNXZWJBcmVhKCkgfHwgaXNHcm91cCgpIHx8IGlzTGluaygpIHx8IGlzSGVhZGluZygp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBIQVZFKEFDQ0VTU0lC
SUxJVFkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwCmluZGV4IDNkN2U3MTIuLjcxNjE4OGEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBdGsuY3BwCisrKyBiL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJBdGsuY3BwCkBAIC0xMjU5LDI5ICsxMjU5LDQ4IEBAIHN0YXRpYyBBdGtBdHRy
aWJ1dGVTZXQqIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2RlZmF1bHRfYXR0cmlidXRlcyhB
dGtUZXh0KiB0CiAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmpl
Y3QoY29yZU9iamVjdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRf
Z2V0X2NoYXJhY3Rlcl9leHRlbnRzKEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0LCBnaW50KiB4
LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0LCBBdGtDb29yZFR5cGUgY29vcmRz
KQorc3RhdGljIEludFJlY3QgdGV4dEV4dGVudHMoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9m
ZnNldCwgZ2ludCBsZW5ndGgsIEF0a0Nvb3JkVHlwZSBjb29yZHMpCiB7Ci0gICAgSW50UmVjdCBl
eHRlbnRzID0gY29yZSh0ZXh0KS0+ZG9BWEJvdW5kc0ZvclJhbmdlKFBsYWluVGV4dFJhbmdlKG9m
ZnNldCwgMSkpOwotICAgIC8vIEZJWE1FOiBVc2UgdGhlIEF0a0Nvb3JkVHlwZQotICAgIC8vIFJl
cXVpcmVzIFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRzVG9TY3JlZW4oKSB0byBiZSBpbXBs
ZW1lbnRlZAorICAgIGdjaGFyKiB0ZXh0Q29udGVudCA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRf
Z2V0X3RleHQodGV4dCwgc3RhcnRPZmZzZXQsIC0xKTsKKyAgICBnaW50IHRleHRMZW5ndGggPSBn
X3V0Zjhfc3RybGVuKHRleHRDb250ZW50LCAtMSk7CisKKyAgICAvLyBUaGUgZmlyc3QgY2FzZSAo
ZW5kT2Zmc2V0IG9mIC0xKSBzaG91bGQgd29yaywgYnV0IHNlZW1zIGJyb2tlbiBmb3IgYWxsIEd0
aysgYXBwcy4KKyAgICBnaW50IHJhbmdlTGVuZ3RoID0gbGVuZ3RoOworICAgIGlmIChyYW5nZUxl
bmd0aCA8IDAgfHwgcmFuZ2VMZW5ndGggPiB0ZXh0TGVuZ3RoKQorICAgICAgICByYW5nZUxlbmd0
aCA9IHRleHRMZW5ndGg7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNv
cmUodGV4dCk7CiAKLSNpZiAwCisgICAgSW50UmVjdCBleHRlbnRzID0gY29yZU9iamVjdC0+ZG9B
WEJvdW5kc0ZvclJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCByYW5nZUxlbmd0aCkp
OwogICAgIHN3aXRjaChjb29yZHMpIHsKICAgICBjYXNlIEFUS19YWV9TQ1JFRU46Ci0gICAgICAg
IGV4dGVudHMgPSBjb3JlKHRleHQpLT5kb2N1bWVudCgpLT52aWV3KCktPmNvbnRlbnRzVG9TY3Jl
ZW4oZXh0ZW50cyk7CisgICAgICAgIGV4dGVudHMgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpLT52
aWV3KCktPmNvbnRlbnRzVG9TY3JlZW4oZXh0ZW50cyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQVRLX1hZX1dJTkRPVzoKICAgICAgICAgLy8gTm8tb3AKICAgICAgICAgYnJlYWs7CiAgICAg
fQotI2VuZGlmCiAKKyAgICByZXR1cm4gZXh0ZW50czsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X2FjY2Vzc2libGVfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoQXRrVGV4dCogdGV4dCwgZ2lu
dCBvZmZzZXQsIGdpbnQqIHgsIGdpbnQqIHksIGdpbnQqIHdpZHRoLCBnaW50KiBoZWlnaHQsIEF0
a0Nvb3JkVHlwZSBjb29yZHMpCit7CisgICAgSW50UmVjdCBleHRlbnRzID0gdGV4dEV4dGVudHMo
dGV4dCwgb2Zmc2V0LCAxLCBjb29yZHMpOwogICAgICp4ID0gZXh0ZW50cy54KCk7CiAgICAgKnkg
PSBleHRlbnRzLnkoKTsKICAgICAqd2lkdGggPSBleHRlbnRzLndpZHRoKCk7CiAgICAgKmhlaWdo
dCA9IGV4dGVudHMuaGVpZ2h0KCk7CiB9CiAKK3N0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxl
X3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoQXRrVGV4dCogdGV4dCwgZ2ludCBzdGFydE9mZnNldCwg
Z2ludCBlbmRPZmZzZXQsIEF0a0Nvb3JkVHlwZSBjb29yZHMsIEF0a1RleHRSZWN0YW5nbGUqIHJl
Y3QpCit7CisgICAgSW50UmVjdCBleHRlbnRzID0gdGV4dEV4dGVudHModGV4dCwgc3RhcnRPZmZz
ZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0ICsgMSwgY29vcmRzKTsKKyAgICByZWN0LT54ID0g
ZXh0ZW50cy54KCk7CisgICAgcmVjdC0+eSA9IGV4dGVudHMueSgpOworICAgIHJlY3QtPndpZHRo
ID0gZXh0ZW50cy53aWR0aCgpOworICAgIHJlY3QtPmhlaWdodCA9IGV4dGVudHMuaGVpZ2h0KCk7
Cit9CisKIHN0YXRpYyBnaW50IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9j
b3VudChBdGtUZXh0KiB0ZXh0KQogewogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmpl
Y3QgPSBjb3JlKHRleHQpOwpAQCAtMTM5MSw2ICsxNDEwLDcgQEAgc3RhdGljIHZvaWQgYXRrX3Rl
eHRfaW50ZXJmYWNlX2luaXQoQXRrVGV4dElmYWNlKiBpZmFjZSkKICAgICBpZmFjZS0+Z2V0X3J1
bl9hdHRyaWJ1dGVzID0gd2Via2l0X2FjY2Vzc2libGVfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXM7
CiAgICAgaWZhY2UtPmdldF9kZWZhdWx0X2F0dHJpYnV0ZXMgPSB3ZWJraXRfYWNjZXNzaWJsZV90
ZXh0X2dldF9kZWZhdWx0X2F0dHJpYnV0ZXM7CiAgICAgaWZhY2UtPmdldF9jaGFyYWN0ZXJfZXh0
ZW50cyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzOworICAg
IGlmYWNlLT5nZXRfcmFuZ2VfZXh0ZW50cyA9IHdlYmtpdF9hY2Nlc3NpYmxlX3RleHRfZ2V0X3Jh
bmdlX2V4dGVudHM7CiAgICAgaWZhY2UtPmdldF9jaGFyYWN0ZXJfY291bnQgPSB3ZWJraXRfYWNj
ZXNzaWJsZV90ZXh0X2dldF9jaGFyYWN0ZXJfY291bnQ7CiAgICAgaWZhY2UtPmdldF9vZmZzZXRf
YXRfcG9pbnQgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9vZmZzZXRfYXRfcG9pbnQ7CiAg
ICAgaWZhY2UtPmdldF9uX3NlbGVjdGlvbnMgPSB3ZWJraXRfYWNjZXNzaWJsZV90ZXh0X2dldF9u
X3NlbGVjdGlvbnM7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCmluZGV4IGViZTc3YzIuLjkzY2FmY2YgMTAwNjQ0Ci0tLSBhL1dlYktpdC9n
dGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMTAtMDgtMDIgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIElt
cGxlbWVudCBzdXBwb3J0IGZvciBnZXRfY2hhcmFjdGVyX2V4dGVudHMgYW5kIGdldF9yYW5nZV9l
eHRlbnRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NTY3NworCisgICAgICAgIEFkZGVkIG5ldyB1bml0IHRlc3RzIHRvIGNoZWNrIGdldF9jaGFyYWN0
ZXJfZXh0ZW50cyBhbmQKKyAgICAgICAgZ2V0X3JhbmdlX2V4dGVudHMgZnVuY3Rpb25zIGZvciB0
aGUgQVRLX1RFWFQgaW50ZXJmYWNlCisKKyAgICAgICAgQmFzZWQgb24gYSBwcmV2aW91cyBwYXRj
aCBieSBKb2FubWFyaWUgRGlnZ3MuCisKKyAgICAgICAgKiB0ZXN0cy90ZXN0YXRrLmM6CisgICAg
ICAgICh0ZXN0X3dlYmtpdF9hdGtfZ2V0X2V4dGVudHMpOgorICAgICAgICAobWFpbik6CisKIDIw
MTAtMDctMjcgIEx1aXogQWdvc3RpbmkgIDxsdWl6LmFnb3N0aW5pQG9wZW5ib3NzYS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0
ay90ZXN0cy90ZXN0YXRrLmMgYi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwppbmRleCA4ZjEz
YTk1Li5lMTU5ZjhhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYworKysg
Yi9XZWJLaXQvZ3RrL3Rlc3RzL3Rlc3RhdGsuYwpAQCAtMjYsNiArMjYsOCBAQAogCiAjaWYgR0xJ
Ql9DSEVDS19WRVJTSU9OKDIsIDE2LCAwKSAmJiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxNCwgMCkK
IAorc3RhdGljIGNvbnN0IGNoYXIqIGNlbnRlcmVkQ29udGVudHMgPSAiPGh0bWw+PGJvZHk+PHAg
c3R5bGU9J3RleHQtYWxpZ246IGNlbnRlcjsnPlNob3J0IGxpbmU8L3A+PHAgc3R5bGU9J3RleHQt
YWxpZ246IGNlbnRlcjsnPkxvbmctc2l6ZSBsaW5lIHdpdGggc29tZSBmb28gYmFyIGJheiBjb250
ZW50PC9wPjxwIHN0eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5TaG9ydCBsaW5lPC9wPjxwIHN0
eWxlPSd0ZXh0LWFsaWduOiBjZW50ZXI7Jz5UaGlzIGlzIGEgbXVsdGktbGluZSBwYXJhZ3JhcGg8
YnIgLz53aGVyZSB0aGUgZmlyc3QgbGluZTxiciAvPmlzIHRoZSBiaWdnZXN0IG9uZTwvcD48L2Jv
ZHk+PC9odG1sPiI7CisKIHN0YXRpYyBjb25zdCBjaGFyKiBjb250ZW50cyA9ICI8aHRtbD48Ym9k
eT48cD5UaGlzIGlzIGEgdGVzdC4gVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiBBbmQgdGhp
cyB0aGUgdGhpcmQuPC9wPjwvYm9keT48L2h0bWw+IjsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnRlbnRzV2l0aE5ld2xpbmVzID0gIjxodG1sPjxib2R5PjxwPlRoaXMgaXMgYSB0ZXN0LiBcblxu
VGhpc1xuIGlzIHRoZSBzZWNvbmQgc2VudGVuY2UuIEFuZCB0aGlzIHRoZSB0aGlyZC48L3A+PC9i
b2R5PjwvaHRtbD4iOwpAQCAtNzM4LDYgKzc0MCwxMDkgQEAgc3RhdGljIHZvaWQgdGVzdFdlYmtp
dEF0a1RleHRBdHRyaWJ1dGVzKHZvaWQpCiAgICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJlZShzZXQz
KTsKIH0KIAorc3RhdGljIHZvaWQgdGVzdF93ZWJraXRfYXRrX2dldF9leHRlbnRzKHZvaWQpCit7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldzsKKyAgICBBdGtPYmplY3QqIG9iajsKKyAgICBH
TWFpbkxvb3AqIGxvb3A7CisKKyAgICB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93
ZWJfdmlld19uZXcoKSk7CisgICAgZ19vYmplY3RfcmVmX3Npbmsod2ViVmlldyk7CisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvYyA9IHsgMCwgMCwgODAwLCA2MDAgfTsKKyAgICBndGtfd2lkZ2V0X3Np
emVfYWxsb2NhdGUoR1RLX1dJREdFVCh3ZWJWaWV3KSwgJmFsbG9jKTsKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfbG9hZF9zdHJpbmcod2ViVmlldywgY2VudGVyZWRDb250ZW50cywgTlVMTCwgTlVMTCwg
TlVMTCk7CisgICAgbG9vcCA9IGdfbWFpbl9sb29wX25ldyhOVUxMLCBUUlVFKTsKKworICAgIGdf
dGltZW91dF9hZGQoMTAwLCAoR1NvdXJjZUZ1bmMpYmFpbF9vdXQsIGxvb3ApOworICAgIGdfbWFp
bl9sb29wX3J1bihsb29wKTsKKworICAgIG9iaiA9IGd0a193aWRnZXRfZ2V0X2FjY2Vzc2libGUo
R1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQob2JqKTsKKworICAgIEF0a1RleHQq
IHNob3J0X3RleHQxID0gQVRLX1RFWFQoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChv
YmosIDApKTsKKyAgICBnX2Fzc2VydChBVEtfSVNfVEVYVChzaG9ydF90ZXh0MSkpOworICAgIEF0
a1RleHQqIGxvbmdfdGV4dCA9IEFUS19URVhUKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hp
bGQob2JqLCAxKSk7CisgICAgZ19hc3NlcnQoQVRLX0lTX1RFWFQobG9uZ190ZXh0KSk7CisgICAg
QXRrVGV4dCogc2hvcnRfdGV4dDIgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9hY2Nlc3NpYmxl
X2NoaWxkKG9iaiwgMikpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKHNob3J0X3RleHQyKSk7
CisgICAgQXRrVGV4dCogbXVsdGlsaW5lX3RleHQgPSBBVEtfVEVYVChhdGtfb2JqZWN0X3JlZl9h
Y2Nlc3NpYmxlX2NoaWxkKG9iaiwgMykpOworICAgIGdfYXNzZXJ0KEFUS19JU19URVhUKG11bHRp
bGluZV90ZXh0KSk7CisKKyAgICAvLyBTdGFydCB3aXRoIHdpbmRvdyBleHRlbnRzLgorICAgIEF0
a1RleHRSZWN0YW5nbGUgc2xpbmVfd2luZG93MSwgc2xpbmVfd2luZG93MiwgbGxpbmVfd2luZG93
LCBtbGluZV93aW5kb3c7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoc2hvcnRfdGV4
dDEsIDAsIDEwLCBBVEtfWFlfV0lORE9XLCAmc2xpbmVfd2luZG93MSk7CisgICAgYXRrX3RleHRf
Z2V0X3JhbmdlX2V4dGVudHMobG9uZ190ZXh0LCAwLCA0NCwgQVRLX1hZX1dJTkRPVywgJmxsaW5l
X3dpbmRvdyk7CisgICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoc2hvcnRfdGV4dDIsIDAs
IDEwLCBBVEtfWFlfV0lORE9XLCAmc2xpbmVfd2luZG93Mik7CisgICAgYXRrX3RleHRfZ2V0X3Jh
bmdlX2V4dGVudHMobXVsdGlsaW5lX3RleHQsIDAsIDYwLCBBVEtfWFlfV0lORE9XLCAmbWxpbmVf
d2luZG93KTsKKworICAgIC8vIENoZWNrIHZlcnRpY2FsIGxpbmUgcG9zaXRpb24uCisgICAgZ19h
c3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEueSArIHNsaW5lX3dpbmRvdzEuaGVpZ2h0LCA8PSwg
bGxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludChsbGluZV93aW5kb3cueSArIGxs
aW5lX3dpbmRvdy5oZWlnaHQgKyBzbGluZV93aW5kb3cyLmhlaWdodCwgPD0sIG1saW5lX3dpbmRv
dy55KTsKKworICAgIC8vIFBhcmFncmFwaHMgMSBhbmQgMyBoYXZlIGlkZW50aWNhbCB0ZXh0IGFu
ZCBhbGlnbm1lbnQuCisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEueCwgPT0sIHNs
aW5lX3dpbmRvdzIueCk7CisgICAgZ19hc3NlcnRfY21waW50KHNsaW5lX3dpbmRvdzEud2lkdGgs
ID09LCBzbGluZV93aW5kb3cyLndpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2lu
ZG93MS5oZWlnaHQsID09LCBzbGluZV93aW5kb3cyLmhlaWdodCk7CisKKyAgICAvLyBBbGwgbGlu
ZXMgc2hvdWxkIGJlIHRoZSBzYW1lIGhlaWdodDsgbGluZSAyIGlzIHRoZSB3aWRlc3QgbGluZS4K
KyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS5oZWlnaHQsID09LCBsbGluZV93aW5k
b3cuaGVpZ2h0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc2xpbmVfd2luZG93MS53aWR0aCwgPCwg
bGxpbmVfd2luZG93LndpZHRoKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgY2hhcmFjdGVyIGV4
dGVudHMgaml2ZSB3aXRoIHRoZSByYW5nZSBleHRlbnRzLgorICAgIGdpbnQgeCwgeSwgd2lkdGgs
IGhlaWdodDsKKworICAgIC8vIEZpcnN0IHBhcmFncmFwaCAoc2hvcnQgdGV4dCkKKyAgICBhdGtf
dGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRfdGV4dDEsIDAsICZ4LCAmeSwgJndpZHRo
LCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPT0sIHNs
aW5lX3dpbmRvdzEueCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBzbGluZV93aW5kb3cx
LnkpOworICAgIGdfYXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGluZV93aW5kb3cxLmhlaWdo
dCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMoc2hvcnRfdGV4dDEsIDks
ICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0LCBBVEtfWFlfV0lORE9XKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoeCwgPT0sIHNsaW5lX3dpbmRvdzEueCArIHNsaW5lX3dpbmRvdzEud2lkdGggLSB3aWR0
aCk7CisgICAgZ19hc3NlcnRfY21waW50KHksID09LCBzbGluZV93aW5kb3cxLnkpOworICAgIGdf
YXNzZXJ0X2NtcGludChoZWlnaHQsID09LCBzbGluZV93aW5kb3cxLmhlaWdodCk7CisKKyAgICAv
LyBTZWNvbmQgcGFyYWdyYXBoIChsb25nIHRleHQpCisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rl
cl9leHRlbnRzKGxvbmdfdGV4dCwgMCwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9X
SU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGludCh4LCA9PSwgbGxpbmVfd2luZG93LngpOworICAg
IGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbGxpbmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2Nt
cGludChoZWlnaHQsID09LCBsbGluZV93aW5kb3cuaGVpZ2h0KTsKKworICAgIGF0a190ZXh0X2dl
dF9jaGFyYWN0ZXJfZXh0ZW50cyhsb25nX3RleHQsIDQzLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdo
dCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21waW50KHgsID09LCBsbGluZV93aW5k
b3cueCArIGxsaW5lX3dpbmRvdy53aWR0aCAtIHdpZHRoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
eSwgPT0sIGxsaW5lX3dpbmRvdy55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwg
bGxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICAvLyBUaGlyZCBwYXJhZ3JhcGggKHNob3J0IHRl
eHQpCisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNob3J0X3RleHQyLCAwLCAm
eCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7CisgICAgZ19hc3NlcnRfY21w
aW50KHgsID09LCBzbGluZV93aW5kb3cyLngpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwg
c2xpbmVfd2luZG93Mi55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVf
d2luZG93Mi5oZWlnaHQpOworCisgICAgYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9leHRlbnRzKHNo
b3J0X3RleHQyLCA5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHgsID09LCBzbGluZV93aW5kb3cyLnggKyBzbGluZV93aW5kb3cy
LndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgc2xpbmVfd2luZG93
Mi55KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoaGVpZ2h0LCA9PSwgc2xpbmVfd2luZG93Mi5oZWln
aHQpOworCisgICAgLy8gRm91ciBwYXJhZ3JhcGggKDMgbGluZXMgbXVsdGktbGluZSB0ZXh0KQor
ICAgIGF0a190ZXh0X2dldF9jaGFyYWN0ZXJfZXh0ZW50cyhtdWx0aWxpbmVfdGV4dCwgMCwgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOworICAgIGdfYXNzZXJ0X2NtcGlu
dCh4LCA9PSwgbWxpbmVfd2luZG93LngpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbWxp
bmVfd2luZG93LnkpOworICAgIGdfYXNzZXJ0X2NtcGludCgzICogaGVpZ2h0LCA9PSwgbWxpbmVf
d2luZG93LmhlaWdodCk7CisKKyAgICBhdGtfdGV4dF9nZXRfY2hhcmFjdGVyX2V4dGVudHMobXVs
dGlsaW5lX3RleHQsIDU5LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCwgQVRLX1hZX1dJTkRPVyk7
CisgICAgLy8gTGFzdCBsaW5lIHdvbid0IGZpbGwgdGhlIHdob2xlIHdpZHRoIG9mIHRoZSByZWN0
YW5nbGUKKyAgICBnX2Fzc2VydF9jbXBpbnQoeCwgPD0sIG1saW5lX3dpbmRvdy54ICsgbWxpbmVf
d2luZG93LndpZHRoIC0gd2lkdGgpOworICAgIGdfYXNzZXJ0X2NtcGludCh5LCA9PSwgbWxpbmVf
d2luZG93LnkgKyBtbGluZV93aW5kb3cuaGVpZ2h0IC0gaGVpZ2h0KTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoaGVpZ2h0LCA8PSwgbWxpbmVfd2luZG93LmhlaWdodCk7CisKKyAgICBnX29iamVjdF91
bnJlZihzaG9ydF90ZXh0MSk7CisgICAgZ19vYmplY3RfdW5yZWYoc2hvcnRfdGV4dDIpOworICAg
IGdfb2JqZWN0X3VucmVmKGxvbmdfdGV4dCk7CisgICAgZ19vYmplY3RfdW5yZWYobXVsdGlsaW5l
X3RleHQpOworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXcpOworfQorCiBpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgZ190aHJlYWRfaW5pdChOVUxMKTsKQEAgLTc1NCw2
ICs4NTksNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgZ190ZXN0X2Fk
ZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRUZXh0SW5UYWJsZSIsIHRlc3RXZWJraXRBdGtHZXRUZXh0
SW5UYWJsZSk7CiAgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRIZWFkZXJzSW5U
YWJsZSIsIHRlc3RXZWJraXRBdGtHZXRIZWFkZXJzSW5UYWJsZSk7CiAgICAgZ190ZXN0X2FkZF9m
dW5jKCIvd2Via2l0L2F0ay90ZXh0QXR0cmlidXRlcyIsIHRlc3RXZWJraXRBdGtUZXh0QXR0cmli
dXRlcyk7CisgICAgZ190ZXN0X2FkZF9mdW5jKCIvd2Via2l0L2F0ay9nZXRfZXh0ZW50cyIsIHRl
c3Rfd2Via2l0X2F0a19nZXRfZXh0ZW50cyk7CiAgICAgcmV0dXJuIGdfdGVzdF9ydW4gKCk7CiB9
CiAKLS0gCjEuNy4wLjQKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>