<?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>191445</bug_id>
          
          <creation_ts>2018-11-08 16:53:24 -0800</creation_ts>
          <short_desc>[LFC][IFC] Move some code from InlineFormattingContext::Line to InlineFormattingContext/Geometry</short_desc>
          <delta_ts>2018-11-09 08:54:29 -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>1476728</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-11-08 16:53:24 -0800</bug_when>
    <thetext>The idea here is Line should not need to deal with all the post processing activities like aligning the runs (there will be more)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476770</commentid>
    <comment_count>1</comment_count>
      <attachid>354302</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-11-08 18:58:36 -0800</bug_when>
    <thetext>Created attachment 354302
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476792</commentid>
    <comment_count>2</comment_count>
      <attachid>354311</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-11-08 21:21:45 -0800</bug_when>
    <thetext>Created attachment 354311
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476859</commentid>
    <comment_count>3</comment_count>
      <attachid>354311</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-11-09 05:22:27 -0800</bug_when>
    <thetext>Comment on attachment 354311
Patch

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

&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContext.h:87
&gt;          InlineFormattingState&amp; m_formattingState;

Maybe the InlineFormattingState can be passed to the functions that need it? It seems bit silly to have this backpointer in every Line instance.

&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp:111
&gt; +    expansionBehavior ^= AllowTrailingExpansion;
&gt; +    expansionBehavior |= ForbidTrailingExpansion;

Should modernize this to use OptionSet at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476860</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-11-09 05:23:04 -0800</bug_when>
    <thetext>(neither comment has much to do with this patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476893</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-11-09 07:29:06 -0800</bug_when>
    <thetext>Committed r238028: &lt;https://trac.webkit.org/changeset/238028&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476896</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-09 07:30:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/45943491&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476924</commentid>
    <comment_count>7</comment_count>
      <attachid>354311</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-11-09 08:53:19 -0800</bug_when>
    <thetext>Comment on attachment 354311
Patch

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

&gt;&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContext.h:87
&gt;&gt;          InlineFormattingState&amp; m_formattingState;
&gt; 
&gt; Maybe the InlineFormattingState can be passed to the functions that need it? It seems bit silly to have this backpointer in every Line instance.

Actually Line seems to be a stack object so this comment doesn&apos;t make much sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476925</commentid>
    <comment_count>8</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-11-09 08:54:29 -0800</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #7)
&gt; Comment on attachment 354311 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=354311&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContext.h:87
&gt; &gt;&gt;          InlineFormattingState&amp; m_formattingState;
&gt; &gt; 
&gt; &gt; Maybe the InlineFormattingState can be passed to the functions that need it? It seems bit silly to have this backpointer in every Line instance.
&gt; 
&gt; Actually Line seems to be a stack object so this comment doesn&apos;t make much
&gt; sense.
It is indeed a stack object and we only construct one per formatting context.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354302</attachid>
            <date>2018-11-08 18:58:36 -0800</date>
            <delta_ts>2018-11-08 21:21:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191445-20181108185833.patch</filename>
            <type>text/plain</type>
            <size>21538</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3OTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTdjNmYwMTVjY2VhMDQ0
ZmIzOWMzYmMzMGE0ZGIzYjIxM2IzNWFjNC4uNTllM2M0MDNhYmQ1NDNjMTIwMDQwNWU2NmY5MDA4
MTBjYTcyMTYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE4LTExLTA4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIHNv
bWUgY29kZSBmcm9tIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lIHRvIElubGluZUZvcm1h
dHRpbmdDb250ZXh0L0dlb21ldHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTE0NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgTGluZSBzaG91bGQgbm90IGhhdmUg
dG8gZGVhbCB3aXRoIGFsbCB0aGUgcG9zdCBwcm9jZXNzaWcgdGFza3MgbGlrZSB0aGUgcnVucyBm
aW5hbCBhbGlnbWVudHMuCisgICAgICAgIChUaGUgbGluZSBjbGFzcyB3b3VsZCBldmVudHVhbGx5
IHR1cm4gaW50byBhIGNvbGxlY3Rpb24gb2YgcmFuZG9tIHRoaW5ncykuCisKKyAgICAgICAgKiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpjbG9zZUxpbmUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6YXBwZW5kQ29udGVudFRvTGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbmxpbmVDb250ZW50IGNvbnN0KToKKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5o
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGlu
ZTo6Y29udGVudExvZ2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6Omxhc3RSdW5UeXBlIGNvbnN0KToKKyAgICAg
ICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjphZGp1c3RlZExpbmVMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6anVzdGlmeVJ1bnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKToKKyAgICAgICAgKiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9MaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6aW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpjb250ZW50TG9naWNh
bFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmU6OmFwcGVuZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjphZGp1c3RlZExpbmVMb2dpY2FsTGVmdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpjb250ZW50TG9n
aWNhbFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmU6OmNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OkxpbmU6Omp1c3RpZnlSdW5zKTogRGVsZXRlZC4KKwogMjAxOC0xMS0wOCAgWmFsYW4gQnVqdGFz
ICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtCRkNdW0lGQ10gSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmU6OmFsaWduUnVucygpIHNob3VsZCB0YWtlIGNhcmUgb2YgYWxsIHRoZSBh
bGlnbm1lbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDIyMTIw
NzFkMjY2ZGU1NWIxMjU4ZDZmM2RjNDM4ZWFmOWRhNGI0MmQuLjNiYTliZWZhN2VmYzA5M2I0OTdj
NThlZmMxMzRlZDE4MDc1ZjdhZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5j
cHAKQEAgLTEyNywxMyArMTI3LDU0IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omlu
aXRpYWxpemVOZXdMaW5lKExpbmUmIGxpbmUpIGNvbnN0CiAgICAgbGluZS5pbml0KGxvZ2ljYWxS
ZWN0KTsKIH0KIAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y2xvc2VMaW5lKExpbmUm
IGxpbmUsIExhc3RMaW5lIGxhc3RMaW5lKSBjb25zdAoreworICAgIGF1dG8gbGluZVJhbmdlID0g
bGluZS5jbG9zZSgpOworICAgIEFTU0VSVCghbGluZVJhbmdlLmZpcnN0UnVuSW5kZXggfHwgbGlu
ZVJhbmdlLmxhc3RSdW5JbmRleCk7CisKKyAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUg
PSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGZvcm1hdHRpbmdTdGF0ZSgpKTsKKyAg
ICBhdXRvIGFsaWduUnVucyA9IFsmXSB7CisKKyAgICAgICAgYXV0byBvcmlnaW5hbFRleHRBbGln
bWVudCA9IHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpOworICAgICAgICBhdXRvIGFkanV0ZWRU
ZXh0QWxpZ25tZW50ID0gb3JpZ2luYWxUZXh0QWxpZ21lbnQgIT0gVGV4dEFsaWduTW9kZTo6SnVz
dGlmeSA/IG9yaWdpbmFsVGV4dEFsaWdtZW50IDogbGFzdExpbmUgPT0gTGFzdExpbmU6Ok5vID8g
VGV4dEFsaWduTW9kZTo6SnVzdGlmeSA6IFRleHRBbGlnbk1vZGU6OkxlZnQ7CisgICAgICAgIGlm
IChhZGp1dGVkVGV4dEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KSB7CisgICAg
ICAgICAgICBHZW9tZXRyeTo6anVzdGlmeVJ1bnMoaW5saW5lRm9ybWF0dGluZ1N0YXRlLCBsaW5l
LCAqbGluZVJhbmdlLmZpcnN0UnVuSW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSBsaW5lLmNvbnRlbnRMb2dpY2Fs
TGVmdCgpOworICAgICAgICBhdXRvIGFkanVzdGVkTG9naWNhbExlZnQgPSBHZW9tZXRyeTo6YWRq
dXN0ZWRMaW5lTG9naWNhbExlZnQoYWRqdXRlZFRleHRBbGlnbm1lbnQsIGxpbmVMb2dpY2FsTGVm
dCwgbGluZS5hdmFpbGFibGVXaWR0aCgpKTsKKyAgICAgICAgaWYgKGFkanVzdGVkTG9naWNhbExl
ZnQgPT0gbGluZUxvZ2ljYWxMZWZ0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1
dG8mIGlubGluZVJ1bnMgPSBpbmxpbmVGb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygpOworICAg
ICAgICBhdXRvIGRlbHRhID0gYWRqdXN0ZWRMb2dpY2FsTGVmdCAtIGxpbmVMb2dpY2FsTGVmdDsK
KyAgICAgICAgZm9yIChhdXRvIHJ1bkluZGV4ID0gKmxpbmVSYW5nZS5maXJzdFJ1bkluZGV4OyBy
dW5JbmRleCA8IGlubGluZVJ1bnMuc2l6ZSgpOyArK3J1bkluZGV4KQorICAgICAgICAgICAgaW5s
aW5lUnVuc1tydW5JbmRleF0uc2V0TG9naWNhbExlZnQoaW5saW5lUnVuc1tydW5JbmRleF0ubG9n
aWNhbExlZnQoKSArIGRlbHRhKTsKKyAgICB9OworCisgICAgaWYgKCFsaW5lUmFuZ2UuZmlyc3RS
dW5JbmRleCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYWxpZ25SdW5zKCk7Cit9CisKK3ZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmFwcGVuZENvbnRlbnRUb0xpbmUoTGluZSYgbGluZSwg
Y29uc3QgSW5saW5lTGluZUJyZWFrZXI6OlJ1biYgcnVuKSBjb25zdAoreworICAgIGF1dG8gbGFz
dFJ1blR5cGUgPSBsaW5lLmxhc3RSdW5UeXBlKCk7CisgICAgbGluZS5hcHBlbmRDb250ZW50KHJ1
bik7CisKKyAgICBpZiAocm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9k
ZTo6SnVzdGlmeSkKKyAgICAgICAgR2VvbWV0cnk6OmNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0
aWVzKGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oZm9ybWF0dGluZ1N0YXRlKCkpLCBy
dW4uY29udGVudCwgbGFzdFJ1blR5cGUudmFsdWVfb3IoSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6
VHlwZTo6Tm9uV2hpdGVzcGFjZSkpOworfQorCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpsYXlvdXRJbmxpbmVDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyJiBpbmxpbmVSdW5Q
cm92aWRlcikgY29uc3QKIHsKICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0
YXRlKCk7CiAgICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlID0gZG93bmNhc3Q8SW5saW5l
Rm9ybWF0dGluZ1N0YXRlPihmb3JtYXR0aW5nU3RhdGUoKSk7CiAgICAgYXV0byBmbG9hdGluZ0Nv
bnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBpbmxpbmVGb3JtYXR0aW5nU3RhdGUuZmxvYXRpbmdT
dGF0ZSgpIH07CiAKLSAgICBMaW5lIGxpbmUoaW5saW5lRm9ybWF0dGluZ1N0YXRlLCByb290KCkp
OworICAgIExpbmUgbGluZShpbmxpbmVGb3JtYXR0aW5nU3RhdGUpOwogICAgIGluaXRpYWxpemVO
ZXdMaW5lKGxpbmUpOwogCiAgICAgSW5saW5lTGluZUJyZWFrZXIgbGluZUJyZWFrZXIobGF5b3V0
U3RhdGUsIGlubGluZUZvcm1hdHRpbmdTdGF0ZS5pbmxpbmVDb250ZW50KCksIGlubGluZVJ1blBy
b3ZpZGVyLnJ1bnMoKSk7CkBAIC0xNjgsMTkgKzIwOSwxOSBAQCB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpsYXlvdXRJbmxpbmVDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyJiBp
bmxpbgogICAgICAgICAgICAgaWYgKGxpbmUuaGFzQ29udGVudCgpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gUHJldmlvdXMgcnVuIGVuZGVkIHVwIGJlaW5nIGF0IHRoZSBsaW5lIGVuZC4gQWRqdXN0
IHRoZSBsaW5lIGFjY29yZGluZ2x5LgogICAgICAgICAgICAgICAgIGlmICghbGluZS5pc0Nsb3Nl
ZCgpKQotICAgICAgICAgICAgICAgICAgICBsaW5lLmNsb3NlKExpbmU6Okxhc3RMaW5lOjpObyk7
CisgICAgICAgICAgICAgICAgICAgIGNsb3NlTGluZShsaW5lLCBMYXN0TGluZTo6Tm8pOwogICAg
ICAgICAgICAgICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgfQogCiAgICAgICAgIGlmIChnZW5lcmF0ZXNJbmxpbmVSdW4pCi0gICAgICAgICAgICAg
bGluZS5hcHBlbmRDb250ZW50KCpydW4pOworICAgICAgICAgICAgYXBwZW5kQ29udGVudFRvTGlu
ZShsaW5lLCAqcnVuKTsKIAogICAgICAgICBpZiAoaXNMYXN0UnVuKQotICAgICAgICAgICAgbGlu
ZS5jbG9zZShMaW5lOjpMYXN0TGluZTo6Tm8pOworICAgICAgICAgICAgY2xvc2VMaW5lKGxpbmUs
IExhc3RMaW5lOjpObyk7CiAgICAgfQogCi0gICAgbGluZS5jbG9zZShMaW5lOjpMYXN0TGluZTo6
WWVzKTsKKyAgICBjbG9zZUxpbmUobGluZSwgTGFzdExpbmU6Olllcyk7CiB9CiAKIHZvaWQgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxh
eW91dEJveCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IGZhOTBh
YTQ2NWYyNzQ5N2ExYTI5NjQwODU2MTNhNjlhMDNjZjI1MTEuLmVmYjhjMGE4YWM3NjMxNTk0MDk0
YmI3NDJmMWNmNDhlNjUyOTA2MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaApA
QCAtNTAsNDcgKzUwLDQ2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgY2xhc3MgTGluZSB7CiAg
ICAgcHVibGljOgotICAgICAgICBMaW5lKElubGluZUZvcm1hdHRpbmdTdGF0ZSYsIGNvbnN0IEJv
eCYgZm9ybWF0dGluZ1Jvb3QpOworICAgICAgICBMaW5lKElubGluZUZvcm1hdHRpbmdTdGF0ZSYp
OwogCiAgICAgICAgIHZvaWQgaW5pdChjb25zdCBEaXNwbGF5OjpCb3g6OlJlY3QmKTsKKyAgICAg
ICAgc3RydWN0IFJ1blJhbmdlIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+
IGZpcnN0UnVuSW5kZXg7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBsYXN0
UnVuSW5kZXg7CisgICAgICAgIH07CisgICAgICAgIFJ1blJhbmdlIGNsb3NlKCk7CiAKICAgICAg
ICAgdm9pZCBhcHBlbmRDb250ZW50KGNvbnN0IElubGluZUxpbmVCcmVha2VyOjpSdW4mKTsKIAog
ICAgICAgICB2b2lkIGFkanVzdExvZ2ljYWxMZWZ0KExheW91dFVuaXQgZGVsdGEpOwogICAgICAg
ICB2b2lkIGFkanVzdExvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRhKTsKIAotICAgICAgICBl
bnVtIGNsYXNzIExhc3RMaW5lIHsgTm8sIFllcyB9OwotICAgICAgICB2b2lkIGNsb3NlKExhc3RM
aW5lID0gTGFzdExpbmU6Ok5vKTsKLQogICAgICAgICBib29sIGhhc0NvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBtX2ZpcnN0UnVuSW5kZXguaGFzX3ZhbHVlKCk7IH0KICAgICAgICAgYm9vbCBpc0Ns
b3NlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvc2VkOyB9CiAgICAgICAgIGJvb2wgaXNGaXJzdExp
bmUoKSBjb25zdCB7IHJldHVybiBtX2lzRmlyc3RMaW5lOyB9Ci0gICAgICAgIExheW91dFVuaXQg
Y29udGVudExvZ2ljYWxSaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2Fs
UmlnaHQoKSBjb25zdDsKKyAgICAgICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsgfQogICAgICAgICBMYXlvdXRVbml0
IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9hdmFpbGFibGVXaWR0aDsgfQorICAg
ICAgICBzdGQ6Om9wdGlvbmFsPElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU+IGxhc3RSdW5U
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UnVuVHlwZTsgfQogCiAgICAgICAgIExheW91dFVu
aXQgbG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFJlY3QudG9wKCk7IH0KICAg
ICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2Fs
UmVjdC5ib3R0b20oKTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBqdXN0aWZ5UnVu
cygpOwotICAgICAgICB2b2lkIGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKGNvbnN0IElu
bGluZUxpbmVCcmVha2VyOjpSdW4mKTsKLQogICAgICAgICBzdHJ1Y3QgVHJhaWxpbmdUcmltbWFi
bGVDb250ZW50IHsKICAgICAgICAgICAgIExheW91dFVuaXQgd2lkdGg7CiAgICAgICAgICAgICB1
bnNpZ25lZCBsZW5ndGg7CiAgICAgICAgIH07CiAgICAgICAgIHN0ZDo6b3B0aW9uYWw8VHJhaWxp
bmdUcmltbWFibGVDb250ZW50PiBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudDsKLSAgICAgICAg
Ym9vbCBtX2xhc3RSdW5Jc1doaXRlc3BhY2UgeyBmYWxzZSB9OworICAgICAgICBzdGQ6Om9wdGlv
bmFsPElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU+IG1fbGFzdFJ1blR5cGU7CiAgICAgICAg
IGJvb2wgbV9sYXN0UnVuQ2FuRXhwYW5kIHsgZmFsc2UgfTsKIAogICAgICAgICBJbmxpbmVGb3Jt
YXR0aW5nU3RhdGUmIG1fZm9ybWF0dGluZ1N0YXRlOwotICAgICAgICBjb25zdCBCb3gmIG1fZm9y
bWF0dGluZ1Jvb3Q7CiAKICAgICAgICAgRGlzcGxheTo6Qm94OjpSZWN0IG1fbG9naWNhbFJlY3Q7
CiAgICAgICAgIExheW91dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKIAogICAgICAgICBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiBtX2ZpcnN0UnVuSW5kZXg7Ci0gICAgICAgIGJvb2wgbV9hbGlnbm1l
bnRJc0p1c3RpZnkgeyBmYWxzZSB9OwogICAgICAgICBib29sIG1faXNGaXJzdExpbmUgeyB0cnVl
IH07CiAgICAgICAgIGJvb2wgbV9jbG9zZWQgeyB0cnVlIH07CiAgICAgfTsKQEAgLTEwMCwxMCAr
OTksMTcgQEAgcHJpdmF0ZToKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBIZWlnaHRBbmRN
YXJnaW4gaW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4oY29uc3QgTGF5b3V0U3RhdGUmLCBjb25z
dCBCb3gmKTsKICAgICAgICAgc3RhdGljIFdpZHRoQW5kTWFyZ2luIGlubGluZUJsb2NrV2lkdGhB
bmRNYXJnaW4oTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKKyAgICAgICAgc3RhdGljIExheW91
dFVuaXQgYWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoVGV4dEFsaWduTW9kZSwgTGF5b3V0VW5pdCBs
aW5lTG9naWNhbExlZnQsIExheW91dFVuaXQgcmVtYWluaW5nV2lkdGgpOworICAgICAgICBzdGF0
aWMgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVGb3JtYXR0aW5nU3RhdGUmLCBMaW5lJiwgdW5zaWdu
ZWQgZmlyc3RSdW5JbmRleCk7CisgICAgICAgIHN0YXRpYyB2b2lkIGNvbXB1dGVFeHBhbnNpb25P
cHBvcnR1bml0aWVzKElubGluZUZvcm1hdHRpbmdTdGF0ZSYsIGNvbnN0IElubGluZVJ1blByb3Zp
ZGVyOjpSdW4mLCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlIGxhc3RSdW5UeXBlKTsKICAg
ICB9OwogCiAgICAgdm9pZCBsYXlvdXRJbmxpbmVDb250ZW50KGNvbnN0IElubGluZVJ1blByb3Zp
ZGVyJikgY29uc3Q7Ci0gICAgdm9pZCBpbml0aWFsaXplTmV3TGluZShMaW5lJikgY29uc3Q7CisK
KyAgICB2b2lkIGluaXRpYWxpemVOZXdMaW5lKExpbmUmKSBjb25zdDsgICAgCisgICAgZW51bSBj
bGFzcyBMYXN0TGluZSB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIGNsb3NlTGluZShMaW5lJiwgTGFz
dExpbmUpIGNvbnN0OworICAgIHZvaWQgYXBwZW5kQ29udGVudFRvTGluZShMaW5lJiwgY29uc3Qg
SW5saW5lTGluZUJyZWFrZXI6OlJ1biYpIGNvbnN0OwogCiAgICAgdm9pZCBsYXlvdXRGb3JtYXR0
aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb21wdXRlV2lkdGhB
bmRIZWlnaHRGb3JSZXBsYWNlZElubGluZUJveChjb25zdCBCb3gmKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggN2M5ZTI5ZTBi
ZDU2MDljZmJlMjhmMjg0Nzk2NTBlYzJmOGJkMzM2Yi4uN2RmN2EwNzI2YjRjZjUzYzQyMmE5Zjhk
MGM4ZTEwZTc3ZDVlYmY5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHAKQEAgLTc3LDYgKzc3LDg3IEBAIEhlaWdodEFuZE1hcmdpbiBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZUJsb2NrSGVpZ2h0QW5kTWFyZ2luKGNv
CiAgICAgcmV0dXJuIGNvbXBsaWNhdGVkQ2FzZXMobGF5b3V0U3RhdGUsIGxheW91dEJveCk7CiB9
CiAKK0xheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjphZGp1c3Rl
ZExpbmVMb2dpY2FsTGVmdChUZXh0QWxpZ25Nb2RlIGFsaWduLCBMYXlvdXRVbml0IGxpbmVMb2dp
Y2FsTGVmdCwgTGF5b3V0VW5pdCByZW1haW5pbmdXaWR0aCkKK3sKKyAgICBzd2l0Y2ggKGFsaWdu
KSB7CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgorICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6V2ViS2l0TGVmdDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgorICAgICAgICBy
ZXR1cm4gbGluZUxvZ2ljYWxMZWZ0OworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Cisg
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoKKyAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OkVuZDoKKyAgICAgICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdCArIHN0ZDo6bWF4KHJlbWFp
bmluZ1dpZHRoLCBMYXlvdXRVbml0KCkpOworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVy
OgorICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgorICAgICAgICByZXR1cm4g
bGluZUxvZ2ljYWxMZWZ0ICsgc3RkOjptYXgocmVtYWluaW5nV2lkdGggLyAyLCBMYXlvdXRVbml0
KCkpOworICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0OworfQorCit2b2lkIElubGluZUZvcm1h
dHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6anVzdGlmeVJ1bnMoSW5saW5lRm9ybWF0dGluZ1N0YXRl
JiBmb3JtYXR0aW5nU3RhdGUsIExpbmUmIGxpbmUsIHVuc2lnbmVkIGZpcnN0UnVuSW5kZXgpCit7
CisgICAgYXV0byYgaW5saW5lUnVucyA9IGZvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCk7Cisg
ICAgYXV0byYgbGFzdElubGluZVJ1biA9IGlubGluZVJ1bnMubGFzdCgpOworCisgICAgLy8gQWRq
dXN0IChmb3JiaWQpIHRyYWlsaW5nIGV4cGFuc2lvbiBmb3IgdGhlIGxhc3QgdGV4dCBydW4gb24g
bGluZS4KKyAgICBhdXRvIGV4cGFuc2lvbkJlaGF2aW9yID0gbGFzdElubGluZVJ1bi5leHBhbnNp
b25PcHBvcnR1bml0eSgpLmJlaGF2aW9yOworICAgIC8vIFJlbW92ZSBhbGxvdyBhbmQgYWRkIGZv
cmJpZC4KKyAgICBleHBhbnNpb25CZWhhdmlvciBePSBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uOwor
ICAgIGV4cGFuc2lvbkJlaGF2aW9yIHw9IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uOworICAgIGxh
c3RJbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5iZWhhdmlvciA9IGV4cGFuc2lvbkJl
aGF2aW9yOworCisgICAgLy8gQ29sbGVjdCBleHBhbnNpb24gb3Bwb3J0dW5pdGllcyBhbmQganVz
dGlmeSB0aGUgcnVucy4KKyAgICBhdXRvIHdpZHRoVG9EaXN0cmlidXRlID0gbGluZS5hdmFpbGFi
bGVXaWR0aCgpOworICAgIGlmICh3aWR0aFRvRGlzdHJpYnV0ZSA8PSAwKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgPSAwOworICAgIGZvciAoYXV0
byBydW5JbmRleCA9IGZpcnN0UnVuSW5kZXg7IHJ1bkluZGV4IDwgaW5saW5lUnVucy5zaXplKCk7
ICsrcnVuSW5kZXgpCisgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgKz0gaW5saW5lUnVu
c1tydW5JbmRleF0uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5jb3VudDsKKworICAgIGlmICghZXhw
YW5zaW9uT3Bwb3J0dW5pdGllcykKKyAgICAgICAgcmV0dXJuOworCisgICAgZmxvYXQgZXhwYW5z
aW9uID0gd2lkdGhUb0Rpc3RyaWJ1dGUudG9GbG9hdCgpIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdGll
czsKKyAgICBMYXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsKKyAgICBmb3IgKGF1
dG8gcnVuSW5kZXggPSBmaXJzdFJ1bkluZGV4OyBydW5JbmRleCA8IGlubGluZVJ1bnMuc2l6ZSgp
OyArK3J1bkluZGV4KSB7CisgICAgICAgIGF1dG8mIGlubGluZVJ1biA9IGlubGluZVJ1bnNbcnVu
SW5kZXhdOworICAgICAgICBhdXRvIGV4cGFuc2lvbkZvclJ1biA9IGlubGluZVJ1bi5leHBhbnNp
b25PcHBvcnR1bml0eSgpLmNvdW50ICogZXhwYW5zaW9uOworCisgICAgICAgIGlubGluZVJ1bi5l
eHBhbnNpb25PcHBvcnR1bml0eSgpLmV4cGFuc2lvbiA9IGV4cGFuc2lvbkZvclJ1bjsKKyAgICAg
ICAgaW5saW5lUnVuLnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgYWNj
dW11bGF0ZWRFeHBhbnNpb24pOworICAgICAgICBpbmxpbmVSdW4uc2V0V2lkdGgoaW5saW5lUnVu
LndpZHRoKCkgKyBleHBhbnNpb25Gb3JSdW4pOworICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lv
biArPSBleHBhbnNpb25Gb3JSdW47CisgICAgfQorfQorCit2b2lkIElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMoSW5saW5lRm9y
bWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUsIGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpS
dW4mIHJ1biwgSW5saW5lUnVuUHJvdmlkZXI6OlJ1bjo6VHlwZSBsYXN0UnVuVHlwZSkKK3sKKyAg
ICBhdXRvIGlzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBbXShhdXRvIGN1cnJlbnRSdW5Jc1doaXRl
c3BhY2UsIGF1dG8gbGFzdFJ1bklzV2hpdGVzcGFjZSkgeworICAgICAgICByZXR1cm4gY3VycmVu
dFJ1bklzV2hpdGVzcGFjZSB8fCAoIWN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgJiYgIWxhc3RSdW5J
c1doaXRlc3BhY2UpOworICAgIH07CisKKyAgICBhdXRvIGV4cGFuc2lvbkJlaGF2aW9yID0gW10o
YXV0byBpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkpIHsKKyAgICAgICAgRXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uOworICAgICAgICBl
eHBhbnNpb25CZWhhdmlvciB8PSBpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkgPyBGb3JiaWRMZWFk
aW5nRXhwYW5zaW9uIDogQWxsb3dMZWFkaW5nRXhwYW5zaW9uOworICAgICAgICByZXR1cm4gZXhw
YW5zaW9uQmVoYXZpb3I7CisgICAgfTsKKworICAgIGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVu
aXR5ID0gaXNFeHBhbnNpb25PcHBvcnR1bml0eShydW4uaXNXaGl0ZXNwYWNlKCksIGxhc3RSdW5U
eXBlID09IElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6OldoaXRlc3BhY2UpOworCisgICAg
YXV0byYgY3VycmVudElubGluZVJ1biA9IGZvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCkubGFz
dCgpOworICAgIGF1dG8mIGV4cGFuc2lvbk9wcG9ydHVuaXR5ID0gY3VycmVudElubGluZVJ1bi5l
eHBhbnNpb25PcHBvcnR1bml0eSgpOworICAgIGlmIChpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkp
CisgICAgICAgICsrZXhwYW5zaW9uT3Bwb3J0dW5pdHkuY291bnQ7CisKKyAgICBleHBhbnNpb25P
cHBvcnR1bml0eS5iZWhhdmlvciA9IGV4cGFuc2lvbkJlaGF2aW9yKGlzQXRFeHBhbnNpb25PcHBv
cnR1bml0eSk7Cit9CisKIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9MaW5lLmNwcAppbmRleCBjMWRhYTNmZjEzZTdlMThmY2E0NDMxMDk2ZWE1OGJm
MWIwOWE3NmY4Li4zMWNmZTBhYTcxNGRkZjNlN2NkMjk1ZmY0MGVjYmNlYjAxZmM0ODJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lLmNwcApAQCAt
MzMsMTAgKzMzLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewog
Ci1JbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6TGluZShJbmxpbmVGb3JtYXR0aW5nU3Rh
dGUmIGZvcm1hdHRpbmdTdGF0ZSwgY29uc3QgQm94JiBmb3JtYXR0aW5nUm9vdCkKK0lubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpMaW5lOjpMaW5lKElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0
dGluZ1N0YXRlKQogICAgIDogbV9mb3JtYXR0aW5nU3RhdGUoZm9ybWF0dGluZ1N0YXRlKQotICAg
ICwgbV9mb3JtYXR0aW5nUm9vdChmb3JtYXR0aW5nUm9vdCkKLSAgICAsIG1fYWxpZ25tZW50SXNK
dXN0aWZ5KG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25N
b2RlOjpKdXN0aWZ5KQogewogfQogCkBAIC00Niw3ICs0NCw3IEBAIHZvaWQgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQ6OkxpbmU6OmluaXQoY29uc3QgRGlzcGxheTo6Qm94OjpSZWN0JiBsb2dpY2Fs
UmVjdCkKICAgICBtX2F2YWlsYWJsZVdpZHRoID0gbG9naWNhbFJlY3Qud2lkdGgoKTsKIAogICAg
IG1fZmlyc3RSdW5JbmRleCA9IHsgfTsKLSAgICBtX2xhc3RSdW5Jc1doaXRlc3BhY2UgPSBmYWxz
ZTsKKyAgICBtX2xhc3RSdW5UeXBlID0geyB9OwogICAgIG1fbGFzdFJ1bkNhbkV4cGFuZCA9IGZh
bHNlOwogICAgIG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0geyB9OwogICAgIG1fY2xvc2Vk
ID0gZmFsc2U7CkBAIC03NSwzNCArNzMsMTIgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6TGluZTo6YWRqdXN0TG9naWNhbFJpZ2h0KExheW91dFVuaXQgZGVsdGEpCiAgICAgbV9sb2dp
Y2FsUmVjdC5zaGlmdFJpZ2h0VG8obV9sb2dpY2FsUmVjdC5yaWdodCgpIC0gZGVsdGEpOwogfQog
Ci1zdGF0aWMgTGF5b3V0VW5pdCBhZGp1c3RlZExpbmVMb2dpY2FsTGVmdChUZXh0QWxpZ25Nb2Rl
IGFsaWduLCBMYXlvdXRVbml0IGxpbmVMb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCByZW1haW5pbmdX
aWR0aCkKLXsKLSAgICBzd2l0Y2ggKGFsaWduKSB7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpM
ZWZ0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKLSAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0OwotICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRS
aWdodDoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAgcmV0dXJuIGxpbmVM
b2dpY2FsTGVmdCArIHN0ZDo6bWF4KHJlbWFpbmluZ1dpZHRoLCBMYXlvdXRVbml0KCkpOwotICAg
IGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2Vi
S2l0Q2VudGVyOgotICAgICAgICByZXR1cm4gbGluZUxvZ2ljYWxMZWZ0ICsgc3RkOjptYXgocmVt
YWluaW5nV2lkdGggLyAyLCBMYXlvdXRVbml0KCkpOwotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
SnVzdGlmeToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbGluZUxvZ2ljYWxM
ZWZ0OwotfQotCiBzdGF0aWMgYm9vbCBpc1RyaW1tYWJsZUNvbnRlbnQoY29uc3QgSW5saW5lUnVu
UHJvdmlkZXI6OlJ1biYgaW5saW5lUnVuKQogewogICAgIHJldHVybiBpbmxpbmVSdW4uaXNXaGl0
ZXNwYWNlKCkgJiYgaW5saW5lUnVuLnN0eWxlKCkuY29sbGFwc2VXaGl0ZVNwYWNlKCk7CiB9CiAK
LUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmNvbnRlbnRMb2dpY2Fs
UmlnaHQoKQorTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y29udGVu
dExvZ2ljYWxSaWdodCgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2ZpcnN0UnVuSW5kZXguaGFzX3Zh
bHVlKCkpCiAgICAgICAgIHJldHVybiBtX2xvZ2ljYWxSZWN0LmxlZnQoKTsKQEAgLTExMCwzMSAr
ODYsNiBAQCBMYXlvdXRVbml0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpjb250ZW50
TG9naWNhbFJpZ2h0KCkKICAgICByZXR1cm4gbV9mb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygp
Lmxhc3QoKS5sb2dpY2FsUmlnaHQoKTsKIH0KIAotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6TGluZTo6Y29tcHV0ZUV4cGFuc2lvbk9wcG9ydHVuaXRpZXMoY29uc3QgSW5saW5lTGluZUJy
ZWFrZXI6OlJ1biYgcnVuKQotewotICAgIGlmICghbV9hbGlnbm1lbnRJc0p1c3RpZnkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGF1dG8gaXNFeHBhbnNpb25PcHBvcnR1bml0eSA9IFtdKGF1dG8g
Y3VycmVudFJ1bklzV2hpdGVzcGFjZSwgYXV0byBsYXN0UnVuSXNXaGl0ZXNwYWNlKSB7Ci0gICAg
ICAgIHJldHVybiBjdXJyZW50UnVuSXNXaGl0ZXNwYWNlIHx8ICghY3VycmVudFJ1bklzV2hpdGVz
cGFjZSAmJiAhbGFzdFJ1bklzV2hpdGVzcGFjZSk7Ci0gICAgfTsKLQotICAgIGF1dG8gZXhwYW5z
aW9uQmVoYXZpb3IgPSBbXShhdXRvIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkgewotICAgICAg
ICBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IEFsbG93VHJhaWxpbmdFeHBh
bnNpb247Ci0gICAgICAgIGV4cGFuc2lvbkJlaGF2aW9yIHw9IGlzQXRFeHBhbnNpb25PcHBvcnR1
bml0eSA/IEZvcmJpZExlYWRpbmdFeHBhbnNpb24gOiBBbGxvd0xlYWRpbmdFeHBhbnNpb247Ci0g
ICAgICAgIHJldHVybiBleHBhbnNpb25CZWhhdmlvcjsKLSAgICB9OwotCi0gICAgYXV0byBpc0F0
RXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBpc0V4cGFuc2lvbk9wcG9ydHVuaXR5KHJ1bi5jb250ZW50
LmlzV2hpdGVzcGFjZSgpLCBtX2xhc3RSdW5Jc1doaXRlc3BhY2UpOwotCi0gICAgYXV0byYgY3Vy
cmVudElubGluZVJ1biA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKS5sYXN0KCk7Ci0g
ICAgYXV0byYgZXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBjdXJyZW50SW5saW5lUnVuLmV4cGFuc2lv
bk9wcG9ydHVuaXR5KCk7Ci0gICAgaWYgKGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkKLSAgICAg
ICAgKytleHBhbnNpb25PcHBvcnR1bml0eS5jb3VudDsKLQotICAgIGV4cGFuc2lvbk9wcG9ydHVu
aXR5LmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3IoaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5
KTsKLX0KLQogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6YXBwZW5kQ29udGVu
dChjb25zdCBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuJiBydW4pCiB7CiAgICAgQVNTRVJUKCFpc0Ns
b3NlZCgpKTsKQEAgLTE2NCwxMCArMTE1LDggQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6TGluZTo6YXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuJgogICAg
ICAgICBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+c2V0TGVuZ3RoKGlubGluZVJ1bi50ZXh0Q29u
dGV4dCgpLT5sZW5ndGgoKSArIHRleHRSdW4tPmxlbmd0aCgpKTsKICAgICB9CiAKLSAgICBjb21w
dXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhydW4pOwotCiAgICAgbV9hdmFpbGFibGVXaWR0aCAt
PSBydW4ud2lkdGg7Ci0gICAgbV9sYXN0UnVuSXNXaGl0ZXNwYWNlID0gY29udGVudC5pc1doaXRl
c3BhY2UoKTsKKyAgICBtX2xhc3RSdW5UeXBlID0gY29udGVudC50eXBlKCk7CiAgICAgbV9sYXN0
UnVuQ2FuRXhwYW5kID0gY29udGVudC5pc1RleHQoKSAmJiAhY29udGVudC50ZXh0Q29udGV4dCgp
LT5pc0NvbGxhcHNlZCgpOwogICAgIG1fZmlyc3RSdW5JbmRleCA9IG1fZmlyc3RSdW5JbmRleC52
YWx1ZV9vcihtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCkuc2l6ZSgpIC0gMSk7CiAgICAg
bV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgPSB7IH07CkBAIC0xNzUsNDcgKzEyNCw3IEBAIHZv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmFwcGVuZENvbnRlbnQoY29uc3QgSW5s
aW5lTGluZUJyZWFrZXI6OlJ1biYKICAgICAgICAgbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQg
PSBUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgeyBydW4ud2lkdGgsIHRleHRSdW4tPmxlbmd0aCgp
IH07CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6Omp1c3RpZnlSdW5z
KCkKLXsKLSAgICBpZiAoIWhhc0NvbnRlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0
byYgaW5saW5lUnVucyA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKTsKLSAgICBhdXRv
JiBsYXN0SW5saW5lUnVuID0gaW5saW5lUnVucy5sYXN0KCk7Ci0KLSAgICAvLyBBZGp1c3QgKGZv
cmJpZCkgdHJhaWxpbmcgZXhwYW5zaW9uIGZvciB0aGUgbGFzdCB0ZXh0IHJ1biBvbiBsaW5lLgot
ICAgIGF1dG8gZXhwYW5zaW9uQmVoYXZpb3IgPSBsYXN0SW5saW5lUnVuLmV4cGFuc2lvbk9wcG9y
dHVuaXR5KCkuYmVoYXZpb3I7Ci0gICAgLy8gUmVtb3ZlIGFsbG93IGFuZCBhZGQgZm9yYmlkLgot
ICAgIGV4cGFuc2lvbkJlaGF2aW9yIF49IEFsbG93VHJhaWxpbmdFeHBhbnNpb247Ci0gICAgZXhw
YW5zaW9uQmVoYXZpb3IgfD0gRm9yYmlkVHJhaWxpbmdFeHBhbnNpb247Ci0gICAgbGFzdElubGlu
ZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3I7
Ci0KLSAgICAvLyBDb2xsZWN0IGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzIGFuZCBqdXN0aWZ5IHRo
ZSBydW5zLgotICAgIGF1dG8gd2lkdGhUb0Rpc3RyaWJ1dGUgPSBhdmFpbGFibGVXaWR0aCgpOwot
ICAgIGlmICh3aWR0aFRvRGlzdHJpYnV0ZSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgPSAwOwotICAgIGZvciAoYXV0byBydW5JbmRleCA9
ICptX2ZpcnN0UnVuSW5kZXg7IHJ1bkluZGV4IDwgaW5saW5lUnVucy5zaXplKCk7ICsrcnVuSW5k
ZXgpCi0gICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgKz0gaW5saW5lUnVuc1tydW5JbmRl
eF0uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5jb3VudDsKLQotICAgIGlmICghZXhwYW5zaW9uT3Bw
b3J0dW5pdGllcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZmxvYXQgZXhwYW5zaW9uID0gd2lk
dGhUb0Rpc3RyaWJ1dGUudG9GbG9hdCgpIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdGllczsKLSAgICBM
YXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsKLSAgICBmb3IgKGF1dG8gcnVuSW5k
ZXggPSAqbV9maXJzdFJ1bkluZGV4OyBydW5JbmRleCA8IGlubGluZVJ1bnMuc2l6ZSgpOyArK3J1
bkluZGV4KSB7Ci0gICAgICAgIGF1dG8mIGlubGluZVJ1biA9IGlubGluZVJ1bnNbcnVuSW5kZXhd
OwotICAgICAgICBhdXRvIGV4cGFuc2lvbkZvclJ1biA9IGlubGluZVJ1bi5leHBhbnNpb25PcHBv
cnR1bml0eSgpLmNvdW50ICogZXhwYW5zaW9uOwotCi0gICAgICAgIGlubGluZVJ1bi5leHBhbnNp
b25PcHBvcnR1bml0eSgpLmV4cGFuc2lvbiA9IGV4cGFuc2lvbkZvclJ1bjsKLSAgICAgICAgaW5s
aW5lUnVuLnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpICsgYWNjdW11bGF0
ZWRFeHBhbnNpb24pOwotICAgICAgICBpbmxpbmVSdW4uc2V0V2lkdGgoaW5saW5lUnVuLndpZHRo
KCkgKyBleHBhbnNpb25Gb3JSdW4pOwotICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBl
eHBhbnNpb25Gb3JSdW47Ci0gICAgfQotfQotCi12b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lOjpjbG9zZShMYXN0TGluZSBpc0xhc3RMaW5lKQorSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OkxpbmU6OlJ1blJhbmdlIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpjbG9zZSgp
CiB7CiAgICAgYXV0byB0cmltVHJhaWxpbmdDb250ZW50ID0gWyZdewogCkBAIC0yMzUsMzUgKzE0
NCwxNiBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpjbG9zZShMYXN0TGlu
ZSBpc0xhc3RMaW5lKQogICAgICAgICBtX3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IHsgfTsK
ICAgICB9OwogCi0gICAgYXV0byBhbGlnblJ1bnMgPSBbJl17Ci0KLSAgICAgICAgaWYgKCFoYXND
b250ZW50KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byB0ZXh0QWxpZ25t
ZW50ID0gIW1fYWxpZ25tZW50SXNKdXN0aWZ5ID8gbV9mb3JtYXR0aW5nUm9vdC5zdHlsZSgpLnRl
eHRBbGlnbigpIDogaXNMYXN0TGluZSA9PSBMYXN0TGluZTo6Tm8gPyBUZXh0QWxpZ25Nb2RlOjpK
dXN0aWZ5IDogVGV4dEFsaWduTW9kZTo6TGVmdDsKLSAgICAgICAgaWYgKHRleHRBbGlnbm1lbnQg
PT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkgewotICAgICAgICAgICAganVzdGlmeVJ1bnMoKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gYWRqdXN0ZWRM
b2dpY2FsTGVmdCA9IGFkanVzdGVkTGluZUxvZ2ljYWxMZWZ0KHRleHRBbGlnbm1lbnQsIG1fbG9n
aWNhbFJlY3QubGVmdCgpLCBtX2F2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAgaWYgKG1fbG9naWNh
bFJlY3QubGVmdCgpID09IGFkanVzdGVkTG9naWNhbExlZnQpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgYXV0byYgaW5saW5lUnVucyA9IG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1
bnMoKTsKLSAgICAgICAgYXV0byBkZWx0YSA9IGFkanVzdGVkTG9naWNhbExlZnQgLSBtX2xvZ2lj
YWxSZWN0LmxlZnQoKTsKLSAgICAgICAgZm9yIChhdXRvIHJ1bkluZGV4ID0gKm1fZmlyc3RSdW5J
bmRleDsgcnVuSW5kZXggPCBpbmxpbmVSdW5zLnNpemUoKTsgKytydW5JbmRleCkKLSAgICAgICAg
ICAgIGlubGluZVJ1bnNbcnVuSW5kZXhdLnNldExvZ2ljYWxMZWZ0KGlubGluZVJ1bnNbcnVuSW5k
ZXhdLmxvZ2ljYWxMZWZ0KCkgKyBkZWx0YSk7Ci0gICAgfTsKLQogICAgIGlmICghaGFzQ29udGVu
dCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICB0cmltVHJh
aWxpbmdDb250ZW50KCk7Ci0gICAgYWxpZ25SdW5zKCk7Ci0KICAgICBtX2lzRmlyc3RMaW5lID0g
ZmFsc2U7CiAgICAgbV9jbG9zZWQgPSB0cnVlOworCisgICAgaWYgKCFtX2ZpcnN0UnVuSW5kZXgp
CisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHsgbV9maXJzdFJ1bkluZGV4LCBtX2Zv
cm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCkuc2l6ZSgpIC0gMSB9OwogfQogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354311</attachid>
            <date>2018-11-08 21:21:45 -0800</date>
            <delta_ts>2018-11-09 05:22:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191445-20181108212141.patch</filename>
            <type>text/plain</type>
            <size>21812</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM3OTg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTdjNmYwMTVjY2VhMDQ0
ZmIzOWMzYmMzMGE0ZGIzYjIxM2IzNWFjNC4uNTllM2M0MDNhYmQ1NDNjMTIwMDQwNWU2NmY5MDA4
MTBjYTcyMTYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE4LTExLTA4ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBNb3ZlIHNv
bWUgY29kZSBmcm9tIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lIHRvIElubGluZUZvcm1h
dHRpbmdDb250ZXh0L0dlb21ldHJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTE0NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgTGluZSBzaG91bGQgbm90IGhhdmUg
dG8gZGVhbCB3aXRoIGFsbCB0aGUgcG9zdCBwcm9jZXNzaWcgdGFza3MgbGlrZSB0aGUgcnVucyBm
aW5hbCBhbGlnbWVudHMuCisgICAgICAgIChUaGUgbGluZSBjbGFzcyB3b3VsZCBldmVudHVhbGx5
IHR1cm4gaW50byBhIGNvbGxlY3Rpb24gb2YgcmFuZG9tIHRoaW5ncykuCisKKyAgICAgICAgKiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpjbG9zZUxpbmUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6YXBwZW5kQ29udGVudFRvTGluZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRJbmxpbmVDb250ZW50IGNvbnN0KToKKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5o
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGlu
ZTo6Y29udGVudExvZ2ljYWxMZWZ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6Omxhc3RSdW5UeXBlIGNvbnN0KToKKyAgICAg
ICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5OjphZGp1c3RlZExpbmVMb2dpY2FsTGVmdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6anVzdGlmeVJ1bnMp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6OmNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKToKKyAgICAgICAgKiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9MaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6aW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpjb250ZW50TG9naWNh
bFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmU6OmFwcGVuZENvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjphZGp1c3RlZExpbmVMb2dpY2FsTGVmdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpjb250ZW50TG9n
aWNhbFJpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmU6OmNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6
OkxpbmU6Omp1c3RpZnlSdW5zKTogRGVsZXRlZC4KKwogMjAxOC0xMS0wOCAgWmFsYW4gQnVqdGFz
ICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtCRkNdW0lGQ10gSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OkxpbmU6OmFsaWduUnVucygpIHNob3VsZCB0YWtlIGNhcmUgb2YgYWxsIHRoZSBh
bGlnbm1lbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDIyMTIw
NzFkMjY2ZGU1NWIxMjU4ZDZmM2RjNDM4ZWFmOWRhNGI0MmQuLjgzMjMxOGZlY2RkZjBlMmY5ZDBl
NDgxYTBjODcyZmE2Nzk0MWE0ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5j
cHAKQEAgLTEyNywxMyArMTI3LDMzIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Omlu
aXRpYWxpemVOZXdMaW5lKExpbmUmIGxpbmUpIGNvbnN0CiAgICAgbGluZS5pbml0KGxvZ2ljYWxS
ZWN0KTsKIH0KIAordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y2xvc2VMaW5lKExpbmUm
IGxpbmUsIElzTGFzdExpbmUgaXNMYXN0TGluZSkgY29uc3QKK3sKKyAgICBhdXRvIHJ1blJhbmdl
ID0gbGluZS5jbG9zZSgpOworICAgIEFTU0VSVCghcnVuUmFuZ2UuZmlyc3RSdW5JbmRleCB8fCBy
dW5SYW5nZS5sYXN0UnVuSW5kZXgpOworCisgICAgaWYgKCFydW5SYW5nZS5maXJzdFJ1bkluZGV4
KQorICAgICAgICByZXR1cm47CisKKyAgICBHZW9tZXRyeTo6YWxpZ25SdW5zKGRvd25jYXN0PElu
bGluZUZvcm1hdHRpbmdTdGF0ZT4oZm9ybWF0dGluZ1N0YXRlKCkpLCByb290KCkuc3R5bGUoKS50
ZXh0QWxpZ24oKSwgbGluZSwgcnVuUmFuZ2UsIGlzTGFzdExpbmUpOworfQorCit2b2lkIElubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjphcHBlbmRDb250ZW50VG9MaW5lKExpbmUmIGxpbmUsIGNvbnN0
IElubGluZUxpbmVCcmVha2VyOjpSdW4mIHJ1bikgY29uc3QKK3sKKyAgICBhdXRvIGxhc3RSdW5U
eXBlID0gbGluZS5sYXN0UnVuVHlwZSgpOworICAgIGxpbmUuYXBwZW5kQ29udGVudChydW4pOwor
CisgICAgaWYgKHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6Okp1
c3RpZnkpCisgICAgICAgIEdlb21ldHJ5Ojpjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhk
b3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGZvcm1hdHRpbmdTdGF0ZSgpKSwgcnVuLmNv
bnRlbnQsIGxhc3RSdW5UeXBlLnZhbHVlX29yKElubGluZVJ1blByb3ZpZGVyOjpSdW46OlR5cGU6
Ok5vbldoaXRlc3BhY2UpKTsKK30KKwogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5
b3V0SW5saW5lQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYgaW5saW5lUnVuUHJvdmlk
ZXIpIGNvbnN0CiB7CiAgICAgYXV0byYgbGF5b3V0U3RhdGUgPSB0aGlzLT5sYXlvdXRTdGF0ZSgp
OwogICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGRvd25jYXN0PElubGluZUZvcm1h
dHRpbmdTdGF0ZT4oZm9ybWF0dGluZ1N0YXRlKCkpOwogICAgIGF1dG8gZmxvYXRpbmdDb250ZXh0
ID0gRmxvYXRpbmdDb250ZXh0IHsgaW5saW5lRm9ybWF0dGluZ1N0YXRlLmZsb2F0aW5nU3RhdGUo
KSB9OwogCi0gICAgTGluZSBsaW5lKGlubGluZUZvcm1hdHRpbmdTdGF0ZSwgcm9vdCgpKTsKKyAg
ICBMaW5lIGxpbmUoaW5saW5lRm9ybWF0dGluZ1N0YXRlKTsKICAgICBpbml0aWFsaXplTmV3TGlu
ZShsaW5lKTsKIAogICAgIElubGluZUxpbmVCcmVha2VyIGxpbmVCcmVha2VyKGxheW91dFN0YXRl
LCBpbmxpbmVGb3JtYXR0aW5nU3RhdGUuaW5saW5lQ29udGVudCgpLCBpbmxpbmVSdW5Qcm92aWRl
ci5ydW5zKCkpOwpAQCAtMTY4LDE5ICsxODgsMTkgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6bGF5b3V0SW5saW5lQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92aWRlciYgaW5saW4K
ICAgICAgICAgICAgIGlmIChsaW5lLmhhc0NvbnRlbnQoKSkgewogICAgICAgICAgICAgICAgIC8v
IFByZXZpb3VzIHJ1biBlbmRlZCB1cCBiZWluZyBhdCB0aGUgbGluZSBlbmQuIEFkanVzdCB0aGUg
bGluZSBhY2NvcmRpbmdseS4KICAgICAgICAgICAgICAgICBpZiAoIWxpbmUuaXNDbG9zZWQoKSkK
LSAgICAgICAgICAgICAgICAgICAgbGluZS5jbG9zZShMaW5lOjpMYXN0TGluZTo6Tm8pOworICAg
ICAgICAgICAgICAgICAgICBjbG9zZUxpbmUobGluZSwgSXNMYXN0TGluZTo6Tm8pOwogICAgICAg
ICAgICAgICAgIGluaXRpYWxpemVOZXdMaW5lKGxpbmUpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChnZW5lcmF0ZXNJbmxpbmVSdW4pCi0gICAgICAgICAgICAgbGlu
ZS5hcHBlbmRDb250ZW50KCpydW4pOworICAgICAgICAgICAgYXBwZW5kQ29udGVudFRvTGluZShs
aW5lLCAqcnVuKTsKIAogICAgICAgICBpZiAoaXNMYXN0UnVuKQotICAgICAgICAgICAgbGluZS5j
bG9zZShMaW5lOjpMYXN0TGluZTo6Tm8pOworICAgICAgICAgICAgY2xvc2VMaW5lKGxpbmUsIElz
TGFzdExpbmU6Ok5vKTsKICAgICB9CiAKLSAgICBsaW5lLmNsb3NlKExpbmU6Okxhc3RMaW5lOjpZ
ZXMpOworICAgIGNsb3NlTGluZShsaW5lLCBJc0xhc3RMaW5lOjpZZXMpOwogfQogCiB2b2lkIElu
bGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlV2lkdGhBbmRNYXJnaW4oY29uc3QgQm94JiBs
YXlvdXRCb3gpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaAppbmRleCBmYTkw
YWE0NjVmMjc0OTdhMWEyOTY0MDg1NjEzYTY5YTAzY2YyNTExLi5mOGU0OTViOTI1N2IyMzUxZGFj
N2NhODAwZDc1NWJlZDY0M2JjZWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgK
QEAgLTUwLDYwICs1MCw2NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGNsYXNzIExpbmUgewog
ICAgIHB1YmxpYzoKLSAgICAgICAgTGluZShJbmxpbmVGb3JtYXR0aW5nU3RhdGUmLCBjb25zdCBC
b3gmIGZvcm1hdHRpbmdSb290KTsKKyAgICAgICAgTGluZShJbmxpbmVGb3JtYXR0aW5nU3RhdGUm
KTsKIAogICAgICAgICB2b2lkIGluaXQoY29uc3QgRGlzcGxheTo6Qm94OjpSZWN0Jik7CisgICAg
ICAgIHN0cnVjdCBSdW5SYW5nZSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiBmaXJzdFJ1bkluZGV4OworICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gbGFz
dFJ1bkluZGV4OworICAgICAgICB9OworICAgICAgICBSdW5SYW5nZSBjbG9zZSgpOwogCiAgICAg
ICAgIHZvaWQgYXBwZW5kQ29udGVudChjb25zdCBJbmxpbmVMaW5lQnJlYWtlcjo6UnVuJik7CiAK
ICAgICAgICAgdm9pZCBhZGp1c3RMb2dpY2FsTGVmdChMYXlvdXRVbml0IGRlbHRhKTsKICAgICAg
ICAgdm9pZCBhZGp1c3RMb2dpY2FsUmlnaHQoTGF5b3V0VW5pdCBkZWx0YSk7CiAKLSAgICAgICAg
ZW51bSBjbGFzcyBMYXN0TGluZSB7IE5vLCBZZXMgfTsKLSAgICAgICAgdm9pZCBjbG9zZShMYXN0
TGluZSA9IExhc3RMaW5lOjpObyk7Ci0KICAgICAgICAgYm9vbCBoYXNDb250ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9maXJzdFJ1bkluZGV4Lmhhc192YWx1ZSgpOyB9CiAgICAgICAgIGJvb2wgaXND
bG9zZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb3NlZDsgfQogICAgICAgICBib29sIGlzRmlyc3RM
aW5lKCkgY29uc3QgeyByZXR1cm4gbV9pc0ZpcnN0TGluZTsgfQotICAgICAgICBMYXlvdXRVbml0
IGNvbnRlbnRMb2dpY2FsUmlnaHQoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBjb250ZW50TG9naWNh
bFJpZ2h0KCkgY29uc3Q7CisgICAgICAgIExheW91dFVuaXQgY29udGVudExvZ2ljYWxMZWZ0KCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7IH0KICAgICAgICAgTGF5b3V0VW5p
dCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGg7IH0KKyAg
ICAgICAgc3RkOjpvcHRpb25hbDxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlPiBsYXN0UnVu
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFJ1blR5cGU7IH0KIAogICAgICAgICBMYXlvdXRV
bml0IGxvZ2ljYWxUb3AoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxSZWN0LnRvcCgpOyB9CiAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNh
bFJlY3QuYm90dG9tKCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQganVzdGlmeVJ1
bnMoKTsKLSAgICAgICAgdm9pZCBjb21wdXRlRXhwYW5zaW9uT3Bwb3J0dW5pdGllcyhjb25zdCBJ
bmxpbmVMaW5lQnJlYWtlcjo6UnVuJik7Ci0KICAgICAgICAgc3RydWN0IFRyYWlsaW5nVHJpbW1h
YmxlQ29udGVudCB7CiAgICAgICAgICAgICBMYXlvdXRVbml0IHdpZHRoOwogICAgICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoOwogICAgICAgICB9OwogICAgICAgICBzdGQ6Om9wdGlvbmFsPFRyYWls
aW5nVHJpbW1hYmxlQ29udGVudD4gbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQ7Ci0gICAgICAg
IGJvb2wgbV9sYXN0UnVuSXNXaGl0ZXNwYWNlIHsgZmFsc2UgfTsKKyAgICAgICAgc3RkOjpvcHRp
b25hbDxJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBlPiBtX2xhc3RSdW5UeXBlOwogICAgICAg
ICBib29sIG1fbGFzdFJ1bkNhbkV4cGFuZCB7IGZhbHNlIH07CiAKICAgICAgICAgSW5saW5lRm9y
bWF0dGluZ1N0YXRlJiBtX2Zvcm1hdHRpbmdTdGF0ZTsKLSAgICAgICAgY29uc3QgQm94JiBtX2Zv
cm1hdHRpbmdSb290OwogCiAgICAgICAgIERpc3BsYXk6OkJveDo6UmVjdCBtX2xvZ2ljYWxSZWN0
OwogICAgICAgICBMYXlvdXRVbml0IG1fYXZhaWxhYmxlV2lkdGg7CiAKICAgICAgICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gbV9maXJzdFJ1bkluZGV4OwotICAgICAgICBib29sIG1fYWxpZ25t
ZW50SXNKdXN0aWZ5IHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBtX2lzRmlyc3RMaW5lIHsgdHJ1
ZSB9OwogICAgICAgICBib29sIG1fY2xvc2VkIHsgdHJ1ZSB9OwogICAgIH07CisgICAgZW51bSBj
bGFzcyBJc0xhc3RMaW5lIHsgTm8sIFllcyB9OwogCi0gICAgLy8gVGhpcyBjbGFzcyBpbXBsZW1l
bnRzIHBvc2l0aW9uaW5nIGFuZCBzaXppbmcgZm9yIGJveGVzIHBhcnRpY2lwYXRpbmcgaW4gYSBi
bG9jayBmb3JtYXR0aW5nIGNvbnRleHQuCiAgICAgY2xhc3MgR2VvbWV0cnkgOiBwdWJsaWMgRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBI
ZWlnaHRBbmRNYXJnaW4gaW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4oY29uc3QgTGF5b3V0U3Rh
dGUmLCBjb25zdCBCb3gmKTsKICAgICAgICAgc3RhdGljIFdpZHRoQW5kTWFyZ2luIGlubGluZUJs
b2NrV2lkdGhBbmRNYXJnaW4oTGF5b3V0U3RhdGUmLCBjb25zdCBCb3gmKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgYWxpZ25SdW5zKElubGluZUZvcm1hdHRpbmdTdGF0ZSYsIFRleHRBbGlnbk1vZGUs
IExpbmUmLCBMaW5lOjpSdW5SYW5nZSwgSXNMYXN0TGluZSk7CisgICAgICAgIHN0YXRpYyB2b2lk
IGNvbXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKElubGluZUZvcm1hdHRpbmdTdGF0ZSYsIGNv
bnN0IElubGluZVJ1blByb3ZpZGVyOjpSdW4mLCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuOjpUeXBl
IGxhc3RSdW5UeXBlKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyB2b2lkIGp1c3Rp
ZnlSdW5zKElubGluZUZvcm1hdHRpbmdTdGF0ZSYsIExpbmUmLCBMaW5lOjpSdW5SYW5nZSk7CiAg
ICAgfTsKIAogICAgIHZvaWQgbGF5b3V0SW5saW5lQ29udGVudChjb25zdCBJbmxpbmVSdW5Qcm92
aWRlciYpIGNvbnN0OwotICAgIHZvaWQgaW5pdGlhbGl6ZU5ld0xpbmUoTGluZSYpIGNvbnN0Owor
CisgICAgdm9pZCBpbml0aWFsaXplTmV3TGluZShMaW5lJikgY29uc3Q7ICAgIAorICAgIHZvaWQg
Y2xvc2VMaW5lKExpbmUmLCBJc0xhc3RMaW5lKSBjb25zdDsKKyAgICB2b2lkIGFwcGVuZENvbnRl
bnRUb0xpbmUoTGluZSYsIGNvbnN0IElubGluZUxpbmVCcmVha2VyOjpSdW4mKSBjb25zdDsKIAog
ICAgIHZvaWQgbGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRSb290KGNvbnN0IEJveCYpIGNvbnN0Owog
ICAgIHZvaWQgY29tcHV0ZVdpZHRoQW5kSGVpZ2h0Rm9yUmVwbGFjZWRJbmxpbmVCb3goY29uc3Qg
Qm94JikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0
cnkuY3BwCmluZGV4IDdjOWUyOWUwYmQ1NjA5Y2ZiZTI4ZjI4NDc5NjUwZWMyZjhiZDMzNmIuLmNk
ODI4OWY0MTI0Y2VmZDYyYjRiMWJjN2JjMGU3YTA2OTIwYTBhMzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC03Nyw2ICs3NywxMDggQEAg
SGVpZ2h0QW5kTWFyZ2luIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5l
QmxvY2tIZWlnaHRBbmRNYXJnaW4oY28KICAgICByZXR1cm4gY29tcGxpY2F0ZWRDYXNlcyhsYXlv
dXRTdGF0ZSwgbGF5b3V0Qm94KTsKIH0KIAorc3RhdGljIExheW91dFVuaXQgYWRqdXN0ZWRMaW5l
TG9naWNhbExlZnQoVGV4dEFsaWduTW9kZSBhbGlnbiwgTGF5b3V0VW5pdCBsaW5lTG9naWNhbExl
ZnQsIExheW91dFVuaXQgcmVtYWluaW5nV2lkdGgpCit7CisgICAgc3dpdGNoIChhbGlnbikgewor
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Oldl
YktpdExlZnQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAgICAgICAgcmV0dXJu
IGxpbmVMb2dpY2FsTGVmdDsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgorICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6CisgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpF
bmQ6CisgICAgICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQgKyBzdGQ6Om1heChyZW1haW5pbmdX
aWR0aCwgTGF5b3V0VW5pdCgpKTsKKyAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKKyAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKKyAgICAgICAgcmV0dXJuIGxpbmVM
b2dpY2FsTGVmdCArIHN0ZDo6bWF4KHJlbWFpbmluZ1dpZHRoIC8gMiwgTGF5b3V0VW5pdCgpKTsK
KyAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdDsKK30KKwordm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Omp1c3RpZnlSdW5zKElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9y
bWF0dGluZ1N0YXRlLCBMaW5lJiBsaW5lLCBMaW5lOjpSdW5SYW5nZSBydW5SYW5nZSkKK3sKKyAg
ICBhdXRvJiBpbmxpbmVSdW5zID0gZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKTsKKyAgICBh
dXRvJiBsYXN0SW5saW5lUnVuID0gaW5saW5lUnVucy5sYXN0KCk7CisKKyAgICAvLyBBZGp1c3Qg
KGZvcmJpZCkgdHJhaWxpbmcgZXhwYW5zaW9uIGZvciB0aGUgbGFzdCB0ZXh0IHJ1biBvbiBsaW5l
LgorICAgIGF1dG8gZXhwYW5zaW9uQmVoYXZpb3IgPSBsYXN0SW5saW5lUnVuLmV4cGFuc2lvbk9w
cG9ydHVuaXR5KCkuYmVoYXZpb3I7CisgICAgLy8gUmVtb3ZlIGFsbG93IGFuZCBhZGQgZm9yYmlk
LgorICAgIGV4cGFuc2lvbkJlaGF2aW9yIF49IEFsbG93VHJhaWxpbmdFeHBhbnNpb247CisgICAg
ZXhwYW5zaW9uQmVoYXZpb3IgfD0gRm9yYmlkVHJhaWxpbmdFeHBhbnNpb247CisgICAgbGFzdElu
bGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZp
b3I7CisKKyAgICAvLyBDb2xsZWN0IGV4cGFuc2lvbiBvcHBvcnR1bml0aWVzIGFuZCBqdXN0aWZ5
IHRoZSBydW5zLgorICAgIGF1dG8gd2lkdGhUb0Rpc3RyaWJ1dGUgPSBsaW5lLmF2YWlsYWJsZVdp
ZHRoKCk7CisgICAgaWYgKHdpZHRoVG9EaXN0cmlidXRlIDw9IDApCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gZXhwYW5zaW9uT3Bwb3J0dW5pdGllcyA9IDA7CisgICAgQVNTRVJUKCpydW5S
YW5nZS5sYXN0UnVuSW5kZXggPCBpbmxpbmVSdW5zLnNpemUoKSk7CisgICAgZm9yIChhdXRvIHJ1
bkluZGV4ID0gKnJ1blJhbmdlLmZpcnN0UnVuSW5kZXg7IHJ1bkluZGV4IDw9ICpydW5SYW5nZS5s
YXN0UnVuSW5kZXg7ICsrcnVuSW5kZXgpCisgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMg
Kz0gaW5saW5lUnVuc1tydW5JbmRleF0uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5jb3VudDsKKwor
ICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdGllcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZmxvYXQgZXhwYW5zaW9uID0gd2lkdGhUb0Rpc3RyaWJ1dGUudG9GbG9hdCgpIC8gZXhwYW5zaW9u
T3Bwb3J0dW5pdGllczsKKyAgICBMYXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsK
KyAgICBmb3IgKGF1dG8gcnVuSW5kZXggPSAqcnVuUmFuZ2UuZmlyc3RSdW5JbmRleDsgcnVuSW5k
ZXggPD0gKnJ1blJhbmdlLmxhc3RSdW5JbmRleDsgKytydW5JbmRleCkgeworICAgICAgICBhdXRv
JiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5zW3J1bkluZGV4XTsKKyAgICAgICAgYXV0byBleHBhbnNp
b25Gb3JSdW4gPSBpbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5jb3VudCAqIGV4cGFu
c2lvbjsKKworICAgICAgICBpbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5leHBhbnNp
b24gPSBleHBhbnNpb25Gb3JSdW47CisgICAgICAgIGlubGluZVJ1bi5zZXRMb2dpY2FsTGVmdChp
bmxpbmVSdW4ubG9naWNhbExlZnQoKSArIGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKKyAgICAgICAg
aW5saW5lUnVuLnNldFdpZHRoKGlubGluZVJ1bi53aWR0aCgpICsgZXhwYW5zaW9uRm9yUnVuKTsK
KyAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0gZXhwYW5zaW9uRm9yUnVuOworICAgIH0K
K30KKwordm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVFeHBh
bnNpb25PcHBvcnR1bml0aWVzKElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9ybWF0dGluZ1N0YXRl
LCBjb25zdCBJbmxpbmVSdW5Qcm92aWRlcjo6UnVuJiBydW4sIElubGluZVJ1blByb3ZpZGVyOjpS
dW46OlR5cGUgbGFzdFJ1blR5cGUpCit7CisgICAgYXV0byBpc0V4cGFuc2lvbk9wcG9ydHVuaXR5
ID0gW10oYXV0byBjdXJyZW50UnVuSXNXaGl0ZXNwYWNlLCBhdXRvIGxhc3RSdW5Jc1doaXRlc3Bh
Y2UpIHsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgfHwgKCFjdXJyZW50
UnVuSXNXaGl0ZXNwYWNlICYmICFsYXN0UnVuSXNXaGl0ZXNwYWNlKTsKKyAgICB9OworCisgICAg
YXV0byBleHBhbnNpb25CZWhhdmlvciA9IFtdKGF1dG8gaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5
KSB7CisgICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gQWxsb3dU
cmFpbGluZ0V4cGFuc2lvbjsKKyAgICAgICAgZXhwYW5zaW9uQmVoYXZpb3IgfD0gaXNBdEV4cGFu
c2lvbk9wcG9ydHVuaXR5ID8gRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiA6IEFsbG93TGVhZGluZ0V4
cGFuc2lvbjsKKyAgICAgICAgcmV0dXJuIGV4cGFuc2lvbkJlaGF2aW9yOworICAgIH07CisKKyAg
ICBhdXRvIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSA9IGlzRXhwYW5zaW9uT3Bwb3J0dW5pdHko
cnVuLmlzV2hpdGVzcGFjZSgpLCBsYXN0UnVuVHlwZSA9PSBJbmxpbmVSdW5Qcm92aWRlcjo6UnVu
OjpUeXBlOjpXaGl0ZXNwYWNlKTsKKworICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVSdW4gPSBmb3Jt
YXR0aW5nU3RhdGUuaW5saW5lUnVucygpLmxhc3QoKTsKKyAgICBhdXRvJiBleHBhbnNpb25PcHBv
cnR1bml0eSA9IGN1cnJlbnRJbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKTsKKyAgICBp
ZiAoaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5KQorICAgICAgICArK2V4cGFuc2lvbk9wcG9ydHVu
aXR5LmNvdW50OworCisgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHkuYmVoYXZpb3IgPSBleHBhbnNp
b25CZWhhdmlvcihpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkpOworfQorCit2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6YWxpZ25SdW5zKElubGluZUZvcm1hdHRpbmdTdGF0
ZSYgaW5saW5lRm9ybWF0dGluZ1N0YXRlLCBUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiwgTGluZSYg
bGluZSwgTGluZTo6UnVuUmFuZ2UgcnVuUmFuZ2UsIElzTGFzdExpbmUgaXNMYXN0TGluZSkKK3sK
KyAgICBhdXRvIGFkanV0ZWRUZXh0QWxpZ25tZW50ID0gdGV4dEFsaWduICE9IFRleHRBbGlnbk1v
ZGU6Okp1c3RpZnkgPyB0ZXh0QWxpZ24gOiBpc0xhc3RMaW5lID09IElzTGFzdExpbmU6Ok5vID8g
VGV4dEFsaWduTW9kZTo6SnVzdGlmeSA6IFRleHRBbGlnbk1vZGU6OkxlZnQ7CisgICAgaWYgKGFk
anV0ZWRUZXh0QWxpZ25tZW50ID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKKyAgICAgICAg
anVzdGlmeVJ1bnMoaW5saW5lRm9ybWF0dGluZ1N0YXRlLCBsaW5lLCBydW5SYW5nZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGxpbmVMb2dpY2FsTGVmdCA9IGxpbmUuY29u
dGVudExvZ2ljYWxMZWZ0KCk7CisgICAgYXV0byBhZGp1c3RlZExvZ2ljYWxMZWZ0ID0gYWRqdXN0
ZWRMaW5lTG9naWNhbExlZnQoYWRqdXRlZFRleHRBbGlnbm1lbnQsIGxpbmVMb2dpY2FsTGVmdCwg
bGluZS5hdmFpbGFibGVXaWR0aCgpKTsKKyAgICBpZiAoYWRqdXN0ZWRMb2dpY2FsTGVmdCA9PSBs
aW5lTG9naWNhbExlZnQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8mIGlubGluZVJ1bnMg
PSBpbmxpbmVGb3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygpOworICAgIGF1dG8gZGVsdGEgPSBh
ZGp1c3RlZExvZ2ljYWxMZWZ0IC0gbGluZUxvZ2ljYWxMZWZ0OworICAgIEFTU0VSVCgqcnVuUmFu
Z2UubGFzdFJ1bkluZGV4IDwgaW5saW5lUnVucy5zaXplKCkpOworICAgIGZvciAoYXV0byBydW5J
bmRleCA9ICpydW5SYW5nZS5maXJzdFJ1bkluZGV4OyBydW5JbmRleCA8PSAqcnVuUmFuZ2UubGFz
dFJ1bkluZGV4OyArK3J1bkluZGV4KQorICAgICAgICBpbmxpbmVSdW5zW3J1bkluZGV4XS5zZXRM
b2dpY2FsTGVmdChpbmxpbmVSdW5zW3J1bkluZGV4XS5sb2dpY2FsTGVmdCgpICsgZGVsdGEpOwor
fQorCiB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0xpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
TGluZS5jcHAKaW5kZXggYzFkYWEzZmYxM2U3ZTE4ZmNhNDQzMTA5NmVhNThiZjFiMDlhNzZmOC4u
MzFjZmUwYWE3MTRkZGYzZTdjZDI5NWZmNDBlY2JjZWIwMWZjNDgyZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZS5jcHAKQEAgLTMzLDEwICszMyw4
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgTGF5b3V0IHsKIAotSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OkxpbmU6OkxpbmUoSW5saW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0
aW5nU3RhdGUsIGNvbnN0IEJveCYgZm9ybWF0dGluZ1Jvb3QpCitJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6TGluZTo6TGluZShJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSkK
ICAgICA6IG1fZm9ybWF0dGluZ1N0YXRlKGZvcm1hdHRpbmdTdGF0ZSkKLSAgICAsIG1fZm9ybWF0
dGluZ1Jvb3QoZm9ybWF0dGluZ1Jvb3QpCi0gICAgLCBtX2FsaWdubWVudElzSnVzdGlmeShtX2Zv
cm1hdHRpbmdSb290LnN0eWxlKCkudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlm
eSkKIHsKIH0KIApAQCAtNDYsNyArNDQsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0
OjpMaW5lOjppbml0KGNvbnN0IERpc3BsYXk6OkJveDo6UmVjdCYgbG9naWNhbFJlY3QpCiAgICAg
bV9hdmFpbGFibGVXaWR0aCA9IGxvZ2ljYWxSZWN0LndpZHRoKCk7CiAKICAgICBtX2ZpcnN0UnVu
SW5kZXggPSB7IH07Ci0gICAgbV9sYXN0UnVuSXNXaGl0ZXNwYWNlID0gZmFsc2U7CisgICAgbV9s
YXN0UnVuVHlwZSA9IHsgfTsKICAgICBtX2xhc3RSdW5DYW5FeHBhbmQgPSBmYWxzZTsKICAgICBt
X3RyYWlsaW5nVHJpbW1hYmxlQ29udGVudCA9IHsgfTsKICAgICBtX2Nsb3NlZCA9IGZhbHNlOwpA
QCAtNzUsMzQgKzczLDEyIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmFk
anVzdExvZ2ljYWxSaWdodChMYXlvdXRVbml0IGRlbHRhKQogICAgIG1fbG9naWNhbFJlY3Quc2hp
ZnRSaWdodFRvKG1fbG9naWNhbFJlY3QucmlnaHQoKSAtIGRlbHRhKTsKIH0KIAotc3RhdGljIExh
eW91dFVuaXQgYWRqdXN0ZWRMaW5lTG9naWNhbExlZnQoVGV4dEFsaWduTW9kZSBhbGlnbiwgTGF5
b3V0VW5pdCBsaW5lTG9naWNhbExlZnQsIExheW91dFVuaXQgcmVtYWluaW5nV2lkdGgpCi17Ci0g
ICAgc3dpdGNoIChhbGlnbikgewotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICBj
YXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpT
dGFydDoKLSAgICAgICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdDsKLSAgICBjYXNlIFRleHRBbGln
bk1vZGU6OlJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6Ci0gICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Ci0gICAgICAgIHJldHVybiBsaW5lTG9naWNhbExlZnQg
KyBzdGQ6Om1heChyZW1haW5pbmdXaWR0aCwgTGF5b3V0VW5pdCgpKTsKLSAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OkNlbnRlcjoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoK
LSAgICAgICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdCArIHN0ZDo6bWF4KHJlbWFpbmluZ1dpZHRo
IC8gMiwgTGF5b3V0VW5pdCgpKTsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGxpbmVMb2dpY2FsTGVmdDsKLX0KLQog
c3RhdGljIGJvb2wgaXNUcmltbWFibGVDb250ZW50KGNvbnN0IElubGluZVJ1blByb3ZpZGVyOjpS
dW4mIGlubGluZVJ1bikKIHsKICAgICByZXR1cm4gaW5saW5lUnVuLmlzV2hpdGVzcGFjZSgpICYm
IGlubGluZVJ1bi5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpOwogfQogCi1MYXlvdXRVbml0
IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpjb250ZW50TG9naWNhbFJpZ2h0KCkKK0xh
eW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmNvbnRlbnRMb2dpY2FsUmln
aHQoKSBjb25zdAogewogICAgIGlmICghbV9maXJzdFJ1bkluZGV4Lmhhc192YWx1ZSgpKQogICAg
ICAgICByZXR1cm4gbV9sb2dpY2FsUmVjdC5sZWZ0KCk7CkBAIC0xMTAsMzEgKzg2LDYgQEAgTGF5
b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y29udGVudExvZ2ljYWxSaWdo
dCgpCiAgICAgcmV0dXJuIG1fZm9ybWF0dGluZ1N0YXRlLmlubGluZVJ1bnMoKS5sYXN0KCkubG9n
aWNhbFJpZ2h0KCk7CiB9CiAKLXZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmNv
bXB1dGVFeHBhbnNpb25PcHBvcnR1bml0aWVzKGNvbnN0IElubGluZUxpbmVCcmVha2VyOjpSdW4m
IHJ1bikKLXsKLSAgICBpZiAoIW1fYWxpZ25tZW50SXNKdXN0aWZ5KQotICAgICAgICByZXR1cm47
Ci0KLSAgICBhdXRvIGlzRXhwYW5zaW9uT3Bwb3J0dW5pdHkgPSBbXShhdXRvIGN1cnJlbnRSdW5J
c1doaXRlc3BhY2UsIGF1dG8gbGFzdFJ1bklzV2hpdGVzcGFjZSkgewotICAgICAgICByZXR1cm4g
Y3VycmVudFJ1bklzV2hpdGVzcGFjZSB8fCAoIWN1cnJlbnRSdW5Jc1doaXRlc3BhY2UgJiYgIWxh
c3RSdW5Jc1doaXRlc3BhY2UpOwotICAgIH07Ci0KLSAgICBhdXRvIGV4cGFuc2lvbkJlaGF2aW9y
ID0gW10oYXV0byBpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkpIHsKLSAgICAgICAgRXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uOwotICAg
ICAgICBleHBhbnNpb25CZWhhdmlvciB8PSBpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkgPyBGb3Ji
aWRMZWFkaW5nRXhwYW5zaW9uIDogQWxsb3dMZWFkaW5nRXhwYW5zaW9uOwotICAgICAgICByZXR1
cm4gZXhwYW5zaW9uQmVoYXZpb3I7Ci0gICAgfTsKLQotICAgIGF1dG8gaXNBdEV4cGFuc2lvbk9w
cG9ydHVuaXR5ID0gaXNFeHBhbnNpb25PcHBvcnR1bml0eShydW4uY29udGVudC5pc1doaXRlc3Bh
Y2UoKSwgbV9sYXN0UnVuSXNXaGl0ZXNwYWNlKTsKLQotICAgIGF1dG8mIGN1cnJlbnRJbmxpbmVS
dW4gPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCkubGFzdCgpOwotICAgIGF1dG8mIGV4
cGFuc2lvbk9wcG9ydHVuaXR5ID0gY3VycmVudElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0
eSgpOwotICAgIGlmIChpc0F0RXhwYW5zaW9uT3Bwb3J0dW5pdHkpCi0gICAgICAgICsrZXhwYW5z
aW9uT3Bwb3J0dW5pdHkuY291bnQ7Ci0KLSAgICBleHBhbnNpb25PcHBvcnR1bml0eS5iZWhhdmlv
ciA9IGV4cGFuc2lvbkJlaGF2aW9yKGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSk7Ci19Ci0KIHZv
aWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmFwcGVuZENvbnRlbnQoY29uc3QgSW5s
aW5lTGluZUJyZWFrZXI6OlJ1biYgcnVuKQogewogICAgIEFTU0VSVCghaXNDbG9zZWQoKSk7CkBA
IC0xNjQsMTAgKzExNSw4IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OkxpbmU6OmFw
cGVuZENvbnRlbnQoY29uc3QgSW5saW5lTGluZUJyZWFrZXI6OlJ1biYKICAgICAgICAgaW5saW5l
UnVuLnRleHRDb250ZXh0KCktPnNldExlbmd0aChpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVu
Z3RoKCkgKyB0ZXh0UnVuLT5sZW5ndGgoKSk7CiAgICAgfQogCi0gICAgY29tcHV0ZUV4cGFuc2lv
bk9wcG9ydHVuaXRpZXMocnVuKTsKLQogICAgIG1fYXZhaWxhYmxlV2lkdGggLT0gcnVuLndpZHRo
OwotICAgIG1fbGFzdFJ1bklzV2hpdGVzcGFjZSA9IGNvbnRlbnQuaXNXaGl0ZXNwYWNlKCk7Cisg
ICAgbV9sYXN0UnVuVHlwZSA9IGNvbnRlbnQudHlwZSgpOwogICAgIG1fbGFzdFJ1bkNhbkV4cGFu
ZCA9IGNvbnRlbnQuaXNUZXh0KCkgJiYgIWNvbnRlbnQudGV4dENvbnRleHQoKS0+aXNDb2xsYXBz
ZWQoKTsKICAgICBtX2ZpcnN0UnVuSW5kZXggPSBtX2ZpcnN0UnVuSW5kZXgudmFsdWVfb3IobV9m
b3JtYXR0aW5nU3RhdGUuaW5saW5lUnVucygpLnNpemUoKSAtIDEpOwogICAgIG1fdHJhaWxpbmdU
cmltbWFibGVDb250ZW50ID0geyB9OwpAQCAtMTc1LDQ3ICsxMjQsNyBAQCB2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpMaW5lOjphcHBlbmRDb250ZW50KGNvbnN0IElubGluZUxpbmVCcmVh
a2VyOjpSdW4mCiAgICAgICAgIG1fdHJhaWxpbmdUcmltbWFibGVDb250ZW50ID0gVHJhaWxpbmdU
cmltbWFibGVDb250ZW50IHsgcnVuLndpZHRoLCB0ZXh0UnVuLT5sZW5ndGgoKSB9OwogfQogCi12
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpqdXN0aWZ5UnVucygpCi17Ci0gICAg
aWYgKCFoYXNDb250ZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8mIGlubGluZVJ1
bnMgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCk7Ci0gICAgYXV0byYgbGFzdElubGlu
ZVJ1biA9IGlubGluZVJ1bnMubGFzdCgpOwotCi0gICAgLy8gQWRqdXN0IChmb3JiaWQpIHRyYWls
aW5nIGV4cGFuc2lvbiBmb3IgdGhlIGxhc3QgdGV4dCBydW4gb24gbGluZS4KLSAgICBhdXRvIGV4
cGFuc2lvbkJlaGF2aW9yID0gbGFzdElubGluZVJ1bi5leHBhbnNpb25PcHBvcnR1bml0eSgpLmJl
aGF2aW9yOwotICAgIC8vIFJlbW92ZSBhbGxvdyBhbmQgYWRkIGZvcmJpZC4KLSAgICBleHBhbnNp
b25CZWhhdmlvciBePSBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uOwotICAgIGV4cGFuc2lvbkJlaGF2
aW9yIHw9IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uOwotICAgIGxhc3RJbmxpbmVSdW4uZXhwYW5z
aW9uT3Bwb3J0dW5pdHkoKS5iZWhhdmlvciA9IGV4cGFuc2lvbkJlaGF2aW9yOwotCi0gICAgLy8g
Q29sbGVjdCBleHBhbnNpb24gb3Bwb3J0dW5pdGllcyBhbmQganVzdGlmeSB0aGUgcnVucy4KLSAg
ICBhdXRvIHdpZHRoVG9EaXN0cmlidXRlID0gYXZhaWxhYmxlV2lkdGgoKTsKLSAgICBpZiAod2lk
dGhUb0Rpc3RyaWJ1dGUgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBleHBhbnNp
b25PcHBvcnR1bml0aWVzID0gMDsKLSAgICBmb3IgKGF1dG8gcnVuSW5kZXggPSAqbV9maXJzdFJ1
bkluZGV4OyBydW5JbmRleCA8IGlubGluZVJ1bnMuc2l6ZSgpOyArK3J1bkluZGV4KQotICAgICAg
ICBleHBhbnNpb25PcHBvcnR1bml0aWVzICs9IGlubGluZVJ1bnNbcnVuSW5kZXhdLmV4cGFuc2lv
bk9wcG9ydHVuaXR5KCkuY291bnQ7Ci0KLSAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXRpZXMp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGZsb2F0IGV4cGFuc2lvbiA9IHdpZHRoVG9EaXN0cmli
dXRlLnRvRmxvYXQoKSAvIGV4cGFuc2lvbk9wcG9ydHVuaXRpZXM7Ci0gICAgTGF5b3V0VW5pdCBh
Y2N1bXVsYXRlZEV4cGFuc2lvbiA9IDA7Ci0gICAgZm9yIChhdXRvIHJ1bkluZGV4ID0gKm1fZmly
c3RSdW5JbmRleDsgcnVuSW5kZXggPCBpbmxpbmVSdW5zLnNpemUoKTsgKytydW5JbmRleCkgewot
ICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5zW3J1bkluZGV4XTsKLSAgICAgICAg
YXV0byBleHBhbnNpb25Gb3JSdW4gPSBpbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHkoKS5j
b3VudCAqIGV4cGFuc2lvbjsKLQotICAgICAgICBpbmxpbmVSdW4uZXhwYW5zaW9uT3Bwb3J0dW5p
dHkoKS5leHBhbnNpb24gPSBleHBhbnNpb25Gb3JSdW47Ci0gICAgICAgIGlubGluZVJ1bi5zZXRM
b2dpY2FsTGVmdChpbmxpbmVSdW4ubG9naWNhbExlZnQoKSArIGFjY3VtdWxhdGVkRXhwYW5zaW9u
KTsKLSAgICAgICAgaW5saW5lUnVuLnNldFdpZHRoKGlubGluZVJ1bi53aWR0aCgpICsgZXhwYW5z
aW9uRm9yUnVuKTsKLSAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0gZXhwYW5zaW9uRm9y
UnVuOwotICAgIH0KLX0KLQotdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y2xv
c2UoTGFzdExpbmUgaXNMYXN0TGluZSkKK0lubGluZUZvcm1hdHRpbmdDb250ZXh0OjpMaW5lOjpS
dW5SYW5nZSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y2xvc2UoKQogewogICAgIGF1
dG8gdHJpbVRyYWlsaW5nQ29udGVudCA9IFsmXXsKIApAQCAtMjM1LDM1ICsxNDQsMTYgQEAgdm9p
ZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6TGluZTo6Y2xvc2UoTGFzdExpbmUgaXNMYXN0TGlu
ZSkKICAgICAgICAgbV90cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQgPSB7IH07CiAgICAgfTsKIAot
ICAgIGF1dG8gYWxpZ25SdW5zID0gWyZdewotCi0gICAgICAgIGlmICghaGFzQ29udGVudCgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGF1dG8gdGV4dEFsaWdubWVudCA9ICFtX2Fs
aWdubWVudElzSnVzdGlmeSA/IG1fZm9ybWF0dGluZ1Jvb3Quc3R5bGUoKS50ZXh0QWxpZ24oKSA6
IGlzTGFzdExpbmUgPT0gTGFzdExpbmU6Ok5vID8gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSA6IFRl
eHRBbGlnbk1vZGU6OkxlZnQ7Ci0gICAgICAgIGlmICh0ZXh0QWxpZ25tZW50ID09IFRleHRBbGln
bk1vZGU6Okp1c3RpZnkpIHsKLSAgICAgICAgICAgIGp1c3RpZnlSdW5zKCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGFkanVzdGVkTG9naWNhbExlZnQg
PSBhZGp1c3RlZExpbmVMb2dpY2FsTGVmdCh0ZXh0QWxpZ25tZW50LCBtX2xvZ2ljYWxSZWN0Lmxl
ZnQoKSwgbV9hdmFpbGFibGVXaWR0aCk7Ci0gICAgICAgIGlmIChtX2xvZ2ljYWxSZWN0LmxlZnQo
KSA9PSBhZGp1c3RlZExvZ2ljYWxMZWZ0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGF1dG8mIGlubGluZVJ1bnMgPSBtX2Zvcm1hdHRpbmdTdGF0ZS5pbmxpbmVSdW5zKCk7Ci0gICAg
ICAgIGF1dG8gZGVsdGEgPSBhZGp1c3RlZExvZ2ljYWxMZWZ0IC0gbV9sb2dpY2FsUmVjdC5sZWZ0
KCk7Ci0gICAgICAgIGZvciAoYXV0byBydW5JbmRleCA9ICptX2ZpcnN0UnVuSW5kZXg7IHJ1bklu
ZGV4IDwgaW5saW5lUnVucy5zaXplKCk7ICsrcnVuSW5kZXgpCi0gICAgICAgICAgICBpbmxpbmVS
dW5zW3J1bkluZGV4XS5zZXRMb2dpY2FsTGVmdChpbmxpbmVSdW5zW3J1bkluZGV4XS5sb2dpY2Fs
TGVmdCgpICsgZGVsdGEpOwotICAgIH07Ci0KICAgICBpZiAoIWhhc0NvbnRlbnQoKSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgdHJpbVRyYWlsaW5nQ29udGVu
dCgpOwotICAgIGFsaWduUnVucygpOwotCiAgICAgbV9pc0ZpcnN0TGluZSA9IGZhbHNlOwogICAg
IG1fY2xvc2VkID0gdHJ1ZTsKKworICAgIGlmICghbV9maXJzdFJ1bkluZGV4KQorICAgICAgICBy
ZXR1cm4geyB9OworICAgIHJldHVybiB7IG1fZmlyc3RSdW5JbmRleCwgbV9mb3JtYXR0aW5nU3Rh
dGUuaW5saW5lUnVucygpLnNpemUoKSAtIDEgfTsKIH0KIAogfQo=
</data>
<flag name="review"
          id="371512"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>