<?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>61860</bug_id>
          
          <creation_ts>2011-06-01 06:54:43 -0700</creation_ts>
          <short_desc>Remove duplicated code in various computeReplacedLogical*() functions</short_desc>
          <delta_ts>2011-06-01 09:08:12 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</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="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>eric</cc>
    
    <cc>krit</cc>
    
    <cc>rwlbuis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>413345</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-06-01 06:54:43 -0700</bug_when>
    <thetext>Remove duplicated code in various computeReplacedLogical*() functions. In the recent RenderPart work (bug 10526) we noticed that some code is duplicated, fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413348</commentid>
    <comment_count>1</comment_count>
      <attachid>95595</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-06-01 07:00:12 -0700</bug_when>
    <thetext>Created attachment 95595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413353</commentid>
    <comment_count>2</comment_count>
      <attachid>95597</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-06-01 07:02:25 -0700</bug_when>
    <thetext>Created attachment 95597
Patch v2

Oops, uploaded the wrong patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413356</commentid>
    <comment_count>3</comment_count>
      <attachid>95597</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-06-01 07:08:41 -0700</bug_when>
    <thetext>Comment on attachment 95597
Patch v2

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413363</commentid>
    <comment_count>4</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-06-01 07:21:33 -0700</bug_when>
    <thetext>Landed in r87801.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413410</commentid>
    <comment_count>5</comment_count>
      <attachid>95597</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-01 08:55:26 -0700</bug_when>
    <thetext>Comment on attachment 95597
Patch v2

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

&gt; Source/WebCore/rendering/RenderPart.h:53
&gt; +    int computeEmbeddedDocumentReplacedWidth(RenderSVGRoot* contentRenderer, bool includeMaxWidth) const;
&gt; +    int computeEmbeddedDocumentReplacedHeight(RenderSVGRoot* contentRenderer) const;

Seems odd to make RenderPart depend on REnderSVGRoot for these generic sounding functions.  I guess you plan to fix that later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>413421</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-06-01 09:08:12 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 95597 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=95597&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderPart.h:53
&gt; &gt; +    int computeEmbeddedDocumentReplacedWidth(RenderSVGRoot* contentRenderer, bool includeMaxWidth) const;
&gt; &gt; +    int computeEmbeddedDocumentReplacedHeight(RenderSVGRoot* contentRenderer) const;
&gt; 
&gt; Seems odd to make RenderPart depend on REnderSVGRoot for these generic sounding functions.  I guess you plan to fix that later?

This is completely correct, all code related to size-negotiation will be generalized into RenderReplaced, which is the base for RenderImage/RenderPart (through RenderWidget). The current RenderPart stuff for embedding SVG documents covers size-negotiation for object/embed and iframe.

RenderImage still contains its own code for size-negotiation which is broken in some cases (SVG as image problems with relative sizes etc.) - that code shall die and join with the new code in RenderPart, which will then be refactored into RenderReplaced. I&apos;m working on this as we speak.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95595</attachid>
            <date>2011-06-01 07:00:12 -0700</date>
            <delta_ts>2011-06-01 07:02:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Refactor.diff</filename>
            <type>text/plain</type>
            <size>16011</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3ODAwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDYtMDEgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGR1cGxpY2F0ZWQgY29kZSBpbiB2YXJp
b3VzIGNvbXB1dGVSZXBsYWNlZExvZ2ljYWwqKCkgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTg2MAorCisgICAgICAgIENlbnRyYWxp
emUgdGhpcyBjYWxjdWxhdGlvbiBpbiBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxX
aWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aDoKKyAgICAgICAgaW50IG1pbkxvZ2ljYWxXaWR0aCA9
IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNaW5XaWR0
aCgpKTsKKyAgICAgICAgaW50IG1heExvZ2ljYWxXaWR0aCA9ICFpbmNsdWRlTWF4V2lkdGggfHwg
c3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSA/IGxvZ2ljYWxXaWR0aCA6
IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0
aCgpKTsKKyAgICAgICAgcmV0dXJuIG1heChtaW5Mb2dpY2FsV2lkdGgsIG1pbihsb2dpY2FsV2lk
dGgsIG1heExvZ2ljYWxXaWR0aCkpOworCisgICAgICAgIENlbnRyYWxpemUgdGhpcyBjYWxjdWxh
dGlvbiBpbiBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRSZXNwZWN0aW5n
TWluTWF4SGVpZ2h0OgorICAgICAgICBpbnQgbWluTG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWluSGVpZ2h0KCkpOworICAg
ICAgICBpbnQgbWF4TG9naWNhbEhlaWdodCA9IHN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKS5p
c1VuZGVmaW5lZCgpID8gbG9naWNhbEhlaWdodCA6IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWln
aHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gbWF4
KG1pbkxvZ2ljYWxIZWlnaHQsIG1pbihsb2dpY2FsSGVpZ2h0LCBtYXhMb2dpY2FsSGVpZ2h0KSk7
CisKKyAgICAgICAgVXNlIHRoZSBuZXcgaGVscGVyIG1ldGhvZHMgd2hlcmUgcG9zc2libGUsIGRl
ZHVwbGljYXRpbmcgbG90cyBvZiBjb2RlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0UmVzcGVjdGluZ01pbk1heEhl
aWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6Y29t
cHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyUGFydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXJ0Ojpjb21wdXRlRW1iZWRk
ZWREb2N1bWVudFJlcGxhY2VkV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydDo6
Y29tcHV0ZUVtYmVkZGVkRG9jdW1lbnRSZXBsYWNlZEhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJQYXJ0Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUGFydDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclBhcnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6Y29t
cHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpj
b21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KToKKwogMjAxMS0wNi0wMSAgU2hlcmlmZiBCb3Qg
IDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjg3Nzg4LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAJKHJldmlzaW9uIDg3NzkxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NDUsMTAgKzE5NDUsMTMgQEAgaW50IFJlbmRlckJv
eDo6Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSAogCiBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUmVw
bGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CiB7Ci0gICAgaW50
IGxvZ2ljYWxXaWR0aCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCkt
PmxvZ2ljYWxXaWR0aCgpKTsKKyAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRo
UmVzcGVjdGluZ01pbk1heFdpZHRoKGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0
eWxlKCktPmxvZ2ljYWxXaWR0aCgpKSwgaW5jbHVkZU1heFdpZHRoKTsKK30KKworaW50IFJlbmRl
ckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKGlu
dCBsb2dpY2FsV2lkdGgsIGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAorewogICAgIGludCBt
aW5Mb2dpY2FsV2lkdGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgp
LT5sb2dpY2FsTWluV2lkdGgoKSk7CiAgICAgaW50IG1heExvZ2ljYWxXaWR0aCA9ICFpbmNsdWRl
TWF4V2lkdGggfHwgc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSA/IGxv
Z2ljYWxXaWR0aCA6IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCktPmxv
Z2ljYWxNYXhXaWR0aCgpKTsKLQogICAgIHJldHVybiBtYXgobWluTG9naWNhbFdpZHRoLCBtaW4o
bG9naWNhbFdpZHRoLCBtYXhMb2dpY2FsV2lkdGgpKTsKIH0KIApAQCAtMTk3MywxMCArMTk3Niwx
MyBAQCBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkCiAKIGludCBSZW5k
ZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdAogewotICAgIGludCBs
b2dpY2FsSGVpZ2h0ID0gY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCkt
PmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgcmV0dXJuIGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWln
aHRSZXNwZWN0aW5nTWluTWF4SGVpZ2h0KGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2lu
ZyhzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkpKTsKK30KKworaW50IFJlbmRlckJveDo6Y29tcHV0
ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3RpbmdNaW5NYXhIZWlnaHQoaW50IGxvZ2ljYWxI
ZWlnaHQpIGNvbnN0Cit7CiAgICAgaW50IG1pbkxvZ2ljYWxIZWlnaHQgPSBjb21wdXRlUmVwbGFj
ZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpKTsKICAgICBp
bnQgbWF4TG9naWNhbEhlaWdodCA9IHN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVm
aW5lZCgpID8gbG9naWNhbEhlaWdodCA6IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2lu
ZyhzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkpOwotCiAgICAgcmV0dXJuIG1heChtaW5Mb2dp
Y2FsSGVpZ2h0LCBtaW4obG9naWNhbEhlaWdodCwgbWF4TG9naWNhbEhlaWdodCkpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA4Nzc5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MzA4LDcgKzMwOCw5IEBAIHB1YmxpYzoKICAgICBpbnQgY29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5n
KExvZ2ljYWxXaWR0aFR5cGUsIGludCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogICAgIGludCBj
b21wdXRlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYgaGVpZ2h0KTsKICAgICBpbnQg
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIHdpZHRoKSBjb25zdDsKKyAg
ICBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKGlu
dCBsb2dpY2FsV2lkdGgsIGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7CiAgICAg
aW50IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhMZW5ndGggaGVpZ2h0KSBjb25z
dDsKKyAgICBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3RpbmdNaW5NYXhI
ZWlnaHQoaW50IGxvZ2ljYWxIZWlnaHQpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQgY29tcHV0
ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7
CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA4
Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3NywxMCArNDc3LDcgQEAgaW50IFJlbmRlckltYWdlOjpjb21wdXRlUmVw
bGFjZWRMb2dpY2FsVwogICAgIGVsc2UKICAgICAgICAgbG9naWNhbFdpZHRoID0gY2FsY0FzcGVj
dFJhdGlvTG9naWNhbFdpZHRoKCk7CiAKLSAgICBpbnQgbWluTG9naWNhbFdpZHRoID0gY29tcHV0
ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbldpZHRoKCkpOwot
ICAgIGludCBtYXhMb2dpY2FsV2lkdGggPSAhaW5jbHVkZU1heFdpZHRoIHx8IHN0eWxlKCktPmxv
Z2ljYWxNYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkgPyBsb2dpY2FsV2lkdGggOiBjb21wdXRlUmVw
bGFjZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKSk7Ci0KLSAg
ICByZXR1cm4gbWF4KG1pbkxvZ2ljYWxXaWR0aCwgbWluKGxvZ2ljYWxXaWR0aCwgbWF4TG9naWNh
bFdpZHRoKSk7CisgICAgcmV0dXJuIGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3Rp
bmdNaW5NYXhXaWR0aChsb2dpY2FsV2lkdGgsIGluY2x1ZGVNYXhXaWR0aCk7CiB9CiAKIGludCBS
ZW5kZXJJbWFnZTo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0CkBAIC00OTYs
MTAgKzQ5Myw3IEBAIGludCBSZW5kZXJJbWFnZTo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEgKICAg
ICBlbHNlCiAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBjYWxjQXNwZWN0UmF0aW9Mb2dpY2FsSGVp
Z2h0KCk7CiAKLSAgICBpbnQgbWluTG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWluSGVpZ2h0KCkpOwotICAgIGludCBtYXhM
b2dpY2FsSGVpZ2h0ID0gc3R5bGUoKS0+bG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkg
PyBsb2dpY2FsSGVpZ2h0IDogY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxl
KCktPmxvZ2ljYWxNYXhIZWlnaHQoKSk7Ci0KLSAgICByZXR1cm4gbWF4KG1pbkxvZ2ljYWxIZWln
aHQsIG1pbihsb2dpY2FsSGVpZ2h0LCBtYXhMb2dpY2FsSGVpZ2h0KSk7CisgICAgcmV0dXJuIGNv
bXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRSZXNwZWN0aW5nTWluTWF4SGVpZ2h0KGxvZ2ljYWxI
ZWlnaHQpOwogfQogCiBpbnQgUmVuZGVySW1hZ2U6OmNhbGNBc3BlY3RSYXRpb0xvZ2ljYWxXaWR0
aCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwCShy
ZXZpc2lvbiA4Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDIyICsxMTIsMTggQEAgUmVuZGVyU1ZHUm9vdCogUmVu
ZGVyUGFydDo6ZW1iZWRkZWRTVkdDbwogICAgIHJldHVybiB0b1JlbmRlclNWR1Jvb3Qoc3ZnUm9v
dFJlbmRlcmVyKTsKIH0KIAotaW50IFJlbmRlclBhcnQ6OmNvbXB1dGVFbWJlZGRlZERvY3VtZW50
UmVwbGFjZWRXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCwgUmVuZGVyU3R5bGUqIGNvbnRlbnRS
ZW5kZXJTdHlsZSkgY29uc3QKK2ludCBSZW5kZXJQYXJ0Ojpjb21wdXRlRW1iZWRkZWREb2N1bWVu
dFJlcGxhY2VkV2lkdGgoUmVuZGVyU1ZHUm9vdCogY29udGVudFJlbmRlcmVyLCBib29sIGluY2x1
ZGVNYXhXaWR0aCkgY29uc3QKIHsKLSAgICBpbnQgbG9naWNhbFdpZHRoID0gY29tcHV0ZVJlcGxh
Y2VkTG9naWNhbFdpZHRoVXNpbmcoY29udGVudFJlbmRlclN0eWxlLT5sb2dpY2FsV2lkdGgoKSk7
Ci0gICAgaW50IG1pbkxvZ2ljYWxXaWR0aCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVz
aW5nKGNvbnRlbnRSZW5kZXJTdHlsZS0+bG9naWNhbE1pbldpZHRoKCkpOwotICAgIGludCBtYXhM
b2dpY2FsV2lkdGggPSAhaW5jbHVkZU1heFdpZHRoIHx8IGNvbnRlbnRSZW5kZXJTdHlsZS0+bG9n
aWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSA/IGxvZ2ljYWxXaWR0aCA6IGNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxXaWR0aFVzaW5nKGNvbnRlbnRSZW5kZXJTdHlsZS0+bG9naWNhbE1heFdpZHRo
KCkpOwotICAgIGludCB3aWR0aCA9IG1heChtaW5Mb2dpY2FsV2lkdGgsIG1pbihsb2dpY2FsV2lk
dGgsIG1heExvZ2ljYWxXaWR0aCkpOwotICAgIHJldHVybiB3aWR0aDsKKyAgICBBU1NFUlQoY29u
dGVudFJlbmRlcmVyKTsKKyAgICBBU1NFUlQoY29udGVudFJlbmRlcmVyLT5zdHlsZSgpKTsKKyAg
ICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRo
KGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKGNvbnRlbnRSZW5kZXItPnN0eWxlKCkt
PmxvZ2ljYWxXaWR0aCgpKSwgaW5jbHVkZU1heFdpZHRoKTsKIH0KIAotaW50IFJlbmRlclBhcnQ6
OmNvbXB1dGVFbWJlZGRlZERvY3VtZW50UmVwbGFjZWRIZWlnaHQoUmVuZGVyU3R5bGUqIGNvbnRl
bnRSZW5kZXJTdHlsZSkgY29uc3QKK2ludCBSZW5kZXJQYXJ0Ojpjb21wdXRlRW1iZWRkZWREb2N1
bWVudFJlcGxhY2VkSGVpZ2h0KFJlbmRlclNWR1Jvb3QqIGNvbnRlbnRSZW5kZXJlcikgY29uc3QK
IHsKLSAgICBpbnQgbG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRV
c2luZyhjb250ZW50UmVuZGVyU3R5bGUtPmxvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgaW50IG1pbkxv
Z2ljYWxIZWlnaHQgPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoY29udGVudFJl
bmRlclN0eWxlLT5sb2dpY2FsTWluSGVpZ2h0KCkpOwotICAgIGludCBtYXhMb2dpY2FsSGVpZ2h0
ID0gY29udGVudFJlbmRlclN0eWxlLT5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/
IGxvZ2ljYWxIZWlnaHQgOiBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcoY29udGVu
dFJlbmRlclN0eWxlLT5sb2dpY2FsTWF4SGVpZ2h0KCkpOwotICAgIGludCBoZWlnaHQgPSBtYXgo
bWluTG9naWNhbEhlaWdodCwgbWluKGxvZ2ljYWxIZWlnaHQsIG1heExvZ2ljYWxIZWlnaHQpKTsK
LSAgICByZXR1cm4gaGVpZ2h0OworICAgIEFTU0VSVChjb250ZW50UmVuZGVyZXIpOworICAgIEFT
U0VSVChjb250ZW50UmVuZGVyZXItPnN0eWxlKCkpOworICAgIHJldHVybiBjb21wdXRlUmVwbGFj
ZWRMb2dpY2FsSGVpZ2h0UmVzcGVjdGluZ01pbk1heEhlaWdodChjb21wdXRlUmVwbGFjZWRMb2dp
Y2FsSGVpZ2h0VXNpbmcoY29udGVudFJlbmRlcmVyLT5zdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkp
KTsKIH0KIAogaW50IFJlbmRlclBhcnQ6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aChib29s
IGluY2x1ZGVNYXhXaWR0aCkgY29uc3QKQEAgLTE0OSw3ICsxNDUsNyBAQCBpbnQgUmVuZGVyUGFy
dDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpCiAKICAgICAgICAgLy8gSWYgJ2hlaWdodCcgYW5k
ICd3aWR0aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAnYXV0bycgYW5kIHRoZSBlbGVt
ZW50IGFsc28gaGFzIGFuIGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0IGludHJpbnNpYyB3aWR0
aCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnLgogICAgICAgICBpZiAoaGVpZ2h0SXNBdXRv
ICYmIGhhc0ludHJpbnNpY1dpZHRoKQotICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVFbWJlZGRl
ZERvY3VtZW50UmVwbGFjZWRXaWR0aChpbmNsdWRlTWF4V2lkdGgsIGNvbnRlbnRSZW5kZXJTdHls
ZSk7CisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZUVtYmVkZGVkRG9jdW1lbnRSZXBsYWNlZFdp
ZHRoKGluY2x1ZGVNYXhXaWR0aCwgY29udGVudFJlbmRlcmVyKTsKICAgICAKICAgICAgICAgYm9v
bCBoYXNJbnRyaW5zaWNIZWlnaHQgPSBjb250ZW50UmVuZGVyU3R5bGUtPmhlaWdodCgpLmlzRml4
ZWQoKTsKICAgICAgICAgaWYgKCFpbnRyaW5zaWNSYXRpby5pc0VtcHR5KCkpIHsKQEAgLTE3NSw3
ICsxNzEsNyBAQCBpbnQgUmVuZGVyUGFydDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpCiAKICAg
ICAgICAgLy8gT3RoZXJ3aXNlLCBpZiAnd2lkdGgnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdh
dXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRyaW5zaWMgd2lkdGgsIHRoZW4gdGhhdCBp
bnRyaW5zaWMgd2lkdGggaXMgdGhlIHVzZWQgdmFsdWUgb2YgJ3dpZHRoJy4KICAgICAgICAgaWYg
KGhhc0ludHJpbnNpY1dpZHRoKQotICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVFbWJlZGRlZERv
Y3VtZW50UmVwbGFjZWRXaWR0aChpbmNsdWRlTWF4V2lkdGgsIGNvbnRlbnRSZW5kZXJTdHlsZSk7
CisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZUVtYmVkZGVkRG9jdW1lbnRSZXBsYWNlZFdpZHRo
KGluY2x1ZGVNYXhXaWR0aCwgY29udGVudFJlbmRlcik7CiAgICAgfQogCiAgICAgLy8gT3RoZXJ3
aXNlLCBpZiAnd2lkdGgnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9mICdhdXRvJywgYnV0IG5vbmUg
b2YgdGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG1ldCwgdGhlbiB0aGUgdXNlZCB2YWx1ZSBvZiAn
d2lkdGgnIGJlY29tZXMgMzAwcHguIElmIDMwMHB4IGlzIHRvbwpAQCAtMjAyLDcgKzE5OCw3IEBA
IGludCBSZW5kZXJQYXJ0Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGUKIAogICAgICAgICAvLyBJ
ZiAnaGVpZ2h0JyBhbmQgJ3dpZHRoJyBib3RoIGhhdmUgY29tcHV0ZWQgdmFsdWVzIG9mICdhdXRv
JyBhbmQgdGhlIGVsZW1lbnQgYWxzbyBoYXMgYW4gaW50cmluc2ljIGhlaWdodCwgdGhlbiB0aGF0
IGludHJpbnNpYyBoZWlnaHQgaXMgdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcuCiAgICAgICAg
IGlmICh3aWR0aElzQXV0byAmJiBoYXNJbnRyaW5zaWNIZWlnaHQpCi0gICAgICAgICAgICByZXR1
cm4gY29tcHV0ZUVtYmVkZGVkRG9jdW1lbnRSZXBsYWNlZEhlaWdodChjb250ZW50UmVuZGVyU3R5
bGUpOworICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVFbWJlZGRlZERvY3VtZW50UmVwbGFjZWRI
ZWlnaHQoY29udGVudFJlbmRlcmVyKTsKICAgICAKICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiAn
aGVpZ2h0JyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGFuZCB0aGUgZWxlbWVudCBo
YXMgYW4gaW50cmluc2ljIHJhdGlvIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcgaXM6
CiAgICAgICAgIC8vICh1c2VkIHdpZHRoKSAvIChpbnRyaW5zaWMgcmF0aW8pCkBAIC0yMTMsNyAr
MjA5LDcgQEAgaW50IFJlbmRlclBhcnQ6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZQogCiAgICAg
ICAgIC8vIE90aGVyd2lzZSwgaWYgJ2hlaWdodCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1
dG8nLCBhbmQgdGhlIGVsZW1lbnQgaGFzIGFuIGludHJpbnNpYyBoZWlnaHQsIHRoZW4gdGhhdCBp
bnRyaW5zaWMgaGVpZ2h0IGlzIHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnLgogICAgICAgICBp
ZiAoaGFzSW50cmluc2ljSGVpZ2h0KQotICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVFbWJlZGRl
ZERvY3VtZW50UmVwbGFjZWRIZWlnaHQoY29udGVudFJlbmRlclN0eWxlKTsKKyAgICAgICAgICAg
IHJldHVybiBjb21wdXRlRW1iZWRkZWREb2N1bWVudFJlcGxhY2VkSGVpZ2h0KGNvbnRlbnRSZW5k
ZXJlcik7CiAgICAgfQogCiAgICAgLy8gT3RoZXJ3aXNlLCBpZiAnaGVpZ2h0JyBoYXMgYSBjb21w
dXRlZCB2YWx1ZSBvZiAnYXV0bycsIGJ1dCBub25lIG9mIHRoZSBjb25kaXRpb25zIGFib3ZlIGFy
ZSBtZXQsIHRoZW4gdGhlIHVzZWQgdmFsdWUgb2YgJ2hlaWdodCcgbXVzdCBiZSBzZXQgdG8gdGhl
IGhlaWdodApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5oCShyZXZpc2lv
biA4Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ5LDggKzQ5LDggQEAgcHJvdGVjdGVkOgogCiAjaWYgRU5BQkxFKFNWRykK
ICAgICBSZW5kZXJTVkdSb290KiBlbWJlZGRlZFNWR0NvbnRlbnRSZW5kZXJlcigpIGNvbnN0Owot
ICAgIGludCBjb21wdXRlRW1iZWRkZWREb2N1bWVudFJlcGxhY2VkV2lkdGgoYm9vbCBpbmNsdWRl
TWF4V2lkdGgsIFJlbmRlclN0eWxlKiBjb250ZW50UmVuZGVyU3R5bGUpIGNvbnN0OwotICAgIGlu
dCBjb21wdXRlRW1iZWRkZWREb2N1bWVudFJlcGxhY2VkSGVpZ2h0KFJlbmRlclN0eWxlKiBjb250
ZW50UmVuZGVyU3R5bGUpIGNvbnN0OworICAgIGludCBjb21wdXRlRW1iZWRkZWREb2N1bWVudFJl
cGxhY2VkV2lkdGgoUmVuZGVyU1ZHUm9vdCogY29udGVudFJlbmRlcmVyLCBib29sIGluY2x1ZGVN
YXhXaWR0aCkgY29uc3Q7CisgICAgaW50IGNvbXB1dGVFbWJlZGRlZERvY3VtZW50UmVwbGFjZWRI
ZWlnaHQoUmVuZGVyU1ZHUm9vdCogY29udGVudFJlbmRlcmVyKSBjb25zdDsKICAgICB2aXJ0dWFs
IGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGggPSB0
cnVlKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiA4Nzc5MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwMiwxMCArMjAyLDcgQEAgaW50IFJlbmRlclJlcGxhY2VkOjpjb21wdXRlUmVwbGFjZWRM
b2dpYwogICAgIGVsc2UKICAgICAgICAgbG9naWNhbFdpZHRoID0gaW50cmluc2ljTG9naWNhbFdp
ZHRoKCk7CiAKLSAgICBpbnQgbWluTG9naWNhbFdpZHRoID0gY29tcHV0ZVJlcGxhY2VkTG9naWNh
bFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbldpZHRoKCkpOwotICAgIGludCBtYXhMb2dp
Y2FsV2lkdGggPSAhaW5jbHVkZU1heFdpZHRoIHx8IHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0aCgp
LmlzVW5kZWZpbmVkKCkgPyBsb2dpY2FsV2lkdGggOiBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lk
dGhVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKSk7Ci0KLSAgICByZXR1cm4gbWF4KG1p
bkxvZ2ljYWxXaWR0aCwgbWluKGxvZ2ljYWxXaWR0aCwgbWF4TG9naWNhbFdpZHRoKSk7CisgICAg
cmV0dXJuIGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aChs
b2dpY2FsV2lkdGgsIGluY2x1ZGVNYXhXaWR0aCk7CiB9CiAKIGludCBSZW5kZXJSZXBsYWNlZDo6
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0CkBAIC0yMTgsMTAgKzIxNSw3IEBA
IGludCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxhY2VkTG9naWMKICAgICBlbHNlCiAgICAg
ICAgIGxvZ2ljYWxIZWlnaHQgPSBpbnRyaW5zaWNMb2dpY2FsSGVpZ2h0KCk7CiAKLSAgICBpbnQg
bWluTG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHls
ZSgpLT5sb2dpY2FsTWluSGVpZ2h0KCkpOwotICAgIGludCBtYXhMb2dpY2FsSGVpZ2h0ID0gc3R5
bGUoKS0+bG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBsb2dpY2FsSGVpZ2h0IDog
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNYXhIZWln
aHQoKSk7Ci0KLSAgICByZXR1cm4gbWF4KG1pbkxvZ2ljYWxIZWlnaHQsIG1pbihsb2dpY2FsSGVp
Z2h0LCBtYXhMb2dpY2FsSGVpZ2h0KSk7CisgICAgcmV0dXJuIGNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxIZWlnaHRSZXNwZWN0aW5nTWluTWF4SGVpZ2h0KGxvZ2ljYWxIZWlnaHQpOwogfQogCiBpbnQg
UmVuZGVyUmVwbGFjZWQ6OmNhbGNBc3BlY3RSYXRpb0xvZ2ljYWxXaWR0aCgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAJKHJl
dmlzaW9uIDg3NzkxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
b290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDEwICsxOTAsNyBAQCBpbnQgUmVuZGVyU1ZH
Um9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhCiAgICAgLy8gICB0aGUgd2lkdGggb2YgdGhlIHZp
ZXdwb3J0LgogICAgIC8vCiAgICAgLy8gVW5kZXIgdGhlc2UgY29uZGl0aW9ucywgdGhlIHBvc2l0
aW9uaW5nIHByb3BlcnRpZXMgZXN0YWJsaXNoIHRoZSB2aWV3cG9ydCdzIHdpZHRoLgotICAgIGlu
dCBsb2dpY2FsV2lkdGggPSBvd25lclJlbmRlcmVyLT5jb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lk
dGhVc2luZyhvd25lcldpZHRoKTsKLSAgICBpbnQgbWluTG9naWNhbFdpZHRoID0gb3duZXJSZW5k
ZXJlci0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcob3duZXJSZW5kZXJlclN0eWxl
LT5sb2dpY2FsTWluV2lkdGgoKSk7Ci0gICAgaW50IG1heExvZ2ljYWxXaWR0aCA9ICFpbmNsdWRl
TWF4V2lkdGggfHwgb3duZXJSZW5kZXJlclN0eWxlLT5sb2dpY2FsTWF4V2lkdGgoKS5pc1VuZGVm
aW5lZCgpID8gbG9naWNhbFdpZHRoIDogb3duZXJSZW5kZXJlci0+Y29tcHV0ZVJlcGxhY2VkTG9n
aWNhbFdpZHRoVXNpbmcob3duZXJSZW5kZXJlclN0eWxlLT5sb2dpY2FsTWF4V2lkdGgoKSk7Ci0g
ICAgcmV0dXJuIG1heChtaW5Mb2dpY2FsV2lkdGgsIG1pbihsb2dpY2FsV2lkdGgsIG1heExvZ2lj
YWxXaWR0aCkpOworICAgIHJldHVybiBvd25lclJlbmRlcmVyLT5jb21wdXRlUmVwbGFjZWRMb2dp
Y2FsV2lkdGhSZXNwZWN0aW5nTWluTWF4V2lkdGgob3duZXJSZW5kZXJlci0+Y29tcHV0ZVJlcGxh
Y2VkTG9naWNhbFdpZHRoVXNpbmcob3duZXJXaWR0aCksIGluY2x1ZGVNYXhXaWR0aCk7CiB9CiAK
IGludCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KCkgY29uc3QK
QEAgLTIyMiwxMCArMjE5LDcgQEAgaW50IFJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExv
Z2ljYQogICAgIC8vIFNpbWlsYXJseSwgaWYgdGhlcmUgYXJlIHBvc2l0aW9uaW5nIHByb3BlcnRp
ZXMgc3BlY2lmaWVkIG9uIHRoZSByZWZlcmVuY2luZyBlbGVtZW50IG9yIG9uIHRoZSBvdXRlcm1v
c3Qgc3ZnIGVsZW1lbnQgdGhhdAogICAgIC8vIGFyZSBzdWZmaWNpZW50IHRvIGVzdGFibGlzaCB0
aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGVzZSBwb3NpdGlvbmluZyBwcm9wZXJ0
aWVzIGVzdGFibGlzaCB0aGUgdmlld3BvcnQncyBoZWlnaHQ7CiAgICAgLy8gb3RoZXJ3aXNlLCB0
aGUg4oCYaGVpZ2h04oCZIGF0dHJpYnV0ZSBvbiB0aGUgb3V0ZXJtb3N0IHN2ZyBlbGVtZW50IGVz
dGFibGlzaGVzIHRoZSB2aWV3cG9ydCdzIGhlaWdodC4KLSAgICBpbnQgbG9naWNhbEhlaWdodCA9
IG93bmVyUmVuZGVyZXItPmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhvd25lckhl
aWdodCk7Ci0gICAgaW50IG1pbkxvZ2ljYWxIZWlnaHQgPSBvd25lclJlbmRlcmVyLT5jb21wdXRl
UmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcob3duZXJSZW5kZXJlclN0eWxlLT5sb2dpY2FsTWlu
SGVpZ2h0KCkpOwotICAgIGludCBtYXhMb2dpY2FsSGVpZ2h0ID0gb3duZXJSZW5kZXJlclN0eWxl
LT5sb2dpY2FsTWF4SGVpZ2h0KCkuaXNVbmRlZmluZWQoKSA/IGxvZ2ljYWxIZWlnaHQgOiBvd25l
clJlbmRlcmVyLT5jb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcob3duZXJSZW5kZXJl
clN0eWxlLT5sb2dpY2FsTWF4SGVpZ2h0KCkpOwotICAgIHJldHVybiBtYXgobWluTG9naWNhbEhl
aWdodCwgbWluKGxvZ2ljYWxIZWlnaHQsIG1heExvZ2ljYWxIZWlnaHQpKTsKKyAgICByZXR1cm4g
b3duZXJSZW5kZXJlci0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3RpbmdNaW5N
YXhIZWlnaHQob3duZXJSZW5kZXJlci0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5n
KG93bmVySGVpZ2h0KSk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHUm9vdDo6bGF5b3V0KCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>95597</attachid>
            <date>2011-06-01 07:02:25 -0700</date>
            <delta_ts>2011-06-01 08:55:26 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>Refactor.diff</filename>
            <type>text/plain</type>
            <size>16015</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3ODAwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDYtMDEgIE5pa29sYXMg
WmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGR1cGxpY2F0ZWQgY29kZSBpbiB2YXJp
b3VzIGNvbXB1dGVSZXBsYWNlZExvZ2ljYWwqKCkgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTg2MAorCisgICAgICAgIENlbnRyYWxp
emUgdGhpcyBjYWxjdWxhdGlvbiBpbiBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxX
aWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aDoKKyAgICAgICAgaW50IG1pbkxvZ2ljYWxXaWR0aCA9
IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNaW5XaWR0
aCgpKTsKKyAgICAgICAgaW50IG1heExvZ2ljYWxXaWR0aCA9ICFpbmNsdWRlTWF4V2lkdGggfHwg
c3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSA/IGxvZ2ljYWxXaWR0aCA6
IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNYXhXaWR0
aCgpKTsKKyAgICAgICAgcmV0dXJuIG1heChtaW5Mb2dpY2FsV2lkdGgsIG1pbihsb2dpY2FsV2lk
dGgsIG1heExvZ2ljYWxXaWR0aCkpOworCisgICAgICAgIENlbnRyYWxpemUgdGhpcyBjYWxjdWxh
dGlvbiBpbiBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRSZXNwZWN0aW5n
TWluTWF4SGVpZ2h0OgorICAgICAgICBpbnQgbWluTG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWluSGVpZ2h0KCkpOworICAg
ICAgICBpbnQgbWF4TG9naWNhbEhlaWdodCA9IHN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKS5p
c1VuZGVmaW5lZCgpID8gbG9naWNhbEhlaWdodCA6IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWln
aHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkpOworICAgICAgICByZXR1cm4gbWF4
KG1pbkxvZ2ljYWxIZWlnaHQsIG1pbihsb2dpY2FsSGVpZ2h0LCBtYXhMb2dpY2FsSGVpZ2h0KSk7
CisKKyAgICAgICAgVXNlIHRoZSBuZXcgaGVscGVyIG1ldGhvZHMgd2hlcmUgcG9zc2libGUsIGRl
ZHVwbGljYXRpbmcgbG90cyBvZiBjb2RlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxXaWR0aFJlc3BlY3RpbmdNaW5NYXhXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0UmVzcGVjdGluZ01pbk1heEhl
aWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6Y29t
cHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdl
Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyUGFydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXJ0Ojpjb21wdXRlRW1iZWRk
ZWREb2N1bWVudFJlcGxhY2VkV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGFydDo6
Y29tcHV0ZUVtYmVkZGVkRG9jdW1lbnRSZXBsYWNlZEhlaWdodCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJQYXJ0Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUGFydDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclBhcnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6Y29t
cHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OmNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSb290Ojpj
b21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0KToKKwogMjAxMS0wNi0wMSAgU2hlcmlmZiBCb3Qg
IDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjg3Nzg4LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAJKHJldmlzaW9uIDg3NzkxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NDUsMTAgKzE5NDUsMTMgQEAgaW50IFJlbmRlckJv
eDo6Y29tcHV0ZVBlcmNlbnRhZ2VMb2dpY2FsSAogCiBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUmVw
bGFjZWRMb2dpY2FsV2lkdGgoYm9vbCBpbmNsdWRlTWF4V2lkdGgpIGNvbnN0CiB7Ci0gICAgaW50
IGxvZ2ljYWxXaWR0aCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCkt
PmxvZ2ljYWxXaWR0aCgpKTsKKyAgICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRo
UmVzcGVjdGluZ01pbk1heFdpZHRoKGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0
eWxlKCktPmxvZ2ljYWxXaWR0aCgpKSwgaW5jbHVkZU1heFdpZHRoKTsKK30KKworaW50IFJlbmRl
ckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKGlu
dCBsb2dpY2FsV2lkdGgsIGJvb2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdAorewogICAgIGludCBt
aW5Mb2dpY2FsV2lkdGggPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgp
LT5sb2dpY2FsTWluV2lkdGgoKSk7CiAgICAgaW50IG1heExvZ2ljYWxXaWR0aCA9ICFpbmNsdWRl
TWF4V2lkdGggfHwgc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSA/IGxv
Z2ljYWxXaWR0aCA6IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKHN0eWxlKCktPmxv
Z2ljYWxNYXhXaWR0aCgpKTsKLQogICAgIHJldHVybiBtYXgobWluTG9naWNhbFdpZHRoLCBtaW4o
bG9naWNhbFdpZHRoLCBtYXhMb2dpY2FsV2lkdGgpKTsKIH0KIApAQCAtMTk3MywxMCArMTk3Niwx
MyBAQCBpbnQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkCiAKIGludCBSZW5k
ZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdAogewotICAgIGludCBs
b2dpY2FsSGVpZ2h0ID0gY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxlKCkt
PmxvZ2ljYWxIZWlnaHQoKSk7CisgICAgcmV0dXJuIGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWln
aHRSZXNwZWN0aW5nTWluTWF4SGVpZ2h0KGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2lu
ZyhzdHlsZSgpLT5sb2dpY2FsSGVpZ2h0KCkpKTsKK30KKworaW50IFJlbmRlckJveDo6Y29tcHV0
ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3RpbmdNaW5NYXhIZWlnaHQoaW50IGxvZ2ljYWxI
ZWlnaHQpIGNvbnN0Cit7CiAgICAgaW50IG1pbkxvZ2ljYWxIZWlnaHQgPSBjb21wdXRlUmVwbGFj
ZWRMb2dpY2FsSGVpZ2h0VXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpKTsKICAgICBp
bnQgbWF4TG9naWNhbEhlaWdodCA9IHN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVm
aW5lZCgpID8gbG9naWNhbEhlaWdodCA6IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2lu
ZyhzdHlsZSgpLT5sb2dpY2FsTWF4SGVpZ2h0KCkpOwotCiAgICAgcmV0dXJuIG1heChtaW5Mb2dp
Y2FsSGVpZ2h0LCBtaW4obG9naWNhbEhlaWdodCwgbWF4TG9naWNhbEhlaWdodCkpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA4Nzc5MSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MzA4LDcgKzMwOCw5IEBAIHB1YmxpYzoKICAgICBpbnQgY29tcHV0ZUxvZ2ljYWxXaWR0aFVzaW5n
KExvZ2ljYWxXaWR0aFR5cGUsIGludCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogICAgIGludCBj
b21wdXRlTG9naWNhbEhlaWdodFVzaW5nKGNvbnN0IExlbmd0aCYgaGVpZ2h0KTsKICAgICBpbnQg
Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoTGVuZ3RoIHdpZHRoKSBjb25zdDsKKyAg
ICBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKGlu
dCBsb2dpY2FsV2lkdGgsIGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7CiAgICAg
aW50IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhMZW5ndGggaGVpZ2h0KSBjb25z
dDsKKyAgICBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFJlc3BlY3RpbmdNaW5NYXhI
ZWlnaHQoaW50IGxvZ2ljYWxIZWlnaHQpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQgY29tcHV0
ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRoID0gdHJ1ZSkgY29uc3Q7
CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiA4
Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3NywxMCArNDc3LDcgQEAgaW50IFJlbmRlckltYWdlOjpjb21wdXRlUmVw
bGFjZWRMb2dpY2FsVwogICAgIGVsc2UKICAgICAgICAgbG9naWNhbFdpZHRoID0gY2FsY0FzcGVj
dFJhdGlvTG9naWNhbFdpZHRoKCk7CiAKLSAgICBpbnQgbWluTG9naWNhbFdpZHRoID0gY29tcHV0
ZVJlcGxhY2VkTG9naWNhbFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbE1pbldpZHRoKCkpOwot
ICAgIGludCBtYXhMb2dpY2FsV2lkdGggPSAhaW5jbHVkZU1heFdpZHRoIHx8IHN0eWxlKCktPmxv
Z2ljYWxNYXhXaWR0aCgpLmlzVW5kZWZpbmVkKCkgPyBsb2dpY2FsV2lkdGggOiBjb21wdXRlUmVw
bGFjZWRMb2dpY2FsV2lkdGhVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4V2lkdGgoKSk7Ci0KLSAg
ICByZXR1cm4gbWF4KG1pbkxvZ2ljYWxXaWR0aCwgbWluKGxvZ2ljYWxXaWR0aCwgbWF4TG9naWNh
bFdpZHRoKSk7CisgICAgcmV0dXJuIGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFJlc3BlY3Rp
bmdNaW5NYXhXaWR0aChsb2dpY2FsV2lkdGgsIGluY2x1ZGVNYXhXaWR0aCk7CiB9CiAKIGludCBS
ZW5kZXJJbWFnZTo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNvbnN0CkBAIC00OTYs
MTAgKzQ5Myw3IEBAIGludCBSZW5kZXJJbWFnZTo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEgKICAg
ICBlbHNlCiAgICAgICAgIGxvZ2ljYWxIZWlnaHQgPSBjYWxjQXNwZWN0UmF0aW9Mb2dpY2FsSGVp
Z2h0KCk7CiAKLSAgICBpbnQgbWluTG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBsYWNlZExvZ2lj
YWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWluSGVpZ2h0KCkpOwotICAgIGludCBtYXhM
b2dpY2FsSGVpZ2h0ID0gc3R5bGUoKS0+bG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkg
PyBsb2dpY2FsSGVpZ2h0IDogY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKHN0eWxl
KCktPmxvZ2ljYWxNYXhIZWlnaHQoKSk7Ci0KLSAgICByZXR1cm4gbWF4KG1pbkxvZ2ljYWxIZWln
aHQsIG1pbihsb2dpY2FsSGVpZ2h0LCBtYXhMb2dpY2FsSGVpZ2h0KSk7CisgICAgcmV0dXJuIGNv
bXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRSZXNwZWN0aW5nTWluTWF4SGVpZ2h0KGxvZ2ljYWxI
ZWlnaHQpOwogfQogCiBpbnQgUmVuZGVySW1hZ2U6OmNhbGNBc3BlY3RSYXRpb0xvZ2ljYWxXaWR0
aCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwCShy
ZXZpc2lvbiA4Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDIyICsxMTIsMTggQEAgUmVuZGVyU1ZHUm9vdCogUmVu
ZGVyUGFydDo6ZW1iZWRkZWRTVkdDbwogICAgIHJldHVybiB0b1JlbmRlclNWR1Jvb3Qoc3ZnUm9v
dFJlbmRlcmVyKTsKIH0KIAotaW50IFJlbmRlclBhcnQ6OmNvbXB1dGVFbWJlZGRlZERvY3VtZW50
UmVwbGFjZWRXaWR0aChib29sIGluY2x1ZGVNYXhXaWR0aCwgUmVuZGVyU3R5bGUqIGNvbnRlbnRS
ZW5kZXJTdHlsZSkgY29uc3QKK2ludCBSZW5kZXJQYXJ0Ojpjb21wdXRlRW1iZWRkZWREb2N1bWVu
dFJlcGxhY2VkV2lkdGgoUmVuZGVyU1ZHUm9vdCogY29udGVudFJlbmRlcmVyLCBib29sIGluY2x1
ZGVNYXhXaWR0aCkgY29uc3QKIHsKLSAgICBpbnQgbG9naWNhbFdpZHRoID0gY29tcHV0ZVJlcGxh
Y2VkTG9naWNhbFdpZHRoVXNpbmcoY29udGVudFJlbmRlclN0eWxlLT5sb2dpY2FsV2lkdGgoKSk7
Ci0gICAgaW50IG1pbkxvZ2ljYWxXaWR0aCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVz
aW5nKGNvbnRlbnRSZW5kZXJTdHlsZS0+bG9naWNhbE1pbldpZHRoKCkpOwotICAgIGludCBtYXhM
b2dpY2FsV2lkdGggPSAhaW5jbHVkZU1heFdpZHRoIHx8IGNvbnRlbnRSZW5kZXJTdHlsZS0+bG9n
aWNhbE1heFdpZHRoKCkuaXNVbmRlZmluZWQoKSA/IGxvZ2ljYWxXaWR0aCA6IGNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxXaWR0aFVzaW5nKGNvbnRlbnRSZW5kZXJTdHlsZS0+bG9naWNhbE1heFdpZHRo
KCkpOwotICAgIGludCB3aWR0aCA9IG1heChtaW5Mb2dpY2FsV2lkdGgsIG1pbihsb2dpY2FsV2lk
dGgsIG1heExvZ2ljYWxXaWR0aCkpOwotICAgIHJldHVybiB3aWR0aDsKKyAgICBBU1NFUlQoY29u
dGVudFJlbmRlcmVyKTsKKyAgICBBU1NFUlQoY29udGVudFJlbmRlcmVyLT5zdHlsZSgpKTsKKyAg
ICByZXR1cm4gY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRo
KGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKGNvbnRlbnRSZW5kZXJlci0+c3R5bGUo
KS0+bG9naWNhbFdpZHRoKCkpLCBpbmNsdWRlTWF4V2lkdGgpOwogfQogCi1pbnQgUmVuZGVyUGFy
dDo6Y29tcHV0ZUVtYmVkZGVkRG9jdW1lbnRSZXBsYWNlZEhlaWdodChSZW5kZXJTdHlsZSogY29u
dGVudFJlbmRlclN0eWxlKSBjb25zdAoraW50IFJlbmRlclBhcnQ6OmNvbXB1dGVFbWJlZGRlZERv
Y3VtZW50UmVwbGFjZWRIZWlnaHQoUmVuZGVyU1ZHUm9vdCogY29udGVudFJlbmRlcmVyKSBjb25z
dAogewotICAgIGludCBsb2dpY2FsSGVpZ2h0ID0gY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdo
dFVzaW5nKGNvbnRlbnRSZW5kZXJTdHlsZS0+bG9naWNhbEhlaWdodCgpKTsKLSAgICBpbnQgbWlu
TG9naWNhbEhlaWdodCA9IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhjb250ZW50
UmVuZGVyU3R5bGUtPmxvZ2ljYWxNaW5IZWlnaHQoKSk7Ci0gICAgaW50IG1heExvZ2ljYWxIZWln
aHQgPSBjb250ZW50UmVuZGVyU3R5bGUtPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgp
ID8gbG9naWNhbEhlaWdodCA6IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhjb250
ZW50UmVuZGVyU3R5bGUtPmxvZ2ljYWxNYXhIZWlnaHQoKSk7Ci0gICAgaW50IGhlaWdodCA9IG1h
eChtaW5Mb2dpY2FsSGVpZ2h0LCBtaW4obG9naWNhbEhlaWdodCwgbWF4TG9naWNhbEhlaWdodCkp
OwotICAgIHJldHVybiBoZWlnaHQ7CisgICAgQVNTRVJUKGNvbnRlbnRSZW5kZXJlcik7CisgICAg
QVNTRVJUKGNvbnRlbnRSZW5kZXJlci0+c3R5bGUoKSk7CisgICAgcmV0dXJuIGNvbXB1dGVSZXBs
YWNlZExvZ2ljYWxIZWlnaHRSZXNwZWN0aW5nTWluTWF4SGVpZ2h0KGNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxIZWlnaHRVc2luZyhjb250ZW50UmVuZGVyZXItPnN0eWxlKCktPmxvZ2ljYWxIZWlnaHQo
KSkpOwogfQogCiBpbnQgUmVuZGVyUGFydDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJv
b2wgaW5jbHVkZU1heFdpZHRoKSBjb25zdApAQCAtMTQ5LDcgKzE0NSw3IEBAIGludCBSZW5kZXJQ
YXJ0Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2kKIAogICAgICAgICAvLyBJZiAnaGVpZ2h0JyBh
bmQgJ3dpZHRoJyBib3RoIGhhdmUgY29tcHV0ZWQgdmFsdWVzIG9mICdhdXRvJyBhbmQgdGhlIGVs
ZW1lbnQgYWxzbyBoYXMgYW4gaW50cmluc2ljIHdpZHRoLCB0aGVuIHRoYXQgaW50cmluc2ljIHdp
ZHRoIGlzIHRoZSB1c2VkIHZhbHVlIG9mICd3aWR0aCcuCiAgICAgICAgIGlmIChoZWlnaHRJc0F1
dG8gJiYgaGFzSW50cmluc2ljV2lkdGgpCi0gICAgICAgICAgICByZXR1cm4gY29tcHV0ZUVtYmVk
ZGVkRG9jdW1lbnRSZXBsYWNlZFdpZHRoKGluY2x1ZGVNYXhXaWR0aCwgY29udGVudFJlbmRlclN0
eWxlKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wdXRlRW1iZWRkZWREb2N1bWVudFJlcGxhY2Vk
V2lkdGgoY29udGVudFJlbmRlcmVyLCBpbmNsdWRlTWF4V2lkdGgpOwogICAgIAogICAgICAgICBi
b29sIGhhc0ludHJpbnNpY0hlaWdodCA9IGNvbnRlbnRSZW5kZXJTdHlsZS0+aGVpZ2h0KCkuaXNG
aXhlZCgpOwogICAgICAgICBpZiAoIWludHJpbnNpY1JhdGlvLmlzRW1wdHkoKSkgewpAQCAtMTc1
LDcgKzE3MSw3IEBAIGludCBSZW5kZXJQYXJ0Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2kKIAog
ICAgICAgICAvLyBPdGhlcndpc2UsIGlmICd3aWR0aCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2Yg
J2F1dG8nLCBhbmQgdGhlIGVsZW1lbnQgaGFzIGFuIGludHJpbnNpYyB3aWR0aCwgdGhlbiB0aGF0
IGludHJpbnNpYyB3aWR0aCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnd2lkdGgnLgogICAgICAgICBp
ZiAoaGFzSW50cmluc2ljV2lkdGgpCi0gICAgICAgICAgICByZXR1cm4gY29tcHV0ZUVtYmVkZGVk
RG9jdW1lbnRSZXBsYWNlZFdpZHRoKGluY2x1ZGVNYXhXaWR0aCwgY29udGVudFJlbmRlclN0eWxl
KTsKKyAgICAgICAgICAgIHJldHVybiBjb21wdXRlRW1iZWRkZWREb2N1bWVudFJlcGxhY2VkV2lk
dGgoY29udGVudFJlbmRlcmVyLCBpbmNsdWRlTWF4V2lkdGgpOwogICAgIH0KIAogICAgIC8vIE90
aGVyd2lzZSwgaWYgJ3dpZHRoJyBoYXMgYSBjb21wdXRlZCB2YWx1ZSBvZiAnYXV0bycsIGJ1dCBu
b25lIG9mIHRoZSBjb25kaXRpb25zIGFib3ZlIGFyZSBtZXQsIHRoZW4gdGhlIHVzZWQgdmFsdWUg
b2YgJ3dpZHRoJyBiZWNvbWVzIDMwMHB4LiBJZiAzMDBweCBpcyB0b28KQEAgLTIwMiw3ICsxOTgs
NyBAQCBpbnQgUmVuZGVyUGFydDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlCiAKICAgICAgICAg
Ly8gSWYgJ2hlaWdodCcgYW5kICd3aWR0aCcgYm90aCBoYXZlIGNvbXB1dGVkIHZhbHVlcyBvZiAn
YXV0bycgYW5kIHRoZSBlbGVtZW50IGFsc28gaGFzIGFuIGludHJpbnNpYyBoZWlnaHQsIHRoZW4g
dGhhdCBpbnRyaW5zaWMgaGVpZ2h0IGlzIHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnLgogICAg
ICAgICBpZiAod2lkdGhJc0F1dG8gJiYgaGFzSW50cmluc2ljSGVpZ2h0KQotICAgICAgICAgICAg
cmV0dXJuIGNvbXB1dGVFbWJlZGRlZERvY3VtZW50UmVwbGFjZWRIZWlnaHQoY29udGVudFJlbmRl
clN0eWxlKTsKKyAgICAgICAgICAgIHJldHVybiBjb21wdXRlRW1iZWRkZWREb2N1bWVudFJlcGxh
Y2VkSGVpZ2h0KGNvbnRlbnRSZW5kZXJlcik7CiAgICAgCiAgICAgICAgIC8vIE90aGVyd2lzZSwg
aWYgJ2hlaWdodCcgaGFzIGEgY29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBhbmQgdGhlIGVsZW1l
bnQgaGFzIGFuIGludHJpbnNpYyByYXRpbyB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQn
IGlzOgogICAgICAgICAvLyAodXNlZCB3aWR0aCkgLyAoaW50cmluc2ljIHJhdGlvKQpAQCAtMjEz
LDcgKzIwOSw3IEBAIGludCBSZW5kZXJQYXJ0Ojpjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGUKIAog
ICAgICAgICAvLyBPdGhlcndpc2UsIGlmICdoZWlnaHQnIGhhcyBhIGNvbXB1dGVkIHZhbHVlIG9m
ICdhdXRvJywgYW5kIHRoZSBlbGVtZW50IGhhcyBhbiBpbnRyaW5zaWMgaGVpZ2h0LCB0aGVuIHRo
YXQgaW50cmluc2ljIGhlaWdodCBpcyB0aGUgdXNlZCB2YWx1ZSBvZiAnaGVpZ2h0Jy4KICAgICAg
ICAgaWYgKGhhc0ludHJpbnNpY0hlaWdodCkKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlRW1i
ZWRkZWREb2N1bWVudFJlcGxhY2VkSGVpZ2h0KGNvbnRlbnRSZW5kZXJTdHlsZSk7CisgICAgICAg
ICAgICByZXR1cm4gY29tcHV0ZUVtYmVkZGVkRG9jdW1lbnRSZXBsYWNlZEhlaWdodChjb250ZW50
UmVuZGVyZXIpOwogICAgIH0KIAogICAgIC8vIE90aGVyd2lzZSwgaWYgJ2hlaWdodCcgaGFzIGEg
Y29tcHV0ZWQgdmFsdWUgb2YgJ2F1dG8nLCBidXQgbm9uZSBvZiB0aGUgY29uZGl0aW9ucyBhYm92
ZSBhcmUgbWV0LCB0aGVuIHRoZSB1c2VkIHZhbHVlIG9mICdoZWlnaHQnIG11c3QgYmUgc2V0IHRv
IHRoZSBoZWlnaHQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQYXJ0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnQuaAkocmV2
aXNpb24gODc3OTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUGFydC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw4IEBAIHByb3RlY3RlZDoKIAogI2lmIEVOQUJMRShT
VkcpCiAgICAgUmVuZGVyU1ZHUm9vdCogZW1iZWRkZWRTVkdDb250ZW50UmVuZGVyZXIoKSBjb25z
dDsKLSAgICBpbnQgY29tcHV0ZUVtYmVkZGVkRG9jdW1lbnRSZXBsYWNlZFdpZHRoKGJvb2wgaW5j
bHVkZU1heFdpZHRoLCBSZW5kZXJTdHlsZSogY29udGVudFJlbmRlclN0eWxlKSBjb25zdDsKLSAg
ICBpbnQgY29tcHV0ZUVtYmVkZGVkRG9jdW1lbnRSZXBsYWNlZEhlaWdodChSZW5kZXJTdHlsZSog
Y29udGVudFJlbmRlclN0eWxlKSBjb25zdDsKKyAgICBpbnQgY29tcHV0ZUVtYmVkZGVkRG9jdW1l
bnRSZXBsYWNlZFdpZHRoKFJlbmRlclNWR1Jvb3QqIGNvbnRlbnRSZW5kZXJlciwgYm9vbCBpbmNs
dWRlTWF4V2lkdGgpIGNvbnN0OworICAgIGludCBjb21wdXRlRW1iZWRkZWREb2N1bWVudFJlcGxh
Y2VkSGVpZ2h0KFJlbmRlclNWR1Jvb3QqIGNvbnRlbnRSZW5kZXJlcikgY29uc3Q7CiAgICAgdmly
dHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbFdpZHRoKGJvb2wgaW5jbHVkZU1heFdpZHRo
ID0gdHJ1ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgY29tcHV0ZVJlcGxhY2VkTG9naWNhbEhl
aWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkocmV2aXNpb24gODc3OTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDIsMTAgKzIwMiw3IEBAIGludCBSZW5kZXJSZXBsYWNlZDo6Y29tcHV0ZVJlcGxh
Y2VkTG9naWMKICAgICBlbHNlCiAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IGludHJpbnNpY0xvZ2lj
YWxXaWR0aCgpOwogCi0gICAgaW50IG1pbkxvZ2ljYWxXaWR0aCA9IGNvbXB1dGVSZXBsYWNlZExv
Z2ljYWxXaWR0aFVzaW5nKHN0eWxlKCktPmxvZ2ljYWxNaW5XaWR0aCgpKTsKLSAgICBpbnQgbWF4
TG9naWNhbFdpZHRoID0gIWluY2x1ZGVNYXhXaWR0aCB8fCBzdHlsZSgpLT5sb2dpY2FsTWF4V2lk
dGgoKS5pc1VuZGVmaW5lZCgpID8gbG9naWNhbFdpZHRoIDogY29tcHV0ZVJlcGxhY2VkTG9naWNh
bFdpZHRoVXNpbmcoc3R5bGUoKS0+bG9naWNhbE1heFdpZHRoKCkpOwotCi0gICAgcmV0dXJuIG1h
eChtaW5Mb2dpY2FsV2lkdGgsIG1pbihsb2dpY2FsV2lkdGgsIG1heExvZ2ljYWxXaWR0aCkpOwor
ICAgIHJldHVybiBjb21wdXRlUmVwbGFjZWRMb2dpY2FsV2lkdGhSZXNwZWN0aW5nTWluTWF4V2lk
dGgobG9naWNhbFdpZHRoLCBpbmNsdWRlTWF4V2lkdGgpOwogfQogCiBpbnQgUmVuZGVyUmVwbGFj
ZWQ6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHQoKSBjb25zdApAQCAtMjE4LDEwICsyMTUs
NyBAQCBpbnQgUmVuZGVyUmVwbGFjZWQ6OmNvbXB1dGVSZXBsYWNlZExvZ2ljCiAgICAgZWxzZQog
ICAgICAgICBsb2dpY2FsSGVpZ2h0ID0gaW50cmluc2ljTG9naWNhbEhlaWdodCgpOwogCi0gICAg
aW50IG1pbkxvZ2ljYWxIZWlnaHQgPSBjb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmco
c3R5bGUoKS0+bG9naWNhbE1pbkhlaWdodCgpKTsKLSAgICBpbnQgbWF4TG9naWNhbEhlaWdodCA9
IHN0eWxlKCktPmxvZ2ljYWxNYXhIZWlnaHQoKS5pc1VuZGVmaW5lZCgpID8gbG9naWNhbEhlaWdo
dCA6IGNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRVc2luZyhzdHlsZSgpLT5sb2dpY2FsTWF4
SGVpZ2h0KCkpOwotCi0gICAgcmV0dXJuIG1heChtaW5Mb2dpY2FsSGVpZ2h0LCBtaW4obG9naWNh
bEhlaWdodCwgbWF4TG9naWNhbEhlaWdodCkpOworICAgIHJldHVybiBjb21wdXRlUmVwbGFjZWRM
b2dpY2FsSGVpZ2h0UmVzcGVjdGluZ01pbk1heEhlaWdodChsb2dpY2FsSGVpZ2h0KTsKIH0KIAog
aW50IFJlbmRlclJlcGxhY2VkOjpjYWxjQXNwZWN0UmF0aW9Mb2dpY2FsV2lkdGgoKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3Bw
CShyZXZpc2lvbiA4Nzc5MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MCwxMCArMTkwLDcgQEAgaW50IFJlbmRl
clNWR1Jvb3Q6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYQogICAgIC8vICAgdGhlIHdpZHRoIG9mIHRo
ZSB2aWV3cG9ydC4KICAgICAvLwogICAgIC8vIFVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIHRoZSBw
b3NpdGlvbmluZyBwcm9wZXJ0aWVzIGVzdGFibGlzaCB0aGUgdmlld3BvcnQncyB3aWR0aC4KLSAg
ICBpbnQgbG9naWNhbFdpZHRoID0gb3duZXJSZW5kZXJlci0+Y29tcHV0ZVJlcGxhY2VkTG9naWNh
bFdpZHRoVXNpbmcob3duZXJXaWR0aCk7Ci0gICAgaW50IG1pbkxvZ2ljYWxXaWR0aCA9IG93bmVy
UmVuZGVyZXItPmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKG93bmVyUmVuZGVyZXJT
dHlsZS0+bG9naWNhbE1pbldpZHRoKCkpOwotICAgIGludCBtYXhMb2dpY2FsV2lkdGggPSAhaW5j
bHVkZU1heFdpZHRoIHx8IG93bmVyUmVuZGVyZXJTdHlsZS0+bG9naWNhbE1heFdpZHRoKCkuaXNV
bmRlZmluZWQoKSA/IGxvZ2ljYWxXaWR0aCA6IG93bmVyUmVuZGVyZXItPmNvbXB1dGVSZXBsYWNl
ZExvZ2ljYWxXaWR0aFVzaW5nKG93bmVyUmVuZGVyZXJTdHlsZS0+bG9naWNhbE1heFdpZHRoKCkp
OwotICAgIHJldHVybiBtYXgobWluTG9naWNhbFdpZHRoLCBtaW4obG9naWNhbFdpZHRoLCBtYXhM
b2dpY2FsV2lkdGgpKTsKKyAgICByZXR1cm4gb3duZXJSZW5kZXJlci0+Y29tcHV0ZVJlcGxhY2Vk
TG9naWNhbFdpZHRoUmVzcGVjdGluZ01pbk1heFdpZHRoKG93bmVyUmVuZGVyZXItPmNvbXB1dGVS
ZXBsYWNlZExvZ2ljYWxXaWR0aFVzaW5nKG93bmVyV2lkdGgpLCBpbmNsdWRlTWF4V2lkdGgpOwog
fQogCiBpbnQgUmVuZGVyU1ZHUm9vdDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodCgpIGNv
bnN0CkBAIC0yMjIsMTAgKzIxOSw3IEBAIGludCBSZW5kZXJTVkdSb290Ojpjb21wdXRlUmVwbGFj
ZWRMb2dpY2EKICAgICAvLyBTaW1pbGFybHksIGlmIHRoZXJlIGFyZSBwb3NpdGlvbmluZyBwcm9w
ZXJ0aWVzIHNwZWNpZmllZCBvbiB0aGUgcmVmZXJlbmNpbmcgZWxlbWVudCBvciBvbiB0aGUgb3V0
ZXJtb3N0IHN2ZyBlbGVtZW50IHRoYXQKICAgICAvLyBhcmUgc3VmZmljaWVudCB0byBlc3RhYmxp
c2ggdGhlIGhlaWdodCBvZiB0aGUgdmlld3BvcnQsIHRoZW4gdGhlc2UgcG9zaXRpb25pbmcgcHJv
cGVydGllcyBlc3RhYmxpc2ggdGhlIHZpZXdwb3J0J3MgaGVpZ2h0OwogICAgIC8vIG90aGVyd2lz
ZSwgdGhlIOKAmGhlaWdodOKAmSBhdHRyaWJ1dGUgb24gdGhlIG91dGVybW9zdCBzdmcgZWxlbWVu
dCBlc3RhYmxpc2hlcyB0aGUgdmlld3BvcnQncyBoZWlnaHQuCi0gICAgaW50IGxvZ2ljYWxIZWln
aHQgPSBvd25lclJlbmRlcmVyLT5jb21wdXRlUmVwbGFjZWRMb2dpY2FsSGVpZ2h0VXNpbmcob3du
ZXJIZWlnaHQpOwotICAgIGludCBtaW5Mb2dpY2FsSGVpZ2h0ID0gb3duZXJSZW5kZXJlci0+Y29t
cHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKG93bmVyUmVuZGVyZXJTdHlsZS0+bG9naWNh
bE1pbkhlaWdodCgpKTsKLSAgICBpbnQgbWF4TG9naWNhbEhlaWdodCA9IG93bmVyUmVuZGVyZXJT
dHlsZS0+bG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBsb2dpY2FsSGVpZ2h0IDog
b3duZXJSZW5kZXJlci0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nKG93bmVyUmVu
ZGVyZXJTdHlsZS0+bG9naWNhbE1heEhlaWdodCgpKTsKLSAgICByZXR1cm4gbWF4KG1pbkxvZ2lj
YWxIZWlnaHQsIG1pbihsb2dpY2FsSGVpZ2h0LCBtYXhMb2dpY2FsSGVpZ2h0KSk7CisgICAgcmV0
dXJuIG93bmVyUmVuZGVyZXItPmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRSZXNwZWN0aW5n
TWluTWF4SGVpZ2h0KG93bmVyUmVuZGVyZXItPmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWlnaHRV
c2luZyhvd25lckhlaWdodCkpOwogfQogCiB2b2lkIFJlbmRlclNWR1Jvb3Q6OmxheW91dCgpCg==
</data>
<flag name="review"
          id="89120"
          type_id="1"
          status="+"
          setter="rwlbuis"
    />
          </attachment>
      

    </bug>

</bugzilla>