<?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>139034</bug_id>
          
          <creation_ts>2014-11-24 14:44:57 -0800</creation_ts>
          <short_desc>Avoid String concatenation with line break iterator</short_desc>
          <delta_ts>2014-11-24 16:23:51 -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>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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1050891</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-24 14:44:57 -0800</bug_when>
    <thetext>Use LazyLineBreakIterator::setPriorContext to move between segments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050892</commentid>
    <comment_count>1</comment_count>
      <attachid>242174</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-24 14:53:43 -0800</bug_when>
    <thetext>Created attachment 242174
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050901</commentid>
    <comment_count>2</comment_count>
      <attachid>242174</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-11-24 15:36:00 -0800</bug_when>
    <thetext>Comment on attachment 242174
patch

Looks good. r=me(provided there&apos;s no significant performance hit with the iterator change)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050919</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-24 16:22:58 -0800</bug_when>
    <thetext>https://trac.webkit.org/r176528</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050920</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-24 16:23:51 -0800</bug_when>
    <thetext>line-layout-long-long-text.html went from

    mean: 80.41964673536093 runs/s
    median: 80.5499174535072 runs/s
    stdev: 0.6590877774334845 runs/s
    min: 78.8112513308298 runs/s
    max: 81.26653108623233 runs/s

to

    mean: 87.01240050592219 runs/s
    median: 87.00959276489445 runs/s
    stdev: 0.38577332225810396 runs/s
    min: 86.46174424670227 runs/s
    max: 87.5463699183578 runs/s</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242174</attachid>
            <date>2014-11-24 14:53:43 -0800</date>
            <delta_ts>2014-11-24 15:36:00 -0800</delta_ts>
            <desc>patch</desc>
            <filename>simple-line-linebreak-refactor.patch</filename>
            <type>text/plain</type>
            <size>14229</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NjUyNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE0LTExLTI0ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCBTdHJpbmcgY29uY2F0
ZW5hdGlvbiB3aXRoIGxpbmUgYnJlYWsgaXRlcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTAzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IGZhc3QvdGV4dC9zaW1wbGUtbGluZXMtbXVs
dGlwbGUtcmVuZGVyZXJzLWJyZWFrLmh0bWwKKworICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OmluaXRpYWxpemVTZWdtZW50cyk6CisKKyAgICAgICAgICAgIEluY2x1ZGUgU3RyaW5n
IHRvbyBzbyBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgZmV0Y2hlZCBmcm9tIHRoZSByZW5kZXJlci4K
KworICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjpGbG93
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRl
bnRzOjpmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uKToKKworICAgICAgICAgICAgTWFrZSB0aGlz
IGl0ZXJhdGl2ZSBpbnN0ZWFkIG9mIHJlY3Vyc2l2ZS4KKyAgICAgICAgICAgIFVzZXQgc2V0UHJp
b3JDb250ZXh0IHRvIHByb3ZpZGUgcHJldmlvdXMgY2hhcmFjdGVycyBpbnN0ZWFkIG9mIGNvbmNh
dGVuYXRpbmcKKyAgICAgICAgICAgIHRoZSBzdHJpbmcgZnJvbSBhbGwgdGhlIHByZXZpb3VzIHNl
Z21lbnRzLgorCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpmaW5kTmV4dE5v
bldoaXRlc3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0Nv
bnRlbnRzOjpmaW5kTmV4dE5vbldoaXRlc3BhY2VQb3NpdGlvbik6CisKKyAgICAgICAgICAgIFNl
YXJjaCB1c2luZyBzZWdtZW50cyBpbnN0ZWFkIG9mIHRoZSBjb25jYXRlbmF0ZWQgc3RyaW5nLgor
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6OnRleHRX
aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6
OnNlZ21lbnRJbmRleEZvclBvc2l0aW9uU2xvdyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVM
aW5lTGF5b3V0OjpGbG93Q29udGVudHM6OnJ1bldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50czo6c2VnbWVudEZvclBvc2l0aW9uU2xvdyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6
OmFwcGVuZE5leHRSZW5kZXJlckNvbnRlbnRJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93Q29udGVudHM6Om5leHROb25XaGl0ZXNwYWNl
UG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0
Rmxvd0NvbnRlbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpGbG93
Q29udGVudHM6OmNoYXJhY3RlckF0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OkZsb3dDb250ZW50czo6aXNOZXdsaW5lQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUxpbmVMYXlvdXQ6OkZsb3dDb250ZW50czo6c2VnbWVudEluZGV4Rm9yUG9zaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Rmxvd0NvbnRlbnRzOjpzZWdt
ZW50Rm9yUG9zaXRpb24pOgorCiAyMDE0LTExLTIyICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgTW92ZSB0aGUgJy13ZWJraXQtYm94LXJlZmxleHQnIENTUyBwcm9wZXJ0
eSB0byB0aGUgbmV3IFN0eWxlQnVpbGRlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXRGbG93Q29udGVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcAkocmV2aXNp
b24gMTc2NTEwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRG
bG93Q29udGVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHN0YXRpYyBW
ZWN0b3I8Rmxvd0NvbnRlbnRzOjpTZWdtZW50PiBpbmkKICAgICB1bnNpZ25lZCBzdGFydFBvc2l0
aW9uID0gMDsKICAgICBmb3IgKGF1dG8mIHRleHRDaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRl
clRleHQ+KGZsb3cpKSB7CiAgICAgICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSB0ZXh0Q2hpbGQu
dGV4dCgpLT5sZW5ndGgoKTsKLSAgICAgICAgc2VnbWVudHMuYXBwZW5kKEZsb3dDb250ZW50czo6
U2VnbWVudCB7IHN0YXJ0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24gKyB0ZXh0TGVuZ3RoLCB0ZXh0
Q2hpbGQgfSk7CisgICAgICAgIHNlZ21lbnRzLmFwcGVuZChGbG93Q29udGVudHM6OlNlZ21lbnQg
eyBzdGFydFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uICsgdGV4dExlbmd0aCwgdGV4dENoaWxkLnRl
eHQoKSwgdGV4dENoaWxkIH0pOwogICAgICAgICBzdGFydFBvc2l0aW9uICs9IHRleHRMZW5ndGg7
CiAgICAgfQogICAgIHJldHVybiBzZWdtZW50czsKQEAgLTYxLDI4ICs2MSw1NSBAQCBzdGF0aWMg
VmVjdG9yPEZsb3dDb250ZW50czo6U2VnbWVudD4gaW5pCiBGbG93Q29udGVudHM6OkZsb3dDb250
ZW50cyhjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCiAgICAgOiBtX3N0eWxlKGZsb3cuc3R5
bGUoKSkKICAgICAsIG1fc2VnbWVudHMoaW5pdGlhbGl6ZVNlZ21lbnRzKGZsb3cpKQotICAgICwg
bV9saW5lQnJlYWtJdGVyYXRvcihkb3duY2FzdDxSZW5kZXJUZXh0PigqZmxvdy5maXJzdENoaWxk
KCkpLnRleHQoKSwgZmxvdy5zdHlsZSgpLmxvY2FsZSgpKQorICAgICwgbV9saW5lQnJlYWtJdGVy
YXRvcihtX3NlZ21lbnRzWzBdLnRleHQsIGZsb3cuc3R5bGUoKS5sb2NhbGUoKSkKICAgICAsIG1f
bGFzdFNlZ21lbnRJbmRleCgwKQogewogfQogCiB1bnNpZ25lZCBGbG93Q29udGVudHM6OmZpbmRO
ZXh0QnJlYWthYmxlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgU3Ry
aW5nIHN0cmluZyA9IG1fbGluZUJyZWFrSXRlcmF0b3Iuc3RyaW5nKCk7Ci0gICAgdW5zaWduZWQg
YnJlYWthYmxlUG9zaXRpb24gPSBuZXh0QnJlYWthYmxlUG9zaXRpb25Ob25Mb29zZWx5PExDaGFy
LCBOQlNQQmVoYXZpb3I6Oklnbm9yZU5CU1A+KG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0cmluZy5j
aGFyYWN0ZXJzOCgpLCBzdHJpbmcubGVuZ3RoKCksIHBvc2l0aW9uKTsKLSAgICBpZiAoYXBwZW5k
TmV4dFJlbmRlcmVyQ29udGVudElmTmVlZGVkKGJyZWFrYWJsZVBvc2l0aW9uKSkKLSAgICAgICAg
cmV0dXJuIGZpbmROZXh0QnJlYWthYmxlUG9zaXRpb24ocG9zaXRpb24pOwotICAgIEFTU0VSVChi
cmVha2FibGVQb3NpdGlvbiA+PSBwb3NpdGlvbik7Ci0gICAgcmV0dXJuIGJyZWFrYWJsZVBvc2l0
aW9uOworICAgIHdoaWxlICghaXNFbmQocG9zaXRpb24pKSB7CisgICAgICAgIGF1dG8mIHNlZ21l
bnQgPSBzZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOworICAgICAgICBpZiAoc2VnbWVudC50
ZXh0LmltcGwoKSAhPSBtX2xpbmVCcmVha0l0ZXJhdG9yLnN0cmluZygpLmltcGwoKSkgeworICAg
ICAgICAgICAgVUNoYXIgbGFzdENoYXJhY3RlciA9IHNlZ21lbnQuc3RhcnQgPiAwID8gY2hhcmFj
dGVyQXQoc2VnbWVudC5zdGFydCAtIDEpIDogMDsKKyAgICAgICAgICAgIFVDaGFyIHNlY29uZFRv
TGFzdENoYXJhY3RlciA9IHNlZ21lbnQuc3RhcnQgPiAxID8gY2hhcmFjdGVyQXQoc2VnbWVudC5z
dGFydCAtIDIpIDogMDsKKyAgICAgICAgICAgIG1fbGluZUJyZWFrSXRlcmF0b3Iuc2V0UHJpb3JD
b250ZXh0KGxhc3RDaGFyYWN0ZXIsIHNlY29uZFRvTGFzdENoYXJhY3Rlcik7CisgICAgICAgICAg
ICBtX2xpbmVCcmVha0l0ZXJhdG9yLnJlc2V0U3RyaW5nQW5kUmVsZWFzZUl0ZXJhdG9yKHNlZ21l
bnQudGV4dCwgbV9zdHlsZS5sb2NhbGUsIExpbmVCcmVha0l0ZXJhdG9yTW9kZVVBWDE0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8qIGNoYXJhY3RlcnMgPSBzZWdtZW50LnRleHQuY2hhcmFj
dGVyczgoKTsKKyAgICAgICAgdW5zaWduZWQgc2VnbWVudExlbmd0aCA9IHNlZ21lbnQuZW5kIC0g
c2VnbWVudC5zdGFydDsKKyAgICAgICAgdW5zaWduZWQgc2VnbWVudFBvc2l0aW9uID0gcG9zaXRp
b24gLSBzZWdtZW50LnN0YXJ0OworICAgICAgICB1bnNpZ25lZCBicmVha2FibGUgPSBuZXh0QnJl
YWthYmxlUG9zaXRpb25Ob25Mb29zZWx5PExDaGFyLCBOQlNQQmVoYXZpb3I6Oklnbm9yZU5CU1A+
KG1fbGluZUJyZWFrSXRlcmF0b3IsIGNoYXJhY3RlcnMsIHNlZ21lbnRMZW5ndGgsIHNlZ21lbnRQ
b3NpdGlvbik7CisgICAgICAgIHBvc2l0aW9uID0gc2VnbWVudC5zdGFydCArIGJyZWFrYWJsZTsK
KyAgICAgICAgaWYgKHBvc2l0aW9uIDwgc2VnbWVudC5lbmQpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCitzdGF0aWMgYm9vbCBmaW5kTmV4dE5v
bldoaXRlc3BhY2UoY29uc3QgRmxvd0NvbnRlbnRzOjpTZWdtZW50JiBzZWdtZW50LCBjb25zdCBG
bG93Q29udGVudHM6OlN0eWxlJiBzdHlsZSwgdW5zaWduZWQmIHBvc2l0aW9uLCB1bnNpZ25lZCYg
c3BhY2VDb3VudCkKK3sKKyAgICBjb25zdCBMQ2hhciogdGV4dCA9IHNlZ21lbnQudGV4dC5jaGFy
YWN0ZXJzOCgpOworICAgIGZvciAoOyBwb3NpdGlvbiA8IHNlZ21lbnQuZW5kOyArK3Bvc2l0aW9u
KSB7CisgICAgICAgIGF1dG8gY2hhcmFjdGVyID0gdGV4dFtwb3NpdGlvbiAtIHNlZ21lbnQuc3Rh
cnRdOworICAgICAgICBib29sIGlzU3BhY2UgPSBjaGFyYWN0ZXIgPT0gJyAnOworICAgICAgICBi
b29sIGlzV2hpdGVzcGFjZSA9IGlzU3BhY2UgfHwgY2hhcmFjdGVyID09ICdcdCcgfHwgKCFzdHls
ZS5wcmVzZXJ2ZU5ld2xpbmUgJiYgY2hhcmFjdGVyID09ICdcbicpOworICAgICAgICBpZiAoIWlz
V2hpdGVzcGFjZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoaXNTcGFj
ZSkKKyAgICAgICAgICAgICsrc3BhY2VDb3VudDsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwog
fQogCiB1bnNpZ25lZCBGbG93Q29udGVudHM6OmZpbmROZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9u
KHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCYgc3BhY2VDb3VudCkgY29uc3QKIHsKLSAgICB1
bnNpZ25lZCBub25XaGl0ZXNwYWNlUG9zaXRpb24gPSBuZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9u
KHBvc2l0aW9uLCBzcGFjZUNvdW50KTsKLSAgICBpZiAoYXBwZW5kTmV4dFJlbmRlcmVyQ29udGVu
dElmTmVlZGVkKG5vbldoaXRlc3BhY2VQb3NpdGlvbikpCi0gICAgICAgIHJldHVybiBmaW5kTmV4
dE5vbldoaXRlc3BhY2VQb3NpdGlvbihwb3NpdGlvbiwgc3BhY2VDb3VudCk7Ci0gICAgQVNTRVJU
KG5vbldoaXRlc3BhY2VQb3NpdGlvbiA+PSBwb3NpdGlvbik7Ci0gICAgcmV0dXJuIG5vbldoaXRl
c3BhY2VQb3NpdGlvbjsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZWdtZW50SW5kZXhGb3JQb3Np
dGlvbihwb3NpdGlvbik7IGkgPCBtX3NlZ21lbnRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChmaW5kTmV4dE5vbldoaXRlc3BhY2UobV9zZWdtZW50c1tpXSwgbV9zdHlsZSwgcG9zaXRpb24s
IHNwYWNlQ291bnQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBwb3Np
dGlvbjsKIH0KIAogZmxvYXQgRmxvd0NvbnRlbnRzOjp0ZXh0V2lkdGgodW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKQEAgLTk3LDcgKzEyNCw3IEBAIGZs
b2F0IEZsb3dDb250ZW50czo6dGV4dFdpZHRoKHVuc2lnbmVkIGYKICAgICB1bnNpZ25lZCBmcmFn
bWVudEVuZCA9IDA7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgZnJhZ21lbnRFbmQgPSBz
dGQ6Om1pbih0bywgc2VnbWVudC0+ZW5kKTsKLSAgICAgICAgdGV4dFdpZHRoICs9IHJ1bldpZHRo
KHNlZ21lbnQtPnJlbmRlcmVyLCBmcm9tIC0gc2VnbWVudC0+c3RhcnQsIGZyYWdtZW50RW5kIC0g
c2VnbWVudC0+c3RhcnQsIHhQb3NpdGlvbiArIHRleHRXaWR0aCk7CisgICAgICAgIHRleHRXaWR0
aCArPSBydW5XaWR0aChzZWdtZW50LT50ZXh0LCBmcm9tIC0gc2VnbWVudC0+c3RhcnQsIGZyYWdt
ZW50RW5kIC0gc2VnbWVudC0+c3RhcnQsIHhQb3NpdGlvbiArIHRleHRXaWR0aCk7CiAgICAgICAg
IGlmIChmcmFnbWVudEVuZCA9PSB0bykKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBmcm9t
ID0gZnJhZ21lbnRFbmQ7CkBAIC0xMDcsMTQgKzEzNCwxNSBAQCBmbG9hdCBGbG93Q29udGVudHM6
OnRleHRXaWR0aCh1bnNpZ25lZCBmCiAgICAgcmV0dXJuIHRleHRXaWR0aDsKIH0KIAotY29uc3Qg
Rmxvd0NvbnRlbnRzOjpTZWdtZW50JiBGbG93Q29udGVudHM6OnNlZ21lbnRGb3JQb3NpdGlvblNs
b3codW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Cit1bnNpZ25lZCBGbG93Q29udGVudHM6OnNlZ21l
bnRJbmRleEZvclBvc2l0aW9uU2xvdyh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKIHsKICAgICBh
dXRvIGl0ID0gc3RkOjpsb3dlcl9ib3VuZChtX3NlZ21lbnRzLmJlZ2luKCksIG1fc2VnbWVudHMu
ZW5kKCksIHBvc2l0aW9uLCBbXShjb25zdCBTZWdtZW50JiBzZWdtZW50LCB1bnNpZ25lZCBwb3Np
dGlvbikgewogICAgICAgICByZXR1cm4gc2VnbWVudC5lbmQgPD0gcG9zaXRpb247CiAgICAgfSk7
CiAgICAgQVNTRVJUKGl0ICE9IG1fc2VnbWVudHMuZW5kKCkpOwotICAgIG1fbGFzdFNlZ21lbnRJ
bmRleCA9IGl0IC0gbV9zZWdtZW50cy5iZWdpbigpOwotICAgIHJldHVybiAqaXQ7CisgICAgYXV0
byBpbmRleCA9IGl0IC0gbV9zZWdtZW50cy5iZWdpbigpOworICAgIG1fbGFzdFNlZ21lbnRJbmRl
eCA9IGluZGV4OworICAgIHJldHVybiBpbmRleDsKIH0KIAogY29uc3QgRmxvd0NvbnRlbnRzOjpT
ZWdtZW50JiBGbG93Q29udGVudHM6OnNlZ21lbnRGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJUZXh0
JiByZW5kZXJlcikgY29uc3QKQEAgLTEyNyw0NSArMTU1LDEzIEBAIGNvbnN0IEZsb3dDb250ZW50
czo6U2VnbWVudCYgRmxvd0NvbnRlbnQKICAgICByZXR1cm4gbV9zZWdtZW50cy5sYXN0KCk7CiB9
CiAKLWJvb2wgRmxvd0NvbnRlbnRzOjphcHBlbmROZXh0UmVuZGVyZXJDb250ZW50SWZOZWVkZWQo
dW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGlzRW5kKHBvc2l0aW9uKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFN0cmluZyBzdHJpbmcgPSBtX2xpbmVCcmVha0l0ZXJh
dG9yLnN0cmluZygpOwotICAgIGlmIChwb3NpdGlvbiA8IHN0cmluZy5sZW5ndGgoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gQ29udGVudCBuZWVkcyB0byBiZSByZXF1ZXN0ZWQg
c2VxdWVudGlhbGx5LgotICAgIEFTU0VSVChwb3NpdGlvbiA9PSBzdHJpbmcubGVuZ3RoKCkpOwot
ICAgIGF1dG8mIHNlZ21lbnQgPSBzZWdtZW50Rm9yUG9zaXRpb24ocG9zaXRpb24pOwotCi0gICAg
bV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRvcihzdHJpbmcg
KyBTdHJpbmcoc2VnbWVudC5yZW5kZXJlci50ZXh0KCkpLCBtX3N0eWxlLmxvY2FsZSwgTGluZUJy
ZWFrSXRlcmF0b3JNb2RlVUFYMTQpOwotICAgIHJldHVybiB0cnVlOwotfQotCi11bnNpZ25lZCBG
bG93Q29udGVudHM6Om5leHROb25XaGl0ZXNwYWNlUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24s
IHVuc2lnbmVkJiBzcGFjZUNvdW50KSBjb25zdAotewotICAgIFN0cmluZyBzdHJpbmcgPSBtX2xp
bmVCcmVha0l0ZXJhdG9yLnN0cmluZygpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5s
ZW5ndGgoKTsKLSAgICBjb25zdCBMQ2hhciogdGV4dCA9IHN0cmluZy5jaGFyYWN0ZXJzOCgpOwot
ICAgIGZvciAoOyBwb3NpdGlvbiA8IGxlbmd0aDsgKytwb3NpdGlvbikgewotICAgICAgICBib29s
IGlzU3BhY2UgPSB0ZXh0W3Bvc2l0aW9uXSA9PSAnICc7Ci0gICAgICAgIGlmICghKGlzU3BhY2Ug
fHwgdGV4dFtwb3NpdGlvbl0gPT0gJ1x0JyB8fCAoIW1fc3R5bGUucHJlc2VydmVOZXdsaW5lICYm
IHRleHRbcG9zaXRpb25dID09ICdcbicpKSkKLSAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
LSAgICAgICAgaWYgKGlzU3BhY2UpCi0gICAgICAgICAgICArK3NwYWNlQ291bnQ7Ci0gICAgfQot
ICAgIHJldHVybiBsZW5ndGg7Ci19Ci0KLWZsb2F0IEZsb3dDb250ZW50czo6cnVuV2lkdGgoY29u
c3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9h
dCB4UG9zaXRpb24pIGNvbnN0CitmbG9hdCBGbG93Q29udGVudHM6OnJ1bldpZHRoKGNvbnN0IFN0
cmluZyYgdGV4dCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIGZsb2F0IHhQb3NpdGlvbikg
Y29uc3QKIHsKICAgICBBU1NFUlQoZnJvbSA8IHRvKTsKLSAgICBTdHJpbmcgc3RyaW5nID0gcmVu
ZGVyZXIudGV4dCgpOwotICAgIGJvb2wgbWVhc3VyZVdpdGhFbmRTcGFjZSA9IG1fc3R5bGUuY29s
bGFwc2VXaGl0ZXNwYWNlICYmIHRvIDwgc3RyaW5nLmxlbmd0aCgpICYmIHN0cmluZ1t0b10gPT0g
JyAnOworICAgIGJvb2wgbWVhc3VyZVdpdGhFbmRTcGFjZSA9IG1fc3R5bGUuY29sbGFwc2VXaGl0
ZXNwYWNlICYmIHRvIDwgdGV4dC5sZW5ndGgoKSAmJiB0ZXh0W3RvXSA9PSAnICc7CiAgICAgaWYg
KG1lYXN1cmVXaXRoRW5kU3BhY2UpCiAgICAgICAgICsrdG87Ci0gICAgVGV4dFJ1biBydW4oc3Ry
aW5nLmNoYXJhY3RlcnM4KCkgKyBmcm9tLCB0byAtIGZyb20pOworICAgIFRleHRSdW4gcnVuKHRl
eHQuY2hhcmFjdGVyczgoKSArIGZyb20sIHRvIC0gZnJvbSk7CiAgICAgcnVuLnNldFhQb3MoeFBv
c2l0aW9uKTsKICAgICBydW4uc2V0VGFiU2l6ZSghIW1fc3R5bGUudGFiV2lkdGgsIG1fc3R5bGUu
dGFiV2lkdGgpOwogICAgIGZsb2F0IHdpZHRoID0gbV9zdHlsZS5mb250LndpZHRoKHJ1bik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZsb3dDb250ZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzLmgJKHJldmlzaW9uIDE3NjUxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDYgKzUxLDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBTZWdtZW50IHsKICAgICAgICAgdW5z
aWduZWQgc3RhcnQ7CiAgICAgICAgIHVuc2lnbmVkIGVuZDsKKyAgICAgICAgU3RyaW5nIHRleHQ7
CiAgICAgICAgIGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyOwogICAgIH07CiAgICAgY29uc3Qg
U2VnbWVudCYgc2VnbWVudEZvclBvc2l0aW9uKHVuc2lnbmVkKSBjb25zdDsKQEAgLTc1LDEwICs3
NiwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3R5bGUmIHN0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9zdHlsZTsgfQogCiBwcml2YXRlOgotICAgIGNvbnN0IFNlZ21lbnQmIHNlZ21lbnRGb3JQb3Np
dGlvblNsb3codW5zaWduZWQpIGNvbnN0OwotICAgIGJvb2wgYXBwZW5kTmV4dFJlbmRlcmVyQ29u
dGVudElmTmVlZGVkKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKLSAgICB1bnNpZ25lZCBuZXh0
Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCYgc3BhY2VD
b3VudCkgY29uc3Q7Ci0gICAgZmxvYXQgcnVuV2lkdGgoY29uc3QgUmVuZGVyVGV4dCYsIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0OworICAgIHVuc2ln
bmVkIHNlZ21lbnRJbmRleEZvclBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdDsKKyAg
ICB1bnNpZ25lZCBzZWdtZW50SW5kZXhGb3JQb3NpdGlvblNsb3codW5zaWduZWQgcG9zaXRpb24p
IGNvbnN0OworCisgICAgVUNoYXIgY2hhcmFjdGVyQXQodW5zaWduZWQgcG9zaXRpb24pIGNvbnN0
OworICAgIGZsb2F0IHJ1bldpZHRoKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0OwogCiAgICAgY29uc3QgU3R5bGUgbV9zdHls
ZTsKICAgICBjb25zdCBWZWN0b3I8U2VnbWVudCwgOD4gbV9zZWdtZW50czsKQEAgLTg3LDExICs4
OSwxNSBAQCBwcml2YXRlOgogICAgIG11dGFibGUgdW5zaWduZWQgbV9sYXN0U2VnbWVudEluZGV4
OwogfTsKIAoraW5saW5lIFVDaGFyIEZsb3dDb250ZW50czo6Y2hhcmFjdGVyQXQodW5zaWduZWQg
cG9zaXRpb24pIGNvbnN0Cit7CisgICAgYXV0byYgc2VnbWVudCA9IHNlZ21lbnRGb3JQb3NpdGlv
bihwb3NpdGlvbik7CisgICAgcmV0dXJuIHNlZ21lbnQudGV4dFtwb3NpdGlvbiAtIHNlZ21lbnQu
c3RhcnRdOworfQorCiBpbmxpbmUgYm9vbCBGbG93Q29udGVudHM6OmlzTmV3bGluZUNoYXJhY3Rl
cih1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKIHsKLSAgICBhcHBlbmROZXh0UmVuZGVyZXJDb250
ZW50SWZOZWVkZWQocG9zaXRpb24pOwotICAgIEFTU0VSVChwb3NpdGlvbiA8IG1fbGluZUJyZWFr
SXRlcmF0b3Iuc3RyaW5nKCkubGVuZ3RoKCkpOwotICAgIHJldHVybiBtX2xpbmVCcmVha0l0ZXJh
dG9yLnN0cmluZygpLmF0KHBvc2l0aW9uKSA9PSAnXG4nOworICAgIHJldHVybiBjaGFyYWN0ZXJB
dChwb3NpdGlvbikgPT0gJ1xuJzsKIH0KIAogaW5saW5lIGJvb2wgRmxvd0NvbnRlbnRzOjppc0Vu
ZCh1bnNpZ25lZCBwb3NpdGlvbikgY29uc3QKQEAgLTk5LDE0ICsxMDUsMTggQEAgaW5saW5lIGJv
b2wgRmxvd0NvbnRlbnRzOjppc0VuZCh1bnNpZ25lZAogICAgIHJldHVybiBwb3NpdGlvbiA+PSBs
ZW5ndGgoKTsKIH0KIAotaW5saW5lIGNvbnN0IEZsb3dDb250ZW50czo6U2VnbWVudCYgRmxvd0Nv
bnRlbnRzOjpzZWdtZW50Rm9yUG9zaXRpb24odW5zaWduZWQgcG9zaXRpb24pIGNvbnN0Citpbmxp
bmUgdW5zaWduZWQgRmxvd0NvbnRlbnRzOjpzZWdtZW50SW5kZXhGb3JQb3NpdGlvbih1bnNpZ25l
ZCBwb3NpdGlvbikgY29uc3QKIHsKICAgICBBU1NFUlQoIWlzRW5kKHBvc2l0aW9uKSk7Ci0KICAg
ICBhdXRvJiBsYXN0U2VnbWVudCA9IG1fc2VnbWVudHNbbV9sYXN0U2VnbWVudEluZGV4XTsKICAg
ICBpZiAobGFzdFNlZ21lbnQuc3RhcnQgPD0gcG9zaXRpb24gJiYgcG9zaXRpb24gPCBsYXN0U2Vn
bWVudC5lbmQpCi0gICAgICAgIHJldHVybiBsYXN0U2VnbWVudDsKLSAgICByZXR1cm4gc2VnbWVu
dEZvclBvc2l0aW9uU2xvdyhwb3NpdGlvbik7CisgICAgICAgIHJldHVybiBtX2xhc3RTZWdtZW50
SW5kZXg7CisgICAgcmV0dXJuIHNlZ21lbnRJbmRleEZvclBvc2l0aW9uU2xvdyhwb3NpdGlvbik7
Cit9CisKK2lubGluZSBjb25zdCBGbG93Q29udGVudHM6OlNlZ21lbnQmIEZsb3dDb250ZW50czo6
c2VnbWVudEZvclBvc2l0aW9uKHVuc2lnbmVkIHBvc2l0aW9uKSBjb25zdAoreworICAgIHJldHVy
biBtX3NlZ21lbnRzW3NlZ21lbnRJbmRleEZvclBvc2l0aW9uKHBvc2l0aW9uKV07CiB9CiAKIH0K
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE3NjUyNCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE0LTExLTI0ICBBbnR0aSBLb2l2aXN0byAg
PGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBBdm9pZCBTdHJpbmcgY29uY2F0ZW5hdGlvbiB3
aXRoIGxpbmUgYnJlYWsgaXRlcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzOTAzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3QgdGhhdCB0aGVyZSBpcyBubyBpbXBsaWNpdCBicmVhayBwb2lu
dCBiZXR3ZWVuIFRleHQgbm9kZXMuCisKKyAgICAgICAgKiBmYXN0L3RleHQvc2ltcGxlLWxpbmVz
LW11bHRpcGxlLXJlbmRlcmVycy1icmVhay1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3RleHQvc2ltcGxlLWxpbmVzLW11bHRpcGxlLXJlbmRlcmVycy1icmVhay5odG1sOiBB
ZGRlZC4KKwogMjAxNC0xMS0yNCAgSm9hbm1hcmllIERpZ2dzICA8amRpZ2dzQGlnYWxpYS5jb20+
CiAKICAgICAgICAgQVg6IFtBVEtdIFVuc2tpcCB0aGUgc2tpcHBlZCBBVEsgdGVzdHMgaW4gcm9s
ZXMtZXhwb3NlZC5odG1sCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvc2ltcGxlLWxpbmVz
LW11bHRpcGxlLXJlbmRlcmVycy1icmVhay1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvdGV4dC9zaW1wbGUtbGluZXMtbXVsdGlwbGUtcmVuZGVyZXJzLWJyZWFr
LWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvc2lt
cGxlLWxpbmVzLW11bHRpcGxlLXJlbmRlcmVycy1icmVhay1leHBlY3RlZC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
Kzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IHN0eWxlPSJ3aWR0aDozMDBweDsgYm9y
ZGVyOiAycHggc29saWQgZ3JlZW4iPgorYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh
YWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorPC9kaXY+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvc2ltcGxlLWxp
bmVzLW11bHRpcGxlLXJlbmRlcmVycy1icmVhay5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvdGV4dC9zaW1wbGUtbGluZXMtbXVsdGlwbGUtcmVuZGVyZXJzLWJyZWFrLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvc2ltcGxlLWxpbmVzLW11bHRp
cGxlLXJlbmRlcmVycy1icmVhay5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUgQEAK
KzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5UZXN0IHRoYXQgdGhlcmUg
aXMgbm8gYnJlYWsgcG9pbnQgYmV0d2VlbiBzaW1wbGUgbGluZSBsYXlvdXQgc2VnbWVudHMuPC90
aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBpZD1jb250YWluZXIgc3R5bGU9IndpZHRoOjMw
MHB4OyBib3JkZXI6IDJweCBzb2xpZCBncmVlbiI+Cis8L2Rpdj4KKzxzY3JpcHQ+Cit2YXIgY29u
dGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRhaW5lciIpOworY29udGFpbmVy
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhYWFhYWFhYWFhYWFhYWFhYWFh
YWFhYWFhYWFhYWFhYWFhYWFhYWFhYSIpKTsKK2NvbnRhaW5lci5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZSgiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJi
YmIiKSk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="267046"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>