<?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>179952</bug_id>
          
          <creation_ts>2017-11-22 11:06:18 -0800</creation_ts>
          <short_desc>FEComponentTransfer cleanup and optimization</short_desc>
          <delta_ts>2017-11-22 22:49:23 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1374235</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-11-22 11:06:18 -0800</bug_when>
    <thetext>FEComponentTransfer cleanup and optimization</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374238</commentid>
    <comment_count>1</comment_count>
      <attachid>327462</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-11-22 11:11:04 -0800</bug_when>
    <thetext>Created attachment 327462
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374240</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-22 11:13:43 -0800</bug_when>
    <thetext>Attachment 327462 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:173:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:174:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:175:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:176:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:177:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:178:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:181:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:182:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:183:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
ERROR: Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:184:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 10 in 3 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>1374247</commentid>
    <comment_count>3</comment_count>
      <attachid>327462</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-22 11:23:56 -0800</bug_when>
    <thetext>Comment on attachment 327462
Patch

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

Not a huge fan of all the abbreviations here. I would say m_redFunction instead m_redFunc, and redTable instead of rTable, etc.

&gt; Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:73
&gt; +void FEComponentTransfer::computeIdentityTable(FEComponentTransfer::LookupTable, const ComponentTransferFunction&amp;)

Can just call it LookupTable because this is inside the declaration of a FEComponentTransfer member function.

&gt; Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:150
&gt; +        unsigned char c = data[pixelOffset];
&gt; +        data[pixelOffset] = rTable[c];

auto or uint8_t or do it in single lines without local variables so we don’t need all the comments:

    data[pixelOffset] = rTable[data[pixelOffset]];
    data[pixelOffset + 1] = gTable[data[pixelOffset + 1]];
    data[pixelOffset + 2] = bTable[data[pixelOffset + 2]];
    data[pixelOffset + 3] = aTable[data[pixelOffset + 3]];

&gt; Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:171
&gt; +    typedef void (*TransferType)(LookupTable, const ComponentTransferFunction&amp;);

We are using &quot;using&quot; these days:

    using TransferType = void (*)(LookupTable, const ComponentTransferFunction&amp;);

&gt; Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp:186
&gt; +    (*callEffect[m_redFunc.type])(rValues, m_redFunc);

I don’t think the (*x) is needed. Should just be able to call:

    callEffect[m_redFunc.type](rValues, m_redFunc);

&gt; Source/WebCore/platform/graphics/filters/FEComponentTransfer.h:76
&gt; +    typedef uint8_t LookupTable[lookupTableSize];

Better to use using. But even better to use std::array so the strangeness of C arrays doesn’t affect us so much. Then when you want to modify the table you have to pass LookupTable&amp; instead. And you can call size() instead of having a separate constant.

    using LookupTable = std::array&lt;uint8_t, 256&gt;;

&gt; Source/WebCore/platform/graphics/filters/FEComponentTransfer.h:78
&gt; +    static void computeIdentityTable(FEComponentTransfer::LookupTable, const ComponentTransferFunction&amp;);

Same here, no need to write FEComponentTransfer:: prefix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374340</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-11-22 22:48:25 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/225107/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374342</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-22 22:49:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/35672813&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327462</attachid>
            <date>2017-11-22 11:11:04 -0800</date>
            <delta_ts>2017-11-22 11:23:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179952-20171122111103.patch</filename>
            <type>text/plain</type>
            <size>12270</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1MDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTViMTlhYzBiODYxYTBj
MDE2MDJhNGMyODdiMjIzM2YwZDM5ZDkzOS4uOWZkMjViODY4YWFjYTA3MDQ2ZTlmNzQxNzM4N2Fm
YWI1ZmFiMGNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE3LTExLTIyICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIEZFQ29tcG9uZW50
VHJhbnNmZXIgY2xlYW51cCBhbmQgb3B0aW1pemF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk5NTIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGFuZ2UgdGVybWlub2xvZ3kgZm9yIEZFQ29tcG9u
ZW50VHJhbnNmZXIgdG8gYmUgbW9yZSBleHBsaWNpdCBhYm91dCB0aGUgZmFjdAorICAgICAgICB0
aGF0IGl0J3MgY3JlYXRpbmcgYW5kIHVzaW5nIGxvb2t1cCB0YWJsZXMuIFVzZSBhIHR5cGVkZWYg
Zm9yIHRoZSB1aW50OF90WzI1Nl0gdHlwZS4KKyAgICAgICAgCisgICAgICAgIFVzZSB1aW50OF90
IGluc3RlYWQgb2YgdW5zaWduZWQgY2hhci4KKyAgICAgICAgCisgICAgICAgIEF2b2lkIGNvbmZ1
c2luZyBhcnJheXMgZm9yIGNoYW5uZWxzIGluIGNvbXB1dGVMb29rdXBUYWJsZXM7IGp1c3Qgc2V0
dXAgdGhlIGx1dCBmb3IKKyAgICAgICAgZWFjaCBjaGFubmVsIG1hbnVhbGx5LgorICAgICAgICAK
KyAgICAgICAgVGhpcyBpcyBhYm91dCAxLjI1eCBmYXN0ZXIgdGhhbiBiZWZvcmUuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlkZW50aXR5VGFi
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZVRhYnVs
YXJUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRl
RGlzY3JldGVUYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpj
b21wdXRlTGluZWFyVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFuc2Zl
cjo6Y29tcHV0ZUdhbW1hVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRUcmFu
c2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29tcG9u
ZW50VHJhbnNmZXI6OmNvbXB1dGVMb29rdXBUYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjppZGVudGl0eSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjp0YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkaXNjcmV0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpsaW5lYXIpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Z2FtbWEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25lbnRU
cmFuc2Zlcjo6Z2V0VmFsdWVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb246OkNvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24pOiBEZWxldGVk
LgorCiAyMDE3LTExLTIxICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIFNvbWUgRkVMaWdodGluZyBjbGVhbnVwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmNwcAppbmRleCA1MzA4MmI2ZGQzYzE1YWZiNzQxNTc5YWY4ZTExM2NhOGJlMzEwYjUyLi5j
MmFmNzBjZGY2MjJlZDUxNzRjNGVlYjg4YzJmYWE1NGMyNzA0ZGFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b25lbnRUcmFuc2Zlci5jcHAKQEAgLTM0LDggKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi10eXBlZGVmIHZvaWQgKCpUcmFuc2ZlclR5cGUpKHVuc2lnbmVkIGNoYXIqLCBjb25zdCBD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7Ci0KIEZFQ29tcG9uZW50VHJhbnNmZXI6OkZFQ29t
cG9uZW50VHJhbnNmZXIoRmlsdGVyJiBmaWx0ZXIsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIHJlZEZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGdyZWVuRnVu
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbiYgYmx1ZUZ1bmMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mIGFscGhhRnVuYykKICAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIpCkBAIC03Miw1OCAr
NzAsNTggQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpzZXRBbHBoYUZ1bmN0aW9uKGNvbnN0
IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmMKICAgICBtX2FscGhhRnVuYyA9IGZ1bmM7
CiB9CiAKLXN0YXRpYyB2b2lkIGlkZW50aXR5KHVuc2lnbmVkIGNoYXIqLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJikKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUlk
ZW50aXR5VGFibGUoRkVDb21wb25lbnRUcmFuc2Zlcjo6TG9va3VwVGFibGUsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mKQogewogfQogCi1zdGF0aWMgdm9pZCB0YWJsZSh1bnNpZ25l
ZCBjaGFyKiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVy
RnVuY3Rpb24pCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVUYWJ1bGFyVGFibGUo
RkVDb21wb25lbnRUcmFuc2Zlcjo6TG9va3VwVGFibGUgdmFsdWVzLCBjb25zdCBDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQogewogICAgIGNvbnN0IFZlY3Rvcjxm
bG9hdD4mIHRhYmxlVmFsdWVzID0gdHJhbnNmZXJGdW5jdGlvbi50YWJsZVZhbHVlczsKICAgICB1
bnNpZ25lZCBuID0gdGFibGVWYWx1ZXMuc2l6ZSgpOwogICAgIGlmIChuIDwgMSkKICAgICAgICAg
cmV0dXJuOyAgICAgICAgICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7ICsr
aSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsb29rdXBUYWJsZVNpemU7ICsraSkg
ewogICAgICAgICBkb3VibGUgYyA9IGkgLyAyNTUuMDsgICAgICAgICAgICAgICAgCiAgICAgICAg
IHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYyAqIChuIC0gMSkpOwogICAgICAg
ICBkb3VibGUgdjEgPSB0YWJsZVZhbHVlc1trXTsKICAgICAgICAgZG91YmxlIHYyID0gdGFibGVW
YWx1ZXNbc3RkOjptaW4oKGsgKyAxKSwgKG4gLSAxKSldOwogICAgICAgICBkb3VibGUgdmFsID0g
MjU1LjAgKiAodjEgKyAoYyAqIChuIC0gMSkgLSBrKSAqICh2MiAtIHYxKSk7CiAgICAgICAgIHZh
bCA9IHN0ZDo6bWF4KDAuMCwgc3RkOjptaW4oMjU1LjAsIHZhbCkpOwotICAgICAgICB2YWx1ZXNb
aV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih2YWwpOworICAgICAgICB2YWx1ZXNbaV0g
PSBzdGF0aWNfY2FzdDx1aW50OF90Pih2YWwpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgZGlz
Y3JldGUodW5zaWduZWQgY2hhciogdmFsdWVzLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQordm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpjb21wdXRl
RGlzY3JldGVUYWJsZShGRUNvbXBvbmVudFRyYW5zZmVyOjpMb29rdXBUYWJsZSB2YWx1ZXMsIGNv
bnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7CiAgICAg
Y29uc3QgVmVjdG9yPGZsb2F0PiYgdGFibGVWYWx1ZXMgPSB0cmFuc2ZlckZ1bmN0aW9uLnRhYmxl
VmFsdWVzOwogICAgIHVuc2lnbmVkIG4gPSB0YWJsZVZhbHVlcy5zaXplKCk7CiAgICAgaWYgKG4g
PCAxKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1Njsg
KytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb2t1cFRhYmxlU2l6ZTsgKytp
KSB7CiAgICAgICAgIHVuc2lnbmVkIGsgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oKGkgKiBuKSAv
IDI1NS4wKTsKICAgICAgICAgayA9IHN0ZDo6bWluKGssIG4gLSAxKTsKICAgICAgICAgZG91Ymxl
IHZhbCA9IDI1NSAqIHRhYmxlVmFsdWVzW2tdOwogICAgICAgICB2YWwgPSBzdGQ6Om1heCgwLjAs
IHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4odmFsKTsKKyAgICAgICAgdmFsdWVzW2ldID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4odmFsKTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmVhcih1bnNpZ25lZCBjaGFy
KiB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rp
b24pCit2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmNvbXB1dGVMaW5lYXJUYWJsZShGRUNvbXBv
bmVudFRyYW5zZmVyOjpMb29rdXBUYWJsZSB2YWx1ZXMsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mIHRyYW5zZmVyRnVuY3Rpb24pCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IDI1NjsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb2t1cFRhYmxl
U2l6ZTsgKytpKSB7CiAgICAgICAgIGRvdWJsZSB2YWwgPSB0cmFuc2ZlckZ1bmN0aW9uLnNsb3Bl
ICogaSArIDI1NSAqIHRyYW5zZmVyRnVuY3Rpb24uaW50ZXJjZXB0OwogICAgICAgICB2YWwgPSBz
dGQ6Om1heCgwLjAsIHN0ZDo6bWluKDI1NS4wLCB2YWwpKTsKLSAgICAgICAgdmFsdWVzW2ldID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odmFsKTsKKyAgICAgICAgdmFsdWVzW2ldID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4odmFsKTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGdhbW1hKHVu
c2lnbmVkIGNoYXIqIHZhbHVlcywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgdHJh
bnNmZXJGdW5jdGlvbikKK3ZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUdhbW1hVGFi
bGUoRkVDb21wb25lbnRUcmFuc2Zlcjo6TG9va3VwVGFibGUgdmFsdWVzLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJiB0cmFuc2ZlckZ1bmN0aW9uKQogewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAyNTY7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
b29rdXBUYWJsZVNpemU7ICsraSkgewogICAgICAgICBkb3VibGUgZXhwb25lbnQgPSB0cmFuc2Zl
ckZ1bmN0aW9uLmV4cG9uZW50OyAvLyBSQ1ZUIGRvZXNuJ3QgbGlrZSBwYXNzaW5nIGEgZG91Ymxl
IGFuZCBhIGZsb2F0IHRvIHBvdywgc28gcHJvbW90ZSB0aGlzIHRvIGRvdWJsZQogICAgICAgICBk
b3VibGUgdmFsID0gMjU1LjAgKiAodHJhbnNmZXJGdW5jdGlvbi5hbXBsaXR1ZGUgKiBwb3coKGkg
LyAyNTUuMCksIGV4cG9uZW50KSArIHRyYW5zZmVyRnVuY3Rpb24ub2Zmc2V0KTsKICAgICAgICAg
dmFsID0gc3RkOjptYXgoMC4wLCBzdGQ6Om1pbigyNTUuMCwgdmFsKSk7Ci0gICAgICAgIHZhbHVl
c1tpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHZhbCk7CisgICAgICAgIHZhbHVlc1tp
XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHZhbCk7CiAgICAgfQogfQogCkBAIC0xMzUsMzggKzEz
Myw2MyBAQCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBj
aGFyIHJWYWx1ZXNbMjU2XSwgZ1ZhbHVlc1syNTZdLCBiVmFsdWVzWzI1Nl0sIGFWYWx1ZXNbMjU2
XTsKLSAgICBnZXRWYWx1ZXMoclZhbHVlcywgZ1ZhbHVlcywgYlZhbHVlcywgYVZhbHVlcyk7Ci0g
ICAgdW5zaWduZWQgY2hhciogdGFibGVzW10gPSB7IHJWYWx1ZXMsIGdWYWx1ZXMsIGJWYWx1ZXMs
IGFWYWx1ZXMgfTsKKyAgICBMb29rdXBUYWJsZSByVGFibGU7CisgICAgTG9va3VwVGFibGUgZ1Rh
YmxlOworICAgIExvb2t1cFRhYmxlIGJUYWJsZTsKKyAgICBMb29rdXBUYWJsZSBhVGFibGU7Cisg
ICAgY29tcHV0ZUxvb2t1cFRhYmxlcyhyVGFibGUsIGdUYWJsZSwgYlRhYmxlLCBhVGFibGUpOwog
CiAgICAgSW50UmVjdCBkcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURh
dGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwogICAgIGluLT5jb3B5VW5tdWx0aXBsaWVkSW1h
Z2UocGl4ZWxBcnJheSwgZHJhd2luZ1JlY3QpOwogCiAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxl
bmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBw
aXhlbEFycmF5LT5kYXRhKCk7CisgICAgdWludDhfdCogZGF0YSA9IHBpeGVsQXJyYXktPmRhdGEo
KTsKICAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhl
bEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
Y2hhbm5lbCA9IDA7IGNoYW5uZWwgPCA0OyArK2NoYW5uZWwpIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYyA9IGRhdGFbcGl4ZWxPZmZzZXQgKyBjaGFubmVsXTsKLSAgICAgICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyBjaGFubmVsXSA9IHRhYmxlc1tjaGFubmVsXVtjXTsKLSAgICAgICAg
fQorICAgICAgICAvLyByZWQKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gZGF0YVtwaXhlbE9m
ZnNldF07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXRdID0gclRhYmxlW2NdOworCisgICAgICAg
IC8vIGdyZWVuCisgICAgICAgIGMgPSBkYXRhW3BpeGVsT2Zmc2V0ICsgMV07CisgICAgICAgIGRh
dGFbcGl4ZWxPZmZzZXQgKyAxXSA9IGdUYWJsZVtjXTsKKworICAgICAgICAvLyBibHVlCisgICAg
ICAgIGMgPSBkYXRhW3BpeGVsT2Zmc2V0ICsgMl07CisgICAgICAgIGRhdGFbcGl4ZWxPZmZzZXQg
KyAyXSA9IGJUYWJsZVtjXTsKKworICAgICAgICAvLyBhbHBoYQorICAgICAgICBjID0gZGF0YVtw
aXhlbE9mZnNldCArIDNdOworICAgICAgICBkYXRhW3BpeGVsT2Zmc2V0ICsgM10gPSBhVGFibGVb
Y107CiAgICAgfQogfQogCi12b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OmdldFZhbHVlcyh1bnNp
Z25lZCBjaGFyIHJWYWx1ZXNbMjU2XSwgdW5zaWduZWQgY2hhciBnVmFsdWVzWzI1Nl0sIHVuc2ln
bmVkIGNoYXIgYlZhbHVlc1syNTZdLCB1bnNpZ25lZCBjaGFyIGFWYWx1ZXNbMjU2XSkKK3ZvaWQg
RkVDb21wb25lbnRUcmFuc2Zlcjo6Y29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSByVmFs
dWVzLCBMb29rdXBUYWJsZSBnVmFsdWVzLCBMb29rdXBUYWJsZSBiVmFsdWVzLCBMb29rdXBUYWJs
ZSBhVmFsdWVzKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7ICsraSkKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbG9va3VwVGFibGVTaXplOyArK2kpCiAgICAgICAg
IHJWYWx1ZXNbaV0gPSBnVmFsdWVzW2ldID0gYlZhbHVlc1tpXSA9IGFWYWx1ZXNbaV0gPSBpOwot
ICAgIHVuc2lnbmVkIGNoYXIqIHRhYmxlc1tdID0geyByVmFsdWVzLCBnVmFsdWVzLCBiVmFsdWVz
LCBhVmFsdWVzIH07Ci0gICAgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0
aW9uW10gPSB7bV9yZWRGdW5jLCBtX2dyZWVuRnVuYywgbV9ibHVlRnVuYywgbV9hbHBoYUZ1bmN9
OwotICAgIFRyYW5zZmVyVHlwZSBjYWxsRWZmZWN0W10gPSB7aWRlbnRpdHksIGlkZW50aXR5LCB0
YWJsZSwgZGlzY3JldGUsIGxpbmVhciwgZ2FtbWF9OwogCi0gICAgZm9yICh1bnNpZ25lZCBjaGFu
bmVsID0gMDsgY2hhbm5lbCA8IDQ7IGNoYW5uZWwrKykgewotICAgICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KHRyYW5zZmVyRnVuY3Rpb25b
Y2hhbm5lbF0udHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKLSAgICAgICAg
KCpjYWxsRWZmZWN0W3RyYW5zZmVyRnVuY3Rpb25bY2hhbm5lbF0udHlwZV0pKHRhYmxlc1tjaGFu
bmVsXSwgdHJhbnNmZXJGdW5jdGlvbltjaGFubmVsXSk7Ci0gICAgfQorICAgIHR5cGVkZWYgdm9p
ZCAoKlRyYW5zZmVyVHlwZSkoTG9va3VwVGFibGUsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24mKTsKKyAgICBUcmFuc2ZlclR5cGUgY2FsbEVmZmVjdFtdID0geworICAgICAgICBjb21w
dXRlSWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVU5LTk9XTgor
ICAgICAgICBjb21wdXRlSWRlbnRpdHlUYWJsZSwgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfSURFTlRJVFkKKyAgICAgICAgY29tcHV0ZVRhYnVsYXJUYWJsZSwgICAgLy8gRkVDT01QT05F
TlRUUkFOU0ZFUl9UWVBFX1RBQkxFCisgICAgICAgIGNvbXB1dGVEaXNjcmV0ZVRhYmxlLCAgIC8v
IEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVURQorICAgICAgICBjb21wdXRlTGluZWFy
VGFibGUsICAgICAvLyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSCisgICAgICAgIGNv
bXB1dGVHYW1tYVRhYmxlICAgICAgIC8vIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9HQU1NQQor
ICAgIH07CisKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2Fz
dDxzaXplX3Q+KG1fcmVkRnVuYy50eXBlKSA8IFdURl9BUlJBWV9MRU5HVEgoY2FsbEVmZmVjdCkp
OworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHN0YXRpY19jYXN0PHNpemVf
dD4obV9ncmVlbkZ1bmMudHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1f
Ymx1ZUZ1bmMudHlwZSkgPCBXVEZfQVJSQVlfTEVOR1RIKGNhbGxFZmZlY3QpKTsKKyAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDxzaXplX3Q+KG1fYWxwaGFG
dW5jLnR5cGUpIDwgV1RGX0FSUkFZX0xFTkdUSChjYWxsRWZmZWN0KSk7CisKKyAgICAoKmNhbGxF
ZmZlY3RbbV9yZWRGdW5jLnR5cGVdKShyVmFsdWVzLCBtX3JlZEZ1bmMpOworICAgICgqY2FsbEVm
ZmVjdFttX2dyZWVuRnVuYy50eXBlXSkoZ1ZhbHVlcywgbV9ncmVlbkZ1bmMpOworICAgICgqY2Fs
bEVmZmVjdFttX2JsdWVGdW5jLnR5cGVdKShiVmFsdWVzLCBtX2JsdWVGdW5jKTsKKyAgICAoKmNh
bGxFZmZlY3RbbV9hbHBoYUZ1bmMudHlwZV0pKGFWYWx1ZXMsIG1fYWxwaGFGdW5jKTsKIH0KIAot
c3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbXBv
bmVudFRyYW5zZmVyVHlwZSYgdHlwZSkKK3N0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRl
eHRTdHJlYW0mIHRzLCBDb21wb25lbnRUcmFuc2ZlclR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICBjYXNlIEZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuaAppbmRleCBmZjNkM2Y3YTI0NTY1ZDY1YzU5OGNjZjhlMzRj
ZDQzOGRmZWM4ODA4Li4zZjMxOGExNDg2NzI5MTYyZGUxYWMxNTBhNjFlYzI0YzRmZWM4YzAwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaApAQCAtMzgsMjMgKzM4LDE1IEBAIGVudW0gQ29t
cG9uZW50VHJhbnNmZXJUeXBlIHsKIH07CiAKIHN0cnVjdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uIHsKLSAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKCkKLSAgICAgICAgOiB0eXBlKEZF
Q09NUE9ORU5UVFJBTlNGRVJfVFlQRV9VTktOT1dOKQotICAgICAgICAsIHNsb3BlKDApCi0gICAg
ICAgICwgaW50ZXJjZXB0KDApCi0gICAgICAgICwgYW1wbGl0dWRlKDApCi0gICAgICAgICwgZXhw
b25lbnQoMCkKLSAgICAgICAgLCBvZmZzZXQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgQ29tcG9u
ZW50VHJhbnNmZXJUeXBlIHR5cGU7Ci0KLSAgICBmbG9hdCBzbG9wZTsKLSAgICBmbG9hdCBpbnRl
cmNlcHQ7Ci0gICAgZmxvYXQgYW1wbGl0dWRlOwotICAgIGZsb2F0IGV4cG9uZW50OwotICAgIGZs
b2F0IG9mZnNldDsKKyAgICBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uKCkgPSBkZWZhdWx0Owor
CisgICAgQ29tcG9uZW50VHJhbnNmZXJUeXBlIHR5cGUgeyBGRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfVU5LTk9XTiB9OworCisgICAgZmxvYXQgc2xvcGUgeyAwIH07CisgICAgZmxvYXQgaW50ZXJj
ZXB0IHsgMCB9OworICAgIGZsb2F0IGFtcGxpdHVkZSB7IDAgfTsKKyAgICBmbG9hdCBleHBvbmVu
dCB7IDAgfTsKKyAgICBmbG9hdCBvZmZzZXQgeyAwIH07CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHRh
YmxlVmFsdWVzOwogfTsKQEAgLTgwLDcgKzcyLDE2IEBAIHByaXZhdGU6CiAgICAgRkVDb21wb25l
bnRUcmFuc2ZlcihGaWx0ZXImLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiByZWRG
dW5jLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBncmVlbkZ1bmMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBibHVlRnVu
YywgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgYWxwaGFGdW5jKTsKIAotICAgIHZv
aWQgZ2V0VmFsdWVzKHVuc2lnbmVkIGNoYXIgclZhbHVlc1syNTZdLCB1bnNpZ25lZCBjaGFyIGdW
YWx1ZXNbMjU2XSwgdW5zaWduZWQgY2hhciBiVmFsdWVzWzI1Nl0sIHVuc2lnbmVkIGNoYXIgYVZh
bHVlc1syNTZdKTsKKyAgICBzdGF0aWMgY29uc3QgaW50IGxvb2t1cFRhYmxlU2l6ZSA9IDI1NjsK
KyAgICB0eXBlZGVmIHVpbnQ4X3QgTG9va3VwVGFibGVbbG9va3VwVGFibGVTaXplXTsKKworICAg
IHN0YXRpYyB2b2lkIGNvbXB1dGVJZGVudGl0eVRhYmxlKEZFQ29tcG9uZW50VHJhbnNmZXI6Okxv
b2t1cFRhYmxlLCBjb25zdCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGlj
IHZvaWQgY29tcHV0ZVRhYnVsYXJUYWJsZShGRUNvbXBvbmVudFRyYW5zZmVyOjpMb29rdXBUYWJs
ZSwgY29uc3QgQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYpOworICAgIHN0YXRpYyB2b2lkIGNv
bXB1dGVEaXNjcmV0ZVRhYmxlKEZFQ29tcG9uZW50VHJhbnNmZXI6Okxvb2t1cFRhYmxlLCBjb25z
dCBDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUxp
bmVhclRhYmxlKEZFQ29tcG9uZW50VHJhbnNmZXI6Okxvb2t1cFRhYmxlLCBjb25zdCBDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uJik7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZUdhbW1hVGFibGUo
RkVDb21wb25lbnRUcmFuc2Zlcjo6TG9va3VwVGFibGUsIGNvbnN0IENvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb24mKTsKKworICAgIHZvaWQgY29tcHV0ZUxvb2t1cFRhYmxlcyhMb29rdXBUYWJsZSBy
ZWRUYWJsZSwgTG9va3VwVGFibGUgZ3JlZW5UYWJsZSwgTG9va3VwVGFibGUgYmx1ZVRhYmxlLCBM
b29rdXBUYWJsZSBhbHBoYVRhYmxlKTsKIAogICAgIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkgb3ZlcnJpZGU7CiAK
</data>
<flag name="review"
          id="346688"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>