<?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>204905</bug_id>
          
          <creation_ts>2019-12-05 12:10:13 -0800</creation_ts>
          <short_desc>[LFC][IFC] Introduce InlineSoftLineBreakItem</short_desc>
          <delta_ts>2019-12-05 13:26:36 -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>1595922</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-05 12:10:13 -0800</bug_when>
    <thetext>to represent preserved segment breaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595923</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-12-05 12:10:36 -0800</bug_when>
    <thetext>&lt;rdar://problem/57672472&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595940</commentid>
    <comment_count>2</comment_count>
      <attachid>384935</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-12-05 12:25:44 -0800</bug_when>
    <thetext>Created attachment 384935
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595944</commentid>
    <comment_count>3</comment_count>
      <attachid>384935</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-12-05 12:34:32 -0800</bug_when>
    <thetext>Comment on attachment 384935
Patch

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

&gt; Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp:537
&gt; +    m_inlineItemRuns.append({ softLineBreakItem, contentLogicalWidth(), { }, Display::Run::TextContext { softLineBreakItem.position(), 0, emptyString() } });

Lineboxes include &apos;\n&apos; character contained in the underlying string. Not sure if/where that matters.

&gt; Source/WebCore/layout/inlineformatting/InlineSoftLineBreakItem.h:35
&gt; +class InlineSoftLineBreakItem : public InlineItem {

Feels like this could be combined into one LineBreak class with hard and soft type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595965</commentid>
    <comment_count>4</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-05 13:22:55 -0800</bug_when>
    <thetext>Committed r253170: &lt;https://trac.webkit.org/changeset/253170&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595966</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-12-05 13:26:36 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #3)
&gt; Comment on attachment 384935 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=384935&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/InlineLineBuilder.cpp:537
&gt; &gt; +    m_inlineItemRuns.append({ softLineBreakItem, contentLogicalWidth(), { }, Display::Run::TextContext { softLineBreakItem.position(), 0, emptyString() } });
&gt; 
&gt; Lineboxes include &apos;\n&apos; character contained in the underlying string. Not
&gt; sure if/where that matters.
yeah, good point. fixed.
&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/InlineSoftLineBreakItem.h:35
&gt; &gt; +class InlineSoftLineBreakItem : public InlineItem {
&gt; 
&gt; Feels like this could be combined into one LineBreak class with hard and
&gt; soft type.
Hard line break does not have a position because it is not part of a text content. As you mentioned it could have an optional m_position but that&apos;s exactly what InlineItem is.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>384935</attachid>
            <date>2019-12-05 12:25:44 -0800</date>
            <delta_ts>2019-12-05 12:34:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204905-20191205122543.patch</filename>
            <type>text/plain</type>
            <size>27378</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDhkMGYwMGJkYTEzMGY2
NzIxOTVkNDFiNjhmYTY4YmYxMGRjMjFiZS4uMWE2ZTRhYjQzYTcyMWYzOWUwMjhmYWVjODQ1MDRj
N2FhYTdkYjIxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE5LTEyLTA1ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBJbnRyb2R1
Y2UgSW5saW5lU29mdExpbmVCcmVha0l0ZW0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNDkwNQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTc2NzI0
NzI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJl
c2VydmVkIGxpbmUgYnJlYWtzIGFwcGFyZW50bHkgcmVxdWlyZSB0ZXh0LWxpbmUgaW5saW5lIGJv
eGVzIHdpdGggcG9zaXRpb24gaW5mb3JtYXRpb24uCisgICAgICAgIFRoaXMgcGF0Y2ggcHJvdmlk
ZXMgdGhpcyBwb3NpdGlvbiBpbmZvcm1hdGlvbiBieSBpbnRyb2R1Y2luZyBJbmxpbmVTb2Z0TGlu
ZUJyZWFrSXRlbS4KKyAgICAgICAgSW5saW5lU29mdExpbmVCcmVha0l0ZW0gaXMgYSBub24tdGV4
dCBsaWtlIHN1YmNsYXNzIG9mIElubGluZUl0ZW0gd2hpY2ggaXMgY3JlYXRlZCB3aGVuCisgICAg
ICAgIHRoZSB0ZXh0IGNvbnRlbnQgaGFzIGEgcHJlc2VydmVkIGxpbmUgYnJlYWsuCisgICAgICAg
IAorICAgICAgICA8cHJlPnRleHQgY29udGVudAorICAgICAgICA8L3ByZT4KKyAgICAgICAgLT4g
W0lubGluZVRleHRJdGVtKHRleHQpXVtJbmxpbmVUZXh0SXRlbSggKV1bSW5saW5lVGV4dEl0ZW0o
Y29udGVudCldW0lubGluZVNvZnRMaW5lQnJlYWtJdGVtXQorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50SWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6c2V0
RGlzcGxheUJveGVzRm9yTGluZSk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpsaW5lRGVzY2VudE5lZWRzQ29s
bGFwc2luZyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
SXRlbS5jcHA6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSXRlbS5o
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVJdGVtOjppc0xpbmVCcmVhayBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OmlzU29mdExpbmVCcmVh
ayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06OmlzSGFyZExp
bmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUl0ZW06Omlz
Rm9yY2VkTGluZUJyZWFrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCcmVha2VyOjpDb250ZW50Ojppc0F0Q29udGVudEJvdW5kYXJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUJyZWFrZXI6OkNvbnRlbnQ6OmFwcGVuZCk6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YWxpZ25Db250ZW50VmVydGljYWxseSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjphcHBlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6YXBwZW5kTGluZUJyZWFrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhl
aWdodCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpydW5Db250ZW50
SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6Omlz
VmlzdWFsbHlOb25FbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVC
dWlsZGVyOjpUcmltbWFibGVDb250ZW50Ojp0cmltKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lQnVpbGRlcjo6UnVuOjppc0xpbmVCcmVhayBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpJbmxpbmVJdGVtUnVuOjppc0xpbmVCcmVhayBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpSdW46OmlzRm9yY2VkTGlu
ZUJyZWFrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1
aWxkZXI6OklubGluZUl0ZW1SdW46OmlzRm9yY2VkTGluZUJyZWFrIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVTb2Z0TGluZUJyZWFrSXRl
bS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVJdGVtLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lU29mdExpbmVC
cmVha0l0ZW06OnBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lU29mdExpbmVCcmVha0l0ZW06OmNyZWF0ZVNvZnRMaW5lQnJlYWtJdGVtKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lU29mdExpbmVCcmVha0l0ZW06OklubGluZVNvZnRMaW5l
QnJlYWtJdGVtKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0
SXRlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVtOjpjcmVh
dGVBbmRBcHBlbmRUZXh0SXRlbXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVU
ZXh0SXRlbTo6Y3JlYXRlU2VnbWVudEJyZWFrSXRlbSk6IERlbGV0ZWQuCisgICAgICAgICogbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0ZW0uaDoKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lVGV4dEl0ZW06OmlzV2hpdGVzcGFjZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZVRleHRJdGVtOjppc0NvbGxhcHNpYmxlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lVGV4dEl0ZW06OmlzU2VnbWVudEJyZWFrIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5
b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlubGluZUl0ZW1XaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXRDb250ZXh0OjpwbGFjZUlu
bGluZUl0ZW0pOgorCiAyMDE5LTEyLTA1ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgW0xGQ11bSUZDXSBUcmltIHRyYWlsaW5nIGxldHRlci1zcGFjaW5nIGF0IGlu
bGluZSBjb250YWluZXIgYm91bmRhcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ZGNjODI0MzgxZWRjNzAzYmY5ZWE2YTI1OGE3
YTgxMjFiMmYzNWEzLi4yYjJlYjBkMDY3NjVmNzhiYzhmY2FiMGI0ZGMzOGVmZGZhNjcxMzgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0yMDMwLDYgKzIwMzAsNyBAQAogCQk2RjFDQzFERTIyNUY4QjQ5MDA3MjBBRDIgLyogSW5s
aW5lVGV4dEl0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGMjZCQjZDMjMzNDNF
NkYwMDJGMkJFQSAvKiBMYXlvdXRDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RjI2QkI2QjIzMzQzRTVCMDAyRjJCRUEgLyogTGF5b3V0Q29u
dGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTZGMjZFQjQ4MjM0MDA0QTUwMDY5MDZFMiAvKiBMaW5lTGF5b3V0Q29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYyNkVCNDYyMzQwMDRBNTAw
NjkwNkUyIC8qIExpbmVMYXlvdXRDb250ZXh0LmggKi87IH07CisJCTZGMzYwRTUwMjM5OTk0MjEw
MDE1MTJBNyAvKiBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYzNjBFNEUyMzk5OTQyMDAwMTUxMkE3IC8qIElu
bGluZVNvZnRMaW5lQnJlYWtJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNkYzRTFGNjIyMTM2MTQyMDAwQTY1QTA4IC8qIEZsb2F0Qm94Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjNFMUY2MTIx
MzYxNDE3MDBBNjVBMDggLyogRmxvYXRCb3guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk2Rjc3ODY4ODIzNDkxQUQ4MDA0RDk2MzYgLyogRGlzcGxh
eVBhaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZGNzc4Njg3MjM0OTFBRDcwMDREOTYzNiAvKiBEaXNwbGF5UGFpbnRlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZGN0NBM0M2MjA4QzI5NTcw
MDJGMjlBQiAvKiBMYXlvdXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkY3Q0EzQzQyMDhDMjk1NjAwMkYyOUFCIC8qIExheW91dFN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTkyODMs
NiArOTI4NCw3IEBACiAJCTZGMjZCQjZCMjMzNDNFNUIwMDJGMkJFQSAvKiBMYXlvdXRDb250ZXh0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IExheW91dENvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkYyNkVCNDYyMzQwMDRBNTAwNjkwNkUyIC8qIExpbmVMYXlvdXRDb250ZXh0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpbmVMYXlvdXRDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMzVFRkFGMjE4N0NCRDUwMDQ0RTBGNCAvKiBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IElubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjM2MEU0RTIzOTk5NDIwMDAxNTEyQTcgLyogSW5s
aW5lU29mdExpbmVCcmVha0l0ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5saW5lU29mdExpbmVCcmVha0l0ZW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkYzRTFGNUYyMTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZsb2F0Qm94LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYzRTFGNjEy
MTM2MTQxNzAwQTY1QTA4IC8qIEZsb2F0Qm94LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0Qm94Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGNEE1QkQ1MjJGOUYxNkIwMEE4MEYyNSAv
KiBMYXlvdXRQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRQaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjcyMSw2ICsxNjcyMyw3IEBACiAJCQkJNkZF
MTk4MTUyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmggKi8sCiAJCQkJNkYw
Q0Q2OTIyMjlFRDMxOTAwQzU5OTRFIC8qIElubGluZUxpbmVCdWlsZGVyLmNwcCAqLywKIAkJCQk2
RjBDRDY5NDIyOUVEMzI3MDBDNTk5NEUgLyogSW5saW5lTGluZUJ1aWxkZXIuaCAqLywKKwkJCQk2
RjM2MEU0RTIzOTk5NDIwMDAxNTEyQTcgLyogSW5saW5lU29mdExpbmVCcmVha0l0ZW0uaCAqLywK
IAkJCQk2RjFDQzFEQzIyNUY4QjQxMDA3MjBBRDIgLyogSW5saW5lVGV4dEl0ZW0uY3BwICovLAog
CQkJCTZGMUNDMUREMjI1RjhCNDIwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5oICovLAogCQkJ
CTZGMjVCMjAwMjIwQTg1QUIwMDAwMDExQiAvKiBMaW5lTGF5b3V0Q29udGV4dC5jcHAgKi8sCkBA
IC0zMDI0MSw2ICszMDI0NCw3IEBACiAJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdCQ0IwIC8qIElu
bGluZUxpbmVCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRTE5ODE3MjE3ODM5N0MwMDQ0NkYw
OCAvKiBJbmxpbmVMaW5lQnJlYWtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkYwQ0Q2OTUyMjlF
RDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2
RjM2MEU1MDIzOTk5NDIxMDAxNTEyQTcgLyogSW5saW5lU29mdExpbmVCcmVha0l0ZW0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUFBNEMzQTc3MEIyQjE2NzkwMDIzMzRBMiAvKiBJbmxpbmVTdHlsZVNo
ZWV0T3duZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODVBMDk3RDkzMDIwMDk0QzlFNCAv
KiBJbmxpbmVUZXh0Qm94LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzAxMDcwMTE5MjU5NERGMDA4
QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMzMTE5LDcg
KzMzMTIzLDYgQEAKIAkJMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0
ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJQnVp
bGRJbmRlcGVuZGVudFRhcmdldHNJblBhcmFsbGVsID0gWUVTOwogCQkJCURlZmF1bHRCdWlsZFN5
c3RlbVR5cGVGb3JXb3Jrc3BhY2UgPSBPcmlnaW5hbDsKIAkJCQlMYXN0U3dpZnRVcGRhdGVDaGVj
ayA9IDA3MDA7CiAJCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDEwMDA7CkBAIC0zMzQwMSw3ICszMzQw
NCw2IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFz
ayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKLQkJCQkyRDQxNTBERTFDMUY4NjhDMDAwQTNC
QTQgLyogKG51bGwpIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE3MTRFQUMxQ0Y2NTk1MTAwNDcyM0M0
IC8qIEdDT2JzZXJ2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE3REE2RDkxMzczNEU2
RTAwN0M1N0ZCIC8qIEludGVybmFscy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTc5RjBEQTFC
OTc3NEZFMDBFRDBBMjcgLyogSW50ZXJuYWxzLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggZTAzZDEyMTQ1ZWQ5ODhkMjNmMzgzNzY0Nzhm
MGE3MTg1OWViY2M0ZS4uNjIxZmI4YjRiNmU3YWU3YWI3ZDUyMDM2YWI4M2I0MTJjMTIzYjY3MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtMzUyLDcgKzM1Miw3IEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbGxlY3RJbmxpbmVDb250ZW50SWZOZWVk
ZWQoKQogICAgICAgICAgICAgaWYgKHRyZWF0QXNJbmxpbmVDb250YWluZXIobGF5b3V0Qm94KSkK
ICAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYWRkSW5saW5lSXRlbShtYWtlVW5pcXVl
PElubGluZUl0ZW0+KGxheW91dEJveCwgSW5saW5lSXRlbTo6VHlwZTo6Q29udGFpbmVyRW5kKSk7
CiAgICAgICAgICAgICBlbHNlIGlmIChsYXlvdXRCb3guaXNMaW5lQnJlYWtCb3goKSkKLSAgICAg
ICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYWRkSW5saW5lSXRlbShtYWtlVW5pcXVlPElubGlu
ZUl0ZW0+KGxheW91dEJveCwgSW5saW5lSXRlbTo6VHlwZTo6Rm9yY2VkTGluZUJyZWFrKSk7Cisg
ICAgICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLmFkZElubGluZUl0ZW0obWFrZVVuaXF1ZTxJ
bmxpbmVJdGVtPihsYXlvdXRCb3gsIElubGluZUl0ZW06OlR5cGU6OkhhcmRMaW5lQnJlYWspKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQog
ICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRJbmxpbmVJdGVtKG1ha2VVbmlxdWU8
SW5saW5lSXRlbT4obGF5b3V0Qm94LCBJbmxpbmVJdGVtOjpUeXBlOjpGbG9hdCkpOwogICAgICAg
ICAgICAgZWxzZSB7CkBAIC00NDUsNyArNDQ1LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6c2V0RGlzcGxheUJveGVzRm9yTGluZShjb25zdCBMaW5lTGF5b3V0Q29udGV4dDo6TGkK
ICAgICAgICAgaWYgKGluaXRpYXRlc0lubGluZVJ1bikKICAgICAgICAgICAgIGlubGluZUNvbnRl
bnQucnVucy5hcHBlbmQoeyBsaW5lSW5kZXgsIGxpbmVSdW4ubGF5b3V0Qm94KCksIGxpbmVSdW4u
bG9naWNhbFJlY3QoKSwgbGluZVJ1bi50ZXh0Q29udGV4dCgpIH0pOwogCi0gICAgICAgIGlmIChs
aW5lUnVuLmlzRm9yY2VkTGluZUJyZWFrKCkpIHsKKyAgICAgICAgaWYgKGxpbmVSdW4uaXNMaW5l
QnJlYWsoKSkgewogICAgICAgICAgICAgZGlzcGxheUJveC5zZXRUb3BMZWZ0KGxvZ2ljYWxSZWN0
LnRvcExlZnQoKSk7CiAgICAgICAgICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aChs
b2dpY2FsUmVjdC53aWR0aCgpKTsKICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJv
eEhlaWdodChsb2dpY2FsUmVjdC5oZWlnaHQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggNzNjMzQyZWRkYjNkNTE2YTljZDViOTBlYjk5ODM3
ZTNjMTI0YjlhOC4uZDEzOTk2YWVkOTI2NzE5ZDRmZDgwYjgxMGFkN2Y3MjE5NzI5MDc1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcApAQCAtNDcsNyAr
NDcsNyBAQCBib29sIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmxpbmVEZXNjZW50
TmVlZHNDb2xsYXBzaW5nKGNvbnN0IExpbmVCdWlsZAogICAgICAgICBpZiAocnVuLmlzQ29udGFp
bmVyRW5kKCkgfHwgbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpICE9IFZlcnRpY2Fs
QWxpZ246OkJhc2VsaW5lKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKHJ1
bi5pc0ZvcmNlZExpbmVCcmVhaygpKQorICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmIChydW4uaXNUZXh0KCkpIHsKICAg
ICAgICAgICAgIGlmICghcnVuLmlzQ29sbGFwc2VkVG9WaXN1YWxseUVtcHR5KCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0ZW0uY3Bw
CmluZGV4IGFkMjkxOGU5NTU0Y2NlYmU0MGQ0MWRhOTUzMjEwM2UwNWU2ZWQwMDUuLjUyZTRmY2Fi
MjA0ZTkwZjlmYzc0OWFkNGIxNGM0YTY1YjU1MjY5N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0ZW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0ZW0uY3BwCkBAIC0yNiw2ICsy
Niw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgogCisj
aW5jbHVkZSAiSW5saW5lVGV4dEl0ZW0uaCIKKwogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVJdGVtLmgKaW5kZXggYzlkNGUyODU2NzNm
OWFkN2RjOGFkOGY1MGVlNjI3NTBkMDE1NGJhNC4uZGFmMzU3NDcyM2Y3NjMxNmI3YjdlNjY1ODlj
ZjAyZmE1MzA0YzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lSXRlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUl0ZW0uaApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgTGF5b3V0
IHsKIGNsYXNzIElubGluZUl0ZW0gOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8SW5saW5lSXRlbT4g
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGVudW0gY2xhc3Mg
VHlwZSB7IFRleHQsIEZvcmNlZExpbmVCcmVhaywgQm94LCBGbG9hdCwgQ29udGFpbmVyU3RhcnQs
IENvbnRhaW5lckVuZCB9OworICAgIGVudW0gY2xhc3MgVHlwZSB7IFRleHQsIEhhcmRMaW5lQnJl
YWssIFNvZnRMaW5lQnJlYWssIEJveCwgRmxvYXQsIENvbnRhaW5lclN0YXJ0LCBDb250YWluZXJF
bmQgfTsKICAgICBJbmxpbmVJdGVtKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBUeXBlKTsKIAogICAg
IFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQpAQCAtNDYsNyArNDYsOSBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1RleHQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6
VGV4dDsgfQogICAgIGJvb2wgaXNCb3goKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlwZTo6
Qm94OyB9CiAgICAgYm9vbCBpc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gdHlwZSgpID09IFR5cGU6
OkZsb2F0OyB9Ci0gICAgYm9vbCBpc0ZvcmNlZExpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIHR5
cGUoKSA9PSBUeXBlOjpGb3JjZWRMaW5lQnJlYWs7IH0KKyAgICBib29sIGlzTGluZUJyZWFrKCkg
Y29uc3QgeyByZXR1cm4gaXNTb2Z0TGluZUJyZWFrKCkgfHwgaXNIYXJkTGluZUJyZWFrKCk7IH0K
KyAgICBib29sIGlzU29mdExpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBl
OjpTb2Z0TGluZUJyZWFrOyB9CisgICAgYm9vbCBpc0hhcmRMaW5lQnJlYWsoKSBjb25zdCB7IHJl
dHVybiB0eXBlKCkgPT0gVHlwZTo6SGFyZExpbmVCcmVhazsgfQogICAgIGJvb2wgaXNDb250YWlu
ZXJTdGFydCgpIGNvbnN0IHsgcmV0dXJuIHR5cGUoKSA9PSBUeXBlOjpDb250YWluZXJTdGFydDsg
fQogICAgIGJvb2wgaXNDb250YWluZXJFbmQoKSBjb25zdCB7IHJldHVybiB0eXBlKCkgPT0gVHlw
ZTo6Q29udGFpbmVyRW5kOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCcmVha2VyLmNwcAppbmRleCAxZDg2NDM2
NzE4MzhkYjJjM2YzYjk3NTZiMzdjZTg4ZGI4OGRjZmNmLi41N2ViYWZiZTRkYTU5YTY2OWI4Y2Zl
ZmFlZjE4OGFhN2ExNzFkNThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnJlYWtlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCkBAIC0xODUsNyAr
MTg1LDcgQEAgYm9vbCBMaW5lQnJlYWtlcjo6Q29udGVudDo6aXNBdENvbnRlbnRCb3VuZGFyeShj
b25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBjb24KICAgICAvLyBbaW5saW5lIGNvbnRhaW5l
ciBzdGFydF1bdGV4dCBjb250ZW50XVtpbmxpbmUgY29udGFpbmVyIGVuZF0KICAgICAvLyBBbiBp
bmNvbWluZyA8aW1nPiBib3ggd291bGQgZW5hYmxlIHVzIHRvIGNvbW1pdCB0aGUgIjxzcGFuPmNv
bnRpbnVvdXM8L3NwYW4+IiBjb250ZW50CiAgICAgLy8gd2hpbGUgYWRkaXRpb25hbCB0ZXh0IGNv
bnRlbnQgd291bGQgbm90LgotICAgIEFTU0VSVCghaW5saW5lSXRlbS5pc0Zsb2F0KCkgJiYgIWlu
bGluZUl0ZW0uaXNGb3JjZWRMaW5lQnJlYWsoKSk7CisgICAgQVNTRVJUKCFpbmxpbmVJdGVtLmlz
RmxvYXQoKSAmJiAhaW5saW5lSXRlbS5pc0xpbmVCcmVhaygpKTsKICAgICBpZiAoY29udGVudC5p
c0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ2FuJ3QgZGVjaWRlIGl0IHlldC4KICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtMjYxLDExICsyNjEsMTEgQEAgYm9vbCBMaW5lQnJlYWtlcjo6Q29udGVu
dDo6aXNBdENvbnRlbnRCb3VuZGFyeShjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBjb24K
IHZvaWQgTGluZUJyZWFrZXI6OkNvbnRlbnQ6OmFwcGVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxp
bmVJdGVtLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKIHsKICAgICBBU1NFUlQoIWlubGluZUl0
ZW0uaXNGbG9hdCgpKTsKLSAgICBBU1NFUlQoaW5saW5lSXRlbS5pc0ZvcmNlZExpbmVCcmVhaygp
IHx8ICFpc0F0Q29udGVudEJvdW5kYXJ5KGlubGluZUl0ZW0sICp0aGlzKSk7CisgICAgQVNTRVJU
KGlubGluZUl0ZW0uaXNMaW5lQnJlYWsoKSB8fCAhaXNBdENvbnRlbnRCb3VuZGFyeShpbmxpbmVJ
dGVtLCAqdGhpcykpOwogICAgIG1fY29udGlub3VzUnVucy5hcHBlbmQoeyBpbmxpbmVJdGVtLCBs
b2dpY2FsV2lkdGggfSk7CiAgICAgbV93aWR0aCArPSBsb2dpY2FsV2lkdGg7CiAgICAgLy8gRmln
dXJlIG91dCB0aGUgdHJhaWxpbmcgdHJpbW1hYmxlIHN0YXRlLgotICAgIGlmIChpbmxpbmVJdGVt
LmlzQm94KCkgfHwgaW5saW5lSXRlbS5pc0ZvcmNlZExpbmVCcmVhaygpKQorICAgIGlmIChpbmxp
bmVJdGVtLmlzQm94KCkgfHwgaW5saW5lSXRlbS5pc0xpbmVCcmVhaygpKQogICAgICAgICBtX3Ry
YWlsaW5nVHJpbW1hYmxlQ29udGVudC5yZXNldCgpOwogICAgIGVsc2UgaWYgKGlubGluZUl0ZW0u
aXNUZXh0KCkpIHsKICAgICAgICAgYXV0byYgaW5saW5lVGV4dEl0ZW0gPSBkb3duY2FzdDxJbmxp
bmVUZXh0SXRlbT4oaW5saW5lSXRlbSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXggNjM3
NGQ0ZmFmZTBjNjJkYTJiYWUyY2Q5YzkyYTdlMWJkNjg0MTM4NC4uZDM4NWU2NWRiMjJhNDE4YTk1
ZDFhMmYwYTFkY2I5NWI2Y2M0MjRiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcApAQCAtMjks
NiArMjksNyBAQAogI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQogCiAjaW5j
bHVkZSAiSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbmxpbmVTb2Z0TGlu
ZUJyZWFrSXRlbS5oIgogI2luY2x1ZGUgIlRleHRVdGlsLmgiCiAjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KIApAQCAtMjQ0LDcgKzI0NSw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFs
aWduQ29udGVudFZlcnRpY2FsbHkoUnVuTGlzdCYgcnVuTGlzdCkKIAogICAgICAgICBzd2l0Y2gg
KHZlcnRpY2FsQWxpZ24pIHsKICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZToK
LSAgICAgICAgICAgIGlmIChydW4uaXNGb3JjZWRMaW5lQnJlYWsoKSB8fCBydW4uaXNUZXh0KCkp
CisgICAgICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkgfHwgcnVuLmlzVGV4dCgpKQogICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBiYXNlbGluZU9mZnNldCgpIC0gYXNjZW50OwogICAg
ICAgICAgICAgZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewogICAgICAgICAgICAg
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJv
eChsYXlvdXRCb3gpOwpAQCAtNDA1LDcgKzQwNiw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVu
ZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkK
IHsKICAgICBpZiAoaW5saW5lSXRlbS5pc1RleHQoKSkKICAgICAgICAgYXBwZW5kVGV4dENvbnRl
bnQoZG93bmNhc3Q8SW5saW5lVGV4dEl0ZW0+KGlubGluZUl0ZW0pLCBsb2dpY2FsV2lkdGgpOwot
ICAgIGVsc2UgaWYgKGlubGluZUl0ZW0uaXNGb3JjZWRMaW5lQnJlYWsoKSkKKyAgICBlbHNlIGlm
IChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkpCiAgICAgICAgIGFwcGVuZExpbmVCcmVhayhpbmxp
bmVJdGVtKTsKICAgICBlbHNlIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSkKICAg
ICAgICAgYXBwZW5kSW5saW5lQ29udGFpbmVyU3RhcnQoaW5saW5lSXRlbSwgbG9naWNhbFdpZHRo
KTsKQEAgLTUyOCwxMyArNTI5LDE4IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZFJlcGxhY2Vk
SW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuCiAKIHZvaWQg
TGluZUJ1aWxkZXI6OmFwcGVuZExpbmVCcmVhayhjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVt
KQogewotICAgIG1faW5saW5lSXRlbVJ1bnMuYXBwZW5kKHsgaW5saW5lSXRlbSwgY29udGVudExv
Z2ljYWxXaWR0aCgpLCB7IH0gfSk7CisgICAgaWYgKGlubGluZUl0ZW0uaXNIYXJkTGluZUJyZWFr
KCkpCisgICAgICAgIHJldHVybiBtX2lubGluZUl0ZW1SdW5zLmFwcGVuZCh7IGlubGluZUl0ZW0s
IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgeyB9IH0pOworICAgIC8vIFNvZnQgbGluZSBicmVha3Mg
KHByZXNlcnZlZCBuZXcgbGluZSBjaGFyYWN0ZXJzKSByZXF1aXJlIGlubGluZSB0ZXh0IGJveGVz
IGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCisgICAgQVNTRVJUKGlubGluZUl0ZW0uaXNTb2Z0
TGluZUJyZWFrKCkpOworICAgIGF1dG8mIHNvZnRMaW5lQnJlYWtJdGVtID0gZG93bmNhc3Q8SW5s
aW5lU29mdExpbmVCcmVha0l0ZW0+KGlubGluZUl0ZW0pOworICAgIG1faW5saW5lSXRlbVJ1bnMu
YXBwZW5kKHsgc29mdExpbmVCcmVha0l0ZW0sIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgeyB9LCBE
aXNwbGF5OjpSdW46OlRleHRDb250ZXh0IHsgc29mdExpbmVCcmVha0l0ZW0ucG9zaXRpb24oKSwg
MCwgZW1wdHlTdHJpbmcoKSB9IH0pOwogfQogCiB2b2lkIExpbmVCdWlsZGVyOjphZGp1c3RCYXNl
bGluZUFuZExpbmVIZWlnaHQoY29uc3QgUnVuJiBydW4pCiB7CiAgICAgYXV0byYgYmFzZWxpbmUg
PSBtX2xpbmVCb3guYmFzZWxpbmUoKTsKLSAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0Zv
cmNlZExpbmVCcmVhaygpKSB7CisgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJl
YWsoKSkgewogICAgICAgICAvLyBGb3IgdGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUg
ZWl0aGVyIHRocm91Z2ggdGhlIGluaXRpYWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGluZyBj
b250ZXh0IHJvb3QpIG9yCiAgICAgICAgIC8vIHRocm91Z2ggdGhlIGlubGluZSBjb250YWluZXIg
KHN0YXJ0KSAtc2VlIGFib3ZlLiBOb3JtYWxseSB0aGUgdGV4dCBjb250ZW50IGl0c2VsZiBkb2Vz
IG5vdCBzdHJldGNoIHRoZSBsaW5lLgogICAgICAgICBpZiAoIW1faW5pdGlhbFN0cnV0KQpAQCAt
NjIyLDcgKzYyOCw3IEBAIExheW91dFVuaXQgTGluZUJ1aWxkZXI6OnJ1bkNvbnRlbnRIZWlnaHQo
Y29uc3QgUnVuJiBydW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX3NraXBBbGlnbm1lbnQpOwog
ICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcnVuLnN0eWxlKCkuZm9udE1ldHJpY3MoKTsKLSAgICBp
ZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0ZvcmNlZExpbmVCcmVhaygpKQorICAgIGlmIChydW4u
aXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpCiAgICAgICAgIHJldHVybiBmb250TWV0cmlj
cy5oZWlnaHQoKTsKIAogICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0Nv
bnRhaW5lckVuZCgpKQpAQCAtNjUzLDcgKzY1OSw3IEBAIGJvb2wgTGluZUJ1aWxkZXI6OmlzVmlz
dWFsbHlOb25FbXB0eShjb25zdCBJbmxpbmVJdGVtUnVuJiBydW4pIGNvbnN0CiAgICAgICAgIHJl
dHVybiBib3hHZW9tZXRyeS5ib3JkZXJSaWdodCgpIHx8IChib3hHZW9tZXRyeS5wYWRkaW5nUmln
aHQoKSAmJiBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZSgpKTsKICAgICB9CiAKLSAg
ICBpZiAocnVuLmlzRm9yY2VkTGluZUJyZWFrKCkpCisgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChydW4uaXNCb3goKSkgewpAQCAtNzMz
LDcgKzczOSw3IEBAIExheW91dFVuaXQgTGluZUJ1aWxkZXI6OlRyaW1tYWJsZUNvbnRlbnQ6OnRy
aW0oKQogICAgICAgICBhdXRvJiBydW4gPSBtX2lubGluZWl0ZW1SdW5MaXN0W2luZGV4XTsKICAg
ICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoLWFjY3VtdWxhdGVkVHJpbW1lZFdpZHRoKTsKICAg
ICAgICAgaWYgKCFydW4uaXNUZXh0KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChydW4uaXNDb250
YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpIHx8IHJ1bi5pc0ZvcmNlZExpbmVC
cmVhaygpKTsKKyAgICAgICAgICAgIEFTU0VSVChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1
bi5pc0NvbnRhaW5lckVuZCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChydW4uaXNXaGl0ZXNwYWNlKCkpIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQnVpbGRlci5oCmluZGV4IDFjMDE0NzljZDAxZjY1YjA4MWJmMTYyNTlhMWU1YTQ1Yjhk
OWQzOTguLjM4OTdjZDc0ZGQ2OWNmYWZlYTg0ZTVjY2E0ZWJhOWQ1MGNmNTBiYTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWls
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJ1aWxkZXIuaApAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgYm9vbCBp
c1RleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gSW5saW5lSXRlbTo6VHlwZTo6VGV4dDsg
fQogICAgICAgICBib29sIGlzQm94KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IElubGluZUl0
ZW06OlR5cGU6OkJveDsgfQotICAgICAgICBib29sIGlzRm9yY2VkTGluZUJyZWFrKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlID09IElubGluZUl0ZW06OlR5cGU6OkZvcmNlZExpbmVCcmVhazsgfQor
ICAgICAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IElubGlu
ZUl0ZW06OlR5cGU6OkhhcmRMaW5lQnJlYWsgfHwgbV90eXBlID09IElubGluZUl0ZW06OlR5cGU6
OlNvZnRMaW5lQnJlYWs7IH0KICAgICAgICAgYm9vbCBpc0NvbnRhaW5lclN0YXJ0KCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlID09IElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lclN0YXJ0OyB9CiAg
ICAgICAgIGJvb2wgaXNDb250YWluZXJFbmQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gSW5s
aW5lSXRlbTo6VHlwZTo6Q29udGFpbmVyRW5kOyB9CiAKQEAgLTE2OCw3ICsxNjgsNyBAQCBwcml2
YXRlOgogICAgICAgICBib29sIGlzQm94KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtLmlz
Qm94KCk7IH0KICAgICAgICAgYm9vbCBpc0NvbnRhaW5lclN0YXJ0KCkgY29uc3QgeyByZXR1cm4g
bV9pbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKTsgfQogICAgICAgICBib29sIGlzQ29udGFp
bmVyRW5kKCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCk7IH0K
LSAgICAgICAgYm9vbCBpc0ZvcmNlZExpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5l
SXRlbS5pc0ZvcmNlZExpbmVCcmVhaygpOyB9CisgICAgICAgIGJvb2wgaXNMaW5lQnJlYWsoKSBj
b25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0uaXNMaW5lQnJlYWsoKTsgfQogICAgICAgICBJbmxp
bmVJdGVtOjpUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUl0ZW0udHlwZSgpOyB9
CiAKICAgICAgICAgdm9pZCBzZXRJc0NvbGxhcHNlZCgpIHsgbV9pc0NvbGxhcHNlZCA9IHRydWU7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZVNvZnRMaW5lQnJlYWtJdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyMGI3NWVlNGE2
YzQ1MTljOGFiYWMyYzg4ZThmY2FjYzZhMjk4N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVTb2Z0TGluZUJyZWFrSXRlbS5o
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShMQVlPVVRfRk9STUFUVElOR19DT05URVhUKQorCisjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworY2xhc3MgSW5saW5l
U29mdExpbmVCcmVha0l0ZW0gOiBwdWJsaWMgSW5saW5lSXRlbSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbT4gY3JlYXRlU29mdExp
bmVCcmVha0l0ZW0oY29uc3QgQm94JiwgdW5zaWduZWQgcG9zaXRpb24pOworCisgICAgdW5zaWdu
ZWQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aW9uOyB9CisKKyAgICBJbmxpbmVT
b2Z0TGluZUJyZWFrSXRlbShjb25zdCBCb3gmLCB1bnNpZ25lZCBwb3NpdGlvbik7Citwcml2YXRl
OgorICAgIHVuc2lnbmVkIG1fcG9zaXRpb24geyAwIH07Cit9OworCitzdGQ6OnVuaXF1ZV9wdHI8
SW5saW5lU29mdExpbmVCcmVha0l0ZW0+IElubGluZVNvZnRMaW5lQnJlYWtJdGVtOjpjcmVhdGVT
b2Z0TGluZUJyZWFrSXRlbShjb25zdCBCb3gmIGlubGluZUJveCwgdW5zaWduZWQgcG9zaXRpb24p
Cit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8SW5saW5lU29mdExpbmVCcmVha0l0ZW0+KGlubGlu
ZUJveCwgcG9zaXRpb24pOworfQorCitJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbTo6SW5saW5lU29m
dExpbmVCcmVha0l0ZW0oY29uc3QgQm94JiBpbmxpbmVCb3gsIHVuc2lnbmVkIHBvc2l0aW9uKQor
ICAgIDogSW5saW5lSXRlbShpbmxpbmVCb3gsIFR5cGU6OlNvZnRMaW5lQnJlYWspCisgICAgLCBt
X3Bvc2l0aW9uKHBvc2l0aW9uKQoreworfQorCit9Cit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfSU5MSU5FX0lURU0oSW5saW5lU29mdExpbmVCcmVha0l0ZW0sIGlzU29mdExpbmVCcmVhaygp
KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZVRleHRJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmNwcAppbmRleCBiZGRmOTAyNWJhNjc3YTRiMWIyYjVk
M2IxNGZlZDAyYTJiMWRhNWMxLi5kNDIyOWYxMGU5Yzk4ZjE0YTIwYjI4ZDgwNmU1M2I3ZjFiZWVi
NGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVUZXh0SXRlbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lVGV4dEl0ZW0uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJC
cmVha0xpbmVzLmgiCiAjaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKKyNpbmNsdWRlICJJbmxpbmVT
b2Z0TGluZUJyZWFrSXRlbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5
b3V0IHsKQEAgLTEwNiw3ICsxMDcsNyBAQCB2b2lkIElubGluZVRleHRJdGVtOjpjcmVhdGVBbmRB
cHBlbmRUZXh0SXRlbXMoSW5saW5lSXRlbXMmIGlubGluZUNvbnRlbnQsIGNvbnN0CiAKICAgICAg
ICAgLy8gU2VnbWVudCBicmVha3Mgd2l0aCBwcmVzZXJ2ZSBuZXcgbGluZSBzdHlsZSAod2hpdGUt
c3BhY2U6IHByZSwgcHJlLXdyYXAsIGJyZWFrLXNwYWNlcyBhbmQgcHJlLWxpbmUpIGNvbXB1dGUg
dG8gZm9yY2VkIGxpbmUgYnJlYWsuCiAgICAgICAgIGlmIChpc1NlZ21lbnRCcmVha0NhbmRpZGF0
ZSh0ZXh0W2N1cnJlbnRQb3NpdGlvbl0pICYmIHN0eWxlLnByZXNlcnZlTmV3bGluZSgpKSB7Ci0g
ICAgICAgICAgICBpbmxpbmVDb250ZW50LmFwcGVuZChtYWtlVW5pcXVlPElubGluZUl0ZW0+KGlu
bGluZUJveCwgVHlwZTo6Rm9yY2VkTGluZUJyZWFrKSk7CisgICAgICAgICAgICBpbmxpbmVDb250
ZW50LmFwcGVuZChJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbTo6Y3JlYXRlU29mdExpbmVCcmVha0l0
ZW0oaW5saW5lQm94LCBjdXJyZW50UG9zaXRpb24pKTsKICAgICAgICAgICAgICsrY3VycmVudFBv
c2l0aW9uOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTEzNiwxMSArMTM3
LDYgQEAgc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRJdGVtPiBJbmxpbmVUZXh0SXRlbTo6Y3Jl
YXRlTm9uV2hpdGVzcGFjZUl0ZW0oY29uc3QgQm8KICAgICByZXR1cm4gbWFrZVVuaXF1ZTxJbmxp
bmVUZXh0SXRlbT4oaW5saW5lQm94LCBzdGFydCwgbGVuZ3RoLCB3aWR0aCwgVGV4dEl0ZW1UeXBl
OjpOb25XaGl0ZXNwYWNlKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPElubGluZVRleHRJdGVtPiBJ
bmxpbmVUZXh0SXRlbTo6Y3JlYXRlU2VnbWVudEJyZWFrSXRlbShjb25zdCBCb3gmIGlubGluZUJv
eCwgdW5zaWduZWQgcG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8SW5saW5lVGV4
dEl0ZW0+KGlubGluZUJveCwgcG9zaXRpb24sIDEsIFdURjo6bnVsbG9wdCwgVGV4dEl0ZW1UeXBl
OjpTZWdtZW50QnJlYWspOwotfQotCiBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEl0ZW0+IElu
bGluZVRleHRJdGVtOjpjcmVhdGVFbXB0eUl0ZW0oY29uc3QgQm94JiBpbmxpbmVCb3gpCiB7CiAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8SW5saW5lVGV4dEl0ZW0+KGlubGluZUJveCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRl
bS5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lVGV4dEl0
ZW0uaAppbmRleCA0MjVhYWUxYjRmYjE1N2I2ZDU3MTA4ZmU4MWFkNGNiNjY3OWNlZTdhLi5lM2Ni
YTFkYmE1YzA2NDdjMzE2ZTllMWExYTdhZmMzMTNjMzk5NjQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZVRleHRJdGVtLmgKQEAg
LTM5LDIyICszOSwyMCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElu
bGluZVRleHRJdGVtPiBjcmVhdGVXaGl0ZXNwYWNlSXRlbShjb25zdCBCb3gmLCB1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgbGVuZ3RoLCBPcHRpb25hbDxMYXlvdXRVbml0PiB3aWR0aCk7CiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0SXRlbT4gY3JlYXRlTm9uV2hpdGVzcGFj
ZUl0ZW0oY29uc3QgQm94JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCwgT3B0aW9u
YWw8TGF5b3V0VW5pdD4gd2lkdGgpOwotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5l
VGV4dEl0ZW0+IGNyZWF0ZVNlZ21lbnRCcmVha0l0ZW0oY29uc3QgQm94JiwgdW5zaWduZWQgcG9z
aXRpb24pOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEl0ZW0+IGNyZWF0
ZUVtcHR5SXRlbShjb25zdCBCb3gmKTsKIAogICAgIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydDsgfQogICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHN0YXJ0
KCkgKyBsZW5ndGgoKTsgfQogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVuZ3RoOyB9CiAKLSAgICBib29sIGlzV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dEl0ZW1UeXBlID09IFRleHRJdGVtVHlwZTo6V2hpdGVzcGFjZSB8fCBpc1NlZ21lbnRCcmVhaygp
OyB9CisgICAgYm9vbCBpc1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3RleHRJdGVtVHlw
ZSA9PSBUZXh0SXRlbVR5cGU6OldoaXRlc3BhY2U7IH0KICAgICBib29sIGlzQ29sbGFwc2libGUo
KSBjb25zdCB7IHJldHVybiBpc1doaXRlc3BhY2UoKSAmJiBzdHlsZSgpLmNvbGxhcHNlV2hpdGVT
cGFjZSgpOyB9Ci0gICAgYm9vbCBpc1NlZ21lbnRCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4
dEl0ZW1UeXBlID09IFRleHRJdGVtVHlwZTo6U2VnbWVudEJyZWFrOyB9CiAgICAgT3B0aW9uYWw8
TGF5b3V0VW5pdD4gd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEl0ZW0+IGxlZnQodW5zaWduZWQgbGVuZ3RoKSBjb25zdDsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lVGV4dEl0ZW0+IHJpZ2h0KHVuc2lnbmVkIGxlbmd0
aCkgY29uc3Q7CiAKLSAgICBlbnVtIGNsYXNzIFRleHRJdGVtVHlwZSB7IFVuZGVmaW5lZCwgV2hp
dGVzcGFjZSwgTm9uV2hpdGVzcGFjZSwgU2VnbWVudEJyZWFrIH07CisgICAgZW51bSBjbGFzcyBU
ZXh0SXRlbVR5cGUgeyBVbmRlZmluZWQsIFdoaXRlc3BhY2UsIE5vbldoaXRlc3BhY2UgfTsKICAg
ICBJbmxpbmVUZXh0SXRlbShjb25zdCBCb3gmLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoLCBPcHRpb25hbDxMYXlvdXRVbml0PiB3aWR0aCwgVGV4dEl0ZW1UeXBlKTsKICAgICBJbmxp
bmVUZXh0SXRlbShjb25zdCBCb3gmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCmluZGV4IGZk
MTAxODQ5MzEzOWJlMzg3ZTNjNWNiM2UzMGZkMjM0NDNmMDYwYTQuLjIyYWQwNzRiMGVlZDg4MTlm
MjkxYTE4ZmU5ZDJkOTIzNmVjZTYxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAKQEAgLTM3
LDcgKzM3LDcgQEAgbmFtZXNwYWNlIExheW91dCB7CiAKIHN0YXRpYyBMYXlvdXRVbml0IGlubGlu
ZUl0ZW1XaWR0aChjb25zdCBGb3JtYXR0aW5nQ29udGV4dCYgZm9ybWF0dGluZ0NvbnRleHQsIGNv
bnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0
KQogewotICAgIGlmIChpbmxpbmVJdGVtLmlzRm9yY2VkTGluZUJyZWFrKCkpCisgICAgaWYgKGlu
bGluZUl0ZW0uaXNMaW5lQnJlYWsoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGlmIChp
czxJbmxpbmVUZXh0SXRlbT4oaW5saW5lSXRlbSkpIHsKQEAgLTE3NSw4ICsxNzUsOCBAQCBMaW5l
TGF5b3V0Q29udGV4dDo6SXNFbmRPZkxpbmUgTGluZUxheW91dENvbnRleHQ6OnBsYWNlSW5saW5l
SXRlbShMaW5lQnVpbGRlciYgbAogICAgICAgICBsaW5lLnNldEhhc0ludHJ1c2l2ZUZsb2F0KCk7
CiAgICAgICAgIHJldHVybiBJc0VuZE9mTGluZTo6Tm87CiAgICAgfQotICAgIC8vIEZvcmNlZCBs
aW5lIGJyZWFrcyBhcmUgYWxzbyBzcGVjaWFsLgotICAgIGlmIChpbmxpbmVJdGVtLmlzRm9yY2Vk
TGluZUJyZWFrKCkpIHsKKyAgICAvLyBMaW5lIGJyZWFrcyBhcmUgYWxzbyBzcGVjaWFsLgorICAg
IGlmIChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkpIHsKICAgICAgICAgYXV0byBpc0VuZE9mTGlu
ZSA9ICFtX3VuY29tbWl0dGVkQ29udGVudC5pc0VtcHR5KCkgPyBwcm9jZXNzVW5jb21taXR0ZWRD
b250ZW50KGxpbmUpIDogSXNFbmRPZkxpbmU6Ok5vOwogICAgICAgICAvLyBXaGVuIHRoZSB1bmNv
bW1pdHRlZCBjb250ZW50IGZpdHMob3IgdGhlIGxpbmUgaXMgZW1wdHkpLCBhZGQgdGhlIGxpbmUg
YnJlYWsgdG8gdGhpcyBsaW5lIGFzIHdlbGwuCiAgICAgICAgIGlmIChpc0VuZE9mTGluZSA9PSBJ
c0VuZE9mTGluZTo6Tm8pIHsK
</data>
<flag name="review"
          id="400772"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>