<?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>39697</bug_id>
          
          <creation_ts>2010-05-25 16:03:57 -0700</creation_ts>
          <short_desc>Make more HTML DOM members private, especially constructors</short_desc>
          <delta_ts>2010-05-27 22:43:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>230518</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-25 16:03:57 -0700</bug_when>
    <thetext>Make more HTML DOM members private, especially constructors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230521</commentid>
    <comment_count>1</comment_count>
      <attachid>57053</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-25 16:21:02 -0700</bug_when>
    <thetext>Created attachment 57053
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230800</commentid>
    <comment_count>2</comment_count>
      <attachid>57053</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-05-26 11:51:53 -0700</bug_when>
    <thetext>Comment on attachment 57053
Patch

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt; +        Made constructors and virtual function overrides private, added create functions.
&gt; +        Made constructors inline in casese where they were called in only one place.

typo: casese


&gt; Index: WebCore/html/HTMLAudioElement.cpp  
&gt; ===================================================================
&gt; +PassRefPtr&lt;HTMLAudioElement&gt; HTMLAudioElement::create(const QualifiedName&amp; tagName, Document* document)
&gt; +{
&gt; +    return new HTMLAudioElement(tagName, document);

Every time I see this pattern it bothers me. I want it to be &quot;return adoptRef(new HTMLAudioElement(tagName, document));&quot;


&gt; Index: WebCore/html/HTMLButtonElement.h
&gt; ===================================================================
&gt; -    HTMLButtonElement(const QualifiedName&amp;, Document*, HTMLFormElement* = 0);
&gt; +    static PassRefPtr&lt;HTMLButtonElement&gt; create(const QualifiedName&amp;, Document*, HTMLFormElement*);

I guess the default value for HTMLFormElement* was never used.


&gt; Index: WebCore/html/HTMLDataGridCellElement.cpp
&gt; ===================================================================
&gt; +HTMLDataGridCellElement::HTMLDataGridCellElement(const QualifiedName&amp; name, Document* document)

Consider adding &quot;inline&quot; here, since the constructor is only called from one place.


&gt; Index: WebCore/html/HTMLDataGridColElement.cpp
&gt; ===================================================================
&gt; +HTMLDataGridColElement::HTMLDataGridColElement(const QualifiedName&amp; name, Document* document)

Add &quot;inline&quot;?


&gt; Index: WebCore/html/HTMLDataGridElement.cpp
&gt; ===================================================================
&gt; @@ -45,6 +45,11 @@ HTMLDataGridElement::HTMLDataGridElement

Add inline to constructor?



&gt; Index: WebCore/html/HTMLDataGridRowElement.cpp
&gt; ===================================================================
&gt; +HTMLDataGridRowElement::HTMLDataGridRowElement(const QualifiedName&amp; name, Document* document)
&gt; +    : HTMLElement(name, document)

Add inline to constructor?


&gt; Index: WebCore/html/HTMLDataListElement.cpp
&gt; ===================================================================
&gt; +HTMLDataListElement::HTMLDataListElement(const QualifiedName&amp; tagName, Document* document)
&gt; +    : HTMLElement(tagName, document)

Add inline to constructor?

&gt; Index: WebCore/html/HTMLDataListElement.h
&gt; ===================================================================
&gt;  /*
&gt;   * Copyright (c) 2009, Google Inc. All rights reserved.

That small c and comma after 2009 are non-uniform. If you wish, it is fine with me if you change that to &quot;(C) 2009 Google...&quot; in any of these files.


&gt; Index: WebCore/html/HTMLTableColElement.cpp
&gt; ===================================================================
&gt; +HTMLTableColElement::HTMLTableColElement(const QualifiedName&amp; tagName, Document* document)

Add inline?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230871</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-26 13:54:10 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 57053 [details])
&gt; &gt; Index: WebCore/ChangeLog
&gt; &gt; ===================================================================
&gt; &gt; +        Made constructors and virtual function overrides private, added create functions.
&gt; &gt; +        Made constructors inline in casese where they were called in only one place.
&gt; 
&gt; typo: casese

Thanks, I&apos;ll fix that.

&gt; &gt; Index: WebCore/html/HTMLAudioElement.cpp  
&gt; &gt; ===================================================================
&gt; &gt; +PassRefPtr&lt;HTMLAudioElement&gt; HTMLAudioElement::create(const QualifiedName&amp; tagName, Document* document)
&gt; &gt; +{
&gt; &gt; +    return new HTMLAudioElement(tagName, document);
&gt; 
&gt; Every time I see this pattern it bothers me. I want it to be &quot;return adoptRef(new HTMLAudioElement(tagName, document));&quot;

That&apos;s the underlying purpose of this sequence of patches. Once every caller is using create functions and the calls to new are all in a smaller number of call sites, then we can change the reference counts to start at 1 and we will then use adoptRef. It&apos;s safer for me to separate the &quot;make a create&quot; function step from the &quot;change reference counts to start at 1&quot; case.

&gt; &gt; Index: WebCore/html/HTMLButtonElement.h
&gt; &gt; ===================================================================
&gt; &gt; -    HTMLButtonElement(const QualifiedName&amp;, Document*, HTMLFormElement* = 0);
&gt; &gt; +    static PassRefPtr&lt;HTMLButtonElement&gt; create(const QualifiedName&amp;, Document*, HTMLFormElement*);
&gt; 
&gt; I guess the default value for HTMLFormElement* was never used.

Yes, true.

&gt; &gt; Index: WebCore/html/HTMLDataGridCellElement.cpp
&gt; &gt; ===================================================================
&gt; &gt; +HTMLDataGridCellElement::HTMLDataGridCellElement(const QualifiedName&amp; name, Document* document)
&gt; 
&gt; Consider adding &quot;inline&quot; here, since the constructor is only called from one place.

&gt; &gt; Index: WebCore/html/HTMLDataGridColElement.cpp
&gt; &gt; ===================================================================
&gt; &gt; +HTMLDataGridColElement::HTMLDataGridColElement(const QualifiedName&amp; name, Document* document)
&gt; 
&gt; Add &quot;inline&quot;?

&gt; &gt; Index: WebCore/html/HTMLDataGridElement.cpp
&gt; &gt; ===================================================================
&gt; &gt; @@ -45,6 +45,11 @@ HTMLDataGridElement::HTMLDataGridElement
&gt; 
&gt; Add inline to constructor?

&gt; &gt; Index: WebCore/html/HTMLDataGridRowElement.cpp
&gt; &gt; ===================================================================
&gt; &gt; +HTMLDataGridRowElement::HTMLDataGridRowElement(const QualifiedName&amp; name, Document* document)
&gt; &gt; +    : HTMLElement(name, document)
&gt; 
&gt; Add inline to constructor?
&gt; 
&gt; 
&gt; &gt; Index: WebCore/html/HTMLDataListElement.cpp
&gt; &gt; ===================================================================
&gt; &gt; +HTMLDataListElement::HTMLDataListElement(const QualifiedName&amp; tagName, Document* document)
&gt; &gt; +    : HTMLElement(tagName, document)
&gt; 
&gt; Add inline to constructor?

&gt; &gt; Index: WebCore/html/HTMLTableColElement.cpp
&gt; &gt; ===================================================================
&gt; &gt; +HTMLTableColElement::HTMLTableColElement(const QualifiedName&amp; tagName, Document* document)
&gt; 
&gt; Add inline?

OK, I&apos;ll think about it for those.

&gt; &gt; Index: WebCore/html/HTMLDataListElement.h
&gt; &gt; ===================================================================
&gt; &gt;  /*
&gt; &gt;   * Copyright (c) 2009, Google Inc. All rights reserved.
&gt; 
&gt; That small c and comma after 2009 are non-uniform. If you wish, it is fine with me if you change that to &quot;(C) 2009 Google...&quot; in any of these files.

OK, I might do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231062</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-26 21:10:12 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; It&apos;s safer for me to separate the &quot;make a create&quot; function step from the &quot;change reference counts to start at 1&quot; case.

I meant:

It&apos;s safer for me to separate the &quot;make a create function&quot; step from the &quot;change reference count to start at 1 and use adoptRef&quot; step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231554</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-27 21:22:21 -0700</bug_when>
    <thetext>Committed r60342: &lt;http://trac.webkit.org/changeset/60342&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>231566</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-27 22:43:36 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/60342 might have broken Tiger Intel Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57053</attachid>
            <date>2010-05-25 16:21:02 -0700</date>
            <delta_ts>2010-05-26 11:51:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-39697-20100525162100.patch</filename>
            <type>text/plain</type>
            <size>59726</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDE5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTA1IEBACisyMDEwLTA1LTI1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IG1vcmUgSFRNTCBET00gbWVtYmVycyBwcml2YXRlLCBlc3BlY2lhbGx5IGNvbnN0cnVjdG9ycwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk2OTcKKwor
ICAgICAgICBSZWZhY3RvcmluZywgc28gbm8gbmV3IHRlc3RzIG5lZWRlZC4KKworICAgICAgICBX
b3JraW5nIG15IHdheSB0aHJvdWdoIEhUTUxUYWdOYW1lcy5pbiBmcm9tIHRvcCB0byBib3R0b20s
IHNraXBwaW5nIGFueQorICAgICAgICB0aGF0IGFyZSBub24tdHJpdmlhbCBmb3Igc29tZSByZWFz
b24uCisKKyAgICAgICAgKiBodG1sL0hUTUxUYWdOYW1lcy5pbjogUmVtb3ZlZCBjcmVhdGVXaXRo
TmV3IGZyb20gYXVkaW8sIGJhc2UsIGJhc2Vmb250LAorICAgICAgICBibG9ja3F1b3RlLCBib2R5
LCBiciwgYnV0dG9uLCBjYW52YXMsIGNhcHRpb24sIGNvbCwgY29sZ3JvdXAsIGRhdGFncmlkLAor
ICAgICAgICBkYXRhbGlzdCwgZGNlbGwsIGRjb2wsIGRyb3csIGRlbCwgZGlyLCBkbCwgYW5kIGZp
ZWxkc2V0LgorCisgICAgICAgICogbWF0aG1sL21hdGh0YWdzLmluOiBSZW1vdmVkIGNyZWF0ZVdp
dGhOZXcgZnJvbSBtc3ViLCBhbmQgbXN1cC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wbGljaXRDbG9zZSk6IFVzZSBjcmVhdGUg
ZnVuY3Rpb24gaW5zdGVhZCBvZiBuZXcuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Z2V0
Q1NTQ2FudmFzRWxlbWVudCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVu
dENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlSW5kZW50QmxvY2txdW90ZUVs
ZW1lbnQpOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL2h0bWxlZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUJyZWFrRWxlbWVudCk6IERpdHRvLgorICAgICAgICAqIGh0bWwv
SFRNTFRhYmxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVFbGVtZW50
OjpjcmVhdGVDYXB0aW9uKTogRGl0dG8uCisgICAgICAgICogaHRtbC9IVE1MVmlld1NvdXJjZURv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmNy
ZWF0ZUNvbnRhaW5pbmdUYWJsZSk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6c2V0
SW5uZXJUZXh0VmFsdWUpOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpoYW5kbGVFcnJvcik6IFVzZSBjcmVhdGUg
ZnVuY3Rpb24gaW5zdGVhZCBvZiBuZXcuCisgICAgICAgIFJlcXVpcmVkIHJlb3JkZXJpbmcgdGhl
IGNvZGUgc2xpZ2h0bHksIGJ1dCB0aGUgbmV3IG9yZGVyIHdvcmtzIGZpbmUuCisKKyAgICAgICAg
KiBodG1sL0hUTUxBdWRpb0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF1ZGlv
RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxBdWRpb0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxCUkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJS
RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxCUkVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxCYXNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQmFz
ZUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9IVE1MQmFzZUVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxCYXNlRm9udEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEJhc2VGb250RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxCYXNlRm9u
dEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxCbG9ja3F1b3RlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQmxvY2txdW90ZUVsZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAg
ICogaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxCb2R5
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZSk6
CisgICAgICAgICogaHRtbC9IVE1MQm9keUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxC
dXR0b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50Ojpj
cmVhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxETGlzdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TERMaXN0RWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxETGlzdEVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxEYXRhR3JpZENlbGxFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxEYXRhR3JpZENlbGxFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIGh0
bWwvSFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxEYXRhR3Jp
ZENvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERhdGFHcmlkQ29sRWxlbWVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxEYXRhR3JpZENvbEVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxEYXRhR3JpZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTERhdGFHcmlkRWxlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxEYXRhR3Jp
ZEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxEYXRhR3JpZFJvd0VsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTERhdGFHcmlkUm93RWxlbWVudDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBodG1sL0hUTUxEYXRhR3JpZFJvd0VsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxE
YXRhTGlzdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERhdGFMaXN0RWxlbWVu
dDo6Y3JlYXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxEYXRhTGlzdEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50
OjpzZXRJbm5lclRleHQpOgorICAgICAgICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpjcmVhdGUpOgorICAgICAg
ICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE1vZEVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1vZEVsZW1lbnQ6OkhUTUxNb2RFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNb2RFbGVtZW50OjpjcmVhdGUpOgorICAgICAg
ICAqIGh0bWwvSFRNTE1vZEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNhcHRp
b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNhcHRpb25FbGVtZW50
OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaDoKKyAg
ICAgICAgTWFkZSBjb25zdHJ1Y3RvcnMgYW5kIHZpcnR1YWwgZnVuY3Rpb24gb3ZlcnJpZGVzIHBy
aXZhdGUsIGFkZGVkIGNyZWF0ZSBmdW5jdGlvbnMuCisgICAgICAgIE1hZGUgY29uc3RydWN0b3Jz
IGlubGluZSBpbiBjYXNlc2Ugd2hlcmUgdGhleSB3ZXJlIGNhbGxlZCBpbiBvbmx5IG9uZSBwbGFj
ZS4KKworICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50OjpIVE1MVGFibGVDb2xFbGVtZW50KTogQ2hhbmdl
ZCBkYXRhIG1lbWJlciBuYW1lCisgICAgICAgIGZyb20gX3NwYW4gdG8gbV9zcGFuLgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRhYmxlQ29sRWxlbWVudDo6Y3JlYXRlKTogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IFVw
ZGF0ZWQgdG8gdXNlIG1fc3Bhbi4KKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQu
aDoKKyAgICAgICAgTWFkZSBjb25zdHJ1Y3RvciBhbmQgdmlydHVhbCBmdW5jdGlvbiBvdmVycmlk
ZXMgcHJpdmF0ZSwgYWRkZWQgY3JlYXRlIGZ1bmN0aW9uLgorICAgICAgICBSZW5hbWVkIF9zcGFu
IHRvIG1fc3Bhbi4KKwogMjAxMC0wNS0yNSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4OiBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTgxOSw3ICsxODE5LDcgQEAgdm9pZCBEb2N1bWVudDo6aW1wbGljaXRDbG9z
ZSgpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50LT5hcHBlbmRDaGlsZChuZXcgSFRN
TEhlYWRFbGVtZW50KGhlYWRUYWcsIHRoaXMpLCBlYyk7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KCFlYyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQtPmFwcGVu
ZENoaWxkKG5ldyBIVE1MQm9keUVsZW1lbnQoYm9keVRhZywgdGhpcyksIGVjKTsKKyAgICAgICAg
ICAgIGRvY3VtZW50RWxlbWVudC0+YXBwZW5kQ2hpbGQoSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUo
dGhpcyksIGVjKTsKICAgICAgICAgICAgIEFTU0VSVCghZWMpOwogICAgICAgICB9CiAgICAgfQpA
QCAtNDc3NSw3ICs0Nzc1LDcgQEAgSFRNTENhbnZhc0VsZW1lbnQqIERvY3VtZW50OjpnZXRDU1ND
YW52YQogewogICAgIFJlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4gcmVzdWx0ID0gbV9jc3NDYW52
YXNFbGVtZW50cy5nZXQobmFtZSkuZ2V0KCk7CiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAg
cmVzdWx0ID0gbmV3IEhUTUxDYW52YXNFbGVtZW50KGNhbnZhc1RhZywgdGhpcyk7CisgICAgICAg
IHJlc3VsdCA9IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGUodGhpcyk7CiAgICAgICAgIG1fY3Nz
Q2FudmFzRWxlbWVudHMuc2V0KG5hbWUsIHJlc3VsdCk7CiAgICAgfQogICAgIHJldHVybiByZXN1
bHQuZ2V0KCk7CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAJ
KHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBzdGF0aWMgU3RyaW5nIGluZGVu
dEJsb2NrcXVvdGVTdHJpbmcoKQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQmxvY2txdW90ZUVs
ZW1lbnQ+IGNyZWF0ZUluZGVudEJsb2NrcXVvdGVFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCkK
IHsKLSAgICBSZWZQdHI8SFRNTEJsb2NrcXVvdGVFbGVtZW50PiBlbGVtZW50ID0gbmV3IEhUTUxC
bG9ja3F1b3RlRWxlbWVudChibG9ja3F1b3RlVGFnLCBkb2N1bWVudCk7CisgICAgUmVmUHRyPEhU
TUxCbG9ja3F1b3RlRWxlbWVudD4gZWxlbWVudCA9IEhUTUxCbG9ja3F1b3RlRWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50KTsKICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUoY2xhc3NBdHRyLCBpbmRl
bnRCbG9ja3F1b3RlU3RyaW5nKCkpOwogICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0
dHIsICJtYXJnaW46IDAgMCAwIDQwcHg7IGJvcmRlcjogbm9uZTsgcGFkZGluZzogMHB4OyIpOwog
ICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9odG1s
ZWRpdGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNw
cAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04NzksNyArODc5LDcgQEAgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4g
Y3JlYXRlRGVmYXVsdFBhcgogCiBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVCcmVha0Vs
ZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBuZXcgSFRNTEJSRWxlbWVu
dChiclRhZywgZG9jdW1lbnQpOworICAgIHJldHVybiBIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVPcmRlcmVkTGlzdEVs
ZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBdWRpb0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmNw
cAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDExIEBAIEhUTUxBdWRpb0VsZW1lbnQ6OkhUTUxB
dWRpb0VsZW1lbnQoY29uc3QKICAgICBBU1NFUlQoaGFzVGFnTmFtZShhdWRpb1RhZykpOwogfQog
CitQYXNzUmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IEhUTUxBdWRpb0VsZW1lbnQ6OmNyZWF0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAg
cmV0dXJuIG5ldyBIVE1MQXVkaW9FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKK30KKwogUGFz
c1JlZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBIVE1MQXVkaW9FbGVtZW50OjpjcmVhdGVGb3JKU0Nv
bnN0cnVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBzcmMpCiB7CiAgICAg
UmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IGF1ZGlvID0gbmV3IEhUTUxBdWRpb0VsZW1lbnQoYXVk
aW9UYWcsIGRvY3VtZW50KTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAkocmV2aXNpb24g
NjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw5ICszNiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxBdWRp
b0VsZW1lbnQgOiBwdWJsaWMgSFRNTE1lZGlhRWxlbWVudCB7CiBwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTEF1ZGlvRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IGNy
ZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHNyYyk7Ci0gICAg
SFRNTEF1ZGlvRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKwogcHJp
dmF0ZToKKyAgICBIVE1MQXVkaW9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOworCiAgICAgdmlydHVhbCBib29sIGlzVmlkZW8oKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogfTsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQlJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEJSRWxlbWVudC5jcHAJKHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxCUkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICog
Q29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAg
ICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsMTIgKzMyLDIyIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEJS
RWxlbWVudDo6SFRNTEJSRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorSFRNTEJSRWxlbWVu
dDo6SFRNTEJSRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jdW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKIHsKICAgICBB
U1NFUlQoaGFzVGFnTmFtZShiclRhZykpOwogfQogCitQYXNzUmVmUHRyPEhUTUxCUkVsZW1lbnQ+
IEhUTUxCUkVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJu
IG5ldyBIVE1MQlJFbGVtZW50KGJyVGFnLCBkb2N1bWVudCk7Cit9CisKK1Bhc3NSZWZQdHI8SFRN
TEJSRWxlbWVudD4gSFRNTEJSRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxCUkVsZW1l
bnQodGFnTmFtZSwgZG9jdW1lbnQpOworfQorCiBib29sIEhUTUxCUkVsZW1lbnQ6Om1hcFRvRW50
cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiBy
ZXN1bHQpIGNvbnN0CiB7CiAgICAgaWYgKGF0dHJOYW1lID09IGNsZWFyQXR0cikgewpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxCUkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEJSRWxlbWVudC5oCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQlJF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBT
aW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDYsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCwxMyArMjgsMTQgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBTdHJpbmc7Ci0KIGNsYXNzIEhUTUxCUkVsZW1lbnQgOiBwdWJsaWMg
SFRNTEVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxCUkVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEJSRWxlbWVudD4g
Y3JlYXRlKERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEJSRWxlbWVudD4g
Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiBwcml2YXRlOgorICAg
IEhUTUxCUkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKICAgICB2
aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBU
YWdTdGF0dXNGb3JiaWRkZW47IH0KICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KIApAQCAtNDQsNiArNDUsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
UmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7
CiB9OwogCi19IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9IVE1MQmFzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9I
VE1MQmFzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzQsMTIgKzM0LDE3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEJhc2VFbGVt
ZW50OjpIVE1MQmFzZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIERvY3VtZW50
KiBkb2N1bWVudCkKLSAgICA6IEhUTUxFbGVtZW50KHFOYW1lLCBkb2N1bWVudCkKK2lubGluZSBI
VE1MQmFzZUVsZW1lbnQ6OkhUTUxCYXNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShiYXNlVGFnKSk7CiB9CiAKK1Bhc3NSZWZQ
dHI8SFRNTEJhc2VFbGVtZW50PiBIVE1MQmFzZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBI
VE1MQmFzZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworfQorCiB2b2lkIEhUTUxCYXNlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gaHJlZkF0dHIpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQmFzZUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmgJKHJl
dmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxCYXNlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI5LDkgKzI5LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEJhc2VFbGVt
ZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MQmFzZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SFRNTEJhc2VFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
CiAKIHByaXZhdGU6CisgICAgSFRNTEJhc2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOworCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50
KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CiAgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKQEAgLTUxLDYgKzUzLDYgQEAgcHJp
dmF0ZToKICAgICBTdHJpbmcgbV90YXJnZXQ7CiB9OwogCi19IC8vbmFtZXNwYWNlCit9IC8vIG5h
bWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJhc2VGb250RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxCYXNlRm9udEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOSwgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDEyICsyOSwx
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAK
LUhUTUxCYXNlRm9udEVsZW1lbnQ6OkhUTUxCYXNlRm9udEVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoraW5saW5lIEhUTUxCYXNlRm9udEVs
ZW1lbnQ6OkhUTUxCYXNlRm9udEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
CiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoYmFzZWZvbnRUYWcpKTsKIH0KIAorUGFzc1JlZlB0
cjxIVE1MQmFzZUZvbnRFbGVtZW50PiBIVE1MQmFzZUZvbnRFbGVtZW50OjpjcmVhdGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVy
biBuZXcgSFRNTEJhc2VGb250RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCk7Cit9CisKIGludCBI
VE1MQmFzZUZvbnRFbGVtZW50OjpzaXplKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmli
dXRlKHNpemVBdHRyKS50b0ludCgpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCYXNlRm9udEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJhc2VGb250RWxlbWVudC5o
CShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQmFzZUZvbnRFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksMTIgKzI5LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEJhc2VGb250RWxlbWVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgSFRNTEJhc2VGb250RWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
QmFzZUZvbnRFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
CiAKICAgICBpbnQgc2l6ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2l6ZShpbnQpOwogCiBwcml2
YXRlOgorICAgIEhUTUxCYXNlRm9udEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CisKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBj
b25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KICAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIH07CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TEJsb2NrcXVvdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJs
b2NrcXVvdGVFbGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEJsb2NrcXVvdGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNSw0ICszNSwxNCBAQCBIVE1MQmxvY2tx
dW90ZUVsZW1lbnQ6OkhUTUxCbG9ja3F1b3RlRWxlCiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoYmxv
Y2txdW90ZVRhZykpOwogfQogCitQYXNzUmVmUHRyPEhUTUxCbG9ja3F1b3RlRWxlbWVudD4gSFRN
TEJsb2NrcXVvdGVFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJl
dHVybiBuZXcgSFRNTEJsb2NrcXVvdGVFbGVtZW50KGJsb2NrcXVvdGVUYWcsIGRvY3VtZW50KTsK
K30KKworUGFzc1JlZlB0cjxIVE1MQmxvY2txdW90ZUVsZW1lbnQ+IEhUTUxCbG9ja3F1b3RlRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxCbG9ja3F1b3RlRWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCk7Cit9CisKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJsb2NrcXVvdGVFbGVtZW50LmgJ
KHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxCbG9ja3F1b3RlRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI5LDkgKzI5LDEyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEJsb2NrcXVvdGVFbGVtZW50IDogcHVibGljIEhUTUxF
bGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MQmxvY2txdW90ZUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEJsb2NrcXVv
dGVFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
QmxvY2txdW90ZUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIAogcHJpdmF0ZToKKyAgICBIVE1MQmxvY2txdW90ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50Kik7CisKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQogfTsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MQm9keUVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1M
Qm9keUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAg
ICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDAwIFNpbW9uIEhhdXNtYW5uIChoYXVzbWFubkBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTQ1LDYgKzQ1LDE2IEBAIEhUTUxCb2R5RWxlbWVudDo6SFRNTEJvZHlFbGVtZW50KGNvbnN0
IFEKICAgICBBU1NFUlQoaGFzVGFnTmFtZShib2R5VGFnKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SFRN
TEJvZHlFbGVtZW50PiBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQp
Cit7CisgICAgcmV0dXJuIG5ldyBIVE1MQm9keUVsZW1lbnQoYm9keVRhZywgZG9jdW1lbnQpOwor
fQorCitQYXNzUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAg
IHJldHVybiBuZXcgSFRNTEJvZHlFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKK30KKwogSFRN
TEJvZHlFbGVtZW50Ojp+SFRNTEJvZHlFbGVtZW50KCkKIHsKICAgICBpZiAobV9saW5rRGVjbCkg
ewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTEJvZHlFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KLSAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw3ICszMSw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEJvZHlFbGVtZW50IDogcHVibGljIEhUTUxF
bGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MQm9keUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEJvZHlFbGVtZW50PiBj
cmVhdGUoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQm9keUVsZW1lbnQ+
IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5I
VE1MQm9keUVsZW1lbnQoKTsKIAogICAgIFN0cmluZyBhTGluaygpIGNvbnN0OwpAQCAtNjYsNiAr
NjcsOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKKyAgICBIVE1MQm9keUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKICAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJl
ZDsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMTA7IH0K
ICAgICAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCwxNiArNDAsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogCi1IVE1MQnV0dG9uRWxlbWVudDo6SFRNTEJ1dHRvbkVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBm
b3JtKQotICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2MsIGZvcm0pCitp
bmxpbmUgSFRNTEJ1dHRvbkVsZW1lbnQ6OkhUTUxCdXR0b25FbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
KQorICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgZm9ybSkK
ICAgICAsIG1fdHlwZShTVUJNSVQpCiAgICAgLCBtX2FjdGl2ZVN1Ym1pdChmYWxzZSkKIHsKICAg
ICBBU1NFUlQoaGFzVGFnTmFtZShidXR0b25UYWcpKTsKIH0KIAotSFRNTEJ1dHRvbkVsZW1lbnQ6
On5IVE1MQnV0dG9uRWxlbWVudCgpCitQYXNzUmVmUHRyPEhUTUxCdXR0b25FbGVtZW50PiBIVE1M
QnV0dG9uRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2N1bWVudCwgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQogeworICAgIHJldHVybiBuZXcg
SFRNTEJ1dHRvbkVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pOwogfQogCiBSZW5kZXJP
YmplY3QqIEhUTUxCdXR0b25FbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJl
bmEsIFJlbmRlclN0eWxlKikKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5oCShyZXZpc2lv
biA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtu
b2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZp
c3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVy
QGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2LCAyMDA3LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYwpAQCAtMzAsOCArMzAsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBIVE1MQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKIHB1
YmxpYzoKLSAgICBIVE1MQnV0dG9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7Ci0gICAgdmlydHVhbCB+SFRNTEJ1dHRvbkVsZW1l
bnQoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MQnV0dG9uRWxlbWVudD4gY3JlYXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOworCisgICAg
U3RyaW5nIGFjY2Vzc0tleSgpIGNvbnN0OworICAgIHZvaWQgc2V0QWNjZXNzS2V5KGNvbnN0IFN0
cmluZyYpOworCisgICAgU3RyaW5nIHZhbHVlKCkgY29uc3Q7CisgICAgdm9pZCBzZXRWYWx1ZShj
b25zdCBTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBIVE1MQnV0dG9uRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCopOworCisg
ICAgZW51bSBUeXBlIHsgU1VCTUlULCBSRVNFVCwgQlVUVE9OIH07CiAKICAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgZm9ybUNvbnRyb2xUeXBlKCkgY29uc3Q7CiAgICAgICAgIApAQCAt
NTEsMTQgKzYxLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIFN0cmluZyBhY2Nlc3NLZXkoKSBj
b25zdDsKLSAgICB2b2lkIHNldEFjY2Vzc0tleShjb25zdCBTdHJpbmcmKTsKLQotICAgIFN0cmlu
ZyB2YWx1ZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJik7Ci0KLXBy
aXZhdGU6Ci0gICAgZW51bSBUeXBlIHsgU1VCTUlULCBSRVNFVCwgQlVUVE9OIH07CiAgICAgdmly
dHVhbCBib29sIGlzT3B0aW9uYWxGb3JtQ29udHJvbCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgcmVjYWxjV2lsbFZhbGlkYXRlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3
NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDE1ICs1NCwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKLUhUTUxDYW52YXNFbGVtZW50OjpIVE1MQ2FudmFzRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1l
bnQodGFnTmFtZSwgZG9jKQotICAgICwgQ2FudmFzU3VyZmFjZShkb2MtPmZyYW1lKCkgPyBkb2Mt
PmZyYW1lKCktPnBhZ2UoKS0+Y2hyb21lKCktPnNjYWxlRmFjdG9yKCkgOiAxKQorSFRNTENhbnZh
c0VsZW1lbnQ6OkhUTUxDYW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50
KQorICAgICwgQ2FudmFzU3VyZmFjZShkb2N1bWVudC0+ZnJhbWUoKSA/IGRvY3VtZW50LT5mcmFt
ZSgpLT5wYWdlKCktPmNocm9tZSgpLT5zY2FsZUZhY3RvcigpIDogMSkKICAgICAsIG1fb2JzZXJ2
ZXIoMCkKICAgICAsIG1faWdub3JlUmVzZXQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05h
bWUoY2FudmFzVGFnKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SFRNTENhbnZhc0VsZW1lbnQ+IEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBu
ZXcgSFRNTENhbnZhc0VsZW1lbnQoY2FudmFzVGFnLCBkb2N1bWVudCk7Cit9CisKK1Bhc3NSZWZQ
dHI8SFRNTENhbnZhc0VsZW1lbnQ+IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBu
ZXcgSFRNTENhbnZhc0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworfQorCiBIVE1MQ2FudmFz
RWxlbWVudDo6fkhUTUxDYW52YXNFbGVtZW50KCkKIHsKICAgICBpZiAobV9vYnNlcnZlcikKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNiwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDksIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMCwxMCArMzAsMTEg
QEAKICNpbmNsdWRlICJDYW52YXNTdXJmYWNlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKICNpZiBFTkFC
TEUoM0RfQ0FOVkFTKSAgICAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2VuZGlm
Ci0jaW5jbHVkZSAiSW50U2l6ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU0LDcg
KzU1LDggQEAgcHVibGljOgogCiBjbGFzcyBIVE1MQ2FudmFzRWxlbWVudCA6IHB1YmxpYyBIVE1M
RWxlbWVudCwgcHVibGljIENhbnZhc1N1cmZhY2UgewogcHVibGljOgotICAgIEhUTUxDYW52YXNF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEhUTUxDYW52YXNFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxIVE1MQ2FudmFzRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkhUTUxDYW52YXNFbGVtZW50KCk7CiAKICAgICB2
b2lkIHNldFdpZHRoKGludCk7CkBAIC04OSw2ICs5MSw4IEBAIHB1YmxpYzoKICNlbmRpZgogCiBw
cml2YXRlOgorICAgIEhUTUxDYW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOworCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgIHZpcnR1YWwgSFRN
TFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERMaXN0RWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxETGlzdEVsZW1lbnQuY3BwCShyZXZp
c2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRExpc3RFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKLS8qKgorLyoKICAqIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTgsNiArMTks
NyBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKgogICovCisKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJIVE1MRExpc3RFbGVtZW50LmgiCiAKQEAgLTI3LDEyICsy
OSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLUhUTUxETGlzdEVsZW1lbnQ6OkhUTUxETGlzdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRv
YykKK2lubGluZSBIVE1MRExpc3RFbGVtZW50OjpIVE1MRExpc3RFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50
KHRhZ05hbWUsIGRvY3VtZW50KQogewogICAgIEFTU0VSVChoYXNUYWdOYW1lKGRsVGFnKSk7CiB9
CiAKK1Bhc3NSZWZQdHI8SFRNTERMaXN0RWxlbWVudD4gSFRNTERMaXN0RWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAg
ICByZXR1cm4gbmV3IEhUTUxETGlzdEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworfQorCiBi
b29sIEhUTUxETGlzdEVsZW1lbnQ6OmNvbXBhY3QoKSBjb25zdAogewogICAgIHJldHVybiAhZ2V0
QXR0cmlidXRlKGNvbXBhY3RBdHRyKS5pc051bGwoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1M
RExpc3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxETGlzdEVsZW1l
bnQuaAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERMaXN0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsMTMg
KzI5LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTERMaXN0RWxlbWVudCA6
IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRN
TERMaXN0RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwor
CisgICAgYm9vbCBjb21wYWN0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwor
Citwcml2YXRlOgogICAgIEhUTUxETGlzdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQo
KSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZpcnR1YWwgaW50IHRh
Z1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQotCi0gICAgYm9vbCBjb21wYWN0KCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRDb21wYWN0KGJvb2wpOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZENlbGxFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3
NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRDZWxsRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMwLDE3ICszMCwyMSBAQAogI2luY2x1ZGUgIkhUTUxEYXRhR3JpZENlbGxFbGVtZW50
LmgiCiAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJUZXh0LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTERhdGFH
cmlkQ2VsbEVsZW1lbnQ6OkhUTUxEYXRhR3JpZENlbGxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudChuYW1lLCBkb2MpCitI
VE1MRGF0YUdyaWRDZWxsRWxlbWVudDo6SFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1lbnQo
bmFtZSwgZG9jdW1lbnQpCiB7CiB9CiAKK1Bhc3NSZWZQdHI8SFRNTERhdGFHcmlkQ2VsbEVsZW1l
bnQ+IEhUTUxEYXRhR3JpZENlbGxFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBuZXcgSFRNTERhdGFHcmlk
Q2VsbEVsZW1lbnQobmFtZSwgZG9jdW1lbnQpOworfQorCiBTdHJpbmcgSFRNTERhdGFHcmlkQ2Vs
bEVsZW1lbnQ6OmxhYmVsKCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGxhYmVs
QXR0cik7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQuaAkocmV2aXNp
b24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsMTEgKzM0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBI
VE1MRGF0YUdyaWRDZWxsRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6Ci0g
ICAgSFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTERhdGFHcmlkQ2VsbEVsZW1lbnQ+IGNyZWF0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAotICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJp
ZGRlbjsgfQotICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsg
fQotICAgIAogICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TGFiZWwoY29u
c3QgU3RyaW5nJik7CiAgICAgCkBAIC01Myw2ICs1MCwxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
ZmxvYXQgcHJvZ3Jlc3MoKSBjb25zdDsKICAgICB2b2lkIHNldFByb2dyZXNzKGZsb2F0KTsKKwor
cHJpdmF0ZToKKyAgICBIVE1MRGF0YUdyaWRDZWxsRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQorICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIAogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZENvbEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRDb2xFbGVtZW50
LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkQ29sRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDEyICszOCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxEYXRhR3JpZENvbEVsZW1l
bnQ6OkhUTUxEYXRhR3JpZENvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9j
dW1lbnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50KG5hbWUsIGRvYykKK0hUTUxEYXRhR3JpZENv
bEVsZW1lbnQ6OkhUTUxEYXRhR3JpZENvbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAgIDogSFRNTEVsZW1lbnQobmFtZSwgZG9jdW1lbnQp
CiAgICAgLCBtX2RhdGFHcmlkKDApCiB7CiB9CiAKK1Bhc3NSZWZQdHI8SFRNTERhdGFHcmlkQ29s
RWxlbWVudD4gSFRNTERhdGFHcmlkQ29sRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxEYXRh
R3JpZENvbEVsZW1lbnQobmFtZSwgZG9jdW1lbnQpOworfQorCiBIVE1MRGF0YUdyaWRFbGVtZW50
KiBIVE1MRGF0YUdyaWRDb2xFbGVtZW50OjpmaW5kRGF0YUdyaWRBbmNlc3RvcigpIGNvbnN0CiB7
CiAgICAgaWYgKHBhcmVudCgpICYmIHBhcmVudCgpLT5oYXNUYWdOYW1lKGRhdGFncmlkVGFnKSkK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRDb2xFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZENvbEVsZW1lbnQuaAkocmV2aXNpb24gNjAxNzcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkQ29sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNywxMyArMzcsNyBAQCBjbGFzcyBIVE1MRGF0YUdyaWRFbGVtZW50OwogCiBjbGFzcyBIVE1M
RGF0YUdyaWRDb2xFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBI
VE1MRGF0YUdyaWRDb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwot
Ci0gICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9Ci0gICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHko
KSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUo
Ym9vbCAvKmRlZXAqLyk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tVHJlZShib29sIC8q
ZGVlcCovKTsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTERhdGFHcmlkQ29sRWxlbWVudD4gY3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgU3RyaW5nIGxhYmVsKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKQEAgLTY0LDYgKzU4LDE0
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENvbHVtbihQYXNzUmVmUHRyPERhdGFHcmlkQ29sdW1u
PiBjb2wpIHsgbV9jb2x1bW4gPSBjb2w7IH0KIAogcHJpdmF0ZToKKyAgICBIVE1MRGF0YUdyaWRD
b2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCisgICAgdmlydHVh
bCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3Rh
dHVzRm9yYmlkZGVuOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCAvKmRlZXAq
Lyk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tVHJlZShib29sIC8qZGVlcCovKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CisKICAgICBI
VE1MRGF0YUdyaWRFbGVtZW50KiBkYXRhR3JpZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YUdyaWQ7
IH0KICAgICBIVE1MRGF0YUdyaWRFbGVtZW50KiBmaW5kRGF0YUdyaWRBbmNlc3RvcigpIGNvbnN0
OwogICAgIHZvaWQgZW5zdXJlQ29sdW1uKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERhdGFH
cmlkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsMTEgQEAgSFRNTERhdGFHcmlk
RWxlbWVudDo6SFRNTERhdGFHcmlkRWxlbWVudAogICAgIHNldERhdGFTb3VyY2UoRE9NRGF0YUdy
aWREYXRhU291cmNlOjpjcmVhdGUoKSk7CiB9CiAKK1Bhc3NSZWZQdHI8SFRNTERhdGFHcmlkRWxl
bWVudD4gSFRNTERhdGFHcmlkRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxEYXRhR3Jp
ZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOworfQorCiBIVE1MRGF0YUdyaWRFbGVtZW50Ojp+
SFRNTERhdGFHcmlkRWxlbWVudCgpCiB7CiAgICAgbV9jb2x1bW5zLT5jbGVhckRhdGFHcmlkKCk7
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRFbGVtZW50LmgJKHJldmlzaW9uIDYwMTc3KQorKysg
V2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsMjAg
KzMxLDE0IEBACiAjaW5jbHVkZSAiRGF0YUdyaWRDb2x1bW5MaXN0LmgiCiAjaW5jbHVkZSAiRGF0
YUdyaWREYXRhU291cmNlLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJU
aW1lci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxEYXRhR3JpZEVsZW1l
bnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxEYXRhR3JpZEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SFRNTERhdGFHcmlkRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwogICAgIHZpcnR1YWwgfkhUTUxEYXRhR3JpZEVsZW1lbnQoKTsKIAotICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNjsgfSAvLyBTYW1lIGFzIDxzZWxl
Y3Q+cwotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7Ci0KLSAgICB2aXJ0
dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHls
ZSopOwotCiAgICAgYm9vbCBhdXRvZm9jdXMoKSBjb25zdDsKICAgICB2b2lkIHNldEF1dG9mb2N1
cyhib29sKTsKIApAQCAtNjAsNiArNTQsMTMgQEAgcHVibGljOgogICAgIERhdGFHcmlkQ29sdW1u
TGlzdCogY29sdW1ucygpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1ucy5nZXQoKTsgfQogCiBwcml2
YXRlOgorICAgIEhUTUxEYXRhR3JpZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CisKKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDY7
IH0gLy8gU2FtZSBhcyA8c2VsZWN0PnMKKyAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3Qg
Tm9kZSopOworCisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKwogICAgIFJlZlB0cjxEYXRhR3JpZERhdGFTb3VyY2U+
IG1fZGF0YVNvdXJjZTsKICAgICBSZWZQdHI8RGF0YUdyaWRDb2x1bW5MaXN0PiBtX2NvbHVtbnM7
CiB9OwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZFJvd0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRSb3dFbGVtZW50LmNwcAkocmV2aXNp
b24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkUm93RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDE3ICszMCwyMSBAQAogI2luY2x1ZGUgIkhUTUxEYXRhR3JpZFJvd0Vs
ZW1lbnQuaCIKIAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIlRleHQuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1M
RGF0YUdyaWRSb3dFbGVtZW50OjpIVE1MRGF0YUdyaWRSb3dFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudChuYW1lLCBkb2Mp
CitIVE1MRGF0YUdyaWRSb3dFbGVtZW50OjpIVE1MRGF0YUdyaWRSb3dFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKKyAgICA6IEhUTUxFbGVtZW50
KG5hbWUsIGRvY3VtZW50KQogewogfQogCitQYXNzUmVmUHRyPEhUTUxEYXRhR3JpZFJvd0VsZW1l
bnQ+IEhUTUxEYXRhR3JpZFJvd0VsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MRGF0YUdyaWRS
b3dFbGVtZW50KG5hbWUsIGRvY3VtZW50KTsKK30KKwogYm9vbCBIVE1MRGF0YUdyaWRSb3dFbGVt
ZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCkKIHsKICAgICBpZiAobmV3Q2hpbGQt
PmlzVGV4dE5vZGUoKSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRGF0YUdyaWRSb3dFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEYXRhR3JpZFJvd0VsZW1lbnQuaAko
cmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERhdGFHcmlkUm93RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zNCwxMCArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEhUTUxEYXRhR3JpZFJvd0VsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGlj
OgotICAgIEhUTUxEYXRhR3JpZFJvd0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7Ci0KLSAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDI7
IH0gLy8gU2FtZSBhcyA8b3B0aW9uPnMuCi0gICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0
IE5vZGUqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRGF0YUdyaWRSb3dFbGVtZW50PiBj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICBib29sIHNlbGVj
dGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRTZWxlY3RlZChib29sKTsKQEAgLTQ3LDYgKzQ0LDEy
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGV4cGFuZGVkKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRFeHBhbmRlZChib29sKTsKKworcHJpdmF0ZToKKyAgICBIVE1MRGF0YUdyaWRSb3dFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworCisgICAgdmlydHVhbCBpbnQgdGFn
UHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAyOyB9IC8vIFNhbWUgYXMgPG9wdGlvbj5zLgorICAg
IHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERhdGFMaXN0RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEYXRhTGlzdEVsZW1lbnQuY3BwCShyZXZpc2lv
biA2MDE3NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRGF0YUxpc3RFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQpAQCAtMzYsMTMgKzM3LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSFRNTERh
dGFMaXN0RWxlbWVudDo6SFRNTERhdGFMaXN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQor
SFRNTERhdGFMaXN0RWxlbWVudDo6SFRNTERhdGFMaXN0RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBIVE1MRWxlbWVudCh0YWdO
YW1lLCBkb2N1bWVudCkKIHsKIH0KIAotSFRNTERhdGFMaXN0RWxlbWVudDo6fkhUTUxEYXRhTGlz
dEVsZW1lbnQoKQorUGFzc1JlZlB0cjxIVE1MRGF0YUxpc3RFbGVtZW50PiBIVE1MRGF0YUxpc3RF
bGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50KQogeworICAgIHJldHVybiBuZXcgSFRNTERhdGFMaXN0RWxlbWVudCh0YWdOYW1lLCBk
b2N1bWVudCk7CiB9CiAKIGJvb2wgSFRNTERhdGFMaXN0RWxlbWVudDo6Y2hlY2tEVEQoY29uc3Qg
Tm9kZSogbmV3Q2hpbGQpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERhdGFMaXN0RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRGF0YUxpc3RFbGVtZW50LmgJKHJldmlz
aW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxEYXRhTGlzdEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQpAQCAtMzgsMTUgKzM5LDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNs
YXNzIEhUTUxEYXRhTGlzdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgSFRNTERhdGFMaXN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKLSAgICAgICAgdmlydHVhbCB+SFRNTERhdGFMaXN0RWxlbWVudCgpOwotICAgICAg
ICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBvcHRpb25zKCk7Ci0KLSAgICBwcml2YXRlOgot
ICAgICAgICB2aXJ0dWFsIGJvb2wgY2hlY2tEVEQoY29uc3QgTm9kZSopOwotICAgIH07CitjbGFz
cyBIVE1MRGF0YUxpc3RFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRGF0YUxpc3RFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9u
PiBvcHRpb25zKCk7CisKK3ByaXZhdGU6CisgICAgSFRNTERhdGFMaXN0RWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChj
b25zdCBOb2RlKik7Cit9OwogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAJKHJldmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM1LDcgKzQzNSw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6
OnNldElubmVyVGV4dChjb25zdCBTdHIKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCEoYyA9PSAnXG4nICYmIGkgIT0gMCAmJiBwcmV2
ID09ICdccicpKSB7Ci0gICAgICAgICAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKG5ldyBI
VE1MQlJFbGVtZW50KGJyVGFnLCBkb2N1bWVudCgpKSwgZWMpOworICAgICAgICAgICAgICAgIGZy
YWdtZW50LT5hcHBlbmRDaGlsZChIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSksIGVj
KTsKICAgICAgICAgICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDYwMTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVy
IChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBw
bGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYg
QWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMzLDE0
ICszMywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKLUhUTUxGaWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYywgSFRNTEZvcm1FbGVtZW50ICpmKQot
ICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2MsIGYpCitpbmxpbmUgSFRN
TEZpZWxkU2V0RWxlbWVudDo6SFRNTEZpZWxkU2V0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKKyAg
ICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pCiB7CiAg
ICAgQVNTRVJUKGhhc1RhZ05hbWUoZmllbGRzZXRUYWcpKTsKIH0KIAotSFRNTEZpZWxkU2V0RWxl
bWVudDo6fkhUTUxGaWVsZFNldEVsZW1lbnQoKQorUGFzc1JlZlB0cjxIVE1MRmllbGRTZXRFbGVt
ZW50PiBIVE1MRmllbGRTZXRFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCiB7CisgICAg
cmV0dXJuIG5ldyBIVE1MRmllbGRTZXRFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKTsK
IH0KIAogYm9vbCBIVE1MRmllbGRTZXRFbGVtZW50OjpjaGVja0RURChjb25zdCBOb2RlKiBuZXdD
aGlsZCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaAkocmV2aXNpb24gNjAxNzcp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5v
cmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI3LDMwICsyNywyMyBA
QAogI2luY2x1ZGUgIkhUTUxGb3JtQ29udHJvbEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIGNsYXNzIFJlbmRlclN0eWxlOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEhUTUxGb3JtRWxlbWVudDsKLWNsYXNzIERvY3VtZW50OwotY2xhc3MgTm9kZTsKIAog
Y2xhc3MgSFRNTEZpZWxkU2V0RWxlbWVudCA6IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
IHsKIHB1YmxpYzoKLSAgICBIVE1MRmllbGRTZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKLSAgICB2aXJ0dWFsIH5IVE1MRmll
bGRTZXRFbGVtZW50KCk7Ci0gICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEZpZWxkU2V0
RWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3Jt
RWxlbWVudCopOworCitwcml2YXRlOgorICAgIEhUTUxGaWVsZFNldEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50Kik7CisKICAgICB2aXJ0dWFs
IGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDM7IH0KICAgICB2aXJ0dWFsIGJvb2wg
Y2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpOwogCiAgICAgdmlydHVhbCBib29sIHN1cHBv
cnRzRm9jdXMoKSBjb25zdDsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVy
ZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmb3JtQ29udHJvbFR5cGUoKSBjb25zdDsKLXByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIHJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCi19
IC8vbmFtZXNwYWNlCit9IC8vIG5hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MTW9kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNb2RF
bGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1vZEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDggKzEsOCBAQAotLyoqCisvKgogICogQ29weXJp
Z2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDAgU2ltb24gSGF1c21hbm4gPGhhdXNtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNiwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTE5LDYgKzE5LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSFRN
TE1vZEVsZW1lbnQuaCIKIApAQCAtMjgsOSArMjksMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MTW9kRWxlbWVudDo6SFRNTE1vZEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLSAgICA6
IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKK2lubGluZSBIVE1MTW9kRWxlbWVudDo6SFRNTE1v
ZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50
KQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCit7Cit9CisKK1Bhc3NSZWZQ
dHI8SFRNTE1vZEVsZW1lbnQ+IEhUTUxNb2RFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogeworICAgIHJldHVybiBuZXcgSFRN
TE1vZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpOwogfQogCiBTdHJpbmcgSFRNTE1vZEVsZW1l
bnQ6OmNpdGUoKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxNb2RFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxNb2RFbGVtZW50LmgJKHJldmlzaW9uIDYwMTc3
KQorKysgV2ViQ29yZS9odG1sL0hUTUxNb2RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDYgKzIwLDcgQEAKICAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgogICoKICAqLworCiAjaWZuZGVmIEhUTUxNb2RFbGVtZW50X2gKICNkZWZp
bmUgSFRNTE1vZEVsZW1lbnRfaAogCkBAIC0yNiwyMCArMjgsMjEgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBTdHJpbmc7Ci0KIGNsYXNzIEhUTUxNb2RFbGVtZW50IDogcHVibGlj
IEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MTW9kRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKLQotICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdS
ZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9Ci0gICAgdmly
dHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SFRNTE1vZEVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKIAogICAgIFN0cmluZyBjaXRlKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDaXRlKGNv
bnN0IFN0cmluZyYpOwogCiAgICAgU3RyaW5nIGRhdGVUaW1lKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXREYXRlVGltZShjb25zdCBTdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBIVE1MTW9kRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKworICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVp
cmVkOyB9CisgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiAxOyB9
CiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCShyZXZpc2lvbiA2MDE3
NykKKysrIFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc2
LDkgKzU3Niw4IEBAIGJvb2wgSFRNTFBhcnNlcjo6aGFuZGxlRXJyb3IoTm9kZSogbiwgYm8KICAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUhlYWQoKTsKIAogICAgICAgICAgICAgICAgICAg
ICBwb3BCbG9jayhoZWFkVGFnKTsKLSAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9k
eUVsZW1lbnQoYm9keVRhZywgbV9kb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
Qm9keSgpOwotICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOworICAgICAgICAgICAg
ICAgICAgICBpbnNlcnROb2RlKEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdl
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEZyYW1l
c2V0Q29udGVudEVycm9yLCAmbG9jYWxOYW1lKTsKQEAgLTU5MSw5ICs1OTAsOCBAQCBib29sIEhU
TUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvCiAgICAgICAgICAgICAgICAgaWYgKCFt
X2hhdmVGcmFtZVNldCkgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoY3VycmVudFRhZ05h
bWUgPT0gaGVhZFRhZyk7CiAgICAgICAgICAgICAgICAgICAgIHBvcEJsb2NrKGN1cnJlbnRUYWdO
YW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnQoYm9keVRh
ZywgbV9kb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOwotICAgICAg
ICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOworICAgICAgICAgICAgICAgICAgICBpbnNlcnRO
b2RlKEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQpLmdldCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEZyYW1lc2V0Q29udGVudEVycm9y
LCAmbG9jYWxOYW1lKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDYXB0aW9uRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNhcHRpb25FbGVtZW50
LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwICsxLDEwIEBACi0vKioKKy8qCiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTcgTWFydGluIEpvbmVzIChtam9uZXNAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5NyBUb3JiZW4gV2VpcyAod2Vpc0BrZGUub3JnKQogICogICAgICAgICAgIChD
KSAxOTk4IFdhbGRvIEJhc3RpYW4gKGJhc3RpYW5Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMywxMiArMzMsMTcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MVGFibGVDYXB0aW9uRWxl
bWVudDo6SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxUYWJsZVBhcnRFbGVtZW50KHRhZ05hbWUsIGRv
YykKK2lubGluZSBIVE1MVGFibGVDYXB0aW9uRWxlbWVudDo6SFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQorICAg
IDogSFRNTFRhYmxlUGFydEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiB7CiAgICAgQVNTRVJU
KGhhc1RhZ05hbWUoY2FwdGlvblRhZykpOwogfQogCitQYXNzUmVmUHRyPEhUTUxUYWJsZUNhcHRp
b25FbGVtZW50PiBIVE1MVGFibGVDYXB0aW9uRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICByZXR1cm4gbmV3IEhU
TUxUYWJsZUNhcHRpb25FbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KTsKK30KKwogYm9vbCBIVE1M
VGFibGVDYXB0aW9uRWxlbWVudDo6bWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRy
TmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3VsdCkgY29uc3QKIHsKICAgICBpZiAoYXR0
ck5hbWUgPT0gYWxpZ25BdHRyKSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnQuaAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2FwdGlv
bkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNCw3ICs0LDcgQEAKICAqICAgICAgICAgICAo
QykgMTk5OCBXYWxkbyBCYXN0aWFuIChiYXN0aWFuQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzIsNiArMzIsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudCA6IHB1YmxpYyBIVE1MVGFibGVQ
YXJ0RWxlbWVudCB7CiBwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKwor
ICAgIFN0cmluZyBhbGlnbigpIGNvbnN0OworICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5n
Jik7CisKK3ByaXZhdGU6CiAgICAgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVu
ZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KQEAg
LTM5LDExICs0NSw4IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRy
eShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVkQXR0cmlidXRlRW50cnkmKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7Ci0KLSAgICBT
dHJpbmcgYWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldEFsaWduKGNvbnN0IFN0cmluZyYpOwog
fTsKIAotfSAvL25hbWVzcGFjZQorfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3NykKKysrIFdlYkNvcmUv
aHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2
LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAotSFRNTFRhYmxlQ29sRWxlbWVudDo6SFRNTFRhYmxlQ29sRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotICAgIDogSFRNTFRhYmxlUGFydEVsZW1l
bnQodGFnTmFtZSwgZG9jKQorSFRNTFRhYmxlQ29sRWxlbWVudDo6SFRNTFRhYmxlQ29sRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCisgICAg
OiBIVE1MVGFibGVQYXJ0RWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKKyAgICAsIG1fc3Bhbigx
KQogewotICAgIF9zcGFuID0gMTsKK30KKworUGFzc1JlZlB0cjxIVE1MVGFibGVDb2xFbGVtZW50
PiBIVE1MVGFibGVDb2xFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIHJldHVybiBuZXcgSFRNTFRhYmxlQ29sRWxl
bWVudCh0YWdOYW1lLCBkb2N1bWVudCk7CiB9CiAKIEhUTUxUYWdTdGF0dXMgSFRNTFRhYmxlQ29s
RWxlbWVudDo6ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdApAQCAtNzUsNyArODAsNyBAQCBib29s
IEhUTUxUYWJsZUNvbEVsZW1lbnQ6Om1hcFRvRW50cnkoY29uCiB2b2lkIEhUTUxUYWJsZUNvbEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAo
YXR0ci0+bmFtZSgpID09IHNwYW5BdHRyKSB7Ci0gICAgICAgIF9zcGFuID0gIWF0dHItPmlzTnVs
bCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgpIDogMTsKKyAgICAgICAgbV9zcGFuID0gIWF0dHIt
PmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgpIDogMTsKICAgICAgICAgaWYgKHJlbmRl
cmVyKCkgJiYgcmVuZGVyZXIoKS0+aXNUYWJsZUNvbCgpKQogICAgICAgICAgICAgcmVuZGVyZXIo
KS0+dXBkYXRlRnJvbUVsZW1lbnQoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB3
aWR0aEF0dHIpIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuaAkocmV2aXNpb24g
NjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00LDcgKzQsNyBAQAogICogICAgICAgICAgIChDKSAxOTk4IFdhbGRvIEJhc3RpYW4g
KGJhc3RpYW5Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9s
bEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0
b0BrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0zMCwyMyArMzAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBIVE1M
VGFibGVFbGVtZW50OwotCiBjbGFzcyBIVE1MVGFibGVDb2xFbGVtZW50IDogcHVibGljIEhUTUxU
YWJsZVBhcnRFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MVGFibGVDb2xFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7Ci0KLSAgICB2aXJ0dWFsIEhUTUxU
YWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCB0YWdQ
cmlvcml0eSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTFRhYmxlQ29sRWxlbWVudD4gY3JlYXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CiAKLSAgICAvLyBvdmVycmlkZXMK
LSAgICB2aXJ0dWFsIGJvb2wgbWFwVG9FbnRyeShjb25zdCBRdWFsaWZpZWROYW1lJiwgTWFwcGVk
QXR0cmlidXRlRW50cnkmKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoQXR0cmlidXRlKik7Ci0gICAgdmlydHVhbCBib29sIGNhbkhhdmVBZGRpdGlvbmFsQXR0
cmlidXRlU3R5bGVEZWNscygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgYWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbHMoVmVjdG9yPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKj4mKTsKLSAgIAotICAgIGludCBzcGFuKCkgY29uc3QgeyByZXR1cm4gX3NwYW47
IH0KKyAgICBpbnQgc3BhbigpIGNvbnN0IHsgcmV0dXJuIG1fc3BhbjsgfQogCiAgICAgU3RyaW5n
IGFsaWduKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmKTsKQEAgLTY1
LDggKzUzLDE4IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgd2lkdGgoKSBjb25zdDsKICAgICB2b2lk
IHNldFdpZHRoKGNvbnN0IFN0cmluZyYpOwogCi1wcm90ZWN0ZWQ6Ci0gICAgaW50IF9zcGFuOwor
cHJpdmF0ZToKKyAgICBIVE1MVGFibGVDb2xFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50Kik7CisKKyAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVx
dWlyZW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKik7CisgICAgdmlydHVhbCBib29s
IG1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5Jikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSop
OworICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQWRkaXRpb25hbEF0dHJpYnV0ZVN0eWxlRGVjbHMo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGFkZGl0aW9uYWxBdHRy
aWJ1dGVTdHlsZURlY2xzKFZlY3RvcjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbio+Jik7Cisg
ICAKKyAgICBpbnQgbV9zcGFuOwogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
VGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRh
YmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCBQYXNzUmVm
UHRyPEhUTUxFbGVtZW50PiBIVE1MVGFibGVFbGVtZW50CiB7CiAgICAgaWYgKEhUTUxUYWJsZUNh
cHRpb25FbGVtZW50KiBleGlzdGluZ0NhcHRpb24gPSBjYXB0aW9uKCkpCiAgICAgICAgIHJldHVy
biBleGlzdGluZ0NhcHRpb247Ci0gICAgUmVmUHRyPEhUTUxUYWJsZUNhcHRpb25FbGVtZW50PiBj
YXB0aW9uID0gbmV3IEhUTUxUYWJsZUNhcHRpb25FbGVtZW50KGNhcHRpb25UYWcsIGRvY3VtZW50
KCkpOworICAgIFJlZlB0cjxIVE1MVGFibGVDYXB0aW9uRWxlbWVudD4gY2FwdGlvbiA9IEhUTUxU
YWJsZUNhcHRpb25FbGVtZW50OjpjcmVhdGUoY2FwdGlvblRhZywgZG9jdW1lbnQoKSk7CiAgICAg
RXhjZXB0aW9uQ29kZSBlYzsKICAgICBzZXRDYXB0aW9uKGNhcHRpb24sIGVjKTsKICAgICByZXR1
cm4gY2FwdGlvbi5yZWxlYXNlKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmlu
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGFnTmFtZXMuaW4JKHJldmlzaW9uIDYw
MTc3KQorKysgV2ViQ29yZS9odG1sL0hUTUxUYWdOYW1lcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
MTAsMzggKzEwLDM4IEBAIGFwcGxldAogYXJlYQogYXJ0aWNsZSBpbnRlcmZhY2VOYW1lPUhUTUxF
bGVtZW50CiBhc2lkZSBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1hdWRpbyB3cmFwcGVyT25s
eUlmTWVkaWFJc0F2YWlsYWJsZSwgY29uZGl0aW9uYWw9VklERU8sIGNyZWF0ZVdpdGhOZXcKK2F1
ZGlvIHdyYXBwZXJPbmx5SWZNZWRpYUlzQXZhaWxhYmxlLCBjb25kaXRpb25hbD1WSURFTwogYiBp
bnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1iYXNlIGNyZWF0ZVdpdGhOZXcKLWJhc2Vmb250IGlu
dGVyZmFjZU5hbWU9SFRNTEJhc2VGb250RWxlbWVudCwgY3JlYXRlV2l0aE5ldworYmFzZQorYmFz
ZWZvbnQgaW50ZXJmYWNlTmFtZT1IVE1MQmFzZUZvbnRFbGVtZW50CiBiZG8gaW50ZXJmYWNlTmFt
ZT1IVE1MRWxlbWVudAogYmlnIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKLWJsb2NrcXVvdGUg
Y3JlYXRlV2l0aE5ldwotYm9keSBjcmVhdGVXaXRoTmV3Ci1iciBpbnRlcmZhY2VOYW1lPUhUTUxC
UkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLWJ1dHRvbiBjb25zdHJ1Y3Rvck5lZWRzRm9ybUVsZW1l
bnQsIGNyZWF0ZVdpdGhOZXcKLWNhbnZhcyBjcmVhdGVXaXRoTmV3Ci1jYXB0aW9uIGludGVyZmFj
ZU5hbWU9SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKK2Jsb2NrcXVvdGUK
K2JvZHkKK2JyIGludGVyZmFjZU5hbWU9SFRNTEJSRWxlbWVudAorYnV0dG9uIGNvbnN0cnVjdG9y
TmVlZHNGb3JtRWxlbWVudAorY2FudmFzCitjYXB0aW9uIGludGVyZmFjZU5hbWU9SFRNTFRhYmxl
Q2FwdGlvbkVsZW1lbnQKIGNlbnRlciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50CiBjaXRlIGlu
dGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQKIGNvZGUgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAot
Y29sIGludGVyZmFjZU5hbWU9SFRNTFRhYmxlQ29sRWxlbWVudCwgY3JlYXRlV2l0aE5ldwotY29s
Z3JvdXAgaW50ZXJmYWNlTmFtZT1IVE1MVGFibGVDb2xFbGVtZW50LCBjcmVhdGVXaXRoTmV3Ci1k
YXRhZ3JpZCBpbnRlcmZhY2VOYW1lPUhUTUxEYXRhR3JpZEVsZW1lbnQsIGNvbmRpdGlvbmFsPURB
VEFHUklELCBjcmVhdGVXaXRoTmV3Ci1kYXRhbGlzdCBpbnRlcmZhY2VOYW1lPUhUTUxEYXRhTGlz
dEVsZW1lbnQsIGNvbmRpdGlvbmFsPURBVEFMSVNULCBjcmVhdGVXaXRoTmV3Ci1kY2VsbCBpbnRl
cmZhY2VOYW1lPUhUTUxEYXRhR3JpZENlbGxFbGVtZW50LCBjb25kaXRpb25hbD1EQVRBR1JJRCwg
Y3JlYXRlV2l0aE5ldwotZGNvbCBpbnRlcmZhY2VOYW1lPUhUTUxEYXRhR3JpZENvbEVsZW1lbnQs
IGNvbmRpdGlvbmFsPURBVEFHUklELCBjcmVhdGVXaXRoTmV3Ci1kcm93IGludGVyZmFjZU5hbWU9
SFRNTERhdGFHcmlkUm93RWxlbWVudCwgY29uZGl0aW9uYWw9REFUQUdSSUQsIGNyZWF0ZVdpdGhO
ZXcKK2NvbCBpbnRlcmZhY2VOYW1lPUhUTUxUYWJsZUNvbEVsZW1lbnQKK2NvbGdyb3VwIGludGVy
ZmFjZU5hbWU9SFRNTFRhYmxlQ29sRWxlbWVudAorZGF0YWdyaWQgaW50ZXJmYWNlTmFtZT1IVE1M
RGF0YUdyaWRFbGVtZW50LCBjb25kaXRpb25hbD1EQVRBR1JJRAorZGF0YWxpc3QgaW50ZXJmYWNl
TmFtZT1IVE1MRGF0YUxpc3RFbGVtZW50LCBjb25kaXRpb25hbD1EQVRBTElTVAorZGNlbGwgaW50
ZXJmYWNlTmFtZT1IVE1MRGF0YUdyaWRDZWxsRWxlbWVudCwgY29uZGl0aW9uYWw9REFUQUdSSUQK
K2Rjb2wgaW50ZXJmYWNlTmFtZT1IVE1MRGF0YUdyaWRDb2xFbGVtZW50LCBjb25kaXRpb25hbD1E
QVRBR1JJRAorZHJvdyBpbnRlcmZhY2VOYW1lPUhUTUxEYXRhR3JpZFJvd0VsZW1lbnQsIGNvbmRp
dGlvbmFsPURBVEFHUklECiBkZCBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1kZWwgaW50ZXJm
YWNlTmFtZT1IVE1MTW9kRWxlbWVudCwgY3JlYXRlV2l0aE5ldworZGVsIGludGVyZmFjZU5hbWU9
SFRNTE1vZEVsZW1lbnQKIGRmbiBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50Ci1kaXIgaW50ZXJm
YWNlTmFtZT1IVE1MRGlyZWN0b3J5RWxlbWVudCwgY3JlYXRlV2l0aE5ldworZGlyIGludGVyZmFj
ZU5hbWU9SFRNTERpcmVjdG9yeUVsZW1lbnQKIGRpdiBjcmVhdGVXaXRoTmV3Ci1kbCBpbnRlcmZh
Y2VOYW1lPUhUTUxETGlzdEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcsIGNyZWF0ZVdpdGhOZXcKK2Rs
IGludGVyZmFjZU5hbWU9SFRNTERMaXN0RWxlbWVudAogZHQgaW50ZXJmYWNlTmFtZT1IVE1MRWxl
bWVudAogZW0gaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogZW1iZWQKLWZpZWxkc2V0IGludGVy
ZmFjZU5hbWU9SFRNTEZpZWxkU2V0RWxlbWVudCwgY29uc3RydWN0b3JOZWVkc0Zvcm1FbGVtZW50
LCBjcmVhdGVXaXRoTmV3CitmaWVsZHNldCBpbnRlcmZhY2VOYW1lPUhUTUxGaWVsZFNldEVsZW1l
bnQsIGNvbnN0cnVjdG9yTmVlZHNGb3JtRWxlbWVudAogZm9udCBjcmVhdGVXaXRoTmV3CiBmb290
ZXIgaW50ZXJmYWNlTmFtZT1IVE1MRWxlbWVudAogZm9ybSBjcmVhdGVXaXRoTmV3CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA2MDE3NykKKysr
IFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzEsNyArNzEsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZUNvbnRh
CiAgICAgUmVmUHRyPEhUTUxIdG1sRWxlbWVudD4gaHRtbCA9IG5ldyBIVE1MSHRtbEVsZW1lbnQo
aHRtbFRhZywgdGhpcyk7CiAgICAgYWRkQ2hpbGQoaHRtbCk7CiAgICAgaHRtbC0+YXR0YWNoKCk7
Ci0gICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gYm9keSA9IG5ldyBIVE1MQm9keUVsZW1lbnQo
Ym9keVRhZywgdGhpcyk7CisgICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gYm9keSA9IEhUTUxC
b2R5RWxlbWVudDo6Y3JlYXRlKHRoaXMpOwogICAgIGh0bWwtPmFkZENoaWxkKGJvZHkpOwogICAg
IGJvZHktPmF0dGFjaCgpOwogICAgIApJbmRleDogV2ViQ29yZS9tYXRobWwvbWF0aHRhZ3MuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9tYXRobWwvbWF0aHRhZ3MuaW4JKHJldmlzaW9uIDYwMTc3
KQorKysgV2ViQ29yZS9tYXRobWwvbWF0aHRhZ3MuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE2LDYg
KzE2LDUgQEAgbWkgaW50ZXJmYWNlTmFtZT1NYXRoTUxUZXh0RWxlbWVudAogbW4gaW50ZXJmYWNl
TmFtZT1NYXRoTUxUZXh0RWxlbWVudAogbW8gaW50ZXJmYWNlTmFtZT1NYXRoTUxUZXh0RWxlbWVu
dAogbXRleHQgaW50ZXJmYWNlTmFtZT1NYXRoTUxUZXh0RWxlbWVudAotbXN1YiBpbnRlcmZhY2VO
YW1lPU1hdGhNTEVsZW1lbnQsIGNyZWF0ZVdpdGhOZXcKLW1zdXAgaW50ZXJmYWNlTmFtZT1NYXRo
TUxFbGVtZW50LCBjcmVhdGVXaXRoTmV3Ci0KK21zdWIgaW50ZXJmYWNlTmFtZT1NYXRoTUxFbGVt
ZW50Cittc3VwIGludGVyZmFjZU5hbWU9TWF0aE1MRWxlbWVudApJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gNjAxNzcpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw3ICsx
ODIsNyBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRJbm5lclRleHRWYWx1CiAgICAgICAg
IEFTU0VSVCghZWMpOwogCiAgICAgICAgIGlmICh2YWx1ZS5lbmRzV2l0aCgiXG4iKSB8fCB2YWx1
ZS5lbmRzV2l0aCgiXHIiKSkgewotICAgICAgICAgICAgbV9pbm5lclRleHQtPmFwcGVuZENoaWxk
KG5ldyBIVE1MQlJFbGVtZW50KGJyVGFnLCBkb2N1bWVudCgpKSwgZWMpOworICAgICAgICAgICAg
bV9pbm5lclRleHQtPmFwcGVuZENoaWxkKEhUTUxCUkVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgp
KSwgZWMpOwogICAgICAgICAgICAgQVNTRVJUKCFlYyk7CiAgICAgICAgIH0KIAo=
</data>
<flag name="review"
          id="41568"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>