<?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>108050</bug_id>
          
          <creation_ts>2013-01-27 21:58:31 -0800</creation_ts>
          <short_desc>SVGPathStringSource should not up convert 8-bit strings to UTF-16</short_desc>
          <delta_ts>2013-01-30 15:56:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>d-r</cc>
    
    <cc>fmalita</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>817515</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-27 21:58:31 -0800</bug_when>
    <thetext>SVGPathStringSource should not upconvert UTF-8 strings to UTF-16</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817519</commentid>
    <comment_count>1</comment_count>
      <attachid>184938</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-27 22:01:56 -0800</bug_when>
    <thetext>Created attachment 184938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817520</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-27 22:03:41 -0800</bug_when>
    <thetext>Some things I am not sure of in this patch:
- Should I move the FloatPoint parsing helpers elsewhere?
- Should I use a union for the character pointers?
- Should I be caching the m_is8BitSource bit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817522</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-27 22:05:40 -0800</bug_when>
    <thetext>Attachment 184938 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/svg/SVGParserUtilities.cpp&apos;, u&apos;Source/WebCore/svg/SVGParserUtilities.h&apos;, u&apos;Source/WebCore/svg/SVGPathSource.h&apos;, u&apos;Source/WebCore/svg/SVGPathStringSource.cpp&apos;, u&apos;Source/WebCore/svg/SVGPathStringSource.h&apos;]&quot; exit_code: 1
Source/WebCore/svg/SVGPathStringSource.cpp:102:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/svg/SVGPathStringSource.cpp:110:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/svg/SVGPathStringSource.cpp:186:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/svg/SVGPathStringSource.cpp:232:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/svg/SVGPathStringSource.cpp:240:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/svg/SVGPathStringSource.cpp:248:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/svg/SVGPathStringSource.cpp:256:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/svg/SVGPathStringSource.cpp:264:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/svg/SVGPathStringSource.cpp:272:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/svg/SVGPathStringSource.cpp:280:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/svg/SVGPathStringSource.cpp:288:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/svg/SVGPathStringSource.cpp:313:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 12 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817768</commentid>
    <comment_count>4</comment_count>
      <attachid>184938</attachid>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2013-01-28 08:29:21 -0800</bug_when>
    <thetext>Comment on attachment 184938
Patch

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

I am not a reviewer yet, so someone official will have to weigh in.

Regarding your open questions...
- I support moving the parseFloatPoint methods to the utilities class.
- I support a union for the 8-bit and 16-bit string fields
- It looks like is8bit is efficient to evaluate, so I don&apos;t think there is much need to cache it. This code is not in the fast or expensive part of SVG path rendering.

&gt; Source/WebCore/svg/SVGPathStringSource.cpp:105
&gt; +        return m_currentCharacter16 &lt; m_endCharacter16;

return m_is8BitSource ? ( m_currentCharacter8 &lt; m_endCharacter8 ) : ( m_currentCharacter16 &lt; m_endCharacter16 );

&gt; Source/WebCore/svg/SVGPathStringSource.cpp:114
&gt;  }

Ditto.

&gt; Source/WebCore/svg/SVGPathStringSource.cpp:189
&gt; +        return parseSVGSegmentTypeHelper(m_currentCharacter16, pathSegType);

Ditto.

&gt; Source/WebCore/svg/SVGPathStringSource.cpp:225
&gt;      SVGPathSegType nextCommand;

Why not move this up to above the &quot;if&quot; and remove the extra declarations inside the if/else blocks?

&gt; Source/WebCore/svg/SVGPathStringSource.cpp:235
&gt; +        return WebCore::parseFloatPoint(m_currentCharacter16, m_endCharacter16, targetPoint);

Same ?: fix.

&gt; Source/WebCore/svg/SVGPathStringSource.cpp:243
&gt; +        return WebCore::parseFloatPoint(m_currentCharacter16, m_endCharacter16, targetPoint);

Ditto.

&gt; Source/WebCore/svg/SVGPathStringSource.cpp:251
&gt; +        return parseNumber(m_currentCharacter16, m_endCharacter16, x);

Ditto.

&gt; Source/WebCore/svg/SVGPathStringSource.cpp:267
&gt; +        return WebCore::parseFloatPoint3(m_currentCharacter16, m_endCharacter16, point1, point2, targetPoint);

Ditto.

&gt; Source/WebCore/svg/SVGPathStringSource.cpp:283
&gt; +        return WebCore::parseFloatPoint2(m_currentCharacter16, m_endCharacter16, point2, targetPoint);

Ditto.

&gt; Source/WebCore/svg/SVGPathStringSource.cpp:291
&gt; +        return WebCore::parseFloatPoint(m_currentCharacter16, m_endCharacter16, targetPoint);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817837</commentid>
    <comment_count>5</comment_count>
      <attachid>184938</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-01-28 10:09:13 -0800</bug_when>
    <thetext>Comment on attachment 184938
Patch

I think you can remove the WebCore:: specifiers - patch looks fine otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817851</commentid>
    <comment_count>6</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2013-01-28 10:23:15 -0800</bug_when>
    <thetext>Please at least clean up the style issues before committing. The way that style checking works now, existing problems in the code (which this patch would introduce) will cause style errors in future changes in the code.

I would also like the other changes to make things simpler for future editing. This code is likely to change shortly due to SVG 2 spec changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817913</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-28 11:29:27 -0800</bug_when>
    <thetext>Committed r140985: &lt;http://trac.webkit.org/changeset/140985&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820736</commentid>
    <comment_count>8</comment_count>
    <who name="Philip Rogers">pdr</who>
    <bug_when>2013-01-30 15:56:50 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Committed r140985: &lt;http://trac.webkit.org/changeset/140985&gt;

Unsurprisingly this also led to a performance increase :) Around 5% on this test; nice work:
http://webkit-perf.appspot.com/graph.html#tests=[[10670997,2001,173262]]&amp;sel=1359355423972.2766,1359447995400.8481,26.956521739130423,93.04347826086956&amp;displayrange=30&amp;datatype=running</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184938</attachid>
            <date>2013-01-27 22:01:56 -0800</date>
            <delta_ts>2013-01-28 10:09:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108050-20130127215844.patch</filename>
            <type>text/plain</type>
            <size>17801</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDk0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDEzLTAxLTI3ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU1ZHUGF0aFN0cmluZ1NvdXJjZSBzaG91
bGQgbm90IHVwLWNvbnZlcnQgOC1iaXQgc3RyaW5ncyB0byBVVEYtMTYKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODA1MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNob3VsZCBzYXZlIGFyb3VuZCB+NDAw
ayBvbiBNZW1idXN0ZXIzLgorCisgICAgICAgICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpwYXJzZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpnZW5l
cmljUGFyc2VBcmNGbGFnKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQXJjRmxhZyk6CisgICAg
ICAgICogc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oOgorICAgICAgICBBZGQgTENoYXIgdmFyaWFu
dHMgb2YgcGFyc2VOdW1iZXIgYW5kIHBhcnNlQXJjRmxhZy4KKworICAgICAgICAqIHN2Zy9TVkdQ
YXRoU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgTW92ZSBmb3J3YXJkIGRl
Y2xhcmF0aW9uIG9mIEZsb2F0UG9pbnQgaGVyZSwgd2hlcmUgaXQgYmVsb25ncy4KKworICAgICAg
ICAqIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
RmxvYXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlRmxvYXRQb2ludDMpOgorICAgICAgICBBZGQgaGVscGVycyBmb3Ig
cGFyc2luZyBmbG9hdCBwb2ludHMuCisKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdT
b3VyY2U6OlNWR1BhdGhTdHJpbmdTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0
cmluZ1NvdXJjZTo6aGFzTW9yZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6bW92ZVRvTmV4dFRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU1ZHU2Vn
bWVudFR5cGVIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6
cGFyc2VTVkdTZWdtZW50VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpuZXh0Q29tbWFuZEhlbHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFuZCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZU1vdmVUb1NlZ21l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9T
ZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlTGlu
ZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21vb3RoU2VnbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9R
dWFkcmF0aWNTZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdTb3VyY2U6
OnBhcnNlQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VBcmNUb1NlZ21lbnRIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmlu
Z1NvdXJjZTo6cGFyc2VBcmNUb1NlZ21lbnQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5n
U291cmNlLmg6CisgICAgICAgIChTVkdQYXRoU3RyaW5nU291cmNlKToKKyAgICAgICAgTWFrZSA4
LWJpdCBhd2FyZS4KKwogMjAxMy0wMS0yNyAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgQW4gW0FjdGl2ZURPTU9iamVjdF0gSURMIGF0dHJpYnV0ZSBzaG91
bGQgYmUgaW5oZXJpdGVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0
aWVzLmNwcAkocmV2aXNpb24gMTQwOTI5KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNl
clV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCw2ICsxNTQsMTEgQEAgYm9vbCBw
YXJzZVNWR051bWJlcihDaGFyYWN0ZXJUeXBlKiBiZWdpbgogdGVtcGxhdGUgYm9vbCBwYXJzZVNW
R051bWJlcihMQ2hhciogYmVnaW4sIHNpemVfdCBsZW5ndGgsIGRvdWJsZSYpOwogdGVtcGxhdGUg
Ym9vbCBwYXJzZVNWR051bWJlcihVQ2hhciogYmVnaW4sIHNpemVfdCBsZW5ndGgsIGRvdWJsZSYp
OwogCitib29sIHBhcnNlTnVtYmVyKGNvbnN0IExDaGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5k
LCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXApCit7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZU51
bWJlcihwdHIsIGVuZCwgbnVtYmVyLCBza2lwKTsKK30KKwogYm9vbCBwYXJzZU51bWJlcihjb25z
dCBVQ2hhciomIHB0ciwgY29uc3QgVUNoYXIqIGVuZCwgZmxvYXQmIG51bWJlciwgYm9vbCBza2lw
KSAKIHsKICAgICByZXR1cm4gZ2VuZXJpY1BhcnNlTnVtYmVyKHB0ciwgZW5kLCBudW1iZXIsIHNr
aXApOwpAQCAtMTY4LDExICsxNzMsMTIgQEAgYm9vbCBwYXJzZU51bWJlckZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJgogCiAvLyBvbmx5IHVzZWQgdG8gcGFyc2UgbGFyZ2VBcmNGbGFnIGFuZCBzd2Vl
cEZsYWcgd2hpY2ggbXVzdCBiZSBhICIwIiBvciAiMSIKIC8vIGFuZCBtaWdodCBub3QgaGF2ZSBh
bnkgd2hpdGVzcGFjZS9jb21tYSBhZnRlciBpdAotYm9vbCBwYXJzZUFyY0ZsYWcoY29uc3QgVUNo
YXIqJiBwdHIsIGNvbnN0IFVDaGFyKiBlbmQsIGJvb2wmIGZsYWcpCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2hhcmFjdGVyVHlwZT4KK2Jvb2wgZ2VuZXJpY1BhcnNlQXJjRmxhZyhjb25zdCBDaGFyYWN0
ZXJUeXBlKiYgcHRyLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBlbmQsIGJvb2wmIGZsYWcpCiB7CiAg
ICAgaWYgKHB0ciA+PSBlbmQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjb25zdCBVQ2hh
ciBmbGFnQ2hhciA9ICpwdHIrKzsKKyAgICBjb25zdCBDaGFyYWN0ZXJUeXBlIGZsYWdDaGFyID0g
KnB0cisrOwogICAgIGlmIChmbGFnQ2hhciA9PSAnMCcpCiAgICAgICAgIGZsYWcgPSBmYWxzZTsK
ICAgICBlbHNlIGlmIChmbGFnQ2hhciA9PSAnMScpCkBAIC0xODUsNiArMTkxLDE2IEBAIGJvb2wg
cGFyc2VBcmNGbGFnKGNvbnN0IFVDaGFyKiYgcHRyLCBjb24KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorYm9vbCBwYXJzZUFyY0ZsYWcoY29uc3QgTENoYXIqJiBwdHIsIGNvbnN0IExDaGFyKiBlbmQs
IGJvb2wmIGZsYWcpCit7CisgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUFyY0ZsYWcocHRyLCBlbmQs
IGZsYWcpOworfQorCitib29sIHBhcnNlQXJjRmxhZyhjb25zdCBVQ2hhciomIHB0ciwgY29uc3Qg
VUNoYXIqIGVuZCwgYm9vbCYgZmxhZykKK3sKKyAgICByZXR1cm4gZ2VuZXJpY1BhcnNlQXJjRmxh
ZyhwdHIsIGVuZCwgZmxhZyk7Cit9CisKIGJvb2wgcGFyc2VOdW1iZXJPcHRpb25hbE51bWJlcihj
b25zdCBTdHJpbmcmIHMsIGZsb2F0JiB4LCBmbG9hdCYgeSkKIHsKICAgICBpZiAocy5pc0VtcHR5
KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oCShyZXZpc2lv
biAxNDA5MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDExIEBAIGNsYXNzIFNWR1BvaW50TGlzdDsKIAogdGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CiBib29sIHBhcnNlU1ZHTnVtYmVyKENoYXJh
Y3RlclR5cGUqIHB0ciwgc2l6ZV90IGxlbmd0aCwgZG91YmxlJiBudW1iZXIpOworYm9vbCBwYXJz
ZU51bWJlcihjb25zdCBMQ2hhciomIHB0ciwgY29uc3QgTENoYXIqIGVuZCwgZmxvYXQmIG51bWJl
ciwgYm9vbCBza2lwID0gdHJ1ZSk7CiBib29sIHBhcnNlTnVtYmVyKGNvbnN0IFVDaGFyKiYgcHRy
LCBjb25zdCBVQ2hhciogZW5kLCBmbG9hdCYgbnVtYmVyLCBib29sIHNraXAgPSB0cnVlKTsKIGJv
b2wgcGFyc2VOdW1iZXJGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYsIGZsb2F0JiBudW1iZXIsIGJv
b2wgc2tpcCA9IHRydWUpOwogYm9vbCBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0
cmluZyYgcywgZmxvYXQmIGgsIGZsb2F0JiB2KTsKK2Jvb2wgcGFyc2VBcmNGbGFnKGNvbnN0IExD
aGFyKiYgcHRyLCBjb25zdCBMQ2hhciogZW5kLCBib29sJiBmbGFnKTsKIGJvb2wgcGFyc2VBcmNG
bGFnKGNvbnN0IFVDaGFyKiYgcHRyLCBjb25zdCBVQ2hhciogZW5kLCBib29sJiBmbGFnKTsKIGJv
b2wgcGFyc2VSZWN0KGNvbnN0IFN0cmluZyYsIEZsb2F0UmVjdCYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aFNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoU291cmNlLmgJKHJldmlzaW9uIDE0MDkyOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDggQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGbG9hdFBvaW50OworCiBjbGFzcyBTVkdQYXRo
U291cmNlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTVkdQYXRoU291cmNlKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
UGF0aFN0cmluZ1NvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhTdHJpbmdTb3VyY2UuY3BwCShyZXZpc2lvbiAxNDA5MjkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDMxICsy
MiwxMDEgQEAKICNpZiBFTkFCTEUoU1ZHKQogI2luY2x1ZGUgIlNWR1BhdGhTdHJpbmdTb3VyY2Uu
aCIKIAorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRp
ZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KK3N0YXRpYyBib29sIHBhcnNlRmxvYXRQb2ludChjb25zdCBDaGFyYWN0ZXJUeXBl
KiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBGbG9hdFBvaW50JiBwb2ludCkK
K3sKKyAgICBmbG9hdCB4OworICAgIGZsb2F0IHk7CisgICAgaWYgKCFwYXJzZU51bWJlcihjdXJy
ZW50LCBlbmQsIHgpCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcG9pbnQgPSBGbG9hdFBvaW50KHgsIHkpOworICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0
YXRpYyBib29sIHBhcnNlRmxvYXRQb2ludDIoY29uc3QgQ2hhcmFjdGVyVHlwZSomIGN1cnJlbnQs
IGNvbnN0IENoYXJhY3RlclR5cGUqIGVuZCwgRmxvYXRQb2ludCYgcG9pbnQxLCBGbG9hdFBvaW50
JiBwb2ludDIpCit7CisgICAgZmxvYXQgeDE7CisgICAgZmxvYXQgeTE7CisgICAgZmxvYXQgeDI7
CisgICAgZmxvYXQgeTI7CisgICAgaWYgKCFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHgxKQor
ICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5MSkKKyAgICAgICAgfHwgIXBh
cnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDIpCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihjdXJy
ZW50LCBlbmQsIHkyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHBvaW50MSA9IEZsb2F0
UG9pbnQoeDEsIHkxKTsKKyAgICBwb2ludDIgPSBGbG9hdFBvaW50KHgyLCB5Mik7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgorc3RhdGlj
IGJvb2wgcGFyc2VGbG9hdFBvaW50Myhjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29u
c3QgQ2hhcmFjdGVyVHlwZSogZW5kLCBGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBv
aW50MiwgRmxvYXRQb2ludCYgcG9pbnQzKQoreworICAgIGZsb2F0IHgxOworICAgIGZsb2F0IHkx
OworICAgIGZsb2F0IHgyOworICAgIGZsb2F0IHkyOworICAgIGZsb2F0IHgzOworICAgIGZsb2F0
IHkzOworICAgIGlmICghcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB4MSkKKyAgICAgICAgfHwg
IXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeTEpCisgICAgICAgIHx8ICFwYXJzZU51bWJlcihj
dXJyZW50LCBlbmQsIHgyKQorICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB5
MikKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgeDMpCisgICAgICAgIHx8
ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIHkzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHBvaW50MSA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKKyAgICBwb2ludDIgPSBGbG9hdFBvaW50
KHgyLCB5Mik7CisgICAgcG9pbnQzID0gRmxvYXRQb2ludCh4MywgeTMpOworICAgIHJldHVybiB0
cnVlOworfQorCiBTVkdQYXRoU3RyaW5nU291cmNlOjpTVkdQYXRoU3RyaW5nU291cmNlKGNvbnN0
IFN0cmluZyYgc3RyaW5nKQogICAgIDogbV9zdHJpbmcoc3RyaW5nKQotICAgICwgbV9jdXJyZW50
KHN0cmluZy5jaGFyYWN0ZXJzKCkpCi0gICAgLCBtX2VuZChtX2N1cnJlbnQgKyBzdHJpbmcubGVu
Z3RoKCkpCisgICAgLCBtX2lzOEJpdFNvdXJjZShzdHJpbmcuaXM4Qml0KCkpCiB7CiAgICAgQVNT
RVJUKCFzdHJpbmcuaXNFbXB0eSgpKTsKKworICAgIGlmIChtX2lzOEJpdFNvdXJjZSkgeworICAg
ICAgICBtX2N1cnJlbnRDaGFyYWN0ZXI4ID0gc3RyaW5nLmNoYXJhY3RlcnM4KCk7CisgICAgICAg
IG1fZW5kQ2hhcmFjdGVyOCA9IG1fY3VycmVudENoYXJhY3RlcjggKyBzdHJpbmcubGVuZ3RoKCk7
CisgICAgICAgIG1fY3VycmVudENoYXJhY3RlcjE2ID0gMDsKKyAgICAgICAgbV9lbmRDaGFyYWN0
ZXIxNiA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyOCA9IDA7
CisgICAgICAgIG1fZW5kQ2hhcmFjdGVyOCA9IDA7CisgICAgICAgIG1fY3VycmVudENoYXJhY3Rl
cjE2ID0gc3RyaW5nLmNoYXJhY3RlcnMxNigpOworICAgICAgICBtX2VuZENoYXJhY3RlcjE2ID0g
bV9jdXJyZW50Q2hhcmFjdGVyMTYgKyBzdHJpbmcubGVuZ3RoKCk7CisgICAgfQogfQogCiBib29s
IFNWR1BhdGhTdHJpbmdTb3VyY2U6Omhhc01vcmVEYXRhKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9jdXJyZW50IDwgbV9lbmQ7CisgICAgaWYgKG1faXM4Qml0U291cmNlKQorICAgICAgICByZXR1
cm4gbV9jdXJyZW50Q2hhcmFjdGVyOCA8IG1fZW5kQ2hhcmFjdGVyODsKKyAgICBlbHNlCisgICAg
ICAgIHJldHVybiBtX2N1cnJlbnRDaGFyYWN0ZXIxNiA8IG1fZW5kQ2hhcmFjdGVyMTY7CiB9CiAK
IGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6bW92ZVRvTmV4dFRva2VuKCkKIHsKLSAgICByZXR1
cm4gc2tpcE9wdGlvbmFsU1ZHU3BhY2VzKG1fY3VycmVudCwgbV9lbmQpOworICAgIGlmIChtX2lz
OEJpdFNvdXJjZSkKKyAgICAgICAgcmV0dXJuIHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX2N1cnJl
bnRDaGFyYWN0ZXI4LCBtX2VuZENoYXJhY3RlcjgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IHNraXBPcHRpb25hbFNWR1NwYWNlcyhtX2N1cnJlbnRDaGFyYWN0ZXIxNiwgbV9lbmRDaGFyYWN0
ZXIxNik7CiB9CiAKLWJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VTVkdTZWdtZW50VHlw
ZShTVkdQYXRoU2VnVHlwZSYgcGF0aFNlZ1R5cGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KK3N0YXRpYyBib29sIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIoY29uc3QgQ2hh
cmFjdGVyVHlwZSomIGN1cnJlbnQsIFNWR1BhdGhTZWdUeXBlJiBwYXRoU2VnVHlwZSkKIHsKLSAg
ICBzd2l0Y2ggKCoobV9jdXJyZW50KyspKSB7CisgICAgc3dpdGNoICgqKGN1cnJlbnQrKykpIHsK
ICAgICBjYXNlICdaJzoKICAgICBjYXNlICd6JzoKICAgICAgICAgcGF0aFNlZ1R5cGUgPSBQYXRo
U2VnQ2xvc2VQYXRoOwpAQCAtMTExLDE3ICsxODEsNDcgQEAgYm9vbCBTVkdQYXRoU3RyaW5nU291
cmNlOjpwYXJzZVNWR1NlZ21lbgogICAgIHJldHVybiB0cnVlOwogfQogCi1TVkdQYXRoU2VnVHlw
ZSBTVkdQYXRoU3RyaW5nU291cmNlOjpuZXh0Q29tbWFuZChTVkdQYXRoU2VnVHlwZSBwcmV2aW91
c0NvbW1hbmQpCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlU1ZHU2VnbWVudFR5cGUo
U1ZHUGF0aFNlZ1R5cGUmIHBhdGhTZWdUeXBlKQoreworICAgIGlmIChtX2lzOEJpdFNvdXJjZSkK
KyAgICAgICAgcmV0dXJuIHBhcnNlU1ZHU2VnbWVudFR5cGVIZWxwZXIobV9jdXJyZW50Q2hhcmFj
dGVyOCwgcGF0aFNlZ1R5cGUpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHBhcnNlU1ZHU2Vn
bWVudFR5cGVIZWxwZXIobV9jdXJyZW50Q2hhcmFjdGVyMTYsIHBhdGhTZWdUeXBlKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgYm9vbCBuZXh0Q29tbWFu
ZEhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgU1ZHUGF0aFNlZ1R5cGUgcHJl
dmlvdXNDb21tYW5kLCBTVkdQYXRoU2VnVHlwZSYgbmV4dENvbW1hbmQpCiB7CiAgICAgLy8gQ2hl
Y2sgZm9yIHJlbWFpbmluZyBjb29yZGluYXRlcyBpbiB0aGUgY3VycmVudCBjb21tYW5kLgotICAg
IGlmICgoKm1fY3VycmVudCA9PSAnKycgfHwgKm1fY3VycmVudCA9PSAnLScgfHwgKm1fY3VycmVu
dCA9PSAnLicgfHwgKCptX2N1cnJlbnQgPj0gJzAnICYmICptX2N1cnJlbnQgPD0gJzknKSkKKyAg
ICBpZiAoKCpjdXJyZW50ID09ICcrJyB8fCAqY3VycmVudCA9PSAnLScgfHwgKmN1cnJlbnQgPT0g
Jy4nIHx8ICgqY3VycmVudCA+PSAnMCcgJiYgKmN1cnJlbnQgPD0gJzknKSkKICAgICAgICAgJiYg
cHJldmlvdXNDb21tYW5kICE9IFBhdGhTZWdDbG9zZVBhdGgpIHsKLSAgICAgICAgaWYgKHByZXZp
b3VzQ29tbWFuZCA9PSBQYXRoU2VnTW92ZVRvQWJzKQotICAgICAgICAgICAgcmV0dXJuIFBhdGhT
ZWdMaW5lVG9BYnM7Ci0gICAgICAgIGlmIChwcmV2aW91c0NvbW1hbmQgPT0gUGF0aFNlZ01vdmVU
b1JlbCkKLSAgICAgICAgICAgIHJldHVybiBQYXRoU2VnTGluZVRvUmVsOwotICAgICAgICByZXR1
cm4gcHJldmlvdXNDb21tYW5kOworICAgICAgICBpZiAocHJldmlvdXNDb21tYW5kID09IFBhdGhT
ZWdNb3ZlVG9BYnMpIHsKKyAgICAgICAgICAgIG5leHRDb21tYW5kID0gUGF0aFNlZ0xpbmVUb0Fi
czsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChwcmV2
aW91c0NvbW1hbmQgPT0gUGF0aFNlZ01vdmVUb1JlbCkgeworICAgICAgICAgICAgbmV4dENvbW1h
bmQgPSBQYXRoU2VnTGluZVRvUmVsOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgbmV4dENvbW1hbmQgPSBwcmV2aW91c0NvbW1hbmQ7CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworU1ZHUGF0aFNlZ1R5cGUg
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6bmV4dENvbW1hbmQoU1ZHUGF0aFNlZ1R5cGUgcHJldmlvdXND
b21tYW5kKQoreworICAgIGlmIChtX2lzOEJpdFNvdXJjZSkgeworICAgICAgICBTVkdQYXRoU2Vn
VHlwZSBuZXh0Q29tbWFuZDsKKyAgICAgICAgaWYgKG5leHRDb21tYW5kSGVscGVyKG1fY3VycmVu
dENoYXJhY3RlcjgsIHByZXZpb3VzQ29tbWFuZCwgbmV4dENvbW1hbmQpKQorICAgICAgICAgICAg
cmV0dXJuIG5leHRDb21tYW5kOworICAgIH0gZWxzZSB7CisgICAgICAgIFNWR1BhdGhTZWdUeXBl
IG5leHRDb21tYW5kOworICAgICAgICBpZiAobmV4dENvbW1hbmRIZWxwZXIobV9jdXJyZW50Q2hh
cmFjdGVyMTYsIHByZXZpb3VzQ29tbWFuZCwgbmV4dENvbW1hbmQpKQorICAgICAgICAgICAgcmV0
dXJuIG5leHRDb21tYW5kOworICAgIH0KKwogICAgIFNWR1BhdGhTZWdUeXBlIG5leHRDb21tYW5k
OwogICAgIHBhcnNlU1ZHU2VnbWVudFR5cGUobmV4dENvbW1hbmQpOwogICAgIHJldHVybiBuZXh0
Q29tbWFuZDsKQEAgLTEyOSwxMTUgKzIyOSw5MyBAQCBTVkdQYXRoU2VnVHlwZSBTVkdQYXRoU3Ry
aW5nU291cmNlOjpuZXh0CiAKIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VNb3ZlVG9T
ZWdtZW50KEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQogewotICAgIGZsb2F0IHRvWDsKLSAgICBm
bG9hdCB0b1k7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpIHx8
ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAobV9pczhCaXRTb3VyY2UpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpw
YXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Q2hhcmFjdGVyOCwgbV9lbmRDaGFyYWN0ZXI4LCB0YXJn
ZXRQb2ludCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6cGFyc2VGbG9hdFBv
aW50KG1fY3VycmVudENoYXJhY3RlcjE2LCBtX2VuZENoYXJhY3RlcjE2LCB0YXJnZXRQb2ludCk7
CiB9CiAKIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9TZWdtZW50KEZsb2F0
UG9pbnQmIHRhcmdldFBvaW50KQogewotICAgIGZsb2F0IHRvWDsKLSAgICBmbG9hdCB0b1k7Ci0g
ICAgaWYgKCFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpIHx8ICFwYXJzZU51bWJl
cihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdGFy
Z2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9ZKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAobV9pczhCaXRTb3VyY2UpCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpwYXJzZUZsb2F0UG9p
bnQobV9jdXJyZW50Q2hhcmFjdGVyOCwgbV9lbmRDaGFyYWN0ZXI4LCB0YXJnZXRQb2ludCk7Cisg
ICAgZWxzZQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6cGFyc2VGbG9hdFBvaW50KG1fY3VycmVu
dENoYXJhY3RlcjE2LCBtX2VuZENoYXJhY3RlcjE2LCB0YXJnZXRQb2ludCk7CiB9CiAKIGJvb2wg
U1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCYg
eCkKIHsKLSAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgeCk7CisgICAg
aWYgKG1faXM4Qml0U291cmNlKQorICAgICAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50
Q2hhcmFjdGVyOCwgbV9lbmRDaGFyYWN0ZXI4LCB4KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVy
biBwYXJzZU51bWJlcihtX2N1cnJlbnRDaGFyYWN0ZXIxNiwgbV9lbmRDaGFyYWN0ZXIxNiwgeCk7
CiB9CiAKIGJvb2wgU1ZHUGF0aFN0cmluZ1NvdXJjZTo6cGFyc2VMaW5lVG9WZXJ0aWNhbFNlZ21l
bnQoZmxvYXQmIHkpCiB7Ci0gICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQs
IHkpOworICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKKyAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVy
KG1fY3VycmVudENoYXJhY3RlcjgsIG1fZW5kQ2hhcmFjdGVyOCwgeSk7CisgICAgZWxzZQorICAg
ICAgICByZXR1cm4gcGFyc2VOdW1iZXIobV9jdXJyZW50Q2hhcmFjdGVyMTYsIG1fZW5kQ2hhcmFj
dGVyMTYsIHkpOwogfQogCiBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1
YmljU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHBvaW50MiwgRmxvYXRQ
b2ludCYgdGFyZ2V0UG9pbnQpCiB7Ci0gICAgZmxvYXQgeDE7Ci0gICAgZmxvYXQgeTE7Ci0gICAg
ZmxvYXQgeDI7Ci0gICAgZmxvYXQgeTI7Ci0gICAgZmxvYXQgdG9YOwotICAgIGZsb2F0IHRvWTsK
LSAgICBpZiAoIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHgxKQotICAgICAgICB8fCAh
cGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgeTEpCi0gICAgICAgIHx8ICFwYXJzZU51bWJl
cihtX2N1cnJlbnQsIG1fZW5kLCB4MikKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVu
dCwgbV9lbmQsIHkyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwg
dG9YKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHBvaW50MSA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKLSAg
ICBwb2ludDIgPSBGbG9hdFBvaW50KHgyLCB5Mik7Ci0gICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBv
aW50KHRvWCwgdG9ZKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV9pczhCaXRTb3VyY2Up
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQzKG1fY3VycmVudENoYXJh
Y3RlcjgsIG1fZW5kQ2hhcmFjdGVyOCwgcG9pbnQxLCBwb2ludDIsIHRhcmdldFBvaW50KTsKKyAg
ICBlbHNlCisgICAgICAgIHJldHVybiBXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQzKG1fY3VycmVu
dENoYXJhY3RlcjE2LCBtX2VuZENoYXJhY3RlcjE2LCBwb2ludDEsIHBvaW50MiwgdGFyZ2V0UG9p
bnQpOwogfQogCiBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudChGbG9hdFBvaW50JiBwb2ludDEsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQog
ewotICAgIGZsb2F0IHgxOwotICAgIGZsb2F0IHkxOwotICAgIGZsb2F0IHRvWDsKLSAgICBmbG9h
dCB0b1k7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB4MSkKLSAgICAg
ICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHkxKQotICAgICAgICB8fCAhcGFy
c2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgdG9YKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIo
bV9jdXJyZW50LCBtX2VuZCwgdG9ZKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHBvaW50
MSA9IEZsb2F0UG9pbnQoeDEsIHkxKTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9pbnQodG9Y
LCB0b1kpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX2lzOEJpdFNvdXJjZSkKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OnBhcnNlRmxvYXRQb2ludDIobV9jdXJyZW50Q2hhcmFjdGVyOCwg
bV9lbmRDaGFyYWN0ZXI4LCBwb2ludDEsIHRhcmdldFBvaW50KTsKKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQyKG1fY3VycmVudENoYXJhY3RlcjE2LCBt
X2VuZENoYXJhY3RlcjE2LCBwb2ludDEsIHRhcmdldFBvaW50KTsKIH0KIAogYm9vbCBTVkdQYXRo
U3RyaW5nU291cmNlOjpwYXJzZUN1cnZlVG9RdWFkcmF0aWNTZWdtZW50KEZsb2F0UG9pbnQmIHBv
aW50MiwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCiB7Ci0gICAgZmxvYXQgeDI7Ci0gICAgZmxv
YXQgeTI7Ci0gICAgZmxvYXQgdG9YOwotICAgIGZsb2F0IHRvWTsKLSAgICBpZiAoIXBhcnNlTnVt
YmVyKG1fY3VycmVudCwgbV9lbmQsIHgyKQotICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJy
ZW50LCBtX2VuZCwgeTIpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5k
LCB0b1gpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1kpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcG9pbnQyID0gRmxvYXRQb2ludCh4MiwgeTIpOwot
ICAgIHRhcmdldFBvaW50ID0gRmxvYXRQb2ludCh0b1gsIHRvWSk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKG1faXM4Qml0U291cmNlKQorICAgICAgICByZXR1cm4gV2ViQ29yZTo6cGFyc2VG
bG9hdFBvaW50MihtX2N1cnJlbnRDaGFyYWN0ZXI4LCBtX2VuZENoYXJhY3RlcjgsIHBvaW50Miwg
dGFyZ2V0UG9pbnQpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OnBhcnNlRmxv
YXRQb2ludDIobV9jdXJyZW50Q2hhcmFjdGVyMTYsIG1fZW5kQ2hhcmFjdGVyMTYsIHBvaW50Miwg
dGFyZ2V0UG9pbnQpOwogfQogCiBib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBhcnNlQ3VydmVU
b1F1YWRyYXRpY1Ntb290aFNlZ21lbnQoRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCiB7Ci0gICAg
ZmxvYXQgdG9YOwotICAgIGZsb2F0IHRvWTsKLSAgICBpZiAoIXBhcnNlTnVtYmVyKG1fY3VycmVu
dCwgbV9lbmQsIHRvWCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQs
IHRvWSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB0YXJnZXRQb2ludCA9IEZsb2F0UG9p
bnQodG9YLCB0b1kpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmIChtX2lzOEJpdFNvdXJjZSkK
KyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OnBhcnNlRmxvYXRQb2ludChtX2N1cnJlbnRDaGFyYWN0
ZXI4LCBtX2VuZENoYXJhY3RlcjgsIHRhcmdldFBvaW50KTsKKyAgICBlbHNlCisgICAgICAgIHJl
dHVybiBXZWJDb3JlOjpwYXJzZUZsb2F0UG9pbnQobV9jdXJyZW50Q2hhcmFjdGVyMTYsIG1fZW5k
Q2hhcmFjdGVyMTYsIHRhcmdldFBvaW50KTsKIH0KIAotYm9vbCBTVkdQYXRoU3RyaW5nU291cmNl
OjpwYXJzZUFyY1RvU2VnbWVudChmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBi
b29sJiBsYXJnZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQordGVt
cGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgYm9vbCBwYXJzZUFyY1RvU2Vn
bWVudEhlbHBlcihjb25zdCBDaGFyYWN0ZXJUeXBlKiYgY3VycmVudCwgY29uc3QgQ2hhcmFjdGVy
VHlwZSogZW5kLCBmbG9hdCYgcngsIGZsb2F0JiByeSwgZmxvYXQmIGFuZ2xlLCBib29sJiBsYXJn
ZUFyYywgYm9vbCYgc3dlZXAsIEZsb2F0UG9pbnQmIHRhcmdldFBvaW50KQogewogICAgIGZsb2F0
IHRvWDsKICAgICBmbG9hdCB0b1k7Ci0gICAgaWYgKCFwYXJzZU51bWJlcihtX2N1cnJlbnQsIG1f
ZW5kLCByeCkKLSAgICAgICAgfHwgIXBhcnNlTnVtYmVyKG1fY3VycmVudCwgbV9lbmQsIHJ5KQot
ICAgICAgICB8fCAhcGFyc2VOdW1iZXIobV9jdXJyZW50LCBtX2VuZCwgYW5nbGUpCi0gICAgICAg
IHx8ICFwYXJzZUFyY0ZsYWcobV9jdXJyZW50LCBtX2VuZCwgbGFyZ2VBcmMpCi0gICAgICAgIHx8
ICFwYXJzZUFyY0ZsYWcobV9jdXJyZW50LCBtX2VuZCwgc3dlZXApCi0gICAgICAgIHx8ICFwYXJz
ZU51bWJlcihtX2N1cnJlbnQsIG1fZW5kLCB0b1gpCi0gICAgICAgIHx8ICFwYXJzZU51bWJlciht
X2N1cnJlbnQsIG1fZW5kLCB0b1kpKQorICAgIGlmICghcGFyc2VOdW1iZXIoY3VycmVudCwgZW5k
LCByeCkKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVuZCwgcnkpCisgICAgICAg
IHx8ICFwYXJzZU51bWJlcihjdXJyZW50LCBlbmQsIGFuZ2xlKQorICAgICAgICB8fCAhcGFyc2VB
cmNGbGFnKGN1cnJlbnQsIGVuZCwgbGFyZ2VBcmMpCisgICAgICAgIHx8ICFwYXJzZUFyY0ZsYWco
Y3VycmVudCwgZW5kLCBzd2VlcCkKKyAgICAgICAgfHwgIXBhcnNlTnVtYmVyKGN1cnJlbnQsIGVu
ZCwgdG9YKQorICAgICAgICB8fCAhcGFyc2VOdW1iZXIoY3VycmVudCwgZW5kLCB0b1kpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgdGFyZ2V0UG9pbnQgPSBGbG9hdFBvaW50KHRvWCwgdG9Z
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCitib29sIFNWR1BhdGhTdHJpbmdTb3VyY2U6OnBh
cnNlQXJjVG9TZWdtZW50KGZsb2F0JiByeCwgZmxvYXQmIHJ5LCBmbG9hdCYgYW5nbGUsIGJvb2wm
IGxhcmdlQXJjLCBib29sJiBzd2VlcCwgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQpCit7CisgICAg
aWYgKG1faXM4Qml0U291cmNlKQorICAgICAgICByZXR1cm4gcGFyc2VBcmNUb1NlZ21lbnRIZWxw
ZXIobV9jdXJyZW50Q2hhcmFjdGVyOCwgbV9lbmRDaGFyYWN0ZXI4LCByeCwgcnksIGFuZ2xlLCBs
YXJnZUFyYywgc3dlZXAsIHRhcmdldFBvaW50KTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBw
YXJzZUFyY1RvU2VnbWVudEhlbHBlcihtX2N1cnJlbnRDaGFyYWN0ZXIxNiwgbV9lbmRDaGFyYWN0
ZXIxNiwgcngsIHJ5LCBhbmdsZSwgbGFyZ2VBcmMsIHN3ZWVwLCB0YXJnZXRQb2ludCk7CiB9CiAK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaAkocmV2aXNpb24gMTQwOTI5KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBTVkdQYXRoU3RyaW5nU291cmNlX2gKIAogI2lm
IEVOQUJMRShTVkcpCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNWR1BhdGhT
b3VyY2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgpAQCAtNTQsOSArNTMsMTIgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgcGFyc2VBcmNUb1NlZ21lbnQoZmxvYXQmLCBmbG9hdCYsIGZsb2F0JiwgYm9vbCYsIGJvb2wm
LCBGbG9hdFBvaW50Jik7CiAKICAgICBTdHJpbmcgbV9zdHJpbmc7CisgICAgYm9vbCBtX2lzOEJp
dFNvdXJjZTsKIAotICAgIGNvbnN0IFVDaGFyKiBtX2N1cnJlbnQ7Ci0gICAgY29uc3QgVUNoYXIq
IG1fZW5kOworICAgIGNvbnN0IExDaGFyKiBtX2N1cnJlbnRDaGFyYWN0ZXI4OworICAgIGNvbnN0
IFVDaGFyKiBtX2N1cnJlbnRDaGFyYWN0ZXIxNjsKKyAgICBjb25zdCBMQ2hhciogbV9lbmRDaGFy
YWN0ZXI4OworICAgIGNvbnN0IFVDaGFyKiBtX2VuZENoYXJhY3RlcjE2OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="203834"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>