<?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>204561</bug_id>
          
          <creation_ts>2019-11-24 18:57:33 -0800</creation_ts>
          <short_desc>[LFC][IFC] Construct only one LineLayout object per inline formatting context</short_desc>
          <delta_ts>2019-11-25 08:13:24 -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>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="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1593308</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-11-24 18:57:33 -0800</bug_when>
    <thetext>and not one for each line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593309</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-11-24 18:58:02 -0800</bug_when>
    <thetext>&lt;rdar://problem/57463666&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593311</commentid>
    <comment_count>2</comment_count>
      <attachid>384263</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-11-24 19:14:33 -0800</bug_when>
    <thetext>Created attachment 384263
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593422</commentid>
    <comment_count>3</comment_count>
      <attachid>384263</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-11-25 07:13:06 -0800</bug_when>
    <thetext>Comment on attachment 384263
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Let&apos;s construct only one LineLayout object per IFC.

I kinda liked that one object represents layout of one line. What do we gain from reusing it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593440</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-11-25 08:04:36 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; Comment on attachment 384263 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=384263&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        Let&apos;s construct only one LineLayout object per IFC.
&gt; 
&gt; I kinda liked that one object represents layout of one line. What do we gain
&gt; from reusing it?
What I am trying to achieve here is (and probably failing because of bad naming) to have something similar to what we do with the formatting contexts. In this setup the context is the LineLayout class. It is not a per-line-context but rather for the entire inline content. Let me find a better name for LineLayout and address it in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593441</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-11-25 08:05:48 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; Comment on attachment 384263 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=384263&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        Let&apos;s construct only one LineLayout object per IFC.
&gt; 
&gt; I kinda liked that one object represents layout of one line. What do we gain
&gt; from reusing it?
Line (or as we discussed the LineBuilder) class represents the layout of one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1593443</commentid>
    <comment_count>6</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-11-25 08:13:24 -0800</bug_when>
    <thetext>Committed r252861: &lt;https://trac.webkit.org/changeset/252861&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384263</attachid>
            <date>2019-11-24 19:14:33 -0800</date>
            <delta_ts>2019-11-25 07:13:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204561-20191124191407.patch</filename>
            <type>text/plain</type>
            <size>17923</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUyODM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2ZkYzVjYzYyMjFmYjBm
NjYwNTdiODczNzY4MzAyODZmYTkwMjJiNC4uOGFlNmVjZTE1ZDBjYjQxOGRhYjlhYjJkN2RjNzM5
ZjZmODY0OTA0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTExLTI0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBDb25zdHJ1
Y3Qgb25seSBvbmUgTGluZUxheW91dCBvYmplY3QgcGVyIGlubGluZSBmb3JtYXR0aW5nIGNvbnRl
eHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDU2
MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTc0NjM2NjY+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTGV0J3MgY29uc3RydWN0IG9ubHkgb25lIExp
bmVMYXlvdXQgb2JqZWN0IHBlciBJRkMuCisKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50cmluc2ljV2lk
dGhGb3JDb25zdHJhaW50IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxh
eW91dDo6TGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXQ6
OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXQ6OmNsb3NlKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dDo6TGluZUlucHV0OjpMaW5lSW5w
dXQpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVMYXlvdXQuaDoKKwogMjAxOS0xMS0yNCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtMRkNdW0lGQ10gRGVjb3VwbGUgTGluZUxheW91dCBhbmQgTGluZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDNlN2EyYTBjNDFmYWM1Y2JjYmNl
NzcxN2I4ZmQzMWNjM2M0N2Q3MTkuLmRmN2M1Mzc5ZDM2OGNlZmNlMDVkMzAyOGRiMGQwYmM4YWZj
YzI4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTk2LDEzICs5
NiwxMSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KFVzZWRIb3Jp
em9udGFsVmFsdWVzIHVzZWRIb3Jpem9udGFsVmFsdQogICAgIHVuc2lnbmVkIGxlYWRpbmdJbmxp
bmVJdGVtSW5kZXggPSAwOwogICAgIE9wdGlvbmFsPExpbmVMYXlvdXQ6OlBhcnRpYWxDb250ZW50
PiBsZWFkaW5nUGFydGlhbENvbnRlbnQ7CiAgICAgYXV0byBsaW5lID0gTGluZSB7ICp0aGlzLCBy
b290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKSwgTGluZTo6U2tpcEFsaWdubWVudDo6Tm8gfTsKKyAg
ICBhdXRvIGxpbmVMYXlvdXQgPSBMaW5lTGF5b3V0IHsgKnRoaXMsIGlubGluZUl0ZW1zIH07CiAK
ICAgICB3aGlsZSAobGVhZGluZ0lubGluZUl0ZW1JbmRleCA8IGlubGluZUl0ZW1zLnNpemUoKSkg
ewogICAgICAgICBsaW5lLmluaXRpYWxpemUoY29uc3RyYWludHNGb3JMaW5lKHVzZWRIb3Jpem9u
dGFsVmFsdWVzLCBsaW5lTG9naWNhbFRvcCkpOwotICAgICAgICBhdXRvIGxpbmVJbnB1dCA9IExp
bmVMYXlvdXQ6OkxpbmVJbnB1dCB7IGlubGluZUl0ZW1zLCBsZWFkaW5nSW5saW5lSXRlbUluZGV4
LCBsZWFkaW5nUGFydGlhbENvbnRlbnQgfTsKLSAgICAgICAgYXV0byBsaW5lTGF5b3V0ID0gTGlu
ZUxheW91dCB7ICp0aGlzLCBsaW5lSW5wdXQsIGxpbmUgfTsKLQotICAgICAgICBhdXRvIGxpbmVD
b250ZW50ID0gbGluZUxheW91dC5sYXlvdXQoKTsKKyAgICAgICAgYXV0byBsaW5lQ29udGVudCA9
IGxpbmVMYXlvdXQubGF5b3V0KGxpbmUsIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgsIGxlYWRpbmdQ
YXJ0aWFsQ29udGVudCk7CiAgICAgICAgIHNldERpc3BsYXlCb3hlc0ZvckxpbmUobGluZUNvbnRl
bnQsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKIAogICAgICAgICBsZWFkaW5nUGFydGlhbENvbnRl
bnQgPSB7IH07CkBAIC0yMzYsMTIgKzIzNCwxMSBAQCBMYXlvdXRVbml0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29uc3RyYWludChVc2VkSG9yaQog
ICAgIExheW91dFVuaXQgbWF4aW11bUxpbmVXaWR0aDsKICAgICB1bnNpZ25lZCBsZWFkaW5nSW5s
aW5lSXRlbUluZGV4ID0gMDsKICAgICBhdXRvIGxpbmUgPSBMaW5lIHsgKnRoaXMsIHJvb3QoKS5z
dHlsZSgpLnRleHRBbGlnbigpLCBMaW5lOjpTa2lwQWxpZ25tZW50OjpZZXMgfTsKKyAgICBhdXRv
IGxpbmVMYXlvdXQgPSBMaW5lTGF5b3V0IHsgKnRoaXMsIGlubGluZUl0ZW1zIH07CiAgICAgd2hp
bGUgKGxlYWRpbmdJbmxpbmVJdGVtSW5kZXggPCBpbmxpbmVJdGVtcy5zaXplKCkpIHsKICAgICAg
ICAgLy8gT25seSB0aGUgaG9yaXp0b25hbCBhdmFpbGFibGUgd2lkdGggaXMgY29uc3RyYWluZWQg
d2hlbiBjb21wdXRpbmcgaW50cmluc2ljIHdpZHRoLgogICAgICAgICBsaW5lLmluaXRpYWxpemUo
TGluZTo6Q29uc3RyYWludHMgeyB7IH0sIHVzZWRIb3Jpem9udGFsVmFsdWVzLmNvbnN0cmFpbnRz
LndpZHRoLCBmYWxzZSwgeyB9IH0pOwotICAgICAgICBhdXRvIGxpbmVJbnB1dCA9IExpbmVMYXlv
dXQ6OkxpbmVJbnB1dCB7IGlubGluZUl0ZW1zLCBsZWFkaW5nSW5saW5lSXRlbUluZGV4LCB7IH0g
fTsKLQotICAgICAgICBhdXRvIGxpbmVDb250ZW50ID0gTGluZUxheW91dCgqdGhpcywgbGluZUlu
cHV0LCBsaW5lKS5sYXlvdXQoKTsKKyAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVMYXlv
dXQubGF5b3V0KGxpbmUsIGxlYWRpbmdJbmxpbmVJdGVtSW5kZXgsIHsgfSk7CiAKICAgICAgICAg
bGVhZGluZ0lubGluZUl0ZW1JbmRleCA9ICpsaW5lQ29udGVudC50cmFpbGluZ0lubGluZUl0ZW1J
bmRleCArIDE7CiAgICAgICAgIExheW91dFVuaXQgZmxvYXRzV2lkdGg7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lTGF5b3V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlv
dXQuY3BwCmluZGV4IDc0ZWYxMGEzMmM3NjIzYzgyMmFjZjNhNTQ0OTNiZjYwN2U3OTExYTAuLmE5
YWM2ZjFmYmYxY2FkNjliZTlkMjdhMWQwNjYxZGY4YzY5MTMwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlv
dXQuY3BwCkBAIC02NywxMyArNjcsNiBAQCBzdGF0aWMgTGF5b3V0VW5pdCBpbmxpbmVJdGVtV2lk
dGgoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0LCBjbwogICAgIHJl
dHVybiBib3hHZW9tZXRyeS53aWR0aCgpOwogfQogCi1MaW5lTGF5b3V0OjpMaW5lSW5wdXQ6Okxp
bmVJbnB1dChjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIHVuc2lnbmVkIGxlYWRpbmdJ
bmxpbmVJdGVtSW5kZXgsIE9wdGlvbmFsPFBhcnRpYWxDb250ZW50PiBsZWFkaW5nUGFydGlhbENv
bnRlbnQpCi0gICAgOiBpbmxpbmVJdGVtcyhpbmxpbmVJdGVtcykKLSAgICAsIGxlYWRpbmdJbmxp
bmVJdGVtSW5kZXgobGVhZGluZ0lubGluZUl0ZW1JbmRleCkKLSAgICAsIGxlYWRpbmdQYXJ0aWFs
Q29udGVudChsZWFkaW5nUGFydGlhbENvbnRlbnQpCi17Ci19Ci0KIHZvaWQgTGluZUxheW91dDo6
VW5jb21taXR0ZWRDb250ZW50OjphZGQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgTGF5
b3V0VW5pdCBsb2dpY2FsV2lkdGgpCiB7CiAgICAgbV91bmNvbW1pdHRlZFJ1bnMuYXBwZW5kKHsg
aW5saW5lSXRlbSwgbG9naWNhbFdpZHRoIH0pOwpAQCAtODYsNjkgKzc5LDc2IEBAIHZvaWQgTGlu
ZUxheW91dDo6VW5jb21taXR0ZWRDb250ZW50OjpyZXNldCgpCiAgICAgbV93aWR0aCA9IDA7CiB9
CiAKLUxpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBMaW5lSW5wdXQmIGxpbmVJbnB1dCwgTGlu
ZSYgbGluZSkKK0xpbmVMYXlvdXQ6OkxpbmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5l
SXRlbXMpCiAgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdD
b250ZXh0KQotICAgICwgbV9saW5lSW5wdXQobGluZUlucHV0KQotICAgICwgbV9saW5lKGxpbmUp
CisgICAgLCBtX2lubGluZUl0ZW1zKGlubGluZUl0ZW1zKQogewogfQogCi1MaW5lTGF5b3V0OjpM
aW5lQ29udGVudCBMaW5lTGF5b3V0OjpsYXlvdXQoKQorTGluZUxheW91dDo6TGluZUNvbnRlbnQg
TGluZUxheW91dDo6bGF5b3V0KExpbmUmIGxpbmUsIHVuc2lnbmVkIGxlYWRpbmdJbmxpbmVJdGVt
SW5kZXgsIE9wdGlvbmFsPFBhcnRpYWxDb250ZW50PiBsZWFkaW5nUGFydGlhbENvbnRlbnQpCiB7
CisgICAgYXV0byBpbml0aWFsaXplID0gWyZdIHsKKyAgICAgICAgbV9jb21taXR0ZWRJbmxpbmVJ
dGVtQ291bnQgPSAwOworICAgICAgICBtX3VuY29tbWl0dGVkQ29udGVudC5yZXNldCgpOworICAg
ICAgICBtX2xlYWRpbmdQYXJ0aWFsVGV4dEl0ZW0gPSB7IH07CisgICAgICAgIG1fdHJhaWxpbmdQ
YXJ0aWFsVGV4dEl0ZW0gPSB7IH07CisgICAgICAgIG1fb3ZlcmZsb3dUZXh0TGVuZ3RoID0geyB9
OworICAgIH07CisgICAgaW5pdGlhbGl6ZSgpOwogICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUg
aW5saW5lIGNvbnRlbnQgYW5kIHBsYWNlIHRoZSBpbmxpbmUgYm94ZXMgb24gdGhlIGN1cnJlbnQg
bGluZS4KICAgICAvLyBTdGFydCB3aXRoIHRoZSBwYXJ0aWFsIGxlYWRpbmcgdGV4dCBmcm9tIHRo
ZSBwcmV2aW91cyBsaW5lLgotICAgIGF1dG8gZmlyc3ROb25QYXJ0aWFsSW5saW5lSXRlbUluZGV4
ID0gbV9saW5lSW5wdXQubGVhZGluZ0lubGluZUl0ZW1JbmRleDsKLSAgICBpZiAobV9saW5lSW5w
dXQubGVhZGluZ1BhcnRpYWxDb250ZW50KSB7CisgICAgYXV0byBmaXJzdE5vblBhcnRpYWxJbmxp
bmVJdGVtSW5kZXggPSBsZWFkaW5nSW5saW5lSXRlbUluZGV4OworICAgIGlmIChsZWFkaW5nUGFy
dGlhbENvbnRlbnQpIHsKICAgICAgICAgLy8gSGFuZGxlIHBhcnRpYWwgaW5saW5lIGl0ZW0gKHNw
bGl0IHRleHQgZnJvbSB0aGUgcHJldmlvdXMgbGluZSkuCi0gICAgICAgIGF1dG8mIGxlYWRpbmdU
ZXh0SXRlbSA9IG1fbGluZUlucHV0LmlubGluZUl0ZW1zW21fbGluZUlucHV0LmxlYWRpbmdJbmxp
bmVJdGVtSW5kZXhdOworICAgICAgICBhdXRvJiBsZWFkaW5nVGV4dEl0ZW0gPSBtX2lubGluZUl0
ZW1zW2xlYWRpbmdJbmxpbmVJdGVtSW5kZXhdOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChsZWFk
aW5nVGV4dEl0ZW0tPmlzVGV4dCgpKTsKICAgICAgICAgLy8gQ29uc3RydWN0IGEgcGFydGlhbCBs
ZWFkaW5nIGlubGluZSBpdGVtLgogICAgICAgICBBU1NFUlQoIW1fbGVhZGluZ1BhcnRpYWxUZXh0
SXRlbSk7Ci0gICAgICAgIG1fbGVhZGluZ1BhcnRpYWxUZXh0SXRlbSA9IGRvd25jYXN0PElubGlu
ZVRleHRJdGVtPigqbGVhZGluZ1RleHRJdGVtKS5yaWdodChtX2xpbmVJbnB1dC5sZWFkaW5nUGFy
dGlhbENvbnRlbnQtPmxlbmd0aCk7Ci0gICAgICAgIGlmIChwbGFjZUlubGluZUl0ZW0oKm1fbGVh
ZGluZ1BhcnRpYWxUZXh0SXRlbSkgPT0gSXNFbmRPZkxpbmU6OlllcykKLSAgICAgICAgICAgIHJl
dHVybiBjbG9zZSgpOworICAgICAgICBtX2xlYWRpbmdQYXJ0aWFsVGV4dEl0ZW0gPSBkb3duY2Fz
dDxJbmxpbmVUZXh0SXRlbT4oKmxlYWRpbmdUZXh0SXRlbSkucmlnaHQobGVhZGluZ1BhcnRpYWxD
b250ZW50LT5sZW5ndGgpOworICAgICAgICBpZiAocGxhY2VJbmxpbmVJdGVtKGxpbmUsICptX2xl
YWRpbmdQYXJ0aWFsVGV4dEl0ZW0pID09IElzRW5kT2ZMaW5lOjpZZXMpCisgICAgICAgICAgICBy
ZXR1cm4gY2xvc2UobGluZSwgbGVhZGluZ0lubGluZUl0ZW1JbmRleCk7CiAgICAgICAgICsrZmly
c3ROb25QYXJ0aWFsSW5saW5lSXRlbUluZGV4OwogICAgIH0KIAotICAgIGZvciAoYXV0byBpbmxp
bmVJdGVtSW5kZXggPSBmaXJzdE5vblBhcnRpYWxJbmxpbmVJdGVtSW5kZXg7IGlubGluZUl0ZW1J
bmRleCA8IG1fbGluZUlucHV0LmlubGluZUl0ZW1zLnNpemUoKTsgKytpbmxpbmVJdGVtSW5kZXgp
IHsKKyAgICBmb3IgKGF1dG8gaW5saW5lSXRlbUluZGV4ID0gZmlyc3ROb25QYXJ0aWFsSW5saW5l
SXRlbUluZGV4OyBpbmxpbmVJdGVtSW5kZXggPCBtX2lubGluZUl0ZW1zLnNpemUoKTsgKytpbmxp
bmVJdGVtSW5kZXgpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0byBy
ZS1tZWFzdXJlIHRoZSBkcm9wcGVkLCB1bmNvbW1pdHRlZCBjb250ZW50IHdoZW4gcmUtdXNpbmcg
dGhlbSBvbiB0aGUgbmV4dCBsaW5lLgotICAgICAgICBpZiAocGxhY2VJbmxpbmVJdGVtKCptX2xp
bmVJbnB1dC5pbmxpbmVJdGVtc1tpbmxpbmVJdGVtSW5kZXhdKSA9PSBJc0VuZE9mTGluZTo6WWVz
KQotICAgICAgICAgICAgcmV0dXJuIGNsb3NlKCk7CisgICAgICAgIGlmIChwbGFjZUlubGluZUl0
ZW0obGluZSwgKm1faW5saW5lSXRlbXNbaW5saW5lSXRlbUluZGV4XSkgPT0gSXNFbmRPZkxpbmU6
OlllcykKKyAgICAgICAgICAgIHJldHVybiBjbG9zZShsaW5lLCBsZWFkaW5nSW5saW5lSXRlbUlu
ZGV4KTsKICAgICB9CiAgICAgLy8gQ2hlY2sgdGhlIHVuY29tbWl0dGVkIGNvbnRlbnQgd2hldGhl
ciB0aGV5IGZpdCBub3cgdGhhdCB3ZSBrbm93IHdlIGFyZSBhdCBhIGNvbW1pdCBib3VuZGFyeS4K
ICAgICBpZiAoIW1fdW5jb21taXR0ZWRDb250ZW50LmlzRW1wdHkoKSkKLSAgICAgICAgcHJvY2Vz
c1VuY29tbWl0dGVkQ29udGVudCgpOwotICAgIHJldHVybiBjbG9zZSgpOworICAgICAgICBwcm9j
ZXNzVW5jb21taXR0ZWRDb250ZW50KGxpbmUpOworICAgIHJldHVybiBjbG9zZShsaW5lLCBsZWFk
aW5nSW5saW5lSXRlbUluZGV4KTsKIH0KIAotdm9pZCBMaW5lTGF5b3V0Ojpjb21taXRQZW5kaW5n
Q29udGVudCgpCit2b2lkIExpbmVMYXlvdXQ6OmNvbW1pdFBlbmRpbmdDb250ZW50KExpbmUmIGxp
bmUpCiB7CiAgICAgaWYgKG1fdW5jb21taXR0ZWRDb250ZW50LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIG1fY29tbWl0dGVkSW5saW5lSXRlbUNvdW50ICs9IG1fdW5jb21taXR0ZWRD
b250ZW50LnNpemUoKTsKICAgICBmb3IgKGF1dG8mIHVuY29tbWl0dGVkUnVuIDogbV91bmNvbW1p
dHRlZENvbnRlbnQucnVucygpKQotICAgICAgICBtX2xpbmUuYXBwZW5kKHVuY29tbWl0dGVkUnVu
LmlubGluZUl0ZW0sIHVuY29tbWl0dGVkUnVuLmxvZ2ljYWxXaWR0aCk7CisgICAgICAgIGxpbmUu
YXBwZW5kKHVuY29tbWl0dGVkUnVuLmlubGluZUl0ZW0sIHVuY29tbWl0dGVkUnVuLmxvZ2ljYWxX
aWR0aCk7CiAgICAgbV91bmNvbW1pdHRlZENvbnRlbnQucmVzZXQoKTsKIH0KIAotTGluZUxheW91
dDo6TGluZUNvbnRlbnQgTGluZUxheW91dDo6Y2xvc2UoKQorTGluZUxheW91dDo6TGluZUNvbnRl
bnQgTGluZUxheW91dDo6Y2xvc2UoTGluZSYgbGluZSwgdW5zaWduZWQgbGVhZGluZ0lubGluZUl0
ZW1JbmRleCkKIHsKLSAgICBBU1NFUlQobV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgfHwgbV9s
aW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCkpOworICAgIEFTU0VSVChtX2NvbW1pdHRlZElubGluZUl0
ZW1Db3VudCB8fCBsaW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCkpOwogICAgIG1fdW5jb21taXR0ZWRD
b250ZW50LnJlc2V0KCk7CiAgICAgaWYgKCFtX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudCkKLSAg
ICAgICAgcmV0dXJuIExpbmVDb250ZW50IHsgeyB9LCB7IH0sIFdURk1vdmUobV9mbG9hdHMpLCBt
X2xpbmUuY2xvc2UoKSwgbV9saW5lLmxpbmVCb3goKSB9OworICAgICAgICByZXR1cm4gTGluZUNv
bnRlbnQgeyB7IH0sIHsgfSwgV1RGTW92ZShtX2Zsb2F0cyksIGxpbmUuY2xvc2UoKSwgbGluZS5s
aW5lQm94KCkgfTsKIAogICAgIE9wdGlvbmFsPFBhcnRpYWxDb250ZW50PiBvdmVyZmxvd0NvbnRl
bnQ7CiAgICAgaWYgKG1fb3ZlcmZsb3dUZXh0TGVuZ3RoKQogICAgICAgICBvdmVyZmxvd0NvbnRl
bnQgPSBQYXJ0aWFsQ29udGVudCB7ICptX292ZXJmbG93VGV4dExlbmd0aCB9OwotICAgIGF1dG8g
dHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggPSBtX2xpbmVJbnB1dC5sZWFkaW5nSW5saW5lSXRlbUlu
ZGV4ICsgbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291bnQgLSAxOworICAgIGF1dG8gdHJhaWxpbmdJ
bmxpbmVJdGVtSW5kZXggPSBsZWFkaW5nSW5saW5lSXRlbUluZGV4ICsgbV9jb21taXR0ZWRJbmxp
bmVJdGVtQ291bnQgLSAxOwogCiAgICAgYXV0byBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
PSBbJl0gewogICAgICAgICBpZiAob3ZlcmZsb3dDb250ZW50KQogICAgICAgICAgICAgcmV0dXJu
IExpbmU6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87CiAgICAgICAgIC8vIFNraXAg
ZmxvYXRzIGJhY2t3YXJkcyB0byBzZWUgaWYgdGhpcyBpcyBnb2luZyB0byBiZSB0aGUgbGFzdCBs
aW5lIHdpdGggaW5saW5lIGNvbnRlbnQuCi0gICAgICAgIGZvciAoYXV0byBpID0gbV9saW5lSW5w
dXQuaW5saW5lSXRlbXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAoIW1fbGluZUlu
cHV0LmlubGluZUl0ZW1zW2ldLT5pc0Zsb2F0KCkpCisgICAgICAgIGZvciAoYXV0byBpID0gbV9p
bmxpbmVJdGVtcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghbV9pbmxpbmVJdGVt
c1tpXS0+aXNGbG9hdCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBpID09IHRyYWlsaW5nSW5s
aW5lSXRlbUluZGV4ID8gTGluZTo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMgOiBM
aW5lOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOwogICAgICAgICB9CiAgICAgICAg
IC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9uLWZsb2F0IGl0ZW0uCkBAIC0xNTYs
MTIgKzE1NiwxMiBAQCBMaW5lTGF5b3V0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0OjpjbG9zZSgp
CiAgICAgICAgIHJldHVybiBMaW5lOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOwog
ICAgIH07CiAKLSAgICByZXR1cm4gTGluZUNvbnRlbnQgeyB0cmFpbGluZ0lubGluZUl0ZW1JbmRl
eCwgb3ZlcmZsb3dDb250ZW50LCBXVEZNb3ZlKG1fZmxvYXRzKSwgbV9saW5lLmNsb3NlKGlzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCgpKSwgbV9saW5lLmxpbmVCb3goKSB9OworICAgIHJldHVy
biBMaW5lQ29udGVudCB7IHRyYWlsaW5nSW5saW5lSXRlbUluZGV4LCBvdmVyZmxvd0NvbnRlbnQs
IFdURk1vdmUobV9mbG9hdHMpLCBsaW5lLmNsb3NlKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCgpKSwgbGluZS5saW5lQm94KCkgfTsKIH0KIAotTGluZUxheW91dDo6SXNFbmRPZkxpbmUgTGlu
ZUxheW91dDo6cGxhY2VJbmxpbmVJdGVtKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCitM
aW5lTGF5b3V0OjpJc0VuZE9mTGluZSBMaW5lTGF5b3V0OjpwbGFjZUlubGluZUl0ZW0oTGluZSYg
bGluZSwgY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKIHsKLSAgICBhdXRvIGN1cnJlbnRM
b2dpY2FsUmlnaHQgPSBtX2xpbmUubGluZUJveCgpLmxvZ2ljYWxSaWdodCgpOworICAgIGF1dG8g
Y3VycmVudExvZ2ljYWxSaWdodCA9IGxpbmUubGluZUJveCgpLmxvZ2ljYWxSaWdodCgpOwogICAg
IGF1dG8gaXRlbUxvZ2ljYWxXaWR0aCA9IGlubGluZUl0ZW1XaWR0aChmb3JtYXR0aW5nQ29udGV4
dCgpLCBpbmxpbmVJdGVtLCBjdXJyZW50TG9naWNhbFJpZ2h0KTsKIAogICAgIC8vIEZsb2F0cyBh
cmUgc3BlY2lhbCwgdGhleSBhcmUgaW50cnVzaXZlIGJ1dCB0aGV5IGRvbid0IHJlYWxseSBwYXJ0
aWNpcGF0ZSBpbiB0aGUgbGluZSBsYXlvdXQgY29udGV4dC4KQEAgLTE3MSw1MCArMTcxLDUwIEBA
IExpbmVMYXlvdXQ6OklzRW5kT2ZMaW5lIExpbmVMYXlvdXQ6OnBsYWNlSW5saW5lSXRlbShjb25z
dCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtCiAgICAgICAgIC8vIE5vdCBzdXJlIHdoYXQgdG8gZG8g
d2hlbiB0aGUgZmxvYXQgdGFrZXMgdXAgdGhlIGF2YWlsYWJsZSBzcGFjZSBhbmQgd2UndmUgZ290
IGNvbnRpbnVvdXMgY29udGVudC4gQnJvd3NlciBlbmdpbmVzIGRvbid0IGFncmVlLgogICAgICAg
ICAvLyBMZXQncyBqdXN0IGNvbW1pdCB0aGUgcGVuZGluZyBjb250ZW50IGFuZCB0cnkgcGxhY2lu
ZyB0aGUgZmxvYXQgZm9yIG5vdy4KICAgICAgICAgaWYgKCFtX3VuY29tbWl0dGVkQ29udGVudC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGlmIChwcm9jZXNzVW5jb21taXR0ZWRDb250ZW50KCkg
PT0gSXNFbmRPZkxpbmU6OlllcykKKyAgICAgICAgICAgIGlmIChwcm9jZXNzVW5jb21taXR0ZWRD
b250ZW50KGxpbmUpID09IElzRW5kT2ZMaW5lOjpZZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IElzRW5kT2ZMaW5lOjpZZXM7CiAgICAgICAgIH0KLSAgICAgICAgYXV0byBsaW5lSXNDb25zaWRl
cmVkRW1wdHkgPSBtX2xpbmUuaXNWaXN1YWxseUVtcHR5KCkgJiYgIW1fbGluZS5oYXNJbnRydXNp
dmVGbG9hdCgpOwotICAgICAgICBpZiAoTGluZUJyZWFrZXIoKS5zaG91bGRXcmFwRmxvYXRCb3go
aXRlbUxvZ2ljYWxXaWR0aCwgbV9saW5lLmF2YWlsYWJsZVdpZHRoKCkgKyBtX2xpbmUudHJhaWxp
bmdUcmltbWFibGVXaWR0aCgpLCBsaW5lSXNDb25zaWRlcmVkRW1wdHkpKQorICAgICAgICBhdXRv
IGxpbmVJc0NvbnNpZGVyZWRFbXB0eSA9IGxpbmUuaXNWaXN1YWxseUVtcHR5KCkgJiYgIWxpbmUu
aGFzSW50cnVzaXZlRmxvYXQoKTsKKyAgICAgICAgaWYgKExpbmVCcmVha2VyKCkuc2hvdWxkV3Jh
cEZsb2F0Qm94KGl0ZW1Mb2dpY2FsV2lkdGgsIGxpbmUuYXZhaWxhYmxlV2lkdGgoKSArIGxpbmUu
dHJhaWxpbmdUcmltbWFibGVXaWR0aCgpLCBsaW5lSXNDb25zaWRlcmVkRW1wdHkpKQogICAgICAg
ICAgICAgcmV0dXJuIElzRW5kT2ZMaW5lOjpZZXM7CiAKICAgICAgICAgLy8gVGhpcyBmbG9hdCBj
YW4gc2l0IG9uIHRoZSBjdXJyZW50IGxpbmUuCiAgICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gaW5s
aW5lSXRlbS5sYXlvdXRCb3goKTsKICAgICAgICAgLy8gU2hyaW5rIGF2YWlsYWJsZSBzcGFjZSBm
b3IgY3VycmVudCBsaW5lIGFuZCBtb3ZlIGV4aXN0aW5nIGlubGluZSBydW5zLgotICAgICAgICBm
bG9hdEJveC5pc0xlZnRGbG9hdGluZ1Bvc2l0aW9uZWQoKSA/IG1fbGluZS5tb3ZlTG9naWNhbExl
ZnQoaXRlbUxvZ2ljYWxXaWR0aCkgOiBtX2xpbmUubW92ZUxvZ2ljYWxSaWdodChpdGVtTG9naWNh
bFdpZHRoKTsKKyAgICAgICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkgPyBs
aW5lLm1vdmVMb2dpY2FsTGVmdChpdGVtTG9naWNhbFdpZHRoKSA6IGxpbmUubW92ZUxvZ2ljYWxS
aWdodChpdGVtTG9naWNhbFdpZHRoKTsKICAgICAgICAgbV9mbG9hdHMuYXBwZW5kKG1ha2VXZWFr
UHRyKGlubGluZUl0ZW0pKTsKICAgICAgICAgKyttX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudDsK
LSAgICAgICAgbV9saW5lLnNldEhhc0ludHJ1c2l2ZUZsb2F0KCk7CisgICAgICAgIGxpbmUuc2V0
SGFzSW50cnVzaXZlRmxvYXQoKTsKICAgICAgICAgcmV0dXJuIElzRW5kT2ZMaW5lOjpObzsKICAg
ICB9CiAgICAgLy8gRm9yY2VkIGxpbmUgYnJlYWtzIGFyZSBhbHNvIHNwZWNpYWwuCiAgICAgaWYg
KGlubGluZUl0ZW0uaXNGb3JjZWRMaW5lQnJlYWsoKSkgewotICAgICAgICBhdXRvIGlzRW5kT2ZM
aW5lID0gIW1fdW5jb21taXR0ZWRDb250ZW50LmlzRW1wdHkoKSA/IHByb2Nlc3NVbmNvbW1pdHRl
ZENvbnRlbnQoKSA6IElzRW5kT2ZMaW5lOjpObzsKKyAgICAgICAgYXV0byBpc0VuZE9mTGluZSA9
ICFtX3VuY29tbWl0dGVkQ29udGVudC5pc0VtcHR5KCkgPyBwcm9jZXNzVW5jb21taXR0ZWRDb250
ZW50KGxpbmUpIDogSXNFbmRPZkxpbmU6Ok5vOwogICAgICAgICAvLyBXaGVuIHRoZSB1bmNvbW1p
dHRlZCBjb250ZW50IGZpdHMob3IgdGhlIGxpbmUgaXMgZW1wdHkpLCBhZGQgdGhlIGxpbmUgYnJl
YWsgdG8gdGhpcyBsaW5lIGFzIHdlbGwuCiAgICAgICAgIGlmIChpc0VuZE9mTGluZSA9PSBJc0Vu
ZE9mTGluZTo6Tm8pIHsKICAgICAgICAgICAgIG1fdW5jb21taXR0ZWRDb250ZW50LmFkZChpbmxp
bmVJdGVtLCBpdGVtTG9naWNhbFdpZHRoKTsKLSAgICAgICAgICAgIGNvbW1pdFBlbmRpbmdDb250
ZW50KCk7CisgICAgICAgICAgICBjb21taXRQZW5kaW5nQ29udGVudChsaW5lKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gSXNFbmRPZkxpbmU6OlllczsKICAgICB9CiAgICAgLy8KICAgICBh
dXRvIGlzRW5kT2ZMaW5lID0gSXNFbmRPZkxpbmU6Ok5vOwogICAgIGlmICghbV91bmNvbW1pdHRl
ZENvbnRlbnQuaXNFbXB0eSgpICYmIHNob3VsZFByb2Nlc3NVbmNvbW1pdHRlZENvbnRlbnQoaW5s
aW5lSXRlbSkpCi0gICAgICAgIGlzRW5kT2ZMaW5lID0gcHJvY2Vzc1VuY29tbWl0dGVkQ29udGVu
dCgpOworICAgICAgICBpc0VuZE9mTGluZSA9IHByb2Nlc3NVbmNvbW1pdHRlZENvbnRlbnQobGlu
ZSk7CiAgICAgLy8gVGhlIGN1cnJlbnQgaXRlbSBtaWdodCBmaXQgYXMgd2VsbC4KICAgICBpZiAo
aXNFbmRPZkxpbmUgPT0gSXNFbmRPZkxpbmU6Ok5vKQogICAgICAgICBtX3VuY29tbWl0dGVkQ29u
dGVudC5hZGQoaW5saW5lSXRlbSwgaXRlbUxvZ2ljYWxXaWR0aCk7CiAgICAgcmV0dXJuIGlzRW5k
T2ZMaW5lOwogfQogCi1MaW5lTGF5b3V0OjpJc0VuZE9mTGluZSBMaW5lTGF5b3V0Ojpwcm9jZXNz
VW5jb21taXR0ZWRDb250ZW50KCkKK0xpbmVMYXlvdXQ6OklzRW5kT2ZMaW5lIExpbmVMYXlvdXQ6
OnByb2Nlc3NVbmNvbW1pdHRlZENvbnRlbnQoTGluZSYgbGluZSkKIHsKICAgICAvLyBDaGVjayBp
ZiB0aGUgcGVuZGluZyBjb250ZW50IGZpdHMuCi0gICAgYXV0byBsaW5lSXNDb25zaWRlcmVkRW1w
dHkgPSBtX2xpbmUuaXNWaXN1YWxseUVtcHR5KCkgJiYgIW1fbGluZS5oYXNJbnRydXNpdmVGbG9h
dCgpOwotICAgIGF1dG8gYnJlYWtpbmdDb250ZXh0ID0gTGluZUJyZWFrZXIoKS5icmVha2luZ0Nv
bnRleHRGb3JJbmxpbmVDb250ZW50KG1fdW5jb21taXR0ZWRDb250ZW50LnJ1bnMoKSwgbV91bmNv
bW1pdHRlZENvbnRlbnQud2lkdGgoKSwgbV9saW5lLmF2YWlsYWJsZVdpZHRoKCksIGxpbmVJc0Nv
bnNpZGVyZWRFbXB0eSk7CisgICAgYXV0byBsaW5lSXNDb25zaWRlcmVkRW1wdHkgPSBsaW5lLmlz
VmlzdWFsbHlFbXB0eSgpICYmICFsaW5lLmhhc0ludHJ1c2l2ZUZsb2F0KCk7CisgICAgYXV0byBi
cmVha2luZ0NvbnRleHQgPSBMaW5lQnJlYWtlcigpLmJyZWFraW5nQ29udGV4dEZvcklubGluZUNv
bnRlbnQobV91bmNvbW1pdHRlZENvbnRlbnQucnVucygpLCBtX3VuY29tbWl0dGVkQ29udGVudC53
aWR0aCgpLCBsaW5lLmF2YWlsYWJsZVdpZHRoKCksIGxpbmVJc0NvbnNpZGVyZWRFbXB0eSk7CiAg
ICAgLy8gVGhlIHVuY29tbWl0dGVkIGNvbnRlbnQgY2FuIGZ1bGx5LCBwYXJ0aWFsbHkgZml0IHRo
ZSBjdXJyZW50IGxpbmUgKGNvbW1pdC9wYXJ0aWFsIGNvbW1pdCkgb3Igbm90IGF0IGFsbCAocmVz
ZXQpLgogICAgIGlmIChicmVha2luZ0NvbnRleHQuY29udGVudEJyZWFrID09IExpbmVCcmVha2Vy
OjpCcmVha2luZ0NvbnRleHQ6OkNvbnRlbnRCcmVhazo6S2VlcCkKLSAgICAgICAgY29tbWl0UGVu
ZGluZ0NvbnRlbnQoKTsKKyAgICAgICAgY29tbWl0UGVuZGluZ0NvbnRlbnQobGluZSk7CiAgICAg
ZWxzZSBpZiAoYnJlYWtpbmdDb250ZXh0LmNvbnRlbnRCcmVhayA9PSBMaW5lQnJlYWtlcjo6QnJl
YWtpbmdDb250ZXh0OjpDb250ZW50QnJlYWs6OlNwbGl0KSB7CiAgICAgICAgIEFTU0VSVChicmVh
a2luZ0NvbnRleHQudHJhaWxpbmdQYXJ0aWFsQ29udGVudCk7CiAgICAgICAgIEFTU0VSVChtX3Vu
Y29tbWl0dGVkQ29udGVudC5ydW5zKClbYnJlYWtpbmdDb250ZXh0LnRyYWlsaW5nUGFydGlhbENv
bnRlbnQtPnJ1bkluZGV4XS5pbmxpbmVJdGVtLmlzVGV4dCgpKTsKQEAgLTIzMCw3ICsyMzAsNyBA
QCBMaW5lTGF5b3V0OjpJc0VuZE9mTGluZSBMaW5lTGF5b3V0Ojpwcm9jZXNzVW5jb21taXR0ZWRD
b250ZW50KCkKICAgICAgICAgLy8gS2VlcCB0aGUgbm9uLW92ZXJmbG93IHBhcnQgb2YgdGhlIHVu
Y29tbWl0dGVkIHJ1bnMgYW5kIGFkZCB0aGUgdHJhaWxpbmcgcGFydGlhbCBjb250ZW50LgogICAg
ICAgICBtX3VuY29tbWl0dGVkQ29udGVudC50cmltKG92ZXJmbG93SW5saW5lVGV4dEl0ZW1JbmRl
eCk7CiAgICAgICAgIG1fdW5jb21taXR0ZWRDb250ZW50LmFkZCgqbV90cmFpbGluZ1BhcnRpYWxU
ZXh0SXRlbSwgYnJlYWtpbmdDb250ZXh0LnRyYWlsaW5nUGFydGlhbENvbnRlbnQtPmxvZ2ljYWxX
aWR0aCk7Ci0gICAgICAgIGNvbW1pdFBlbmRpbmdDb250ZW50KCk7CisgICAgICAgIGNvbW1pdFBl
bmRpbmdDb250ZW50KGxpbmUpOwogICAgIH0gZWxzZSBpZiAoYnJlYWtpbmdDb250ZXh0LmNvbnRl
bnRCcmVhayA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdDb250ZXh0OjpDb250ZW50QnJlYWs6Oldy
YXApCiAgICAgICAgIG1fdW5jb21taXR0ZWRDb250ZW50LnJlc2V0KCk7CiAgICAgZWxzZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUxheW91dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUxheW91dC5oCmluZGV4IGU0ODVkYTgyZDdkN2U2Mjg3YjIyNWZjZjYyMjJmMmZmZjQxNzQ4
MTkuLmQ3MWIyOWY4NzYzNmVjMzM4NWRmNTcxNTUwMDEyODU2Yzk2M2VmMTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVMYXlvdXQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
TGF5b3V0LmgKQEAgLTM1LDI1ICszNSwxMiBAQCBuYW1lc3BhY2UgTGF5b3V0IHsKIAogY2xhc3Mg
TGluZUxheW91dCB7CiBwdWJsaWM6Ci0gICAgc3RydWN0IExpbmVJbnB1dDsKLSAgICBMaW5lTGF5
b3V0KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgY29uc3QgTGluZUlucHV0JiwgTGlu
ZSYpOwotCi0gICAgc3RydWN0IExpbmVDb250ZW50OwotICAgIExpbmVDb250ZW50IGxheW91dCgp
OworICAgIExpbmVMYXlvdXQoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBjb25zdCBJ
bmxpbmVJdGVtcyYpOwogCiAgICAgc3RydWN0IFBhcnRpYWxDb250ZW50IHsKICAgICAgICAgLy8g
VGhpcyB3aWxsIHBvdGVudGlhbGx5IGdhaW4gc29tZSBtb3JlIG1lbWJlcnMuIAogICAgICAgICB1
bnNpZ25lZCBsZW5ndGg7CiAgICAgfTsKLSAgICBzdHJ1Y3QgTGluZUlucHV0IHsKLSAgICAgICAg
TGluZUlucHV0KGNvbnN0IElubGluZUl0ZW1zJiwgdW5zaWduZWQgbGVhZGluZ0lubGluZUl0ZW1J
bmRleCwgT3B0aW9uYWw8UGFydGlhbENvbnRlbnQ+IGxlYWRpbmdQYXJ0aWFsQ29udGVudCk7Ci0K
LSAgICAgICAgY29uc3QgSW5saW5lSXRlbXMmIGlubGluZUl0ZW1zOwotICAgICAgICB1bnNpZ25l
ZCBsZWFkaW5nSW5saW5lSXRlbUluZGV4IHsgMCB9OwotICAgICAgICBPcHRpb25hbDxQYXJ0aWFs
Q29udGVudD4gbGVhZGluZ1BhcnRpYWxDb250ZW50OwotICAgICAgICBPcHRpb25hbDxMYXlvdXRV
bml0PiBmbG9hdE1pbmltdW1Mb2dpY2FsQm90dG9tOwotICAgIH07Ci0KICAgICBzdHJ1Y3QgTGlu
ZUNvbnRlbnQgewogICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gdHJhaWxpbmdJbmxpbmVJdGVt
SW5kZXg7CiAgICAgICAgIE9wdGlvbmFsPFBhcnRpYWxDb250ZW50PiB0cmFpbGluZ1BhcnRpYWxD
b250ZW50OwpAQCAtNjEsNiArNDgsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IExpbmU6OlJ1
bkxpc3QgcnVuTGlzdDsKICAgICAgICAgY29uc3QgTGluZUJveCBsaW5lQm94OwogICAgIH07Cisg
ICAgTGluZUNvbnRlbnQgbGF5b3V0KExpbmUmLCB1bnNpZ25lZCBsZWFkaW5nSW5saW5lSXRlbUlu
ZGV4LCBPcHRpb25hbDxQYXJ0aWFsQ29udGVudD4gbGVhZGluZ1BhcnRpYWxDb250ZW50KTsKIAog
ICAgIHN0cnVjdCBSdW4gewogICAgICAgICBjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtOwpA
QCAtNzIsMTEgKzYwLDExIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY29uc3QgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDsgfQogICAgIGVudW0gY2xhc3MgSXNFbmRPZkxpbmUgeyBObywg
WWVzIH07Ci0gICAgSXNFbmRPZkxpbmUgcGxhY2VJbmxpbmVJdGVtKGNvbnN0IElubGluZUl0ZW0m
KTsKLSAgICB2b2lkIGNvbW1pdFBlbmRpbmdDb250ZW50KCk7Ci0gICAgTGluZUNvbnRlbnQgY2xv
c2UoKTsKKyAgICBJc0VuZE9mTGluZSBwbGFjZUlubGluZUl0ZW0oTGluZSYsIGNvbnN0IElubGlu
ZUl0ZW0mKTsKKyAgICB2b2lkIGNvbW1pdFBlbmRpbmdDb250ZW50KExpbmUmKTsKKyAgICBMaW5l
Q29udGVudCBjbG9zZShMaW5lJiwgdW5zaWduZWQgbGVhZGluZ0lubGluZUl0ZW1JbmRleCk7CiAg
ICAgYm9vbCBzaG91bGRQcm9jZXNzVW5jb21taXR0ZWRDb250ZW50KGNvbnN0IElubGluZUl0ZW0m
KSBjb25zdDsKLSAgICBJc0VuZE9mTGluZSBwcm9jZXNzVW5jb21taXR0ZWRDb250ZW50KCk7Cisg
ICAgSXNFbmRPZkxpbmUgcHJvY2Vzc1VuY29tbWl0dGVkQ29udGVudChMaW5lJik7CiAgICAgCiAg
ICAgc3RydWN0IFVuY29tbWl0dGVkQ29udGVudCB7CiAgICAgICAgIHZvaWQgYWRkKGNvbnN0IElu
bGluZUl0ZW0mLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7CkBAIC05NSw4ICs4Myw3IEBAIHBy
aXZhdGU6CiAgICAgfTsKIAogICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBtX2lu
bGluZUZvcm1hdHRpbmdDb250ZXh0OwotICAgIGNvbnN0IExpbmVJbnB1dCYgbV9saW5lSW5wdXQ7
Ci0gICAgTGluZSYgbV9saW5lOworICAgIGNvbnN0IElubGluZUl0ZW1zJiBtX2lubGluZUl0ZW1z
OwogICAgIFVuY29tbWl0dGVkQ29udGVudCBtX3VuY29tbWl0dGVkQ29udGVudDsKICAgICB1bnNp
Z25lZCBtX2NvbW1pdHRlZElubGluZUl0ZW1Db3VudCB7IDAgfTsKICAgICBWZWN0b3I8V2Vha1B0
cjxJbmxpbmVJdGVtPj4gbV9mbG9hdHM7Cg==
</data>
<flag name="review"
          id="400073"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>