<?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>94101</bug_id>
          
          <creation_ts>2012-08-15 06:35:06 -0700</creation_ts>
          <short_desc>Touch adjustment for context menu gestures</short_desc>
          <delta_ts>2012-08-17 07:32:14 -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>UI Events</component>
          <version>420+</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Allan Sandfeld Jensen">allan.jensen</reporter>
          <assigned_to name="Allan Sandfeld Jensen">allan.jensen</assigned_to>
          <cc>tdanderson</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>695956</commentid>
    <comment_count>0</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-15 06:35:06 -0700</bug_when>
    <thetext>Context menu gesture recently started using the touch adjustment code, but is using the best-clickable algorithm designed to find nodes that can be activated by tap gestures.

Since some elements such as images have extra context-menu items but are not activable, and many elements that are activatable does not have extra context-menu items, a more specialized touch adjustment filter should be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695957</commentid>
    <comment_count>1</comment_count>
      <attachid>158559</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-15 06:39:37 -0700</bug_when>
    <thetext>Created attachment 158559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695963</commentid>
    <comment_count>2</comment_count>
      <attachid>158559</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-15 06:44:39 -0700</bug_when>
    <thetext>Comment on attachment 158559
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:2576
&gt; +    case PlatformEvent::GestureTwoFingerTap:

two finger tap also shows the context menu? Is it commonly implemented like that? Doesn&apos;t that conflict with double tap to zoom etc?

&gt; Source/WebCore/page/TouchAdjustment.cpp:92
&gt; +bool nodeProvidesContextMenuItems(Node* node)
&gt; +{

What about the custom context menu (doesnt webkit support that?) http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>695972</commentid>
    <comment_count>3</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-15 06:54:26 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 158559 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=158559&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:2576
&gt; &gt; +    case PlatformEvent::GestureTwoFingerTap:
&gt; 
&gt; two finger tap also shows the context menu? Is it commonly implemented like that? Doesn&apos;t that conflict with double tap to zoom etc?
&gt; 
I was under the impression it sends a right-mouse button press on iOS devices, but since they don&apos;t use these functions, it could also be removed for now. 
I am bit unhappy with the gesture names though, I would prefer if they described their function instead of how they are activated (GestureContextMenu in this case), but that is something to fix another time, if more people agree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696007</commentid>
    <comment_count>4</comment_count>
      <attachid>158559</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-15 08:03:29 -0700</bug_when>
    <thetext>Comment on attachment 158559
Patch

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

&gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:92
&gt;&gt; +{
&gt; 
&gt; What about the custom context menu (doesnt webkit support that?) http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus

What about text nodes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696011</commentid>
    <comment_count>5</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-15 08:10:43 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 158559 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=158559&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:92
&gt; &gt;&gt; +{
&gt; &gt; 
&gt; &gt; What about the custom context menu (doesnt webkit support that?) http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus
&gt; 
As far as I can tell, we have no support for that.

&gt; What about text nodes?

Text nodes only provides extra context menus when they are selected or are editable. I check for editable, but I haven&apos;t done the check for selected yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696059</commentid>
    <comment_count>6</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-15 09:28:45 -0700</bug_when>
    <thetext>
&gt; &gt; What about text nodes?
&gt; 
&gt; Text nodes only provides extra context menus when they are selected or are editable. I check for editable, but I haven&apos;t done the check for selected yet.

what will happen if you right click &quot;text&quot; in &lt;div&gt; some text &lt;/div&gt;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696082</commentid>
    <comment_count>7</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-15 09:54:54 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; &gt; What about text nodes?
&gt; &gt; 
&gt; &gt; Text nodes only provides extra context menus when they are selected or are editable. I check for editable, but I haven&apos;t done the check for selected yet.
&gt; 
&gt; what will happen if you right click &quot;text&quot; in &lt;div&gt; some text &lt;/div&gt;?

You get the standard context-menu for the page offering your to go back or forward in the history and a few other options. If you select &quot;text&quot; and right click you get options relating to your selection. Are you implying the gesture should not only issue a context-menu event, but start by selecting the nearest word?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696137</commentid>
    <comment_count>8</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-15 10:55:12 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; &gt; &gt; What about text nodes?
&gt; &gt; &gt; 
&gt; &gt; &gt; Text nodes only provides extra context menus when they are selected or are editable. I check for editable, but I haven&apos;t done the check for selected yet.
&gt; &gt; 
&gt; &gt; what will happen if you right click &quot;text&quot; in &lt;div&gt; some text &lt;/div&gt;?

I am check all possibilities before considering adopting the cross-platform implementation. In BlackBerry we also use touch_adjustment (fat fingers) for text select the closest word on touch_press on #text node.

&gt; You get the standard context-menu for the page offering your to go back or forward in the history and a few other options. If you select &quot;text&quot; and right click you get options relating to your selection. Are you implying the gesture should not only issue a context-menu event, but start by selecting the nearest word?

No. that is done by a  &quot;setting&quot;:

30 public:
 31     EditingBehavior(EditingBehaviorType type)
 32         : m_type(type)
 33     {
 ,,,
 60     // On Mac, when processing a contextual click, the object being clicked upon should be selected.
 61     bool shouldSelectOnContextualMenuClick() const { return m_type == EditingMacBehavior; }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696159</commentid>
    <comment_count>9</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-15 11:10:54 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; No. that is done by a  &quot;setting&quot;:
&gt; 
Thanks, I missed that option because it was in editing, and I already accepted  all editable nodes. I will see what I can do. I am also still trying to figure out how to best touch adjust to existing selections.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696846</commentid>
    <comment_count>10</comment_count>
      <attachid>158732</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-16 00:36:27 -0700</bug_when>
    <thetext>Created attachment 158732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>696849</commentid>
    <comment_count>11</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-16 00:40:38 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 158559 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=158559&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/page/TouchAdjustment.cpp:92
&gt; &gt;&gt; +{
&gt; &gt; 
&gt; &gt; What about the custom context menu (doesnt webkit support that?) http://www.whatwg.org/specs/web-apps/current-work/multipage/interactive-elements.html#context-menus
&gt; 
&gt; What about text nodes?

In the latest patch I check for canBeSelectionLeaf(),  this means not only text, but anything that can be selected is considered good targets if shouldSelectOnContextualMenuClick() is true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>697175</commentid>
    <comment_count>12</comment_count>
      <attachid>158559</attachid>
    <who name="Terry Anderson">tdanderson</who>
    <bug_when>2012-08-16 08:37:33 -0700</bug_when>
    <thetext>Comment on attachment 158559
Patch

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

&gt;&gt;&gt; Source/WebCore/page/EventHandler.cpp:2576
&gt;&gt;&gt; +    case PlatformEvent::GestureTwoFingerTap:
&gt;&gt; 
&gt;&gt; two finger tap also shows the context menu? Is it commonly implemented like that? Doesn&apos;t that conflict with double tap to zoom etc?
&gt; 
&gt; I was under the impression it sends a right-mouse button press on iOS devices, but since they don&apos;t use these functions, it could also be removed for now. 
&gt; I am bit unhappy with the gesture names though, I would prefer if they described their function instead of how they are activated (GestureContextMenu in this case), but that is something to fix another time, if more people agree.

I second the motion of only applying this patch to a GestureLongPress for the time being.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698128</commentid>
    <comment_count>13</comment_count>
      <attachid>159067</attachid>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-17 03:06:46 -0700</bug_when>
    <thetext>Created attachment 159067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698131</commentid>
    <comment_count>14</comment_count>
      <attachid>159067</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-08-17 03:10:28 -0700</bug_when>
    <thetext>Comment on attachment 159067
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:2554
&gt; +    case PlatformEvent::GestureLongPress:

I think we usually called this TapAndHold, but im not sure what is the best</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698279</commentid>
    <comment_count>15</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-17 06:38:00 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 159067 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159067&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/EventHandler.cpp:2554
&gt; &gt; +    case PlatformEvent::GestureLongPress:
&gt; 
&gt; I think we usually called this TapAndHold, but im not sure what is the best

Tap by itself it a gesture of a quick touch down and up.

TouchAndHold sounds more appropriated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698287</commentid>
    <comment_count>16</comment_count>
      <attachid>159067</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2012-08-17 06:49:20 -0700</bug_when>
    <thetext>Comment on attachment 159067
Patch

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

Lets get the namings discussed here changed.

&gt; Source/WebCore/page/TouchAdjustment.cpp:91
&gt; +bool nodeProvidesContextMenuItems(Node* node)

I think we can exclude &quot;node&quot; from the beginning, since the parameter is a &apos;node&apos;.

&gt; Source/WebCore/page/TouchAdjustment.cpp:105
&gt; +        // FIXME: To improve the adjusted point, each individual word should be a separate subtarget.

See FatFingers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698292</commentid>
    <comment_count>17</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-17 06:55:31 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 159067 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=159067&amp;action=review
&gt; 
&gt; Lets get the namings discussed here changed.

I would prefer opening another bug for that, and as I said earlier, to support possibly different gestures I would prefer the cross-platform gestures in WebCore were named after function and not by how they are activated. 

&gt; &gt; Source/WebCore/page/TouchAdjustment.cpp:105
&gt; &gt; +        // FIXME: To improve the adjusted point, each individual word should be a separate subtarget.
&gt; 
&gt; See FatFingers.

I did, I added the comment after seeing a similar comment there, or did I miss something more?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>698326</commentid>
    <comment_count>18</comment_count>
    <who name="Allan Sandfeld Jensen">allan.jensen</who>
    <bug_when>2012-08-17 07:32:14 -0700</bug_when>
    <thetext>Committed r125898: &lt;http://trac.webkit.org/changeset/125898&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158559</attachid>
            <date>2012-08-15 06:39:37 -0700</date>
            <delta_ts>2012-08-16 08:37:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94101-20120815153859.patch</filename>
            <type>text/plain</type>
            <size>19705</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWM5ZjQ0M2UxMjU5NmUy
NGRjMDE4MThkMmI1NDdiY2RkOTgwN2M4MS4uM2RjYjkwNDBjMmUzYTkzMjNjYzJhNzYyN2IxYmU1
ZTk4OWVjOGU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM0IEBACiAyMDEyLTA4LTE1ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCisgICAgICAgIFRv
dWNoIGFkanVzdG1lbnQgZm9yIGNvbnRleHQgbWVudSBnZXN0dXJlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQxMDEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGEgbmV3IGZpbHRlciBmb3IgZGV0
ZWN0aW5nIG5vZGVzIHRoYXQgcHJvdmlkZXMgZXh0cmEgY29udGV4dC1tZW51IGl0ZW1zLCAKKyAg
ICAgICAgYW5kIHVzZSB0aGF0IGluIGEgbmV3IHNldCBvZiBmdW5jdGlvbnMgZm9yIGFkanVzdGlu
ZyBjb250ZXh0LW1lbnUgZ2VzdHVyZXMuCisKKyAgICAgICAgVGVzdDogdG91Y2hhZGp1c3RtZW50
L2NvbnRleHQtbWVudS5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmJlc3RDb250ZXh0TWVudU5vZGVGb3JUb3Vj
aFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6YWRqdXN0R2VzdHVyZVBv
c2l0aW9uKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAoRXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKiBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6Om5vZGVQcm92aWRlc0NvbnRleHRNZW51SXRlbXMpOgor
ICAgICAgICAoVG91Y2hBZGp1c3RtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRCZXN0Q29u
dGV4dE1lbnVDYW5kaWRhdGUpOgorICAgICAgICAqIHBhZ2UvVG91Y2hBZGp1c3RtZW50Lmg6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjp0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDb250ZXh0TWVudU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENvbnRleHRNZW51
Tm9kZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKEludGVybmFs
cyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCisyMDEyLTA4LTE1ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCiAgICAgICAgIFtR
dF0gT3B0aW9uYWxseSBzdXBwb3J0IHNtb290aC1zY3JvbGxpbmcgb24gYWxsIHBsYXRmb3Jtcwog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MjYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDNkZmZiOWZhNGY2ZDBlMTA1YTc0
ZGI2ODFhNmM0ZjE3Y2RmZDEwZDIuLmU0N2VjOGJiN2FhYjFhNDViOWI2MzZhYWY2ZGZlYjY1YzQy
NjdjNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTI1NDMsNiArMjU0
MywxNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6YmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50
KGNvbnN0IEludFBvaW50JiB0b3VjaENlbnRlciwgYwogICAgIHJldHVybiBzdWNjZXNzOwogfQog
Citib29sIEV2ZW50SGFuZGxlcjo6YmVzdENvbnRleHRNZW51Tm9kZUZvclRvdWNoUG9pbnQoY29u
c3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50
UG9pbnQmIHRhcmdldFBvaW50LCBOb2RlKiYgdGFyZ2V0Tm9kZSkKK3sKKyAgICBIaXRUZXN0UmVx
dWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9u
bHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOworICAgIEludFBvaW50IGhpdFRlc3RQb2ludCA9
IG1fZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyh0b3VjaENlbnRlcik7CisgICAgSGl0
VGVzdFJlc3VsdCByZXN1bHQgPSBoaXRUZXN0UmVzdWx0QXRQb2ludChoaXRUZXN0UG9pbnQsIC8q
YWxsb3dTaGFkb3dDb250ZW50Ki8gdHJ1ZSwgLyppZ25vcmVDbGlwcGluZyovIGZhbHNlLCBEb250
SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUsIHRvdWNoUmFkaXVzKTsKKworICAgIEludFJlY3Qg
dG91Y2hSZWN0KHRvdWNoQ2VudGVyIC0gdG91Y2hSYWRpdXMsIHRvdWNoUmFkaXVzICsgdG91Y2hS
YWRpdXMpOworICAgIFJlZlB0cjxTdGF0aWNIYXNoU2V0Tm9kZUxpc3Q+IG5vZGVMaXN0ID0gU3Rh
dGljSGFzaFNldE5vZGVMaXN0OjphZG9wdChyZXN1bHQucmVjdEJhc2VkVGVzdFJlc3VsdCgpKTsK
KyAgICByZXR1cm4gZmluZEJlc3RDb250ZXh0TWVudUNhbmRpZGF0ZSh0YXJnZXROb2RlLCB0YXJn
ZXRQb2ludCwgdG91Y2hDZW50ZXIsIHRvdWNoUmVjdCwgKm5vZGVMaXN0LmdldCgpKTsKK30KKwog
Ym9vbCBFdmVudEhhbmRsZXI6OmJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KGNvbnN0IElu
dFBvaW50JiB0b3VjaENlbnRlciwgY29uc3QgSW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFJlY3Qm
IHRhcmdldEFyZWEsIE5vZGUqJiB0YXJnZXROb2RlKQogewogICAgIEhpdFRlc3RSZXF1ZXN0OjpI
aXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhp
dFRlc3RSZXF1ZXN0OjpBY3RpdmU7CkBAIC0yNTU3LDcgKzI1NjgsMTggQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0b3Vj
aENlbnRlciwgY28KIGJvb2wgRXZlbnRIYW5kbGVyOjphZGp1c3RHZXN0dXJlUG9zaXRpb24oY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgSW50UG9pbnQmIGFkanVzdGVk
UG9pbnQpCiB7CiAgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IDA7Ci0gICAgYmVzdENsaWNrYWJsZU5v
ZGVGb3JUb3VjaFBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBJbnRTaXplKGdlc3R1cmVF
dmVudC5hcmVhKCkud2lkdGgoKSAvIDIsIGdlc3R1cmVFdmVudC5hcmVhKCkuaGVpZ2h0KCkgLyAy
KSwgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CisgICAgc3dpdGNoIChnZXN0dXJlRXZlbnQu
dHlwZSgpKSB7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwOgorICAgICAgICBi
ZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIElu
dFNpemUoZ2VzdHVyZUV2ZW50LmFyZWEoKS53aWR0aCgpIC8gMiwgZ2VzdHVyZUV2ZW50LmFyZWEo
KS5oZWlnaHQoKSAvIDIpLCBhZGp1c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlTG9uZ1ByZXNzOgorICAgIGNhc2Ug
UGxhdGZvcm1FdmVudDo6R2VzdHVyZVR3b0ZpbmdlclRhcDoKKyAgICAgICAgYmVzdENvbnRleHRN
ZW51Tm9kZUZvclRvdWNoUG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIEludFNpemUoZ2Vz
dHVyZUV2ZW50LmFyZWEoKS53aWR0aCgpIC8gMiwgZ2VzdHVyZUV2ZW50LmFyZWEoKS5oZWlnaHQo
KSAvIDIpLCBhZGp1c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBoYW5kbGluZyBmb3Igb3RoZXIg
dHlwZXMgYXMgbmVlZGVkLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiAg
ICAgcmV0dXJuIHRhcmdldE5vZGU7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oCmluZGV4IDI5ZGQ5Y2UzODNlMDk4MTdhNDAzNTZkMzMyZDJhNzFiYTFiZjFiZjEuLjk4MjY0
M2RiNWNlMzliN2FlYTcyNWJkMzhiNzg2OWI0YjIzNGExZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaApAQCAtMTY5LDEwICsxNjksOSBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoVE9V
Q0hfQURKVVNUTUVOVCkKICAgICBib29sIGJlc3RDbGlja2FibGVOb2RlRm9yVG91Y2hQb2ludChj
b25zdCBJbnRQb2ludCYgdG91Y2hDZW50ZXIsIGNvbnN0IEludFNpemUmIHRvdWNoUmFkaXVzLCBJ
bnRQb2ludCYgdGFyZ2V0UG9pbnQsIE5vZGUqJiB0YXJnZXROb2RlKTsKKyAgICBib29sIGJlc3RD
b250ZXh0TWVudU5vZGVGb3JUb3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0b3VjaENlbnRlciwg
Y29uc3QgSW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFBvaW50JiB0YXJnZXRQb2ludCwgTm9kZSom
IHRhcmdldE5vZGUpOwogICAgIGJvb2wgYmVzdFpvb21hYmxlQXJlYUZvclRvdWNoUG9pbnQoY29u
c3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50
UmVjdCYgdGFyZ2V0QXJlYSwgTm9kZSomIHRhcmdldE5vZGUpOwogCi0gICAgLy8gRklYTUU6IEFk
ZCBhIGdlc3R1cmUgdHlwZSBwYXJhbWV0ZXIgc28gdGhhdCBkaWZmZXJlbnQgY2FuZGlkYXRlIHNl
bGVjdGlvbiBjcml0ZXJpYSBtYXkgYmUgdXNlZCBmb3IKLSAgICAvLyBkaWZmZXJlbnQgZ2VzdHVy
ZSB0eXBlcy4gQ3VycmVudGx5IFRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9UYXBHZXN0
dXJlIGlzIHVzZWQgZm9yIGFsbCB0eXBlcy4KICAgICBib29sIGFkanVzdEdlc3R1cmVQb3NpdGlv
bihjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIEludFBvaW50JiBhZGp1c3RlZFBvaW50KTsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKaW5kZXggNmFi
YWRjZmIyODRkNTMyZWQzZmJmNmI4ZmZlMzBiNjUwZTFjZjI4Ny4uOWM3OGU1YjZjYTYyYzgyYWI5
Mjg4NTJhOTYwOWNiMTVjZjE3ZWM5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9U
b3VjaEFkanVzdG1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3Rt
ZW50LmNwcApAQCAtODgsNiArODgsMjEgQEAgYm9vbCBub2RlSXNab29tVGFyZ2V0KE5vZGUqIG5v
ZGUpCiAgICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCktPmlzQm94KCk7CiB9CiAKK2Jvb2wgbm9k
ZVByb3ZpZGVzQ29udGV4dE1lbnVJdGVtcyhOb2RlKiBub2RlKQoreworICAgIC8vIFRoaXMgZnVu
Y3Rpb24gdHJpZXMgdG8gbWF0Y2ggdGhlIG5vZGVzIHRoYXQgcmVjZWl2ZSBzcGVjaWFsIGNvbnRl
eHQtbWVudSBpdGVtcyBpbgorICAgIC8vIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUo
KSwgYW5kIHNob3VsZCBiZSBrZXB0IHVwdG9kYXRlIHdpdGggdGhvc2UuCisgICAgaWYgKG5vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChub2Rl
LT5pc0xpbmsoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPnJlbmRlcmVy
KCktPmlzSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPnJlbmRl
cmVyKCktPmlzTWVkaWEoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kU3VidGFyZ2V0c0Zvck5vZGVUb0xpc3Qo
Tm9kZSogbm9kZSwgU3VidGFyZ2V0R2VvbWV0cnlMaXN0JiBzdWJ0YXJnZXRzKQogewogICAgIC8v
IFNpbmNlIHRoZSBub2RlIGlzIGEgcmVzdWx0IG9mIGEgaGl0IHRlc3QsIHdlIGFyZSBhbHJlYWR5
IGVuc3VyZWQgaXQgaGFzIGEgcmVuZGVyZXIuCkBAIC0zODYsNiArNDAxLDE0IEBAIGJvb2wgZmlu
ZEJlc3RDbGlja2FibGVDYW5kaWRhdGUoTm9kZSomIHRhcmdldE5vZGUsIEludFBvaW50ICZ0YXJn
ZXRQb2ludCwgY29uc3QKICAgICByZXR1cm4gVG91Y2hBZGp1c3RtZW50OjpmaW5kTm9kZVdpdGhM
b3dlc3REaXN0YW5jZU1ldHJpYyh0YXJnZXROb2RlLCB0YXJnZXRQb2ludCwgdGFyZ2V0QXJlYSwg
dG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsIHN1YnRhcmdldHMsIFRvdWNoQWRqdXN0bWVudDo6aHli
cmlkRGlzdGFuY2VGdW5jdGlvbik7CiB9CiAKK2Jvb2wgZmluZEJlc3RDb250ZXh0TWVudUNhbmRp
ZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQgJnRhcmdldFBvaW50LCBjb25zdCBJbnRQ
b2ludCAmdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0ICZ0b3VjaEFyZWEsIGNvbnN0IE5vZGVM
aXN0JiBub2RlTGlzdCkKK3sKKyAgICBJbnRSZWN0IHRhcmdldEFyZWE7CisgICAgVG91Y2hBZGp1
c3RtZW50OjpTdWJ0YXJnZXRHZW9tZXRyeUxpc3Qgc3VidGFyZ2V0czsKKyAgICBUb3VjaEFkanVz
dG1lbnQ6OmNvbXBpbGVTdWJ0YXJnZXRMaXN0KG5vZGVMaXN0LCBzdWJ0YXJnZXRzLCBUb3VjaEFk
anVzdG1lbnQ6Om5vZGVQcm92aWRlc0NvbnRleHRNZW51SXRlbXMpOworICAgIHJldHVybiBUb3Vj
aEFkanVzdG1lbnQ6OmZpbmROb2RlV2l0aExvd2VzdERpc3RhbmNlTWV0cmljKHRhcmdldE5vZGUs
IHRhcmdldFBvaW50LCB0YXJnZXRBcmVhLCB0b3VjaEhvdHNwb3QsIHRvdWNoQXJlYSwgc3VidGFy
Z2V0cywgVG91Y2hBZGp1c3RtZW50OjpoeWJyaWREaXN0YW5jZUZ1bmN0aW9uKTsKK30KKwogYm9v
bCBmaW5kQmVzdFpvb21hYmxlQXJlYShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UmVjdCYgdGFyZ2V0
QXJlYSwgY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50UmVjdCYgdG91Y2hB
cmVhLCBjb25zdCBOb2RlTGlzdCYgbm9kZUxpc3QpCiB7CiAgICAgSW50UG9pbnQgdGFyZ2V0UG9p
bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuaAppbmRleCBiZDRjYjk1OTM4YjVh
Mjc3OGFiYWRjNTI3ZDBhZmZlMWIxZWE4N2E5Li40OThiYmQ4NjRjNWYyZmUxY2IwYmVmODc3Mjk0
NTUxNTM0Yjc4ZWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmgKQEAgLTI5
LDYgKzI5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBmaW5kQmVzdENsaWNrYWJs
ZUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQmIHRhcmdldFBvaW50LCBjb25z
dCBJbnRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0
IE5vZGVMaXN0Jik7Citib29sIGZpbmRCZXN0Q29udGV4dE1lbnVDYW5kaWRhdGUoTm9kZSomIHRh
cmdldE5vZGUsIEludFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgSW50UG9pbnQmIHRvdWNoSG90
c3BvdCwgY29uc3QgSW50UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBOb2RlTGlzdCYpOwogYm9vbCBm
aW5kQmVzdFpvb21hYmxlQXJlYShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UmVjdCYgdGFyZ2V0QXJl
YSwgY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50UmVjdCYgdG91Y2hBcmVh
LCBjb25zdCBOb2RlTGlzdCYpOwogLy8gRklYTUU6IEltcGxlbWVudCB0aGUgc2ltaWxhciBmdW5j
dGlvbnMgZm9yIG90aGVyIGdlc3R1cmVzIGhlcmUgYXMgd2VsbC4KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCmluZGV4IDZhYWE3ZjE3Mjg3NTdhMWU0YmMwNGE3ZDk5MWMzM2Y2OTJl
YjI3NDIuLjUyZjlkYzIxM2M2NDQzYTcwNTM3NzI2Y2EwN2YxZGQ5YjM4Zjg5MmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTg0Miw2ICs4NDIsNDIgQEAgTm9kZSogSW50
ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4LCBsb25n
IHksIGxvbmcgd2lkdGgKICAgICByZXR1cm4gdGFyZ2V0Tm9kZTsKIH0KIAorUGFzc1JlZlB0cjxX
ZWJLaXRQb2ludD4gSW50ZXJuYWxzOjp0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDb250ZXh0
TWVudU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1bWVu
dCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQgfHwg
IWRvY3VtZW50LT5mcmFtZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBJbnRTaXplIHJhZGl1cyh3aWR0aCAvIDIs
IGhlaWdodCAvIDIpOworICAgIEludFBvaW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwgeSAr
IHJhZGl1cy5oZWlnaHQoKSk7CisKKyAgICBOb2RlKiB0YXJnZXROb2RlOworICAgIEludFBvaW50
IGFkanVzdGVkUG9pbnQ7CisKKyAgICBib29sIGZvdW5kTm9kZSA9IGRvY3VtZW50LT5mcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS0+YmVzdENvbnRleHRNZW51Tm9kZUZvclRvdWNoUG9pbnQocG9pbnQs
IHJhZGl1cywgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CisgICAgaWYgKGZvdW5kTm9kZSkK
KyAgICAgICAgcmV0dXJuIFdlYktpdFBvaW50OjpjcmVhdGUoYWRqdXN0ZWRQb2ludC54KCksIGFk
anVzdGVkUG9pbnQueSgpKTsKKworICAgIHJldHVybiBXZWJLaXRQb2ludDo6Y3JlYXRlKHgsIHkp
OworfQorCitOb2RlKiBJbnRlcm5hbHM6OnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q29udGV4dE1l
bnVOb2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgRG9jdW1lbnQq
IGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWRvY3VtZW50IHx8ICFk
b2N1bWVudC0+ZnJhbWUoKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNTX0VSUjsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgSW50U2l6ZSByYWRpdXMod2lkdGggLyAyLCBo
ZWlnaHQgLyAyKTsKKyAgICBJbnRQb2ludCBwb2ludCh4ICsgcmFkaXVzLndpZHRoKCksIHkgKyBy
YWRpdXMuaGVpZ2h0KCkpOworCisgICAgTm9kZSogdGFyZ2V0Tm9kZTsKKyAgICBJbnRQb2ludCBh
ZGp1c3RlZFBvaW50OworICAgIGRvY3VtZW50LT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+YmVz
dENvbnRleHRNZW51Tm9kZUZvclRvdWNoUG9pbnQocG9pbnQsIHJhZGl1cywgYWRqdXN0ZWRQb2lu
dCwgdGFyZ2V0Tm9kZSk7CisgICAgcmV0dXJuIHRhcmdldE5vZGU7Cit9CisKIFBhc3NSZWZQdHI8
Q2xpZW50UmVjdD4gSW50ZXJuYWxzOjpiZXN0Wm9vbWFibGVBcmVhRm9yVG91Y2hQb2ludChsb25n
IHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIERvY3VtZW50KiBkb2N1bWVudCwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZy
YW1lKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IDE1NzY2MmMzZGU2YjRl
ZDE0NGEyOTk5ODM2MDNjY2ViNjQwMGFiZGUuLjFmNGRiMDExZjNjOWJmMWUwOTdmY2NlMjljZDdm
YjdiMDI1ODFmYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtMTQyLDYgKzE0
Miw4IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKICAgICBQYXNzUmVm
UHRyPFdlYktpdFBvaW50PiB0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2Rl
KGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgRG9jdW1lbnQqLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgTm9kZSogdG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVO
b2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgRG9jdW1lbnQqLCBF
eGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gdG91Y2hQb3NpdGlv
bkFkanVzdGVkVG9CZXN0Q29udGV4dE1lbnVOb2RlKGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRo
LCBsb25nIGhlaWdodCwgRG9jdW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgTm9kZSogdG91
Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDb250ZXh0TWVudU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcg
d2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNz
UmVmUHRyPENsaWVudFJlY3Q+IGJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KGxvbmcgeCwg
bG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgRG9jdW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDYwMWU4
YTc0ZjlmMTBkMjRlNDE4ZjEzODMzODZlMDU3ZjU4YTA0YmYuLjFiOTllN2ZjODhmYzRjZDNhNDky
OWMwZjNlZGRjZjM0ZWNlYTI4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwK
QEAgLTExNyw2ICsxMTcsOCBAQCBtb2R1bGUgd2luZG93IHsKICNpZiBkZWZpbmVkKEVOQUJMRV9U
T1VDSF9BREpVU1RNRU5UKSAmJiBFTkFCTEVfVE9VQ0hfQURKVVNUTUVOVAogICAgICAgICBXZWJL
aXRQb2ludCB0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKGluIGxvbmcg
eCwgaW4gbG9uZyB5LCBpbiBsb25nIHdpZHRoLCBpbiBsb25nIGhlaWdodCwgaW4gRG9jdW1lbnQg
ZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgTm9kZSB0b3VjaE5vZGVB
ZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcg
d2lkdGgsIGluIGxvbmcgaGVpZ2h0LCBpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01F
eGNlcHRpb24pOworICAgICAgICBXZWJLaXRQb2ludCB0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jl
c3RDb250ZXh0TWVudU5vZGUoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgd2lkdGgsIGlu
IGxvbmcgaGVpZ2h0LCBpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24p
OworICAgICAgICBOb2RlIHRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q29udGV4dE1lbnVOb2RlKGlu
IGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHdpZHRoLCBpbiBsb25nIGhlaWdodCwgaW4gRG9j
dW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgQ2xpZW50UmVj
dCBiZXN0Wm9vbWFibGVBcmVhRm9yVG91Y2hQb2ludChpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4g
bG9uZyB3aWR0aCwgaW4gbG9uZyBoZWlnaHQsIGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMg
KERPTUV4Y2VwdGlvbik7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDc0Y2ViYjRjYzk3YTc0YjY3NDc0NzZj
NTJkYTM1MDEyN2E4YzYwY2UuLmJjZjRiMTBjZDU3YWQxNjllN2M0YTkxNDg4ZTc2ODZmYzViZDVi
M2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wOC0xNSAgQWxsYW4gU2FuZGZlbGQgSmVu
c2VuICA8YWxsYW4uamVuc2VuQG5va2lhLmNvbT4KKworICAgICAgICBUb3VjaCBhZGp1c3RtZW50
IGZvciBjb250ZXh0IG1lbnUgZ2VzdHVyZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk0MTAxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQSBuZXcgdGVzdCBmb3IgY29udGV4dC1tZW51IHRvdWNoIGFkanVz
dG1lbnQuCisKKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvY29udGV4dC1tZW51LWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogdG91Y2hhZGp1c3RtZW50L2NvbnRleHQtbWVudS5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvcmVzb3VyY2VzL3RvdWNoYWRqdXN0
bWVudC5qczoKKyAgICAgICAgKHRlc3RUb3VjaFBvaW50KToKKyAgICAgICAgKHRlc3RUb3VjaFBv
aW50Q29udGV4dE1lbnUpOgorICAgICAgICAoYWRqdXN0VG91Y2hQb2ludENvbnRleHRNZW51KToK
KwogMjAxMi0wOC0xNCAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IENhbGxpbmcgZ2V0RXZlbnRMaXN0ZW5lcnMoKSBvbiBlbGVt
ZW50IHdpdGggbWFsZm9ybWVkIGphdmFzY3JpcHQgZXZlbnQgbGlzdGVuZXJzIGNyYXNoZXMKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9jb250ZXh0LW1lbnUtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2NvbnRleHQtbWVudS1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjc0ZjA3OTczZGMxZDczNjA4ZjM2YTYwYzQxNGFkMGNiYjAzNTg1
OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9jb250ZXh0
LW1lbnUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjAgQEAKK1Rlc3QgdG91Y2ggYWRqdXN0bWVu
dCBmb3IgY29udGV4dC1tZW51IGdlc3R1cmVzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBhZGp1c3RlZCBub2RlIHdhcyBBI2EwLgorUEFTUyBhZGp1c3RlZCBub2RlIHdh
cyBTUEFOI3NwYW4wLgorUEFTUyBhZGp1c3RlZCBub2RlIHdhcyBudWxsLgorUEFTUyBhZGp1c3Rl
ZCBub2RlIHdhcyBTUEFOI3NwYW4wLgorUEFTUyBhZGp1c3RlZCBub2RlIHdhcyBJTUcjaW1nMC4K
K1BBU1MgYWRqdXN0ZWQgbm9kZSB3YXMgQSNhMC4KK1BBU1MgYWRqdXN0ZWQgbm9kZSB3YXMgbnVs
bC4KK1BBU1MgYWRqdXN0ZWQgbm9kZSB3YXMgQSNhMC4KK1BBU1MgYWRqdXN0ZWQgbm9kZSB3YXMg
SU1HI2ltZzAuCitQQVNTIGFkanVzdGVkIG5vZGUgd2FzIElNRyNpbWcwLgorUEFTUyBhZGp1c3Rl
ZCBub2RlIHdhcyBTUEFOI3NwYW4wLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVu
dC9jb250ZXh0LW1lbnUuaHRtbCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9jb250ZXh0
LW1lbnUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZTcyYzRkYzYyZDRjMDY4YWFjNTNmNzU1MDU5ZWVjYjNm
YWRhMjk2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2Nv
bnRleHQtbWVudS5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKyAgICA8dGl0bGU+VG91Y2ggQWRqdXN0bWVudCA6IEFkanVzdCB0byBjb250ZXh0
IG1lbnUgcHJvdmlkZXJzIC0gYnVnIEZJWE1FPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0iLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvdG91Y2hhZGp1c3RtZW50LmpzIj48L3NjcmlwdD4KKyAgICA8c3R5bGU+
CisgICAgICAgICNzYW5kYm94IHsKKyAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg
ICAgICAgICAgIHRvcDogMHB4OworICAgICAgICAgICAgbGVmdDogMHB4OworICAgICAgICAgICAg
d2lkdGg6IDQwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAyMDBweDsKKyAgICAgICAgfQorICAg
ICAgICAjc2FuZGJveCBwIHsKKyAgICAgICAgICAgIHBhZGRpbmc6IDVweDsKKyAgICAgICAgICAg
IGZvbnQ6IDIwcHggQWhlbTsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKworPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBvbkNsaWNrKCkge30KKzwvc2NyaXB0PgorCis8
ZGl2IGlkPXNhbmRib3g+CisgICAgPHAgaWQ9cDA+PGEgaWQ9YTAgaHJlZj0iI2EwIj5MaW5rIHdp
dGggVVJMLjwvYT4KKyAgICA8cCBpZD1wMT48c3BhbiBpZD1zcGFuMCBvbmNsaWNrPW9uQ2xpY2s+
VGV4dCB3aXRoIG9uY2xpY2sgaGFuZGxlci48L3NwYW4+CisgICAgPHAgaWQ9cDI+PGltZyBpZD1p
bWcwIGhlaWdodD0yMCB3aWR0aD0xMDAgc3JjPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3
MEtHZ29BQUFBTlNVaEVVZ0FBQUE4QUFBQVBBUU1BQUFBQkdBY0pBQUFBQTFCTVZFVUFnQUNjK2FX
UkFBQUFERWxFUVZSNDJtTmdJQUVBQUFBdEFBSDdLaE1xQUFBQUFFbEZUa1N1UW1DQyI+PC9pbWc+
Cis8L2Rpdj4KKworPHAgaWQ9J2Rlc2NyaXB0aW9uJz48L3A+Cis8ZGl2IGlkPSdjb25zb2xlJz48
L2Rpdj4KKworPHNjcmlwdD4KKyAgICAvLyBTZXQgdXAgc2hvcnRjdXQgYWNjZXNzIHRvIGVsZW1l
bnRzCisgICAgdmFyIGUgPSB7fTsKKyAgICBbJ3NhbmRib3gnLCAnYTAnLCAnc3BhbjAnLCAnaW1n
MCcsICdwMCcsICdwMScsICdwMiddLmZvckVhY2goZnVuY3Rpb24oYSkgeworICAgICAgICBlW2Fd
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSk7CisgICAgfSk7CisKKyAgICBmdW5jdGlvbiB0
ZXN0RGlyZWN0VG91Y2hlcygpCisgICAgeworICAgICAgICAvLyBDaGVjayBsaW5rcyBjYW4gYmUg
dGFyZ2V0ZWQgd2l0aCBjb250ZXh0IG1lbnUgZ2VzdHVyZS4KKyAgICAgICAgdGVzdFRvdWNoUG9p
bnRDb250ZXh0TWVudSh0b3VjaFBvaW50KDEwMCwgMzUsIDEwKSwgZS5hMCk7CisgICAgICAgIC8v
IENoZWNrIG9uY2xpY2sgY2FuIGJlIHRhcmdldGVkIHdpdGggYWN0aXZhdGUgZ2VzdHVyZS4KKyAg
ICAgICAgdGVzdFRvdWNoUG9pbnQodG91Y2hQb2ludCgxMDAsIDEwMCwgMTApLCBlLnNwYW4wKTsK
KyAgICAgICAgLy8gQ2hlY2sgb25jbGljayBjYW4gbm90IGJlIHRhcmdldGVkIHdpdGggY29udGV4
dCBtZW51LgorICAgICAgICB0ZXN0VG91Y2hQb2ludENvbnRleHRNZW51KHRvdWNoUG9pbnQoMTAw
LCAxMDAsIDEwKSwgbnVsbCk7CisgICAgICAgIC8vIEJ1dCB0aGF0IHRoZSBhZGp1c3RlZCBwb2lu
dCBzdGlsbCBoaXRzIGl0LCBpZiBubyBiZXR0ZXIgdGFyZ2V0IGlzIGF2YWlsYWJsZQorICAgICAg
ICB2YXIgYWRqdXN0ZWRQb2ludCA9IGFkanVzdFRvdWNoUG9pbnRDb250ZXh0TWVudSh0b3VjaFBv
aW50KDEwMCwgMTAwLCAxMCkpOworICAgICAgICBpZiAoYWRqdXN0ZWRQb2ludCkgeworICAgICAg
ICAgICAgc2hvdWxkQmVOb2RlKGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoYWRqdXN0ZWRQb2lu
dC54LCBhZGp1c3RlZFBvaW50LnkpLCBlLnNwYW4wKTsKKyAgICAgICAgfQorICAgICAgICAvLyBD
aGVjayBpbWFnZXMgY2FuIGJlIHRhcmdldGVkIHdpdGggY29udGV4dCBtZW51LgorICAgICAgICB0
ZXN0VG91Y2hQb2ludENvbnRleHRNZW51KG9mZnNldFRvdWNoUG9pbnQoZmluZEFic29sdXRlQm91
bmRzKGUuaW1nMCksICdjZW50ZXInLCAwLCA1LCA1KSwgZS5pbWcwKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiB0ZXN0QWRqdXN0ZWRUb3VjaGVzKCkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIHdl
IGlmIHdlIGFkanVzdCB0aGUgY29udGV4dCBtZW51IG9udG8gdGhlIGxpbmsuCisgICAgICAgIHRl
c3RUb3VjaFBvaW50Q29udGV4dE1lbnUodG91Y2hQb2ludCgxMDAsIDUwLCAxMCksIGUuYTApOwor
ICAgICAgICAvLyBDaGVjayB3ZSBpZiB3ZSBkbyBub3QgYWRqdXN0IHRoZSBjb250ZXh0IG1lbnUg
b250byB0aGUgb25jbGljayBlbGVtZW50LgorICAgICAgICB0ZXN0VG91Y2hQb2ludENvbnRleHRN
ZW51KHRvdWNoUG9pbnQoMTAwLCA3MCwgMTApLCBudWxsKTsKKyAgICAgICAgLy8gQ2hlY2sgdGhl
IGxpbmsgaXMgc3Ryb25nbHkgcHJlZmVycmVkLgorICAgICAgICB0ZXN0VG91Y2hQb2ludENvbnRl
eHRNZW51KHRvdWNoUG9pbnQoMTAwLCA2MCwgMjApLCBlLmEwKTsKKyAgICAgICAgLy8gQ2hlY2sg
YWRqdXN0bWVudCBvbnRvIHRoZSBpbWFnZS4KKyAgICAgICAgdGVzdFRvdWNoUG9pbnRDb250ZXh0
TWVudSh0b3VjaFBvaW50KDIwLCAxNDAsIDEwKSwgZS5pbWcwKTsKKyAgICAgICAgLy8gQ2hlY2sg
dGhlIGltYWdlIGlzIHN0cm9uZ2x5IHByZWZlcnJlZCBmb3IgY29udGV4dCBtZW51IGdlc3R1cmVz
LgorICAgICAgICB0ZXN0VG91Y2hQb2ludENvbnRleHRNZW51KHRvdWNoUG9pbnQoMjAsIDEyMCwg
MzApLCBlLmltZzApOworICAgICAgICAvLyBCdXQgdGhlIG9uY2xpY2sgaGFuZGxlciB3b3VsZCBi
ZSBwcmVmZXJyZWQgZm9yIGFjdGl2YXRlIGdlc3R1cmVzLgorICAgICAgICB0ZXN0VG91Y2hQb2lu
dCh0b3VjaFBvaW50KDIwLCAxMjAsIDMwKSwgZS5zcGFuMCk7CisgICAgfQorCisgICAgZnVuY3Rp
b24gcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHdp
bmRvdy5pbnRlcm5hbHMgJiYgaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2th
YmxlTm9kZSkgeworICAgICAgICAgICAgZGVzY3JpcHRpb24oJ1Rlc3QgdG91Y2ggYWRqdXN0bWVu
dCBmb3IgY29udGV4dC1tZW51IGdlc3R1cmVzLicpOworICAgICAgICAgICAgdGVzdERpcmVjdFRv
dWNoZXMoKTsKKyAgICAgICAgICAgIHRlc3RBZGp1c3RlZFRvdWNoZXMoKTsKKyAgICAgICAgICAg
IGUuc2FuZGJveC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOworICAgICAgICB9CisgICAgfQorICAg
IHJ1blRlc3RzKCk7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3Rt
ZW50LmpzIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3Jlc291cmNlcy90b3VjaGFkanVz
dG1lbnQuanMKaW5kZXggZGZhZmZhYWMwNWRkY2U0MmY5MGEzY2Y0OWVkOGEyYjg2ZWNiNGYwYS4u
MjUzNGExYThmYzVmNTIxZjUzOTkyYTFkNjI0NjA0M2I3ZGNkOWE4YyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3Jlc291cmNlcy90b3VjaGFkanVzdG1lbnQuanMKKysr
IGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3Jlc291cmNlcy90b3VjaGFkanVzdG1lbnQu
anMKQEAgLTIyLDExICsyMiw3IEBAIGZ1bmN0aW9uIG5vZGVUb1N0cmluZyhub2RlKQogICAgIHJl
dHVybiBub2RlLm5vZGVOYW1lICsgKG5vZGUuaWQgPyAoJyMnICsgbm9kZS5pZCkgOiAnJyk7CiB9
CiAKLWZ1bmN0aW9uIHRlc3RUb3VjaFBvaW50KHRvdWNocG9pbnQsIHRhcmdldE5vZGUpCi17Ci0g
ICAgdmFyIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENs
aWNrYWJsZU5vZGUodG91Y2hwb2ludC5sZWZ0LCB0b3VjaHBvaW50LnRvcCwgdG91Y2hwb2ludC53
aWR0aCwgdG91Y2hwb2ludC5oZWlnaHQsIGRvY3VtZW50KTsKLSAgICBpZiAoYWRqdXN0ZWROb2Rl
ICYmIGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKLSAgICAgICAgYWRq
dXN0ZWROb2RlID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7CitmdW5jdGlvbiBzaG91bGRCZU5v
ZGUoYWRqdXN0ZWROb2RlLCB0YXJnZXROb2RlKSB7CiAgICAgaWYgKHRhcmdldE5vZGUgPT0gYWRq
dXN0ZWROb2RlKSB7CiAgICAgICAgIHRlc3RQYXNzZWQoImFkanVzdGVkIG5vZGUgd2FzICIgKyBu
b2RlVG9TdHJpbmcodGFyZ2V0Tm9kZSkgKyAiLiIpOwogICAgIH0KQEAgLTM1LDYgKzMxLDI4IEBA
IGZ1bmN0aW9uIHRlc3RUb3VjaFBvaW50KHRvdWNocG9pbnQsIHRhcmdldE5vZGUpCiAgICAgfQog
fQogCitmdW5jdGlvbiB0ZXN0VG91Y2hQb2ludCh0b3VjaHBvaW50LCB0YXJnZXROb2RlKQorewor
ICAgIHZhciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RD
bGlja2FibGVOb2RlKHRvdWNocG9pbnQubGVmdCwgdG91Y2hwb2ludC50b3AsIHRvdWNocG9pbnQu
d2lkdGgsIHRvdWNocG9pbnQuaGVpZ2h0LCBkb2N1bWVudCk7CisgICAgaWYgKGFkanVzdGVkTm9k
ZSAmJiBhZGp1c3RlZE5vZGUubm9kZVR5cGUgPT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgIGFk
anVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJlbnROb2RlOworICAgIHNob3VsZEJlTm9kZShh
ZGp1c3RlZE5vZGUsIHRhcmdldE5vZGUpOworfQorCitmdW5jdGlvbiB0ZXN0VG91Y2hQb2ludENv
bnRleHRNZW51KHRvdWNocG9pbnQsIHRhcmdldE5vZGUpCit7CisgICAgdmFyIGFkanVzdGVkTm9k
ZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENvbnRleHRNZW51Tm9kZSh0b3Vj
aHBvaW50LmxlZnQsIHRvdWNocG9pbnQudG9wLCB0b3VjaHBvaW50LndpZHRoLCB0b3VjaHBvaW50
LmhlaWdodCwgZG9jdW1lbnQpOworICAgIGlmIChhZGp1c3RlZE5vZGUgJiYgYWRqdXN0ZWROb2Rl
Lm5vZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQorICAgICAgICBhZGp1c3RlZE5vZGUgPSBhZGp1
c3RlZE5vZGUucGFyZW50Tm9kZTsKKyAgICBzaG91bGRCZU5vZGUoYWRqdXN0ZWROb2RlLCB0YXJn
ZXROb2RlKTsKK30KKworZnVuY3Rpb24gYWRqdXN0VG91Y2hQb2ludENvbnRleHRNZW51KHRvdWNo
cG9pbnQpCit7CisgICAgdmFyIGFkanVzdGVkUG9pbnQgPSBpbnRlcm5hbHMudG91Y2hQb3NpdGlv
bkFkanVzdGVkVG9CZXN0Q29udGV4dE1lbnVOb2RlKHRvdWNocG9pbnQubGVmdCwgdG91Y2hwb2lu
dC50b3AsIHRvdWNocG9pbnQud2lkdGgsIHRvdWNocG9pbnQuaGVpZ2h0LCBkb2N1bWVudCk7Cisg
ICAgcmV0dXJuIGFkanVzdGVkUG9pbnQ7Cit9CisKIGZ1bmN0aW9uIHRvdWNoUG9pbnQoeCwgeSwg
cmFkaXVzWCwgcmFkaXVzWSkKIHsKICAgICBpZiAoIXJhZGl1c1kpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158732</attachid>
            <date>2012-08-16 00:36:27 -0700</date>
            <delta_ts>2012-08-17 03:06:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94101-20120816093548.patch</filename>
            <type>text/plain</type>
            <size>20265</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWM5ZjQ0M2UxMjU5NmUy
NGRjMDE4MThkMmI1NDdiY2RkOTgwN2M4MS4uM2RjYjkwNDBjMmUzYTkzMjNjYzJhNzYyN2IxYmU1
ZTk4OWVjOGU0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM0IEBACiAyMDEyLTA4LTE1ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCisgICAgICAgIFRv
dWNoIGFkanVzdG1lbnQgZm9yIGNvbnRleHQgbWVudSBnZXN0dXJlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQxMDEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGEgbmV3IGZpbHRlciBmb3IgZGV0
ZWN0aW5nIG5vZGVzIHRoYXQgcHJvdmlkZXMgZXh0cmEgY29udGV4dC1tZW51IGl0ZW1zLCAKKyAg
ICAgICAgYW5kIHVzZSB0aGF0IGluIGEgbmV3IHNldCBvZiBmdW5jdGlvbnMgZm9yIGFkanVzdGlu
ZyBjb250ZXh0LW1lbnUgZ2VzdHVyZXMuCisKKyAgICAgICAgVGVzdDogdG91Y2hhZGp1c3RtZW50
L2NvbnRleHQtbWVudS5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmJlc3RDb250ZXh0TWVudU5vZGVGb3JUb3Vj
aFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6YWRqdXN0R2VzdHVyZVBv
c2l0aW9uKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAoRXZlbnRI
YW5kbGVyKToKKyAgICAgICAgKiBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6Om5vZGVQcm92aWRlc0NvbnRleHRNZW51SXRlbXMpOgor
ICAgICAgICAoVG91Y2hBZGp1c3RtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRCZXN0Q29u
dGV4dE1lbnVDYW5kaWRhdGUpOgorICAgICAgICAqIHBhZ2UvVG91Y2hBZGp1c3RtZW50Lmg6Cisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjp0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDb250ZXh0TWVudU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENvbnRleHRNZW51
Tm9kZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKEludGVybmFs
cyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCisyMDEyLTA4LTE1ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCiAgICAgICAgIFtR
dF0gT3B0aW9uYWxseSBzdXBwb3J0IHNtb290aC1zY3JvbGxpbmcgb24gYWxsIHBsYXRmb3Jtcwog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQ5MjYKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDNkZmZiOWZhNGY2ZDBlMTA1YTc0
ZGI2ODFhNmM0ZjE3Y2RmZDEwZDIuLmU0N2VjOGJiN2FhYjFhNDViOWI2MzZhYWY2ZGZlYjY1YzQy
NjdjNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTI1NDMsNiArMjU0
MywxNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6YmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50
KGNvbnN0IEludFBvaW50JiB0b3VjaENlbnRlciwgYwogICAgIHJldHVybiBzdWNjZXNzOwogfQog
Citib29sIEV2ZW50SGFuZGxlcjo6YmVzdENvbnRleHRNZW51Tm9kZUZvclRvdWNoUG9pbnQoY29u
c3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50
UG9pbnQmIHRhcmdldFBvaW50LCBOb2RlKiYgdGFyZ2V0Tm9kZSkKK3sKKyAgICBIaXRUZXN0UmVx
dWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUgPSBIaXRUZXN0UmVxdWVzdDo6UmVhZE9u
bHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOworICAgIEludFBvaW50IGhpdFRlc3RQb2ludCA9
IG1fZnJhbWUtPnZpZXcoKS0+d2luZG93VG9Db250ZW50cyh0b3VjaENlbnRlcik7CisgICAgSGl0
VGVzdFJlc3VsdCByZXN1bHQgPSBoaXRUZXN0UmVzdWx0QXRQb2ludChoaXRUZXN0UG9pbnQsIC8q
YWxsb3dTaGFkb3dDb250ZW50Ki8gdHJ1ZSwgLyppZ25vcmVDbGlwcGluZyovIGZhbHNlLCBEb250
SGl0VGVzdFNjcm9sbGJhcnMsIGhpdFR5cGUsIHRvdWNoUmFkaXVzKTsKKworICAgIEludFJlY3Qg
dG91Y2hSZWN0KHRvdWNoQ2VudGVyIC0gdG91Y2hSYWRpdXMsIHRvdWNoUmFkaXVzICsgdG91Y2hS
YWRpdXMpOworICAgIFJlZlB0cjxTdGF0aWNIYXNoU2V0Tm9kZUxpc3Q+IG5vZGVMaXN0ID0gU3Rh
dGljSGFzaFNldE5vZGVMaXN0OjphZG9wdChyZXN1bHQucmVjdEJhc2VkVGVzdFJlc3VsdCgpKTsK
KyAgICByZXR1cm4gZmluZEJlc3RDb250ZXh0TWVudUNhbmRpZGF0ZSh0YXJnZXROb2RlLCB0YXJn
ZXRQb2ludCwgdG91Y2hDZW50ZXIsIHRvdWNoUmVjdCwgKm5vZGVMaXN0LmdldCgpKTsKK30KKwog
Ym9vbCBFdmVudEhhbmRsZXI6OmJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KGNvbnN0IElu
dFBvaW50JiB0b3VjaENlbnRlciwgY29uc3QgSW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFJlY3Qm
IHRhcmdldEFyZWEsIE5vZGUqJiB0YXJnZXROb2RlKQogewogICAgIEhpdFRlc3RSZXF1ZXN0OjpI
aXRUZXN0UmVxdWVzdFR5cGUgaGl0VHlwZSA9IEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhp
dFRlc3RSZXF1ZXN0OjpBY3RpdmU7CkBAIC0yNTU3LDcgKzI1NjgsMTggQEAgYm9vbCBFdmVudEhh
bmRsZXI6OmJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0b3Vj
aENlbnRlciwgY28KIGJvb2wgRXZlbnRIYW5kbGVyOjphZGp1c3RHZXN0dXJlUG9zaXRpb24oY29u
c3QgUGxhdGZvcm1HZXN0dXJlRXZlbnQmIGdlc3R1cmVFdmVudCwgSW50UG9pbnQmIGFkanVzdGVk
UG9pbnQpCiB7CiAgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IDA7Ci0gICAgYmVzdENsaWNrYWJsZU5v
ZGVGb3JUb3VjaFBvaW50KGdlc3R1cmVFdmVudC5wb3NpdGlvbigpLCBJbnRTaXplKGdlc3R1cmVF
dmVudC5hcmVhKCkud2lkdGgoKSAvIDIsIGdlc3R1cmVFdmVudC5hcmVhKCkuaGVpZ2h0KCkgLyAy
KSwgYWRqdXN0ZWRQb2ludCwgdGFyZ2V0Tm9kZSk7CisgICAgc3dpdGNoIChnZXN0dXJlRXZlbnQu
dHlwZSgpKSB7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlVGFwOgorICAgICAgICBi
ZXN0Q2xpY2thYmxlTm9kZUZvclRvdWNoUG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIElu
dFNpemUoZ2VzdHVyZUV2ZW50LmFyZWEoKS53aWR0aCgpIC8gMiwgZ2VzdHVyZUV2ZW50LmFyZWEo
KS5oZWlnaHQoKSAvIDIpLCBhZGp1c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQbGF0Zm9ybUV2ZW50OjpHZXN0dXJlTG9uZ1ByZXNzOgorICAgIGNhc2Ug
UGxhdGZvcm1FdmVudDo6R2VzdHVyZVR3b0ZpbmdlclRhcDoKKyAgICAgICAgYmVzdENvbnRleHRN
ZW51Tm9kZUZvclRvdWNoUG9pbnQoZ2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIEludFNpemUoZ2Vz
dHVyZUV2ZW50LmFyZWEoKS53aWR0aCgpIC8gMiwgZ2VzdHVyZUV2ZW50LmFyZWEoKS5oZWlnaHQo
KSAvIDIpLCBhZGp1c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBoYW5kbGluZyBmb3Igb3RoZXIg
dHlwZXMgYXMgbmVlZGVkLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiAg
ICAgcmV0dXJuIHRhcmdldE5vZGU7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5oCmluZGV4IDI5ZGQ5Y2UzODNlMDk4MTdhNDAzNTZkMzMyZDJhNzFiYTFiZjFiZjEuLjk4MjY0
M2RiNWNlMzliN2FlYTcyNWJkMzhiNzg2OWI0YjIzNGExZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaApAQCAtMTY5LDEwICsxNjksOSBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoVE9V
Q0hfQURKVVNUTUVOVCkKICAgICBib29sIGJlc3RDbGlja2FibGVOb2RlRm9yVG91Y2hQb2ludChj
b25zdCBJbnRQb2ludCYgdG91Y2hDZW50ZXIsIGNvbnN0IEludFNpemUmIHRvdWNoUmFkaXVzLCBJ
bnRQb2ludCYgdGFyZ2V0UG9pbnQsIE5vZGUqJiB0YXJnZXROb2RlKTsKKyAgICBib29sIGJlc3RD
b250ZXh0TWVudU5vZGVGb3JUb3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0b3VjaENlbnRlciwg
Y29uc3QgSW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFBvaW50JiB0YXJnZXRQb2ludCwgTm9kZSom
IHRhcmdldE5vZGUpOwogICAgIGJvb2wgYmVzdFpvb21hYmxlQXJlYUZvclRvdWNoUG9pbnQoY29u
c3QgSW50UG9pbnQmIHRvdWNoQ2VudGVyLCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50
UmVjdCYgdGFyZ2V0QXJlYSwgTm9kZSomIHRhcmdldE5vZGUpOwogCi0gICAgLy8gRklYTUU6IEFk
ZCBhIGdlc3R1cmUgdHlwZSBwYXJhbWV0ZXIgc28gdGhhdCBkaWZmZXJlbnQgY2FuZGlkYXRlIHNl
bGVjdGlvbiBjcml0ZXJpYSBtYXkgYmUgdXNlZCBmb3IKLSAgICAvLyBkaWZmZXJlbnQgZ2VzdHVy
ZSB0eXBlcy4gQ3VycmVudGx5IFRvdWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9UYXBHZXN0
dXJlIGlzIHVzZWQgZm9yIGFsbCB0eXBlcy4KICAgICBib29sIGFkanVzdEdlc3R1cmVQb3NpdGlv
bihjb25zdCBQbGF0Zm9ybUdlc3R1cmVFdmVudCYsIEludFBvaW50JiBhZGp1c3RlZFBvaW50KTsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKaW5kZXggNmFi
YWRjZmIyODRkNTMyZWQzZmJmNmI4ZmZlMzBiNjUwZTFjZjI4Ny4uODMyMDlkZjE4NDBjYjQ1ZjA0
NGY4OGFkYjEyZDQxNTM5ZDk1Y2NiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9U
b3VjaEFkanVzdG1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3Rt
ZW50LmNwcApAQCAtODgsNiArODgsMzAgQEAgYm9vbCBub2RlSXNab29tVGFyZ2V0KE5vZGUqIG5v
ZGUpCiAgICAgcmV0dXJuIG5vZGUtPnJlbmRlcmVyKCktPmlzQm94KCk7CiB9CiAKK2Jvb2wgbm9k
ZVByb3ZpZGVzQ29udGV4dE1lbnVJdGVtcyhOb2RlKiBub2RlKQoreworICAgIC8vIFRoaXMgZnVu
Y3Rpb24gdHJpZXMgdG8gbWF0Y2ggdGhlIG5vZGVzIHRoYXQgcmVjZWl2ZSBzcGVjaWFsIGNvbnRl
eHQtbWVudSBpdGVtcyBpbgorICAgIC8vIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUo
KSwgYW5kIHNob3VsZCBiZSBrZXB0IHVwdG9kYXRlIHdpdGggdGhvc2UuCisgICAgaWYgKG5vZGUt
PmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChub2Rl
LT5pc0xpbmsoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPnJlbmRlcmVy
KCktPmlzSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPnJlbmRl
cmVyKCktPmlzTWVkaWEoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPnJl
bmRlcmVyKCktPmNhbkJlU2VsZWN0aW9uTGVhZigpKSB7CisgICAgICAgIC8vIElmIHRoZSBjb250
ZXh0IG1lbnUgZ2VzdHVyZSB3aWxsIHRyaWdnZXIgYSBzZWxlY3Rpb24gYWxsIHNlbGVjdGFibGUg
bm9kZXMgYXJlIHRhcmdldHMuCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpLT5mcmFtZSgp
LT5lZGl0b3IoKS0+YmVoYXZpb3IoKS5zaG91bGRTZWxlY3RPbkNvbnRleHR1YWxNZW51Q2xpY2so
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvLyBGSVhNRTogQSBzZWxlY3Rl
ZCB0ZXh0IG1pZ2h0IG9ubHkgYmUgcGFydGlhbGx5IHNlbGVjdGVkLCBhbmQgd2Ugc2hvdWxkIG9u
bHkgYXBwZW5kCisgICAgICAgIC8vIHRoZSBzZWxlY3RlZCBzdWJ0YXJnZXRzIG9mIGl0IGluIGFw
cGVuZFN1YnRhcmdldHNGb3JOb2RlVG9MaXN0KCkuCisgICAgICAgIGlmIChub2RlLT5yZW5kZXJl
cigpLT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIHN0
YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmRTdWJ0YXJnZXRzRm9yTm9kZVRvTGlzdChOb2RlKiBub2Rl
LCBTdWJ0YXJnZXRHZW9tZXRyeUxpc3QmIHN1YnRhcmdldHMpCiB7CiAgICAgLy8gU2luY2UgdGhl
IG5vZGUgaXMgYSByZXN1bHQgb2YgYSBoaXQgdGVzdCwgd2UgYXJlIGFscmVhZHkgZW5zdXJlZCBp
dCBoYXMgYSByZW5kZXJlci4KQEAgLTM4Niw2ICs0MTAsMTQgQEAgYm9vbCBmaW5kQmVzdENsaWNr
YWJsZUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQgJnRhcmdldFBvaW50LCBj
b25zdAogICAgIHJldHVybiBUb3VjaEFkanVzdG1lbnQ6OmZpbmROb2RlV2l0aExvd2VzdERpc3Rh
bmNlTWV0cmljKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0YXJnZXRBcmVhLCB0b3VjaEhvdHNw
b3QsIHRvdWNoQXJlYSwgc3VidGFyZ2V0cywgVG91Y2hBZGp1c3RtZW50OjpoeWJyaWREaXN0YW5j
ZUZ1bmN0aW9uKTsKIH0KIAorYm9vbCBmaW5kQmVzdENvbnRleHRNZW51Q2FuZGlkYXRlKE5vZGUq
JiB0YXJnZXROb2RlLCBJbnRQb2ludCAmdGFyZ2V0UG9pbnQsIGNvbnN0IEludFBvaW50ICZ0b3Vj
aEhvdHNwb3QsIGNvbnN0IEludFJlY3QgJnRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3QmIG5vZGVM
aXN0KQoreworICAgIEludFJlY3QgdGFyZ2V0QXJlYTsKKyAgICBUb3VjaEFkanVzdG1lbnQ6OlN1
YnRhcmdldEdlb21ldHJ5TGlzdCBzdWJ0YXJnZXRzOworICAgIFRvdWNoQWRqdXN0bWVudDo6Y29t
cGlsZVN1YnRhcmdldExpc3Qobm9kZUxpc3QsIHN1YnRhcmdldHMsIFRvdWNoQWRqdXN0bWVudDo6
bm9kZVByb3ZpZGVzQ29udGV4dE1lbnVJdGVtcyk7CisgICAgcmV0dXJuIFRvdWNoQWRqdXN0bWVu
dDo6ZmluZE5vZGVXaXRoTG93ZXN0RGlzdGFuY2VNZXRyaWModGFyZ2V0Tm9kZSwgdGFyZ2V0UG9p
bnQsIHRhcmdldEFyZWEsIHRvdWNoSG90c3BvdCwgdG91Y2hBcmVhLCBzdWJ0YXJnZXRzLCBUb3Vj
aEFkanVzdG1lbnQ6Omh5YnJpZERpc3RhbmNlRnVuY3Rpb24pOworfQorCiBib29sIGZpbmRCZXN0
Wm9vbWFibGVBcmVhKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRSZWN0JiB0YXJnZXRBcmVhLCBjb25z
dCBJbnRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0
IE5vZGVMaXN0JiBub2RlTGlzdCkKIHsKICAgICBJbnRQb2ludCB0YXJnZXRQb2ludDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5oCmluZGV4IGJkNGNiOTU5MzhiNWEyNzc4YWJhZGM1
MjdkMGFmZmUxYjFlYTg3YTkuLjQ5OGJiZDg2NGM1ZjJmZTFjYjBiZWY4NzcyOTQ1NTE1MzRiNzhl
ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuaApAQCAtMjksNiArMjksNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIGZpbmRCZXN0Q2xpY2thYmxlQ2FuZGlkYXRl
KE5vZGUqJiB0YXJnZXROb2RlLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IEludFBvaW50
JiB0b3VjaEhvdHNwb3QsIGNvbnN0IEludFJlY3QmIHRvdWNoQXJlYSwgY29uc3QgTm9kZUxpc3Qm
KTsKK2Jvb2wgZmluZEJlc3RDb250ZXh0TWVudUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwg
SW50UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBJbnRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25z
dCBJbnRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0IE5vZGVMaXN0Jik7CiBib29sIGZpbmRCZXN0Wm9v
bWFibGVBcmVhKE5vZGUqJiB0YXJnZXROb2RlLCBJbnRSZWN0JiB0YXJnZXRBcmVhLCBjb25zdCBJ
bnRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0b3VjaEFyZWEsIGNvbnN0IE5v
ZGVMaXN0Jik7CiAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSBzaW1pbGFyIGZ1bmN0aW9ucyBmb3Ig
b3RoZXIgZ2VzdHVyZXMgaGVyZSBhcyB3ZWxsLgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKaW5kZXggNmFhYTdmMTcyODc1N2ExZTRiYzA0YTdkOTkxYzMzZjY5MmViMjc0Mi4uNTJm
OWRjMjEzYzY0NDNhNzA1Mzc3MjZjYTA3ZjFkZDliMzhmODkyYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcApAQCAtODQyLDYgKzg0Miw0MiBAQCBOb2RlKiBJbnRlcm5hbHM6OnRv
dWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3
aWR0aAogICAgIHJldHVybiB0YXJnZXROb2RlOwogfQogCitQYXNzUmVmUHRyPFdlYktpdFBvaW50
PiBJbnRlcm5hbHM6OnRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENvbnRleHRNZW51Tm9kZShs
b25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIERvY3VtZW50KiBkb2N1bWVu
dCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PmZyYW1lKCkpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKworICAgIEludFNpemUgcmFkaXVzKHdpZHRoIC8gMiwgaGVpZ2h0IC8g
Mik7CisgICAgSW50UG9pbnQgcG9pbnQoeCArIHJhZGl1cy53aWR0aCgpLCB5ICsgcmFkaXVzLmhl
aWdodCgpKTsKKworICAgIE5vZGUqIHRhcmdldE5vZGU7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQ
b2ludDsKKworICAgIGJvb2wgZm91bmROb2RlID0gZG9jdW1lbnQtPmZyYW1lKCktPmV2ZW50SGFu
ZGxlcigpLT5iZXN0Q29udGV4dE1lbnVOb2RlRm9yVG91Y2hQb2ludChwb2ludCwgcmFkaXVzLCBh
ZGp1c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKKyAgICBpZiAoZm91bmROb2RlKQorICAgICAgICBy
ZXR1cm4gV2ViS2l0UG9pbnQ6OmNyZWF0ZShhZGp1c3RlZFBvaW50LngoKSwgYWRqdXN0ZWRQb2lu
dC55KCkpOworCisgICAgcmV0dXJuIFdlYktpdFBvaW50OjpjcmVhdGUoeCwgeSk7Cit9CisKK05v
ZGUqIEludGVybmFsczo6dG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDb250ZXh0TWVudU5vZGUobG9u
ZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1bWVudCogZG9jdW1lbnQs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5m
cmFtZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBJbnRTaXplIHJhZGl1cyh3aWR0aCAvIDIsIGhlaWdodCAvIDIp
OworICAgIEludFBvaW50IHBvaW50KHggKyByYWRpdXMud2lkdGgoKSwgeSArIHJhZGl1cy5oZWln
aHQoKSk7CisKKyAgICBOb2RlKiB0YXJnZXROb2RlOworICAgIEludFBvaW50IGFkanVzdGVkUG9p
bnQ7CisgICAgZG9jdW1lbnQtPmZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5iZXN0Q29udGV4dE1l
bnVOb2RlRm9yVG91Y2hQb2ludChwb2ludCwgcmFkaXVzLCBhZGp1c3RlZFBvaW50LCB0YXJnZXRO
b2RlKTsKKyAgICByZXR1cm4gdGFyZ2V0Tm9kZTsKK30KKwogUGFzc1JlZlB0cjxDbGllbnRSZWN0
PiBJbnRlcm5hbHM6OmJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KGxvbmcgeCwgbG9uZyB5
LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCwgRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggMTU3NjYyYzNkZTZiNGVkMTQ0YTI5OTk4
MzYwM2NjZWI2NDAwYWJkZS4uMWY0ZGIwMTFmM2M5YmYxZTA5N2ZjY2UyOWNkN2ZiN2IwMjU4MWZh
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0xNDIsNiArMTQyLDggQEAgcHVi
bGljOgogI2lmIEVOQUJMRShUT1VDSF9BREpVU1RNRU5UKQogICAgIFBhc3NSZWZQdHI8V2ViS2l0
UG9pbnQ+IHRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4LCBs
b25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBOb2RlKiB0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4
LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1bWVudCosIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYktpdFBvaW50PiB0b3VjaFBvc2l0aW9uQWRqdXN0ZWRU
b0Jlc3RDb250ZXh0TWVudU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVp
Z2h0LCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBOb2RlKiB0b3VjaE5vZGVBZGp1
c3RlZFRvQmVzdENvbnRleHRNZW51Tm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9u
ZyBoZWlnaHQsIERvY3VtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8Q2xp
ZW50UmVjdD4gYmVzdFpvb21hYmxlQXJlYUZvclRvdWNoUG9pbnQobG9uZyB4LCBsb25nIHksIGxv
bmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICNlbmRp
ZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5kZXggNjAxZThhNzRmOWYxMGQy
NGU0MThmMTM4MzM4NmUwNTdmNThhMDRiZi4uMWI5OWU3ZmM4OGZjNGNkM2E0OTI5YzBmM2VkZGNm
MzRlY2VhMjg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
aWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtMTE3LDYg
KzExNyw4IEBAIG1vZHVsZSB3aW5kb3cgewogI2lmIGRlZmluZWQoRU5BQkxFX1RPVUNIX0FESlVT
VE1FTlQpICYmIEVOQUJMRV9UT1VDSF9BREpVU1RNRU5UCiAgICAgICAgIFdlYktpdFBvaW50IHRv
dWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUoaW4gbG9uZyB4LCBpbiBsb25n
IHksIGluIGxvbmcgd2lkdGgsIGluIGxvbmcgaGVpZ2h0LCBpbiBEb2N1bWVudCBkb2N1bWVudCkg
cmFpc2VzIChET01FeGNlcHRpb24pOwogICAgICAgICBOb2RlIHRvdWNoTm9kZUFkanVzdGVkVG9C
ZXN0Q2xpY2thYmxlTm9kZShpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB3aWR0aCwgaW4g
bG9uZyBoZWlnaHQsIGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7
CisgICAgICAgIFdlYktpdFBvaW50IHRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENvbnRleHRN
ZW51Tm9kZShpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB3aWR0aCwgaW4gbG9uZyBoZWln
aHQsIGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAg
IE5vZGUgdG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDb250ZXh0TWVudU5vZGUoaW4gbG9uZyB4LCBp
biBsb25nIHksIGluIGxvbmcgd2lkdGgsIGluIGxvbmcgaGVpZ2h0LCBpbiBEb2N1bWVudCBkb2N1
bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwogICAgICAgICBDbGllbnRSZWN0IGJlc3Rab29t
YWJsZUFyZWFGb3JUb3VjaFBvaW50KGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHdpZHRo
LCBpbiBsb25nIGhlaWdodCwgaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0
aW9uKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzRjZWJiNGNjOTdhNzRiNjc0NzQ3NmM1MmRhMzUwMTI3
YThjNjBjZS4uYmNmNGIxMGNkNTdhZDE2OWU3YzRhOTE0ODhlNzY4NmZjNWJkNWIzYyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDEyLTA4LTE1ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxh
bi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFRvdWNoIGFkanVzdG1lbnQgZm9yIGNvbnRl
eHQgbWVudSBnZXN0dXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTQxMDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBIG5ldyB0ZXN0IGZvciBjb250ZXh0LW1lbnUgdG91Y2ggYWRqdXN0bWVudC4KKwor
ICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9jb250ZXh0LW1lbnUtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvY29udGV4dC1tZW51Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3RtZW50LmpzOgor
ICAgICAgICAodGVzdFRvdWNoUG9pbnQpOgorICAgICAgICAodGVzdFRvdWNoUG9pbnRDb250ZXh0
TWVudSk6CisgICAgICAgIChhZGp1c3RUb3VjaFBvaW50Q29udGV4dE1lbnUpOgorCiAyMDEyLTA4
LTE0ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogQ2FsbGluZyBnZXRFdmVudExpc3RlbmVycygpIG9uIGVsZW1lbnQgd2l0aCBt
YWxmb3JtZWQgamF2YXNjcmlwdCBldmVudCBsaXN0ZW5lcnMgY3Jhc2hlcwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2NvbnRleHQtbWVudS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvY29udGV4dC1tZW51LWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42NzRmMDc5NzNkYzFkNzM2MDhmMzZhNjBjNDE0YWQwY2JiMDM1ODU4Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2NvbnRleHQtbWVudS1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwyMCBAQAorVGVzdCB0b3VjaCBhZGp1c3RtZW50IGZvciBjb250
ZXh0LW1lbnUgZ2VzdHVyZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IGFkanVzdGVkIG5vZGUgd2FzIEEjYTAuCitQQVNTIGFkanVzdGVkIG5vZGUgd2FzIFNQQU4jc3Bh
bjAuCitQQVNTIGFkanVzdGVkIG5vZGUgd2FzIG51bGwuCitQQVNTIGFkanVzdGVkIG5vZGUgd2Fz
IFNQQU4jc3BhbjAuCitQQVNTIGFkanVzdGVkIG5vZGUgd2FzIElNRyNpbWcwLgorUEFTUyBhZGp1
c3RlZCBub2RlIHdhcyBBI2EwLgorUEFTUyBhZGp1c3RlZCBub2RlIHdhcyBudWxsLgorUEFTUyBh
ZGp1c3RlZCBub2RlIHdhcyBBI2EwLgorUEFTUyBhZGp1c3RlZCBub2RlIHdhcyBJTUcjaW1nMC4K
K1BBU1MgYWRqdXN0ZWQgbm9kZSB3YXMgSU1HI2ltZzAuCitQQVNTIGFkanVzdGVkIG5vZGUgd2Fz
IFNQQU4jc3BhbjAuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2NvbnRleHQt
bWVudS5odG1sIGIvTGF5b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L2NvbnRleHQtbWVudS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVlNzJjNGRjNjJkNGMwNjhhYWM1M2Y3NTUwNTllZWNiM2ZhZGEyOTYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvY29udGV4dC1tZW51
Lmh0bWwKQEAgLTAsMCArMSw5MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
ICAgIDx0aXRsZT5Ub3VjaCBBZGp1c3RtZW50IDogQWRqdXN0IHRvIGNvbnRleHQgbWVudSBwcm92
aWRlcnMgLSBidWcgRklYTUU8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291
cmNlcy90b3VjaGFkanVzdG1lbnQuanMiPjwvc2NyaXB0PgorICAgIDxzdHlsZT4KKyAgICAgICAg
I3NhbmRib3ggeworICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOworICAgICAgICAgICAg
dG9wOiAwcHg7CisgICAgICAgICAgICBsZWZ0OiAwcHg7CisgICAgICAgICAgICB3aWR0aDogNDAw
cHg7CisgICAgICAgICAgICBoZWlnaHQ6IDIwMHB4OworICAgICAgICB9CisgICAgICAgICNzYW5k
Ym94IHAgeworICAgICAgICAgICAgcGFkZGluZzogNXB4OworICAgICAgICAgICAgZm9udDogMjBw
eCBBaGVtOworICAgICAgICB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8c2Ny
aXB0PgorICAgIGZ1bmN0aW9uIG9uQ2xpY2soKSB7fQorPC9zY3JpcHQ+CisKKzxkaXYgaWQ9c2Fu
ZGJveD4KKyAgICA8cCBpZD1wMD48YSBpZD1hMCBocmVmPSIjYTAiPkxpbmsgd2l0aCBVUkwuPC9h
PgorICAgIDxwIGlkPXAxPjxzcGFuIGlkPXNwYW4wIG9uY2xpY2s9b25DbGljaz5UZXh0IHdpdGgg
b25jbGljayBoYW5kbGVyLjwvc3Bhbj4KKyAgICA8cCBpZD1wMj48aW1nIGlkPWltZzAgaGVpZ2h0
PTIwIHdpZHRoPTEwMCBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFO
U1VoRVVnQUFBQThBQUFBUEFRTUFBQUFCR0FjSkFBQUFBMUJNVkVVQWdBQ2MrYVdSQUFBQURFbEVR
VlI0Mm1OZ0lBRUFBQUF0QUFIN0toTXFBQUFBQUVsRlRrU3VRbUNDIj48L2ltZz4KKzwvZGl2Pgor
Cis8cCBpZD0nZGVzY3JpcHRpb24nPjwvcD4KKzxkaXYgaWQ9J2NvbnNvbGUnPjwvZGl2PgorCis8
c2NyaXB0PgorICAgIC8vIFNldCB1cCBzaG9ydGN1dCBhY2Nlc3MgdG8gZWxlbWVudHMKKyAgICB2
YXIgZSA9IHt9OworICAgIFsnc2FuZGJveCcsICdhMCcsICdzcGFuMCcsICdpbWcwJywgJ3AwJywg
J3AxJywgJ3AyJ10uZm9yRWFjaChmdW5jdGlvbihhKSB7CisgICAgICAgIGVbYV0gPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChhKTsKKyAgICB9KTsKKworICAgIGZ1bmN0aW9uIHRlc3REaXJlY3RU
b3VjaGVzKCkKKyAgICB7CisgICAgICAgIC8vIENoZWNrIGxpbmtzIGNhbiBiZSB0YXJnZXRlZCB3
aXRoIGNvbnRleHQgbWVudSBnZXN0dXJlLgorICAgICAgICB0ZXN0VG91Y2hQb2ludENvbnRleHRN
ZW51KHRvdWNoUG9pbnQoMTAwLCAzNSwgMTApLCBlLmEwKTsKKyAgICAgICAgLy8gQ2hlY2sgb25j
bGljayBjYW4gYmUgdGFyZ2V0ZWQgd2l0aCBhY3RpdmF0ZSBnZXN0dXJlLgorICAgICAgICB0ZXN0
VG91Y2hQb2ludCh0b3VjaFBvaW50KDEwMCwgMTAwLCAxMCksIGUuc3BhbjApOworICAgICAgICAv
LyBDaGVjayBvbmNsaWNrIGNhbiBub3QgYmUgdGFyZ2V0ZWQgd2l0aCBjb250ZXh0IG1lbnUuCisg
ICAgICAgIHRlc3RUb3VjaFBvaW50Q29udGV4dE1lbnUodG91Y2hQb2ludCgxMDAsIDEwMCwgMTAp
LCBudWxsKTsKKyAgICAgICAgLy8gQnV0IHRoYXQgdGhlIGFkanVzdGVkIHBvaW50IHN0aWxsIGhp
dHMgaXQsIGlmIG5vIGJldHRlciB0YXJnZXQgaXMgYXZhaWxhYmxlCisgICAgICAgIHZhciBhZGp1
c3RlZFBvaW50ID0gYWRqdXN0VG91Y2hQb2ludENvbnRleHRNZW51KHRvdWNoUG9pbnQoMTAwLCAx
MDAsIDEwKSk7CisgICAgICAgIGlmIChhZGp1c3RlZFBvaW50KSB7CisgICAgICAgICAgICBzaG91
bGRCZU5vZGUoZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChhZGp1c3RlZFBvaW50LngsIGFkanVz
dGVkUG9pbnQueSksIGUuc3BhbjApOworICAgICAgICB9CisgICAgICAgIC8vIENoZWNrIGltYWdl
cyBjYW4gYmUgdGFyZ2V0ZWQgd2l0aCBjb250ZXh0IG1lbnUuCisgICAgICAgIHRlc3RUb3VjaFBv
aW50Q29udGV4dE1lbnUob2Zmc2V0VG91Y2hQb2ludChmaW5kQWJzb2x1dGVCb3VuZHMoZS5pbWcw
KSwgJ2NlbnRlcicsIDAsIDUsIDUpLCBlLmltZzApOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRl
c3RBZGp1c3RlZFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgd2UgaWYgd2UgYWRq
dXN0IHRoZSBjb250ZXh0IG1lbnUgb250byB0aGUgbGluay4KKyAgICAgICAgdGVzdFRvdWNoUG9p
bnRDb250ZXh0TWVudSh0b3VjaFBvaW50KDEwMCwgNTAsIDEwKSwgZS5hMCk7CisgICAgICAgIC8v
IENoZWNrIHdlIGlmIHdlIGRvIG5vdCBhZGp1c3QgdGhlIGNvbnRleHQgbWVudSBvbnRvIHRoZSBv
bmNsaWNrIGVsZW1lbnQuCisgICAgICAgIHRlc3RUb3VjaFBvaW50Q29udGV4dE1lbnUodG91Y2hQ
b2ludCgxMDAsIDcwLCAxMCksIG51bGwpOworICAgICAgICAvLyBDaGVjayB0aGUgbGluayBpcyBz
dHJvbmdseSBwcmVmZXJyZWQuCisgICAgICAgIHRlc3RUb3VjaFBvaW50Q29udGV4dE1lbnUodG91
Y2hQb2ludCgxMDAsIDYwLCAyMCksIGUuYTApOworICAgICAgICAvLyBDaGVjayBhZGp1c3RtZW50
IG9udG8gdGhlIGltYWdlLgorICAgICAgICB0ZXN0VG91Y2hQb2ludENvbnRleHRNZW51KHRvdWNo
UG9pbnQoMjAsIDE0MCwgMTApLCBlLmltZzApOworICAgICAgICAvLyBDaGVjayB0aGUgaW1hZ2Ug
aXMgc3Ryb25nbHkgcHJlZmVycmVkIGZvciBjb250ZXh0IG1lbnUgZ2VzdHVyZXMuCisgICAgICAg
IHRlc3RUb3VjaFBvaW50Q29udGV4dE1lbnUodG91Y2hQb2ludCgyMCwgMTIwLCAzMCksIGUuaW1n
MCk7CisgICAgICAgIC8vIEJ1dCB0aGUgb25jbGljayBoYW5kbGVyIHdvdWxkIGJlIHByZWZlcnJl
ZCBmb3IgYWN0aXZhdGUgZ2VzdHVyZXMuCisgICAgICAgIHRlc3RUb3VjaFBvaW50KHRvdWNoUG9p
bnQoMjAsIDEyMCwgMzApLCBlLnNwYW4wKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydW5UZXN0
cygpCisgICAgeworICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIgJiYgd2luZG93LmludGVy
bmFscyAmJiBpbnRlcm5hbHMudG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKSB7
CisgICAgICAgICAgICBkZXNjcmlwdGlvbignVGVzdCB0b3VjaCBhZGp1c3RtZW50IGZvciBjb250
ZXh0LW1lbnUgZ2VzdHVyZXMuJyk7CisgICAgICAgICAgICB0ZXN0RGlyZWN0VG91Y2hlcygpOwor
ICAgICAgICAgICAgdGVzdEFkanVzdGVkVG91Y2hlcygpOworICAgICAgICAgICAgZS5zYW5kYm94
LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CisgICAgICAgIH0KKyAgICB9CisgICAgcnVuVGVzdHMo
KTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdG91Y2hhZGp1c3RtZW50L3Jlc291cmNlcy90b3VjaGFkanVzdG1lbnQuanMgYi9M
YXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvcmVzb3VyY2VzL3RvdWNoYWRqdXN0bWVudC5qcwpp
bmRleCBkZmFmZmFhYzA1ZGRjZTQyZjkwYTNjZjQ5ZWQ4YTJiODZlY2I0ZjBhLi4yNTM0YTFhOGZj
NWY1MjFmNTM5OTJhMWQ2MjQ2MDQzYjdkY2Q5YThjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
b3VjaGFkanVzdG1lbnQvcmVzb3VyY2VzL3RvdWNoYWRqdXN0bWVudC5qcworKysgYi9MYXlvdXRU
ZXN0cy90b3VjaGFkanVzdG1lbnQvcmVzb3VyY2VzL3RvdWNoYWRqdXN0bWVudC5qcwpAQCAtMjIs
MTEgKzIyLDcgQEAgZnVuY3Rpb24gbm9kZVRvU3RyaW5nKG5vZGUpCiAgICAgcmV0dXJuIG5vZGUu
bm9kZU5hbWUgKyAobm9kZS5pZCA/ICgnIycgKyBub2RlLmlkKSA6ICcnKTsKIH0KIAotZnVuY3Rp
b24gdGVzdFRvdWNoUG9pbnQodG91Y2hwb2ludCwgdGFyZ2V0Tm9kZSkKLXsKLSAgICB2YXIgYWRq
dXN0ZWROb2RlID0gaW50ZXJuYWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9k
ZSh0b3VjaHBvaW50LmxlZnQsIHRvdWNocG9pbnQudG9wLCB0b3VjaHBvaW50LndpZHRoLCB0b3Vj
aHBvaW50LmhlaWdodCwgZG9jdW1lbnQpOwotICAgIGlmIChhZGp1c3RlZE5vZGUgJiYgYWRqdXN0
ZWROb2RlLm5vZGVUeXBlID09IDMpIC8vIFRFWFQgbm9kZQotICAgICAgICBhZGp1c3RlZE5vZGUg
PSBhZGp1c3RlZE5vZGUucGFyZW50Tm9kZTsKK2Z1bmN0aW9uIHNob3VsZEJlTm9kZShhZGp1c3Rl
ZE5vZGUsIHRhcmdldE5vZGUpIHsKICAgICBpZiAodGFyZ2V0Tm9kZSA9PSBhZGp1c3RlZE5vZGUp
IHsKICAgICAgICAgdGVzdFBhc3NlZCgiYWRqdXN0ZWQgbm9kZSB3YXMgIiArIG5vZGVUb1N0cmlu
Zyh0YXJnZXROb2RlKSArICIuIik7CiAgICAgfQpAQCAtMzUsNiArMzEsMjggQEAgZnVuY3Rpb24g
dGVzdFRvdWNoUG9pbnQodG91Y2hwb2ludCwgdGFyZ2V0Tm9kZSkKICAgICB9CiB9CiAKK2Z1bmN0
aW9uIHRlc3RUb3VjaFBvaW50KHRvdWNocG9pbnQsIHRhcmdldE5vZGUpCit7CisgICAgdmFyIGFk
anVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5v
ZGUodG91Y2hwb2ludC5sZWZ0LCB0b3VjaHBvaW50LnRvcCwgdG91Y2hwb2ludC53aWR0aCwgdG91
Y2hwb2ludC5oZWlnaHQsIGRvY3VtZW50KTsKKyAgICBpZiAoYWRqdXN0ZWROb2RlICYmIGFkanVz
dGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhUIG5vZGUKKyAgICAgICAgYWRqdXN0ZWROb2Rl
ID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7CisgICAgc2hvdWxkQmVOb2RlKGFkanVzdGVkTm9k
ZSwgdGFyZ2V0Tm9kZSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RUb3VjaFBvaW50Q29udGV4dE1lbnUo
dG91Y2hwb2ludCwgdGFyZ2V0Tm9kZSkKK3sKKyAgICB2YXIgYWRqdXN0ZWROb2RlID0gaW50ZXJu
YWxzLnRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q29udGV4dE1lbnVOb2RlKHRvdWNocG9pbnQubGVm
dCwgdG91Y2hwb2ludC50b3AsIHRvdWNocG9pbnQud2lkdGgsIHRvdWNocG9pbnQuaGVpZ2h0LCBk
b2N1bWVudCk7CisgICAgaWYgKGFkanVzdGVkTm9kZSAmJiBhZGp1c3RlZE5vZGUubm9kZVR5cGUg
PT0gMykgLy8gVEVYVCBub2RlCisgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5w
YXJlbnROb2RlOworICAgIHNob3VsZEJlTm9kZShhZGp1c3RlZE5vZGUsIHRhcmdldE5vZGUpOwor
fQorCitmdW5jdGlvbiBhZGp1c3RUb3VjaFBvaW50Q29udGV4dE1lbnUodG91Y2hwb2ludCkKK3sK
KyAgICB2YXIgYWRqdXN0ZWRQb2ludCA9IGludGVybmFscy50b3VjaFBvc2l0aW9uQWRqdXN0ZWRU
b0Jlc3RDb250ZXh0TWVudU5vZGUodG91Y2hwb2ludC5sZWZ0LCB0b3VjaHBvaW50LnRvcCwgdG91
Y2hwb2ludC53aWR0aCwgdG91Y2hwb2ludC5oZWlnaHQsIGRvY3VtZW50KTsKKyAgICByZXR1cm4g
YWRqdXN0ZWRQb2ludDsKK30KKwogZnVuY3Rpb24gdG91Y2hQb2ludCh4LCB5LCByYWRpdXNYLCBy
YWRpdXNZKQogewogICAgIGlmICghcmFkaXVzWSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>159067</attachid>
            <date>2012-08-17 03:06:46 -0700</date>
            <delta_ts>2012-08-17 06:49:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-94101-20120817120605.patch</filename>
            <type>text/plain</type>
            <size>24200</size>
            <attacher name="Allan Sandfeld Jensen">allan.jensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1ODcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmJmZjlhMTkyZWMyMjg1
YTI1YzY3MzZkNWRkZjM5MTUyY2JkMDQ1Ni4uMTM1YWNlODc4MzM3NTFiZGVmNWQ5MWNkMDJiYmJh
OGE0MDhkODRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDEyLTA4LTE3ICBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisgICAgICAgIFRv
dWNoIGFkanVzdG1lbnQgZm9yIGNvbnRleHQgbWVudSBnZXN0dXJlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQxMDEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIGEgbmV3IGZpbHRlciBmb3IgZGV0
ZWN0aW5nIG5vZGVzIHRoYXQgcHJvdmlkZXMgZXh0cmEgY29udGV4dC1tZW51IGl0ZW1zLCAKKyAg
ICAgICAgYW5kIHVzZSB0aGF0IGluIGEgbmV3IHNldCBvZiBmdW5jdGlvbnMgZm9yIGFkanVzdGlu
ZyBjb250ZXh0LW1lbnUgZ2VzdHVyZXMuCisKKyAgICAgICAgVGVzdHM6IHRvdWNoYWRqdXN0bWVu
dC9jb250ZXh0LW1lbnUtc2VsZWN0LXRleHQuaHRtbAorICAgICAgICAgICAgICAgdG91Y2hhZGp1
c3RtZW50L2NvbnRleHQtbWVudS5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmJlc3RDb250ZXh0TWVudU5vZGVG
b3JUb3VjaFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6YWRqdXN0R2Vz
dHVyZVBvc2l0aW9uKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAo
RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBwYWdlL1RvdWNoQWRqdXN0bWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUb3VjaEFkanVzdG1lbnQ6Om5vZGVQcm92aWRlc0NvbnRleHRNZW51SXRl
bXMpOgorICAgICAgICAoVG91Y2hBZGp1c3RtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRC
ZXN0Q29udGV4dE1lbnVDYW5kaWRhdGUpOgorICAgICAgICAqIHBhZ2UvVG91Y2hBZGp1c3RtZW50
Lmg6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW50ZXJuYWxzOjp0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDb250ZXh0TWVudU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENvbnRl
eHRNZW51Tm9kZSk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKElu
dGVybmFscyk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDEyLTA4LTE2
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGJ1aWxkIEVsZW1lbnRzLCBSZXNvdXJjZXMsIFRpbWVsaW5lLCBBdWRpdHMgYW5k
IENvbnNvbGUgcGFuZWxzIGxhemlseS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApp
bmRleCAwNGE4ODI4YzNjNjU3MDIxY2JhMzMzNzcwZjdhMGFlNjZkNGFlYWM3Li5jOTkxZDMxZjA0
MzYxZjUyZTM3YmQ2OTg3OTliNGU5ZGNlYTViNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCkBAIC0yNTIyLDYgKzI1MjIsMTcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmJlc3RD
bGlja2FibGVOb2RlRm9yVG91Y2hQb2ludChjb25zdCBJbnRQb2ludCYgdG91Y2hDZW50ZXIsIGMK
ICAgICByZXR1cm4gc3VjY2VzczsKIH0KIAorYm9vbCBFdmVudEhhbmRsZXI6OmJlc3RDb250ZXh0
TWVudU5vZGVGb3JUb3VjaFBvaW50KGNvbnN0IEludFBvaW50JiB0b3VjaENlbnRlciwgY29uc3Qg
SW50U2l6ZSYgdG91Y2hSYWRpdXMsIEludFBvaW50JiB0YXJnZXRQb2ludCwgTm9kZSomIHRhcmdl
dE5vZGUpCit7CisgICAgSGl0VGVzdFJlcXVlc3Q6OkhpdFRlc3RSZXF1ZXN0VHlwZSBoaXRUeXBl
ID0gSGl0VGVzdFJlcXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZTsKKyAg
ICBJbnRQb2ludCBoaXRUZXN0UG9pbnQgPSBtX2ZyYW1lLT52aWV3KCktPndpbmRvd1RvQ29udGVu
dHModG91Y2hDZW50ZXIpOworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gaGl0VGVzdFJlc3Vs
dEF0UG9pbnQoaGl0VGVzdFBvaW50LCAvKmFsbG93U2hhZG93Q29udGVudCovIHRydWUsIC8qaWdu
b3JlQ2xpcHBpbmcqLyBmYWxzZSwgRG9udEhpdFRlc3RTY3JvbGxiYXJzLCBoaXRUeXBlLCB0b3Vj
aFJhZGl1cyk7CisKKyAgICBJbnRSZWN0IHRvdWNoUmVjdCh0b3VjaENlbnRlciAtIHRvdWNoUmFk
aXVzLCB0b3VjaFJhZGl1cyArIHRvdWNoUmFkaXVzKTsKKyAgICBSZWZQdHI8U3RhdGljSGFzaFNl
dE5vZGVMaXN0PiBub2RlTGlzdCA9IFN0YXRpY0hhc2hTZXROb2RlTGlzdDo6YWRvcHQocmVzdWx0
LnJlY3RCYXNlZFRlc3RSZXN1bHQoKSk7CisgICAgcmV0dXJuIGZpbmRCZXN0Q29udGV4dE1lbnVD
YW5kaWRhdGUodGFyZ2V0Tm9kZSwgdGFyZ2V0UG9pbnQsIHRvdWNoQ2VudGVyLCB0b3VjaFJlY3Qs
ICpub2RlTGlzdC5nZXQoKSk7Cit9CisKIGJvb2wgRXZlbnRIYW5kbGVyOjpiZXN0Wm9vbWFibGVB
cmVhRm9yVG91Y2hQb2ludChjb25zdCBJbnRQb2ludCYgdG91Y2hDZW50ZXIsIGNvbnN0IEludFNp
emUmIHRvdWNoUmFkaXVzLCBJbnRSZWN0JiB0YXJnZXRBcmVhLCBOb2RlKiYgdGFyZ2V0Tm9kZSkK
IHsKICAgICBIaXRUZXN0UmVxdWVzdDo6SGl0VGVzdFJlcXVlc3RUeXBlIGhpdFR5cGUgPSBIaXRU
ZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlOwpAQCAtMjUzNiw3
ICsyNTQ3LDE3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpiZXN0Wm9vbWFibGVBcmVhRm9yVG91Y2hQ
b2ludChjb25zdCBJbnRQb2ludCYgdG91Y2hDZW50ZXIsIGNvCiBib29sIEV2ZW50SGFuZGxlcjo6
YWRqdXN0R2VzdHVyZVBvc2l0aW9uKGNvbnN0IFBsYXRmb3JtR2VzdHVyZUV2ZW50JiBnZXN0dXJl
RXZlbnQsIEludFBvaW50JiBhZGp1c3RlZFBvaW50KQogewogICAgIE5vZGUqIHRhcmdldE5vZGUg
PSAwOwotICAgIGJlc3RDbGlja2FibGVOb2RlRm9yVG91Y2hQb2ludChnZXN0dXJlRXZlbnQucG9z
aXRpb24oKSwgSW50U2l6ZShnZXN0dXJlRXZlbnQuYXJlYSgpLndpZHRoKCkgLyAyLCBnZXN0dXJl
RXZlbnQuYXJlYSgpLmhlaWdodCgpIC8gMiksIGFkanVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOwor
ICAgIHN3aXRjaCAoZ2VzdHVyZUV2ZW50LnR5cGUoKSkgeworICAgIGNhc2UgUGxhdGZvcm1FdmVu
dDo6R2VzdHVyZVRhcDoKKyAgICAgICAgYmVzdENsaWNrYWJsZU5vZGVGb3JUb3VjaFBvaW50KGdl
c3R1cmVFdmVudC5wb3NpdGlvbigpLCBJbnRTaXplKGdlc3R1cmVFdmVudC5hcmVhKCkud2lkdGgo
KSAvIDIsIGdlc3R1cmVFdmVudC5hcmVhKCkuaGVpZ2h0KCkgLyAyKSwgYWRqdXN0ZWRQb2ludCwg
dGFyZ2V0Tm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1FdmVudDo6R2Vz
dHVyZUxvbmdQcmVzczoKKyAgICAgICAgYmVzdENvbnRleHRNZW51Tm9kZUZvclRvdWNoUG9pbnQo
Z2VzdHVyZUV2ZW50LnBvc2l0aW9uKCksIEludFNpemUoZ2VzdHVyZUV2ZW50LmFyZWEoKS53aWR0
aCgpIC8gMiwgZ2VzdHVyZUV2ZW50LmFyZWEoKS5oZWlnaHQoKSAvIDIpLCBhZGp1c3RlZFBvaW50
LCB0YXJnZXROb2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBoYW5kbGluZyBmb3Igb3RoZXIgdHlwZXMgYXMgbmVlZGVkLgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiAgICAgcmV0dXJuIHRhcmdldE5vZGU7
CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCmluZGV4IGIyZTk3YjQ4ZmQ2
ODg2MDYyZDYzYTNkYTI3NjI0ZjUzNmE4YzAzNTMuLmFjMGZmMGIxZmQzY2Y3MTJmZTNiNWJiOTUx
NWNlMGJhN2JjOGRkODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5k
bGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaApAQCAtMTY5LDEw
ICsxNjksOSBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoVE9VQ0hfQURKVVNUTUVOVCkKICAgICBi
b29sIGJlc3RDbGlja2FibGVOb2RlRm9yVG91Y2hQb2ludChjb25zdCBJbnRQb2ludCYgdG91Y2hD
ZW50ZXIsIGNvbnN0IEludFNpemUmIHRvdWNoUmFkaXVzLCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQs
IE5vZGUqJiB0YXJnZXROb2RlKTsKKyAgICBib29sIGJlc3RDb250ZXh0TWVudU5vZGVGb3JUb3Vj
aFBvaW50KGNvbnN0IEludFBvaW50JiB0b3VjaENlbnRlciwgY29uc3QgSW50U2l6ZSYgdG91Y2hS
YWRpdXMsIEludFBvaW50JiB0YXJnZXRQb2ludCwgTm9kZSomIHRhcmdldE5vZGUpOwogICAgIGJv
b2wgYmVzdFpvb21hYmxlQXJlYUZvclRvdWNoUG9pbnQoY29uc3QgSW50UG9pbnQmIHRvdWNoQ2Vu
dGVyLCBjb25zdCBJbnRTaXplJiB0b3VjaFJhZGl1cywgSW50UmVjdCYgdGFyZ2V0QXJlYSwgTm9k
ZSomIHRhcmdldE5vZGUpOwogCi0gICAgLy8gRklYTUU6IEFkZCBhIGdlc3R1cmUgdHlwZSBwYXJh
bWV0ZXIgc28gdGhhdCBkaWZmZXJlbnQgY2FuZGlkYXRlIHNlbGVjdGlvbiBjcml0ZXJpYSBtYXkg
YmUgdXNlZCBmb3IKLSAgICAvLyBkaWZmZXJlbnQgZ2VzdHVyZSB0eXBlcy4gQ3VycmVudGx5IFRv
dWNoQWRqdXN0bWVudDo6bm9kZVJlc3BvbmRzVG9UYXBHZXN0dXJlIGlzIHVzZWQgZm9yIGFsbCB0
eXBlcy4KICAgICBib29sIGFkanVzdEdlc3R1cmVQb3NpdGlvbihjb25zdCBQbGF0Zm9ybUdlc3R1
cmVFdmVudCYsIEludFBvaW50JiBhZGp1c3RlZFBvaW50KTsKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1RvdWNoQWRqdXN0bWVudC5jcHAKaW5kZXggNmFiYWRjZmIyODRkNTMyZWQzZmJmNmI4
ZmZlMzBiNjUwZTFjZjI4Ny4uZTFjZjcyYTcxMWEzOWI3ZGE3NzNjNDRhODQ2MmNmMTg0MTBlZWNj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1c3RtZW50LmNwcApAQCAtODgsNiArODgs
MzEgQEAgYm9vbCBub2RlSXNab29tVGFyZ2V0KE5vZGUqIG5vZGUpCiAgICAgcmV0dXJuIG5vZGUt
PnJlbmRlcmVyKCktPmlzQm94KCk7CiB9CiAKK2Jvb2wgbm9kZVByb3ZpZGVzQ29udGV4dE1lbnVJ
dGVtcyhOb2RlKiBub2RlKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gbWF0Y2gg
dGhlIG5vZGVzIHRoYXQgcmVjZWl2ZSBzcGVjaWFsIGNvbnRleHQtbWVudSBpdGVtcyBpbgorICAg
IC8vIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUoKSwgYW5kIHNob3VsZCBiZSBrZXB0
IHVwdG9kYXRlIHdpdGggdGhvc2UuCisgICAgaWYgKG5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChub2RlLT5pc0xpbmsoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmlzTWVkaWEoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCktPmNhbkJlU2VsZWN0
aW9uTGVhZigpKSB7CisgICAgICAgIC8vIElmIHRoZSBjb250ZXh0IG1lbnUgZ2VzdHVyZSB3aWxs
IHRyaWdnZXIgYSBzZWxlY3Rpb24gYWxsIHNlbGVjdGFibGUgbm9kZXMgYXJlIHRhcmdldHMuCisg
ICAgICAgIC8vIEZJWE1FOiBUbyBpbXByb3ZlIHRoZSBhZGp1c3RlZCBwb2ludCwgZWFjaCBpbmRp
dmlkdWFsIHdvcmQgc2hvdWxkIGJlIGEgc2VwYXJhdGUgc3VidGFyZ2V0LgorICAgICAgICBpZiAo
bm9kZS0+cmVuZGVyZXIoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmJlaGF2aW9yKCkuc2hvdWxkU2Vs
ZWN0T25Db250ZXh0dWFsTWVudUNsaWNrKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgLy8gRklYTUU6IEEgc2VsZWN0ZWQgdGV4dCBtaWdodCBvbmx5IGJlIHBhcnRpYWxseSBz
ZWxlY3RlZCwgYW5kIHdlIHNob3VsZCBvbmx5IGFwcGVuZAorICAgICAgICAvLyB0aGUgc2VsZWN0
ZWQgc3VidGFyZ2V0cyBvZiBpdCBpbiBhcHBlbmRTdWJ0YXJnZXRzRm9yTm9kZVRvTGlzdCgpLgor
ICAgICAgICBpZiAobm9kZS0+cmVuZGVyZXIoKS0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvbk5vbmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kU3VidGFyZ2V0
c0Zvck5vZGVUb0xpc3QoTm9kZSogbm9kZSwgU3VidGFyZ2V0R2VvbWV0cnlMaXN0JiBzdWJ0YXJn
ZXRzKQogewogICAgIC8vIFNpbmNlIHRoZSBub2RlIGlzIGEgcmVzdWx0IG9mIGEgaGl0IHRlc3Qs
IHdlIGFyZSBhbHJlYWR5IGVuc3VyZWQgaXQgaGFzIGEgcmVuZGVyZXIuCkBAIC0zODYsNiArNDEx
LDE0IEBAIGJvb2wgZmluZEJlc3RDbGlja2FibGVDYW5kaWRhdGUoTm9kZSomIHRhcmdldE5vZGUs
IEludFBvaW50ICZ0YXJnZXRQb2ludCwgY29uc3QKICAgICByZXR1cm4gVG91Y2hBZGp1c3RtZW50
OjpmaW5kTm9kZVdpdGhMb3dlc3REaXN0YW5jZU1ldHJpYyh0YXJnZXROb2RlLCB0YXJnZXRQb2lu
dCwgdGFyZ2V0QXJlYSwgdG91Y2hIb3RzcG90LCB0b3VjaEFyZWEsIHN1YnRhcmdldHMsIFRvdWNo
QWRqdXN0bWVudDo6aHlicmlkRGlzdGFuY2VGdW5jdGlvbik7CiB9CiAKK2Jvb2wgZmluZEJlc3RD
b250ZXh0TWVudUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQgJnRhcmdldFBv
aW50LCBjb25zdCBJbnRQb2ludCAmdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0ICZ0b3VjaEFy
ZWEsIGNvbnN0IE5vZGVMaXN0JiBub2RlTGlzdCkKK3sKKyAgICBJbnRSZWN0IHRhcmdldEFyZWE7
CisgICAgVG91Y2hBZGp1c3RtZW50OjpTdWJ0YXJnZXRHZW9tZXRyeUxpc3Qgc3VidGFyZ2V0czsK
KyAgICBUb3VjaEFkanVzdG1lbnQ6OmNvbXBpbGVTdWJ0YXJnZXRMaXN0KG5vZGVMaXN0LCBzdWJ0
YXJnZXRzLCBUb3VjaEFkanVzdG1lbnQ6Om5vZGVQcm92aWRlc0NvbnRleHRNZW51SXRlbXMpOwor
ICAgIHJldHVybiBUb3VjaEFkanVzdG1lbnQ6OmZpbmROb2RlV2l0aExvd2VzdERpc3RhbmNlTWV0
cmljKHRhcmdldE5vZGUsIHRhcmdldFBvaW50LCB0YXJnZXRBcmVhLCB0b3VjaEhvdHNwb3QsIHRv
dWNoQXJlYSwgc3VidGFyZ2V0cywgVG91Y2hBZGp1c3RtZW50OjpoeWJyaWREaXN0YW5jZUZ1bmN0
aW9uKTsKK30KKwogYm9vbCBmaW5kQmVzdFpvb21hYmxlQXJlYShOb2RlKiYgdGFyZ2V0Tm9kZSwg
SW50UmVjdCYgdGFyZ2V0QXJlYSwgY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3Qg
SW50UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBOb2RlTGlzdCYgbm9kZUxpc3QpCiB7CiAgICAgSW50
UG9pbnQgdGFyZ2V0UG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RvdWNo
QWRqdXN0bWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Ub3VjaEFkanVzdG1lbnQuaAppbmRl
eCBiZDRjYjk1OTM4YjVhMjc3OGFiYWRjNTI3ZDBhZmZlMWIxZWE4N2E5Li40OThiYmQ4NjRjNWYy
ZmUxY2IwYmVmODc3Mjk0NTUxNTM0Yjc4ZWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1RvdWNoQWRqdXN0bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVG91Y2hBZGp1
c3RtZW50LmgKQEAgLTI5LDYgKzI5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBm
aW5kQmVzdENsaWNrYWJsZUNhbmRpZGF0ZShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50UG9pbnQmIHRh
cmdldFBvaW50LCBjb25zdCBJbnRQb2ludCYgdG91Y2hIb3RzcG90LCBjb25zdCBJbnRSZWN0JiB0
b3VjaEFyZWEsIGNvbnN0IE5vZGVMaXN0Jik7Citib29sIGZpbmRCZXN0Q29udGV4dE1lbnVDYW5k
aWRhdGUoTm9kZSomIHRhcmdldE5vZGUsIEludFBvaW50JiB0YXJnZXRQb2ludCwgY29uc3QgSW50
UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBOb2Rl
TGlzdCYpOwogYm9vbCBmaW5kQmVzdFpvb21hYmxlQXJlYShOb2RlKiYgdGFyZ2V0Tm9kZSwgSW50
UmVjdCYgdGFyZ2V0QXJlYSwgY29uc3QgSW50UG9pbnQmIHRvdWNoSG90c3BvdCwgY29uc3QgSW50
UmVjdCYgdG91Y2hBcmVhLCBjb25zdCBOb2RlTGlzdCYpOwogLy8gRklYTUU6IEltcGxlbWVudCB0
aGUgc2ltaWxhciBmdW5jdGlvbnMgZm9yIG90aGVyIGdlc3R1cmVzIGhlcmUgYXMgd2VsbC4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGZlMDQ4YzA0NTBhYzNiMDFmZDE3
ODVmMDkwYTAyNzdhNGJlMmIyZGYuLjE2MTJkZjhkYmM0OTdlZWEzZmIyNjg3YWRjZjM4YmIxNzUx
OTY0NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTg0NCw2ICs4NDQs
NDIgQEAgTm9kZSogSW50ZXJuYWxzOjp0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5v
ZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgKICAgICByZXR1cm4gdGFyZ2V0Tm9kZTsKIH0K
IAorUGFzc1JlZlB0cjxXZWJLaXRQb2ludD4gSW50ZXJuYWxzOjp0b3VjaFBvc2l0aW9uQWRqdXN0
ZWRUb0Jlc3RDb250ZXh0TWVudU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcg
aGVpZ2h0LCBEb2N1bWVudCogZG9jdW1lbnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
ICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJ
RF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBJbnRTaXplIHJh
ZGl1cyh3aWR0aCAvIDIsIGhlaWdodCAvIDIpOworICAgIEludFBvaW50IHBvaW50KHggKyByYWRp
dXMud2lkdGgoKSwgeSArIHJhZGl1cy5oZWlnaHQoKSk7CisKKyAgICBOb2RlKiB0YXJnZXROb2Rl
ID0gMDsKKyAgICBJbnRQb2ludCBhZGp1c3RlZFBvaW50OworCisgICAgYm9vbCBmb3VuZE5vZGUg
PSBkb2N1bWVudC0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmJlc3RDb250ZXh0TWVudU5vZGVG
b3JUb3VjaFBvaW50KHBvaW50LCByYWRpdXMsIGFkanVzdGVkUG9pbnQsIHRhcmdldE5vZGUpOwor
ICAgIGlmIChmb3VuZE5vZGUpCisgICAgICAgIHJldHVybiBXZWJLaXRQb2ludDo6Y3JlYXRlKGFk
anVzdGVkUG9pbnQueCgpLCBhZGp1c3RlZFBvaW50LnkoKSk7CisKKyAgICByZXR1cm4gV2ViS2l0
UG9pbnQ6OmNyZWF0ZSh4LCB5KTsKK30KKworTm9kZSogSW50ZXJuYWxzOjp0b3VjaE5vZGVBZGp1
c3RlZFRvQmVzdENvbnRleHRNZW51Tm9kZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9u
ZyBoZWlnaHQsIERvY3VtZW50KiBkb2N1bWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
aWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpIHsKKyAgICAgICAgZWMgPSBJTlZB
TElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEludFNpemUg
cmFkaXVzKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7CisgICAgSW50UG9pbnQgcG9pbnQoeCArIHJh
ZGl1cy53aWR0aCgpLCB5ICsgcmFkaXVzLmhlaWdodCgpKTsKKworICAgIE5vZGUqIHRhcmdldE5v
ZGUgPSAwOworICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQ7CisgICAgZG9jdW1lbnQtPmZyYW1l
KCktPmV2ZW50SGFuZGxlcigpLT5iZXN0Q29udGV4dE1lbnVOb2RlRm9yVG91Y2hQb2ludChwb2lu
dCwgcmFkaXVzLCBhZGp1c3RlZFBvaW50LCB0YXJnZXROb2RlKTsKKyAgICByZXR1cm4gdGFyZ2V0
Tm9kZTsKK30KKwogUGFzc1JlZlB0cjxDbGllbnRSZWN0PiBJbnRlcm5hbHM6OmJlc3Rab29tYWJs
ZUFyZWFGb3JUb3VjaFBvaW50KGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdo
dCwgRG9jdW1lbnQqIGRvY3VtZW50LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIWRv
Y3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgKaW5kZXggYjhiNTA0ZjQ4ZTBkMWYyYmFkZDdiYTAzMGNhYjIwOThmNTFjMmUwMy4uZTk0OGRk
YTNmNGFhMDEzMmIzNGIxNjQ5ODQ5YjhlZjUyMWM2NmE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5oCkBAIC0xNDIsNiArMTQyLDggQEAgcHVibGljOgogI2lmIEVOQUJMRShUT1VDSF9B
REpVU1RNRU5UKQogICAgIFBhc3NSZWZQdHI8V2ViS2l0UG9pbnQ+IHRvdWNoUG9zaXRpb25BZGp1
c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcg
aGVpZ2h0LCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBOb2RlKiB0b3VjaE5vZGVB
ZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxv
bmcgaGVpZ2h0LCBEb2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdl
YktpdFBvaW50PiB0b3VjaFBvc2l0aW9uQWRqdXN0ZWRUb0Jlc3RDb250ZXh0TWVudU5vZGUobG9u
ZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBEb2N1bWVudCosIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICBOb2RlKiB0b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENvbnRleHRNZW51Tm9k
ZShsb25nIHgsIGxvbmcgeSwgbG9uZyB3aWR0aCwgbG9uZyBoZWlnaHQsIERvY3VtZW50KiwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8Q2xpZW50UmVjdD4gYmVzdFpvb21hYmxlQXJl
YUZvclRvdWNoUG9pbnQobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0LCBE
b2N1bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwKaW5kZXggZmVkMjIwZDE1NWI5MjhiYzA3MmEzYzEzNTA4M2YxM2FiYTVkNzRh
Ni4uY2Q1YjQyYmNlZTllNjQ5NGQzOTU2NjA3YWFjMGM3OTVlODM3Yzc5NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtMTE3LDYgKzExNyw4IEBAIG1vZHVsZSB3aW5kb3cg
ewogI2lmIGRlZmluZWQoRU5BQkxFX1RPVUNIX0FESlVTVE1FTlQpICYmIEVOQUJMRV9UT1VDSF9B
REpVU1RNRU5UCiAgICAgICAgIFdlYktpdFBvaW50IHRvdWNoUG9zaXRpb25BZGp1c3RlZFRvQmVz
dENsaWNrYWJsZU5vZGUoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgd2lkdGgsIGluIGxv
bmcgaGVpZ2h0LCBpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRpb24pOwog
ICAgICAgICBOb2RlIHRvdWNoTm9kZUFkanVzdGVkVG9CZXN0Q2xpY2thYmxlTm9kZShpbiBsb25n
IHgsIGluIGxvbmcgeSwgaW4gbG9uZyB3aWR0aCwgaW4gbG9uZyBoZWlnaHQsIGluIERvY3VtZW50
IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAgIFdlYktpdFBvaW50IHRv
dWNoUG9zaXRpb25BZGp1c3RlZFRvQmVzdENvbnRleHRNZW51Tm9kZShpbiBsb25nIHgsIGluIGxv
bmcgeSwgaW4gbG9uZyB3aWR0aCwgaW4gbG9uZyBoZWlnaHQsIGluIERvY3VtZW50IGRvY3VtZW50
KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CisgICAgICAgIE5vZGUgdG91Y2hOb2RlQWRqdXN0ZWRU
b0Jlc3RDb250ZXh0TWVudU5vZGUoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgd2lkdGgs
IGluIGxvbmcgaGVpZ2h0LCBpbiBEb2N1bWVudCBkb2N1bWVudCkgcmFpc2VzIChET01FeGNlcHRp
b24pOwogICAgICAgICBDbGllbnRSZWN0IGJlc3Rab29tYWJsZUFyZWFGb3JUb3VjaFBvaW50KGlu
IGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25nIHdpZHRoLCBpbiBsb25nIGhlaWdodCwgaW4gRG9j
dW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
OGM1NmFhMjYwOGRmNGUyNDRhMGJjNWY4YTdjYjE4NDJkN2NlNDQ0Mi4uMDRhMTZjMmIxNzBlM2Nm
ZjQ5YjMzYThlNjFkZjQ5NDQ3YjkyN2JlZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDEyLTA4
LTE3ICBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgorCisg
ICAgICAgIFRvdWNoIGFkanVzdG1lbnQgZm9yIGNvbnRleHQgbWVudSBnZXN0dXJlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQxMDEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUd28gbmV3IHRlc3RzIGZv
ciBjb250ZXh0LW1lbnUgdG91Y2ggYWRqdXN0bWVudC4KKworICAgICAgICAqIHRvdWNoYWRqdXN0
bWVudC9jb250ZXh0LW1lbnUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB0b3VjaGFk
anVzdG1lbnQvY29udGV4dC1tZW51LXNlbGVjdC10ZXh0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogdG91Y2hhZGp1c3RtZW50L2NvbnRleHQtbWVudS1zZWxlY3QtdGV4dC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB0b3VjaGFkanVzdG1lbnQvY29udGV4dC1tZW51Lmh0bWw6IEFkZGVk
LgorICAgICAgICAqIHRvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3RtZW50Lmpz
OgorICAgICAgICAobm9kZVRvU3RyaW5nKToKKyAgICAgICAgKHRlc3RUb3VjaFBvaW50KToKKyAg
ICAgICAgKHRlc3RUb3VjaFBvaW50Q29udGV4dE1lbnUpOgorICAgICAgICAoYWRqdXN0VG91Y2hQ
b2ludENvbnRleHRNZW51KToKKwogMjAxMi0wOC0xNiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBidWlsZCBFbGVtZW50cywg
UmVzb3VyY2VzLCBUaW1lbGluZSwgQXVkaXRzIGFuZCBDb25zb2xlIHBhbmVscyBsYXppbHkuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvY29udGV4dC1tZW51LWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9jb250ZXh0LW1lbnUtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjY3NGYwNzk3M2RjMWQ3MzYwOGYzNmE2MGM0MTRhZDBjYmIwMzU4
NTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvY29udGV4
dC1tZW51LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIwIEBACitUZXN0IHRvdWNoIGFkanVzdG1l
bnQgZm9yIGNvbnRleHQtbWVudSBnZXN0dXJlcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgYWRqdXN0ZWQgbm9kZSB3YXMgQSNhMC4KK1BBU1MgYWRqdXN0ZWQgbm9kZSB3
YXMgU1BBTiNzcGFuMC4KK1BBU1MgYWRqdXN0ZWQgbm9kZSB3YXMgbnVsbC4KK1BBU1MgYWRqdXN0
ZWQgbm9kZSB3YXMgU1BBTiNzcGFuMC4KK1BBU1MgYWRqdXN0ZWQgbm9kZSB3YXMgSU1HI2ltZzAu
CitQQVNTIGFkanVzdGVkIG5vZGUgd2FzIEEjYTAuCitQQVNTIGFkanVzdGVkIG5vZGUgd2FzIG51
bGwuCitQQVNTIGFkanVzdGVkIG5vZGUgd2FzIEEjYTAuCitQQVNTIGFkanVzdGVkIG5vZGUgd2Fz
IElNRyNpbWcwLgorUEFTUyBhZGp1c3RlZCBub2RlIHdhcyBJTUcjaW1nMC4KK1BBU1MgYWRqdXN0
ZWQgbm9kZSB3YXMgU1BBTiNzcGFuMC4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1l
bnQvY29udGV4dC1tZW51LXNlbGVjdC10ZXh0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Rv
dWNoYWRqdXN0bWVudC9jb250ZXh0LW1lbnUtc2VsZWN0LXRleHQtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY4ZjM3MDBjMjE3YTE4ZTM1MzM2MzJiMTViYzQyOGVhMTk1NWEyMmEKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvY29udGV4dC1tZW51LXNlbGVj
dC10ZXh0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDExIEBACitUZXN0IHRvdWNoIGFkanVzdG1l
bnQgZm9yIGNvbnRleHQtbWVudSBnZXN0dXJlcyB3aXRoIGF1dG9tYXRpYyBzZWxlY3QgYmVoYXZp
b3VyLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBhZGp1c3RlZCBub2Rl
IHdhcyBudWxsLgorUEFTUyBhZGp1c3RlZCBub2RlIHdhcyAnVGV4dCB0ZXh0IHRleHQuJy4KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvY29udGV4dC1tZW51LXNlbGVjdC10ZXh0
Lmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvY29udGV4dC1tZW51LXNlbGVjdC10
ZXh0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmI2MTJjYzMxZTNmNTcxNTFjYWMyM2IyMWE1ZGZmNDI3OTg4
NTI2ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9jb250
ZXh0LW1lbnUtc2VsZWN0LXRleHQuaHRtbApAQCAtMCwwICsxLDYzIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPlRvdWNoIEFkanVzdG1lbnQgOiBBZGp1c3Qg
Y29udGV4dC1tZW51IHRvIHNlbGVjdGFibGUgd29yZHMgLSBidWcgOTQxMDE8L3RpdGxlPgorICAg
IDxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy90b3VjaGFkanVzdG1lbnQuanMiPjwvc2Ny
aXB0PgorICAgIDxzdHlsZT4KKyAgICAgICAgI3NhbmRib3ggeworICAgICAgICAgICAgcG9zaXRp
b246IGFic29sdXRlOworICAgICAgICAgICAgdG9wOiAwcHg7CisgICAgICAgICAgICBsZWZ0OiAw
cHg7CisgICAgICAgICAgICB3aWR0aDogNDAwcHg7CisgICAgICAgICAgICBoZWlnaHQ6IDIwMHB4
OworICAgICAgICB9CisgICAgICAgICNzYW5kYm94IHAgeworICAgICAgICAgICAgcGFkZGluZzog
NXB4OworICAgICAgICAgICAgZm9udDogMjBweCBBaGVtOworICAgICAgICB9CisgICAgPC9zdHls
ZT4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IGlkPXNhbmRib3g+CisgICAgPHAgaWQ9cDE+PHNw
YW4gaWQ9c3BhbjE+VGV4dCB0ZXh0IHRleHQuPC9zcGFuPgorPC9kaXY+CisKKzxwIGlkPSdkZXNj
cmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29sZSc+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAg
Ly8gU2V0IHVwIHNob3J0Y3V0IGFjY2VzcyB0byBlbGVtZW50cworICAgIHZhciBlID0ge307Cisg
ICAgWydzYW5kYm94JywgJ3AxJywgJ3NwYW4xJ10uZm9yRWFjaChmdW5jdGlvbihhKSB7CisgICAg
ICAgIGVbYV0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKTsKKyAgICB9KTsKKworICAgIGZ1
bmN0aW9uIHRlc3RBZGp1c3RlZFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgLy8gU2V0IGVkaXRp
bmctYmVoYXZpb3VyIHRvIHdpbiwgc28gY29udGV4dC1tZW51IGdlc3R1cmUgZG9lcyBub3QgdHJp
Z2dlciBzZWxlY3Rpb25zLgorICAgICAgICBpbnRlcm5hbHMuc2V0dGluZ3Muc2V0RWRpdGluZ0Jl
aGF2aW9yKCd3aW4nKTsKKyAgICAgICAgLy8gQ2hlY2sgdGhlIGNvbnRleHQtbWVudSBpcyBub3Qg
YWRqdXN0ZWQgdG8gdGhlIHNlbGVjdGFibGUgdGV4dC4KKyAgICAgICAgdGVzdFRvdWNoUG9pbnRD
b250ZXh0TWVudSh0b3VjaFBvaW50KDEwMCwgMzAsIDIwKSwgbnVsbCwgdHJ1ZSk7CisgICAgICAg
IC8vIFNldCBlZGl0aW5nLWJlaGF2aW91ciBtYWMsIHNvIGNvbnRleHQtbWVudSBnZXN0dXJlIHRy
aWdnZXJzIHNlbGVjdGlvbnMuCisgICAgICAgIGludGVybmFscy5zZXR0aW5ncy5zZXRFZGl0aW5n
QmVoYXZpb3IoJ21hYycpOworICAgICAgICAvLyBDaGVjayB0aGUgY29udGV4dC1tZW51IGlzIGFk
anVzdGVkIHRvIHRoZSBzZWxlY3RhYmxlIHRleHQuCisgICAgICAgIHRlc3RUb3VjaFBvaW50Q29u
dGV4dE1lbnUodG91Y2hQb2ludCgxMDAsIDMwLCAyMCksICInVGV4dCB0ZXh0IHRleHQuJyIsIHRy
dWUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3Vj
aE5vZGVBZGp1c3RlZFRvQmVzdENvbnRleHRNZW51Tm9kZSkgeworICAgICAgICAgICAgZGVzY3Jp
cHRpb24oJ1Rlc3QgdG91Y2ggYWRqdXN0bWVudCBmb3IgY29udGV4dC1tZW51IGdlc3R1cmVzIHdp
dGggYXV0b21hdGljIHNlbGVjdCBiZWhhdmlvdXIuJyk7CisgICAgICAgICAgICB0ZXN0QWRqdXN0
ZWRUb3VjaGVzKCk7CisgICAgICAgICAgICBlLnNhbmRib3guc3R5bGUuZGlzcGxheSA9ICdub25l
JzsKKyAgICAgICAgfQorICAgIH0KKyAgICBydW5UZXN0cygpOworPC9zY3JpcHQ+CisKKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1l
bnQvY29udGV4dC1tZW51Lmh0bWwgYi9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvY29udGV4
dC1tZW51Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNjYWViOThlZjQzMTgzMjE4NzVmZTY2YTQwNDM1MDRl
MWUyYjZkNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9j
b250ZXh0LW1lbnUuaHRtbApAQCAtMCwwICsxLDkxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+CisgICAgPHRpdGxlPlRvdWNoIEFkanVzdG1lbnQgOiBBZGp1c3QgdG8gY29udGV4
dCBtZW51IHByb3ZpZGVycyAtIGJ1ZyA5NDEwMTwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Ii4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3RvdWNoYWRqdXN0bWVudC5qcyI+PC9zY3JpcHQ+CisgICAgPHN0eWxl
PgorICAgICAgICAjc2FuZGJveCB7CisgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7Cisg
ICAgICAgICAgICB0b3A6IDBweDsKKyAgICAgICAgICAgIGxlZnQ6IDBweDsKKyAgICAgICAgICAg
IHdpZHRoOiA0MDBweDsKKyAgICAgICAgICAgIGhlaWdodDogMjAwcHg7CisgICAgICAgIH0KKyAg
ICAgICAgI3NhbmRib3ggcCB7CisgICAgICAgICAgICBwYWRkaW5nOiA1cHg7CisgICAgICAgICAg
ICBmb250OiAyMHB4IEFoZW07CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJv
ZHk+CisKKzxzY3JpcHQ+CisgICAgZnVuY3Rpb24gb25DbGljaygpIHt9Cis8L3NjcmlwdD4KKwor
PGRpdiBpZD1zYW5kYm94PgorICAgIDxwIGlkPXAwPjxhIGlkPWEwIGhyZWY9IiNhMCI+TGluayB3
aXRoIFVSTC48L2E+CisgICAgPHAgaWQ9cDE+PHNwYW4gaWQ9c3BhbjAgb25jbGljaz1vbkNsaWNr
PlRleHQgd2l0aCBvbmNsaWNrIGhhbmRsZXIuPC9zcGFuPgorICAgIDxwIGlkPXAyPjxpbWcgaWQ9
aW1nMCBoZWlnaHQ9MjAgd2lkdGg9MTAwIHNyYz0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9S
dzBLR2dvQUFBQU5TVWhFVWdBQUFBOEFBQUFQQVFNQUFBQUJHQWNKQUFBQUExQk1WRVVBZ0FDYyth
V1JBQUFBREVsRVFWUjQybU5nSUFFQUFBQXRBQUg3S2hNcUFBQUFBRWxGVGtTdVFtQ0MiPjwvaW1n
PgorPC9kaXY+CisKKzxwIGlkPSdkZXNjcmlwdGlvbic+PC9wPgorPGRpdiBpZD0nY29uc29sZSc+
PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgLy8gU2V0IHVwIHNob3J0Y3V0IGFjY2VzcyB0byBlbGVt
ZW50cworICAgIHZhciBlID0ge307CisgICAgWydzYW5kYm94JywgJ2EwJywgJ3NwYW4wJywgJ2lt
ZzAnLCAncDAnLCAncDEnLCAncDInXS5mb3JFYWNoKGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgZVth
XSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpOworICAgIH0pOworCisgICAgZnVuY3Rpb24g
dGVzdERpcmVjdFRvdWNoZXMoKQorICAgIHsKKyAgICAgICAgLy8gQ2hlY2sgbGlua3MgY2FuIGJl
IHRhcmdldGVkIHdpdGggY29udGV4dCBtZW51IGdlc3R1cmUuCisgICAgICAgIHRlc3RUb3VjaFBv
aW50Q29udGV4dE1lbnUodG91Y2hQb2ludCgxMDAsIDM1LCAxMCksIGUuYTApOworICAgICAgICAv
LyBDaGVjayBvbmNsaWNrIGNhbiBiZSB0YXJnZXRlZCB3aXRoIGFjdGl2YXRlIGdlc3R1cmUuCisg
ICAgICAgIHRlc3RUb3VjaFBvaW50KHRvdWNoUG9pbnQoMTAwLCAxMDAsIDEwKSwgZS5zcGFuMCk7
CisgICAgICAgIC8vIENoZWNrIG9uY2xpY2sgY2FuIG5vdCBiZSB0YXJnZXRlZCB3aXRoIGNvbnRl
eHQgbWVudS4KKyAgICAgICAgdGVzdFRvdWNoUG9pbnRDb250ZXh0TWVudSh0b3VjaFBvaW50KDEw
MCwgMTAwLCAxMCksIG51bGwpOworICAgICAgICAvLyBCdXQgdGhhdCB0aGUgYWRqdXN0ZWQgcG9p
bnQgc3RpbGwgaGl0cyBpdCwgaWYgbm8gYmV0dGVyIHRhcmdldCBpcyBhdmFpbGFibGUKKyAgICAg
ICAgdmFyIGFkanVzdGVkUG9pbnQgPSBhZGp1c3RUb3VjaFBvaW50Q29udGV4dE1lbnUodG91Y2hQ
b2ludCgxMDAsIDEwMCwgMTApKTsKKyAgICAgICAgaWYgKGFkanVzdGVkUG9pbnQpIHsKKyAgICAg
ICAgICAgIHNob3VsZEJlTm9kZShkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGFkanVzdGVkUG9p
bnQueCwgYWRqdXN0ZWRQb2ludC55KSwgZS5zcGFuMCk7CisgICAgICAgIH0KKyAgICAgICAgLy8g
Q2hlY2sgaW1hZ2VzIGNhbiBiZSB0YXJnZXRlZCB3aXRoIGNvbnRleHQgbWVudS4KKyAgICAgICAg
dGVzdFRvdWNoUG9pbnRDb250ZXh0TWVudShvZmZzZXRUb3VjaFBvaW50KGZpbmRBYnNvbHV0ZUJv
dW5kcyhlLmltZzApLCAnY2VudGVyJywgMCwgNSwgNSksIGUuaW1nMCk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gdGVzdEFkanVzdGVkVG91Y2hlcygpCisgICAgeworICAgICAgICAvLyBDaGVjayB3
ZSBpZiB3ZSBhZGp1c3QgdGhlIGNvbnRleHQgbWVudSBvbnRvIHRoZSBsaW5rLgorICAgICAgICB0
ZXN0VG91Y2hQb2ludENvbnRleHRNZW51KHRvdWNoUG9pbnQoMTAwLCA1MCwgMTApLCBlLmEwKTsK
KyAgICAgICAgLy8gQ2hlY2sgd2UgaWYgd2UgZG8gbm90IGFkanVzdCB0aGUgY29udGV4dCBtZW51
IG9udG8gdGhlIG9uY2xpY2sgZWxlbWVudC4KKyAgICAgICAgdGVzdFRvdWNoUG9pbnRDb250ZXh0
TWVudSh0b3VjaFBvaW50KDEwMCwgNzAsIDEwKSwgbnVsbCk7CisgICAgICAgIC8vIENoZWNrIHRo
ZSBsaW5rIGlzIHN0cm9uZ2x5IHByZWZlcnJlZC4KKyAgICAgICAgdGVzdFRvdWNoUG9pbnRDb250
ZXh0TWVudSh0b3VjaFBvaW50KDEwMCwgNjAsIDIwKSwgZS5hMCk7CisgICAgICAgIC8vIENoZWNr
IGFkanVzdG1lbnQgb250byB0aGUgaW1hZ2UuCisgICAgICAgIHRlc3RUb3VjaFBvaW50Q29udGV4
dE1lbnUodG91Y2hQb2ludCgyMCwgMTQwLCAxMCksIGUuaW1nMCk7CisgICAgICAgIC8vIENoZWNr
IHRoZSBpbWFnZSBpcyBzdHJvbmdseSBwcmVmZXJyZWQgZm9yIGNvbnRleHQgbWVudSBnZXN0dXJl
cy4KKyAgICAgICAgdGVzdFRvdWNoUG9pbnRDb250ZXh0TWVudSh0b3VjaFBvaW50KDIwLCAxMjAs
IDMwKSwgZS5pbWcwKTsKKyAgICAgICAgLy8gQnV0IHRoZSBvbmNsaWNrIGhhbmRsZXIgd291bGQg
YmUgcHJlZmVycmVkIGZvciBhY3RpdmF0ZSBnZXN0dXJlcy4KKyAgICAgICAgdGVzdFRvdWNoUG9p
bnQodG91Y2hQb2ludCgyMCwgMTIwLCAzMCksIGUuc3BhbjApOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lciAmJiB3
aW5kb3cuaW50ZXJuYWxzICYmIGludGVybmFscy50b3VjaE5vZGVBZGp1c3RlZFRvQmVzdENsaWNr
YWJsZU5vZGUpIHsKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uKCdUZXN0IHRvdWNoIGFkanVzdG1l
bnQgZm9yIGNvbnRleHQtbWVudSBnZXN0dXJlcy4nKTsKKyAgICAgICAgICAgIHRlc3REaXJlY3RU
b3VjaGVzKCk7CisgICAgICAgICAgICB0ZXN0QWRqdXN0ZWRUb3VjaGVzKCk7CisgICAgICAgICAg
ICBlLnNhbmRib3guc3R5bGUuZGlzcGxheSA9ICdub25lJzsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBydW5UZXN0cygpOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy90b3VjaGFkanVzdG1lbnQvcmVzb3VyY2VzL3RvdWNoYWRqdXN0
bWVudC5qcyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1
c3RtZW50LmpzCmluZGV4IGRmYWZmYWFjMDVkZGNlNDJmOTBhM2NmNDllZDhhMmI4NmVjYjRmMGEu
LmQ0OWUzYjE4MTc3ZmYxZjgwZjEyMzZmZTAwNjJjZDYzZjg3NWFmNzAgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3RtZW50LmpzCisr
KyBiL0xheW91dFRlc3RzL3RvdWNoYWRqdXN0bWVudC9yZXNvdXJjZXMvdG91Y2hhZGp1c3RtZW50
LmpzCkBAIC0xMywyMCArMTMsMjggQEAgZnVuY3Rpb24gZmluZEFic29sdXRlQm91bmRzKG5vZGUp
CiAKIGZ1bmN0aW9uIG5vZGVUb1N0cmluZyhub2RlKQogewotICAgIGlmIChub2RlID09PSB1bmRl
ZmluZWQpCisgICAgaWYgKG5vZGUgPT09ICd1bmRlZmluZWQnKQogICAgICAgICByZXR1cm4gJ3Vu
ZGVmaW5lZCc7CiAgICAgaWYgKG5vZGUgPT09IG51bGwpCiAgICAgICAgIHJldHVybiAnbnVsbCc7
CiAgICAgaWYgKCFub2RlLm5vZGVOYW1lKQogICAgICAgICByZXR1cm4gJ25vdCBhIG5vZGUnOwor
ICAgIGlmIChub2RlLm5vZGVUeXBlID09IDMpCisgICAgICAgIHJldHVybiAiJyIrbm9kZS5ub2Rl
VmFsdWUrIiciOwogICAgIHJldHVybiBub2RlLm5vZGVOYW1lICsgKG5vZGUuaWQgPyAoJyMnICsg
bm9kZS5pZCkgOiAnJyk7CiB9CiAKLWZ1bmN0aW9uIHRlc3RUb3VjaFBvaW50KHRvdWNocG9pbnQs
IHRhcmdldE5vZGUpCi17Ci0gICAgdmFyIGFkanVzdGVkTm9kZSA9IGludGVybmFscy50b3VjaE5v
ZGVBZGp1c3RlZFRvQmVzdENsaWNrYWJsZU5vZGUodG91Y2hwb2ludC5sZWZ0LCB0b3VjaHBvaW50
LnRvcCwgdG91Y2hwb2ludC53aWR0aCwgdG91Y2hwb2ludC5oZWlnaHQsIGRvY3VtZW50KTsKLSAg
ICBpZiAoYWRqdXN0ZWROb2RlICYmIGFkanVzdGVkTm9kZS5ub2RlVHlwZSA9PSAzKSAvLyBURVhU
IG5vZGUKLSAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2RlLnBhcmVudE5vZGU7Citm
dW5jdGlvbiBzaG91bGRCZU5vZGUoYWRqdXN0ZWROb2RlLCB0YXJnZXROb2RlKSB7CisgICAgaWYg
KHR5cGVvZiB0YXJnZXROb2RlID09ICJzdHJpbmciKSB7CisgICAgICAgIHZhciBhZGp1c3RlZE5v
ZGVTdHJpbmcgPSBub2RlVG9TdHJpbmcoYWRqdXN0ZWROb2RlKTsKKyAgICAgICAgaWYgKHRhcmdl
dE5vZGUgPT0gYWRqdXN0ZWROb2RlU3RyaW5nKSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKCJh
ZGp1c3RlZCBub2RlIHdhcyAiICsgdGFyZ2V0Tm9kZSArICIuIik7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJhZGp1c3RlZCBub2RlIHNob3VsZCBi
ZSAiICsgdGFyZ2V0Tm9kZSAgKyAiLiBXYXMgIiArIGFkanVzdGVkTm9kZVN0cmluZyArICIuIik7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBpZiAodGFyZ2V0Tm9kZSA9
PSBhZGp1c3RlZE5vZGUpIHsKICAgICAgICAgdGVzdFBhc3NlZCgiYWRqdXN0ZWQgbm9kZSB3YXMg
IiArIG5vZGVUb1N0cmluZyh0YXJnZXROb2RlKSArICIuIik7CiAgICAgfQpAQCAtMzUsNiArNDMs
MjggQEAgZnVuY3Rpb24gdGVzdFRvdWNoUG9pbnQodG91Y2hwb2ludCwgdGFyZ2V0Tm9kZSkKICAg
ICB9CiB9CiAKK2Z1bmN0aW9uIHRlc3RUb3VjaFBvaW50KHRvdWNocG9pbnQsIHRhcmdldE5vZGUs
IGFsbG93VGV4dE5vZGVzKQoreworICAgIHZhciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMudG91
Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDbGlja2FibGVOb2RlKHRvdWNocG9pbnQubGVmdCwgdG91Y2hw
b2ludC50b3AsIHRvdWNocG9pbnQud2lkdGgsIHRvdWNocG9pbnQuaGVpZ2h0LCBkb2N1bWVudCk7
CisgICAgaWYgKCFhbGxvd1RleHROb2RlcyAmJiBhZGp1c3RlZE5vZGUgJiYgYWRqdXN0ZWROb2Rl
Lm5vZGVUeXBlID09IDMpCisgICAgICAgIGFkanVzdGVkTm9kZSA9IGFkanVzdGVkTm9kZS5wYXJl
bnROb2RlOworICAgIHNob3VsZEJlTm9kZShhZGp1c3RlZE5vZGUsIHRhcmdldE5vZGUpOworfQor
CitmdW5jdGlvbiB0ZXN0VG91Y2hQb2ludENvbnRleHRNZW51KHRvdWNocG9pbnQsIHRhcmdldE5v
ZGUsIGFsbG93VGV4dE5vZGVzKQoreworICAgIHZhciBhZGp1c3RlZE5vZGUgPSBpbnRlcm5hbHMu
dG91Y2hOb2RlQWRqdXN0ZWRUb0Jlc3RDb250ZXh0TWVudU5vZGUodG91Y2hwb2ludC5sZWZ0LCB0
b3VjaHBvaW50LnRvcCwgdG91Y2hwb2ludC53aWR0aCwgdG91Y2hwb2ludC5oZWlnaHQsIGRvY3Vt
ZW50KTsKKyAgICBpZiAoIWFsbG93VGV4dE5vZGVzICYmIGFkanVzdGVkTm9kZSAmJiBhZGp1c3Rl
ZE5vZGUubm9kZVR5cGUgPT0gMykKKyAgICAgICAgYWRqdXN0ZWROb2RlID0gYWRqdXN0ZWROb2Rl
LnBhcmVudE5vZGU7CisgICAgc2hvdWxkQmVOb2RlKGFkanVzdGVkTm9kZSwgdGFyZ2V0Tm9kZSk7
Cit9CisKK2Z1bmN0aW9uIGFkanVzdFRvdWNoUG9pbnRDb250ZXh0TWVudSh0b3VjaHBvaW50KQor
eworICAgIHZhciBhZGp1c3RlZFBvaW50ID0gaW50ZXJuYWxzLnRvdWNoUG9zaXRpb25BZGp1c3Rl
ZFRvQmVzdENvbnRleHRNZW51Tm9kZSh0b3VjaHBvaW50LmxlZnQsIHRvdWNocG9pbnQudG9wLCB0
b3VjaHBvaW50LndpZHRoLCB0b3VjaHBvaW50LmhlaWdodCwgZG9jdW1lbnQpOworICAgIHJldHVy
biBhZGp1c3RlZFBvaW50OworfQorCiBmdW5jdGlvbiB0b3VjaFBvaW50KHgsIHksIHJhZGl1c1gs
IHJhZGl1c1kpCiB7CiAgICAgaWYgKCFyYWRpdXNZKQo=
</data>
<flag name="review"
          id="169302"
          type_id="1"
          status="+"
          setter="tonikitoo"
    />
    <flag name="commit-queue"
          id="169355"
          type_id="3"
          status="-"
          setter="tonikitoo"
    />
          </attachment>
      

    </bug>

</bugzilla>